http://wiki.fhem.de/w/api.php?action=feedcontributions&user=Jostar&feedformat=atomFHEMWiki - Benutzerbeiträge [de]2024-03-28T22:36:34ZBenutzerbeiträgeMediaWiki 1.39.3http://wiki.fhem.de/w/index.php?title=SamsungAV&diff=38662SamsungAV2023-10-29T23:33:59Z<p>Jostar: Typ bestätigt</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Client for Samsung AV<br />
|ModType=d<br />
|ModFTopic=82890<br />
|ModForumArea=Multimedia<br />
|ModTechName=70_SamsungAV.pm<br />
|ModOwner=KölnSolar ({{Link2FU|7231|Forum}})<br />
}}<br />
<br />
Das Modul [[SamsungAV]] ermöglicht die Steuerung von Samsung Fernsehern und Bluray-Playern. Es ist Nachfolger des Moduls [[STV]].<br />
<br />
== Voraussetzungen ==<br />
=== Historie===<br />
Im Ursprung wurde von Zwiebel das Modul 70_STV.pm entwickelt, welches bis F-Serie funktionieren sollte. Das Modul ist im Standardumfang von FHEM enthalten.<br />
Für die neue Zugriffsmethode per websocket ab K-Serie hatte Dominik das Modul so erweitert, dass per Python-Skript samsungctl die TVs problemlos ansteuerbar sind. Die größten Probleme schienen die H- u. J-Serie zu bereiten. Diese nutzen neben websocket zusätzlich eine Verschlüsselung. Für den Zugriff hat Raymund ein Python-Skript nach Perl übersetzt, das ich wiederum in das Modul eingebunden habe. Mittlerweile habe ich auf dieser Basis auch das samsungctl übersetzt und in das Modul integriert, so dass keine Installation eines Python-Skripts mehr notwendig ist.<br />
<br />
Schließlich habe ich noch die Möglichkeit der Ausgabe von Medien-Streams für alle Serien über DLNA eingebaut. Das Modul ist nun so konstruiert, dass es weitestgehend die DevelopmentGuidelinesAV unterstützt.<br />
<br />
Die aktuellste Entwicklungsversion des Moduls 70_SamsungAV, in der ALLE features enthalten sind, findet Ihr nun immer hier. Stabile Versionen werden per update verteilt(aktuell 1.0) Den aktuellen Doku-Thread im Forum findet ihr {{Link2Forum|Topic=82890|LinkText=>>>hier<<<}}.<br />
<br />
Die jeweiligen Unterschiede der einzelnen Serien findet Ihr in den Posts zu Eurer Serie. Dort ist auch das jeweilige serienspezifische define beschrieben.<br />
<br />
=== Features des Moduls ===<br />
Steuerungsmöglichkeiten(Voraussetzung also eine LAN- oder WLAN-Verbindung u. berechtigter Zugriff) aus FHEM heraus sind<br />
* senden von einzelnen remote control Befehlen an den TV(der funktionierende Befehlsumfang unterscheidet sich nach Serie u. firmware). Manche TVs benötigen eine Verzögerung zwischen dem Socketaufbau und dem übertragen eines RC-Befehls. Dafür lässt sich das Attribut delayRC (default=0) nutzen. Dort eingetragene Werte x führen zu einer Blockierung von x Millisek..<br />
* Ein-/Ausschaltfunktion<br />
* Bildschirmnachrichten wie z.B. InfoScreen bei eingehendem Anruf(siehe auch hier) <br />
* Abspielen von Video, Audio, Foto Konserven, TTS (im Sinne einer Hausautomatisierung ereignisgesteuert über notify/DOIF....)<br />
* Makrofunktion: Mit dem Befehl 0_macro lassen sich mehrere RC-Befehle als Befehlskette senden. Dabei sind in der Eingabezeile die einzelnen RC-Befehle durch Komma zu trennen. Jeder Befehl führt zu einer Blockierung von FHEM. Die Dauer der Blockierung/Einzelbefehl sind die Millisek., die im Attribut delayMacro vorgegeben sind(default=300000). Also nur mit Bedacht einsetzen, um z.B. Tastensequenzen als einzelnen FHEM-Aufruf nachzubilden. <br />
: z.B. set TV 0_macro menu,down,down,down,right,down,enter,exit<br />
* Texteingabe: Mit 0_text_line kann man eine Textzeile in FHEM editieren, die dann an den TV geschickt wird. Hilfreich für Anwendungen(Apps), die eine Texteingabe(z.B URL) erwarten <br />
: z.B. set TV 0_text_line http://DeineFHEMIP:8083/fhem<br />
* Status ermitteln: Das Modul prüft alle 60 Sek., ob der TV im Netzwerk erreichbar ist. Der state ist dementsprechend on oder absent. Sofern der Status absent ist, lassen sich außer POWER/POWERON keine Befehle absetzen. Manche User möchten aber sofort nach dem einschalten des TV einen Befehl automatisch absetzen. Dazu lässt sich dann der Befehl "statusRequest" benutzen, um zeitlich unabhängig von der periodischen Prüfung den Status zu prüfen und den TV ggfs. in den Status "on" zu versetzen.<br />
: set TV statusRequest<br />
<br />
=== Sonstige FHEM-Unterstützung ===<br />
* zur Unterstützung des Moduls remotecontrol ist das Layout-Set SamsungAV_TV im Modul integriert. Dadurch lässt sich in einem remotecontrol-device mit<br />
: set remote-control-device layout SamsungAV_TV<br />
: das layout einer Fernbedienung erzeugen.<br />
<br />
Und schließlich noch ein allgemeiner Tipp: Versucht die Kontrolle über firmware-updates zu übernehmen, also automatische firmware-updates (möglichst vor dem ersten Einbinden des TV in das lokale Netzwerk) zu unterbinden !!! Denn man weiß nie, was sich S. mit einer neuen firmware wieder hat einfallen lassen :'( Einschlägige Meinung der Internet-Gemeinde ist, dass selten Bug-Behebungen oder gar zusätzliche features mit einer neuen Version kommen !!!<br />
Wie man dazu vorgeht, sagt Euch das Internet ;) Auch hier gibt es je nach Serie, firmware Unterschiede !!! (Überlegt Euch gut was Ihr tut. Es könnte ja auch sein, dass S. Sicherheitslücken mit einem update geschlossen hat) :-\<br />
<br />
===B/C/D-Series(vor 2012) ===<br />
<br />
Da diese TVs schon relativ alt sind hier nur eine Zusammenfassung von Funktionen, die sich je nach Modell unterscheiden:<br />
* Älteste Modelle(B-Serie ?): mute, volume, call, sms, date über port 52235 UPNP/SOAP<br />
* Jüngere Modelle(C-/D-Serie): sämtliche remote control commands port über 55000, keine Bildschirmnachrichten ?, Port 7676 u. service urn:samsung.com:service:MainTVAgent2:1 nicht verfügbar ?<br />
<br />
Definition siehe [https://fhem.de/commandref.html#STV commandref]<br />
<br />
Folgende Perl Module werden benutzt und sind ggfs. zu installieren:<br />
<br />
<code>sudo apt-get install libnet-address-ip-local-perl libio-interface-perl libmime-base64-perl(bei port 55000)</code><br />
<br />
Erfolgreicher Test der DLNA-Version am 5.2.18 mit UE55C6700<br />
<br />
===E-Series(2012)===<br />
<br />
sämtliche remote control commands über port 55000; Definition mit FHEM-Modul SamsungAV und Port 55000.<br />
<br />
Folgende Perl Module werden benutzt und sind ggfs. zu installieren:<br />
sudo apt-get install libnet-address-ip-local-perl libio-interface-perl libmime-base64-perl<br />
<br />
'''Bildschirmnachrichten''' <br />
<br />
über port 7676 ist UPNP/SOAP (z.B. Browseraufruf mit InfoDisplay f. Anruferinfo) verfügbar. Ebenso ist die Medienausgabe per DLNA möglich.<br />
(nur mit der inoffiziellen Version !)<br />
<br />
'''Zugriffsberechtigung'''<br />
<br />
Einstellungen findet man unter:<br />
Menü->Netzwerk->AllShare-Einstellungen->Liste der registrierten Endgeräte->Zulassen|Verbieten|Aus der Liste löschen<br />
<br />
'''Registrierung'''<br />
Bei erstmaligem Zugriff eines Endgeräts erscheint auf dem TV ein pop-up: Neues Netzwerkgerät erkannt......: Zulassen|Verbieten<br /><br />
Eine Pin-Eingabe ist nicht erforderlich. Eine Einmalige Registrierung berechtigt für den Dauerbetrieb des Endgeräts, wobei (bei mir) das Gerät "Perl Samsung Remote" mit der IP 127.0.0.1 angelegt wurde und mit dieser Zugangsberechtigung nun ALLE devices über FHEM für die Steuerung zugelassen sind.<br />
<br />
'''Bestätigte Modelle'''<br />
<br />
ganze Serie :-\<br />
<br />
===F-Series(2013) ===<br />
Vermutlich kein Unterschied zur E-Serie.<br />
<br />
===H-Series(2014) ===<br />
<br />
Einführung der Kommunikation über websockets u. port 8000. Zusätzlich ist der Zugriff verschlüsselt. <br />
<br />
Für die Definition des TV in FHEM ist Port 8000 zu verwenden.<br />
<br />
Folgende Perl Module werden benutzt und sind ggfs. zu ininstallieren:<br />
<br />
<code>sudo apt-get install libcrypt-rijndael-perl libnet-address-ip-local-perl libio-interface-perl libjson-pp-perl</code><br />
<br />
Verfügbare Python-Skripte hat Raymund in Perl übersetzt, so dass keine zusätzlichen Installationen erforderlich sind. Das ganze ist im Teststadium u. noch nicht in ein Modul eingebunden. Das senden sämtlicher remote control commands funktioniert. Tw. gibt es Meldungen, dass die Zugriffsberechtigung nach power off erneuert werden müssen.<br/><br />
Mittlerweile ist das Perl-Skript do_v2.pl von Raymund auch in das inoffizielle 70_STV eingebunden. Das Skript regapp.pl muss nach wie vor einmalig(?) für die Schlüsselerzeugung ausgeführt werden. Vorgehensweise im vorgenannten Post beachten !<br/><br />
Standardmäßig erzeugt das Skript ein File "samsung_session_key.txt". Hat man mehrere TVs der Serie, so muss man das Skript logischerweise für jeden TV ausführen. Das erzeugte File muss dann jeweils in FHEMTVdevicename_session_key.txt umbenannt werden.<br />
<br />
Da das regapp.pl zur Erzeugung der Schlüsseldatei auf einen Fremdserver zugreift, hat Raymund sich die Mühe gemacht und eine Möglichkeit ohne Fremdserverzugriff realisiert. Details findet Ihr [https://forum.fhem.de/index.php/topic,57595.msg883754.html#msg883754 hier].<br />
<br />
'''Bildschirmnachrichten'''<br />
<br />
scheinbar noch über port 7676, vergleichbar der E-Serien-Lösung, möglich.<br />
<br />
[https://forum.fhem.de/index.php/topic,82890.msg756500.html#msg756500 Bildschirmnachrichten bzw. generelle Medienausgabe über DLNA]<br />
<br />
'''Zugriffsberechtigung'''<br />
<br />
Menü/Netzwerk/Multimedia-Geräteeinstellungen. Dort kann man "SmartDevices" erlauben, verbieten und löschen.<br />
* einmal verboten und der Key ist unbrauchbar. Also neu pairen.<br />
* die IP scheint egal zu sein. Mit den passenden session_key und session_id kann man von jedem Rechner aus zugreifen.<br />
<br />
'''Bestätigte Modelle'''<br />
<br />
UE-55H6740SV, UExyHU6900, UE40H6400, UE55H6700<br />
<br />
'''Info des Python-Skript-Autors'''<br />
<br />
Note the the following TV Models are most likely incompatible for one reason or another<br/><br />
H4xxx, H510x, H52xx, H53x3, H5403, H6003, H61x3, H6201, H6203, S9, S9C<br />
<br />
===J-Series(2015) ===<br />
Samsung-Fernseher der Serie J verhalten sich zum Teil wie die der Serie H, zum Teil (bei den späteren Modellen) wie die der Serie K<br />
*Bestätigte Modelle: UE48JU7590(THKMDEUC-1452), UE55JU6560, 55JU6450(firmware 1530)'''<br />
*Möglicherweise inkompatibel: J4xxx, J50xx, J51xx, J52xx, J53xx, UNxxJ6200, J6201, J6203, J620D<br />
Vorgehensweise:<br />
*Definition als <br />
define <Devicename> SamsungAV <ip-adress> 8000<br />
*Erzeugen eines Sitzungsschlüssels. <br />
**Dazu muss zuerst Python mit verschiedenen Bibliothen installiert werden:<br />
apt-get install python3 python3-pip<br />
python3 -m pip install crypto<br />
python3 -m pip install websocket-client <br />
**Im zweiten Schritt wird von Github die Bibliothek [https://github.com/eclair4151/SmartCrypto SmartCrypto] benötigt. Wer die Anwendung git nicht installieren möchte, kann sich unter diesem Link auch ein Zip-File besorgen und auf dem Zielrechner entpacken. <br />
**Im dritten Schritt muss die Datei ''regapp_smartcrypto.py'' von [https://forum.fhem.de/index.php?action=dlattach;topic=57595.0;attach=112587 dieser Quelle] heruntergeladen werden. Diese Datei wird in dem Ordner ''PySmartCrypto'' gespeichert, der aus dem zweiten Schritt stammt. In der Datei ''regapp_smartcrypto.py'' wird in Zeile 12 IP-Adresse des eigenen Fernsehers eingetragen.<br />
**Der Aufruf (in der Konsole) von<br />
python3 regapp_smartcrypto.py<br />
führt dann dazu, dass auf dem Fernseher eine 4-stellige PIN angezeigt wird, die man in der Konsole eingeben muss. Die Anwendung erzeugt daraufhin die Datei ''samsung_session_key.txt'', die in ''<Devicename>_session_key.txt'' umbenannt und im Verzeichnis ''/opt/fhem'' abgelegt werden muss.<br />
*Sollte die Datei mit dem Sitzungsschlüssel nicht gefunden werden, führt der Aufruf eines ''set''-Kommandos im FHEM-Device des Fernsehers zu einer Fehlermeldung.<br />
<br />
===K-Series(2016)===<br />
<br />
sämtliche remote control commands über port 8001 oder 8002(secure port)und das websocket-Protokoll; keine Verschlüsselung mehr.<br />
Neuere Serien und aktuellere firmware verwenden zusätzlich ein token bei der Berechtigungsprüfung.<br />
(Erkennbar wenn im JSON von http://ip:8001/api/v2/ "TokenAuthSupport\":\"true\", auftaucht)<br />
<br />
Das samsungctl ist nicht mehr notwendig. Dank Raymunds Vorarbeit für die J-/H-Serie konnte ich die Funktionalität des Skripts nach Perl übersetzen und ins Modul integrieren.<br />
<br />
Definition in FHEM aus Kompatibilitätsgründen mit '''Port 8001'''<br />
<br />
Modulintern wird der SSL-Port 8002 für die Kommunikation genutzt. Eine Prüfung des SSL-Zertifikats findet aber nicht statt.<br />
Sofern der TV mit der erweiterten Berechtigungsprüfung mit einem token arbeitet, wird dies modulintern berücksichtigt.<br />
<br />
Folgende Perl Module werden benutzt und sind ggfs. zu ininstallieren:<br />
sudo apt-get install libnet-address-ip-local-perl libio-interface-perl libnet-ssleay-perl libjson-pp-perl<br />
<br />
'''Bildschirmnachrichten'''<br />
<br />
über DLNA im Test oder dem TV-integrierten Webbrowser. Definiert man den TV mit dem optionalen DLNAClient, werden die Nachrichten aus callerURI oder screenURI über den DLNAClient ausgegeben. Wird der DLNAClient nicht definiert, so werden die URI's über den Webbrowser des TV ausgegeben.<br />
<br />
'''Zugriffsberechtigung'''<br />
<br />
* bei erstem Zugriff(define in FHEM; sofern TV eingeschaltet) erscheint Popup auf dem TV, welches mit "zulassen" zu bestätigen ist<br />
* unter Einstellungen -> Allgemein -> Externe Geräteverwaltung ->Geräteverbindungsmanager findet man eine Geräteliste (da kann man die einzelnen zugriffsberechtigten Geräte auch wieder rausschmeissen) und man kann sogar die "Art" der Zugriffsbenachrichtigung verändern (nur einmal od. jedes Mal). Wir brauchen: nur einmal !<br />
<br />
'''zusätzliche Funktion'''<br />
<br />
locate installed apps of TV(only during definition of device or with command statusRequest, if TV is connected) (blocking !!!)<br/><br />
new commands:<br />
* 0_App_state: check state of app: running/stopped<br />
* 0_App_start: start app<br />
<br />
'''Bestätigte Modelle'''<br />
<br />
ganze Serie ?: UE40K5579, UE55KU6170, UE65ks7090<br />
<br />
Tizen 2.4 (nicht aber: UBD-K8500, UBD-KM85C, UBD-KM85)<br />
<br />
===M-Series(2017)===<br />
<br />
Vermutlich kein Unterschied zur K-Serie. :-\<br />
<br />
'''Bestätigte Modelle'''<br />
<br />
ganze Serie ?: UE55MU7009<br />
<br />
Tizen 3.0(UMU6100 Tizen 2.4)<br />
<br />
===N-Series(2018)===<br />
<br />
Die Serie wird mit N bezeichnet, kein Unterschied zur K-Serie.<br />
<br />
Der Zugriff erfolgt nun per SSL verschlüsselt über Port 8002. Das Modul "löst" das selbständig. Es bleibt also bei der Definition mit '''Port 8001'''.<br />
<br />
Tizen 4.0<br />
<br />
===Q-Series(2018)===<br />
<br />
Die Serie ist eine Besonderheit. Es ist nicht das Baujahr abzuleiten. Es handelt sich um TVs mit QLED-Technologie.<br />
<br />
Für FHEM aber kein Unterschied zur K-Serie.<br />
<br />
Der Zugriff erfolgt per SSL verschlüsselt über Port 8002. Das Modul "löst" das selbständig. Es bleibt also bei der Definition mit '''Port 8001'''.<br />
<br />
'''Bestätigte Modelle''' <br />
<br />
GQ65Q7FNG(firmware 1153)<br />
<br />
Tizen 4.0 ?<br />
<br />
== Installation ==<br />
<br />
=== Wichtigste Voraussetzung: ===<br />
<br />
Zugriffsberechtigungen des TV(siehe jeweilige Serie)<br />
<br />
=== Erste Schritte ===<br />
<br />
(für Version aus dem FHEM Repository) <br />
<br />
Device in FHEM anlegen: Die jeweiligen Unterschiede der einzelnen Serien findet Ihr in den Posts zu Eurer Serie. Dort ist auch das jeweilige serienspezifische define beschrieben. Grundsätzlich sieht das define so aus:<br />
<br />
:<code>define MeinFernseher SamsungAV <MeineFernseherIP> <Port> [<FHEMdevicenameDLNAClient>]</code><br />
<br />
Danach sollte das Device bei eingeschaltetem Fernseher oder Bluray-Player in den Status '''opened''' gehen.<br />
<br />
Sollte dies nicht funktionieren, hat in einigen Fällen bei der Modul Version 1.0 auch ein '''Fhem "shutdown restart"''' schon geholfen.<br />
<br />
Ist dies nicht der Fall ist die Modellreihe zu ermitteln. Am Command-Prompt kann mittels nmap ermittelt werden welche Ports geöffnet sind (xxx.xxx.xxx.xxx ist in diesem Beispiel die IP-Adresse des Samsung-Gerätes)<br />
<br />
<code>nmap xxx.xxx.xxx.xxx</code><br />
<code>Starting Nmap 6.47 ( http://nmap.org ) at 2018-02-18 09:22 CET</code><br />
<code>Nmap scan report for xxx.xxx.xxx.xxx</code><br />
<code>Host is up (0.0095s latency).</code><br />
<code>Not shown: 997 closed ports</code><br />
<code>PORT STATE SERVICE</code><br />
<code>7676/tcp open imqbrokerd</code><br />
<code>8080/tcp open http-proxy</code><br />
<code>8443/tcp open https-alt</code><br />
<br />
anschließend die High Ports scannen<br />
<br />
<code>nmap -sT -p50000-65534 xxx.xxx.xxx.xxx</code><br />
<code>Starting Nmap 6.47 ( http://nmap.org ) at 2018-02-18 09:25 CET</code><br />
<code>Nmap scan report for xxx.xxx.xxx.xxx</code><br />
<code>Host is up (0.015s latency).</code><br />
<code>Not shown: 15532 closed ports</code><br />
<code>PORT STATE SERVICE</code><br />
<code>52345/tcp open unknown</code><br />
<code>55000/tcp open unknown</code><br />
<code>55001/tcp open unknown</code><br />
<br />
Jetzt gilt es folgende Fälle zu unterscheiden:<br />
* (B|C|D Serie) verwenden Sie Port 52235 für Bildschirmmeldungen: Anruf, SMS, Datums- und Lautstärkeänderung.<br />
* (C|D|E|F Serie) verwenden Sie den Port 55000 für RC-Befehle.<br />
* (H|J-Serie) verwenden Sie Port 8000 für RC-Befehle.<br />
* (neueste Serie) verwenden Sie den Port 8001 für RC-Befehle.<br />
* (alle Serien)Der Gerätename des optionalen DLNA-Clients kann definiert werden, um Vollbildmeldungen (OSD) zu senden.<br />
Beispiel:<br />
: Fernsehen SamsungAV 192.168.178.178.20 52235 definieren<br />
: Fernsehen SamsungAV 192.168.178.20 55000 definieren<br />
: Fernsehen SamsungAV 192.168.178.20 55000 DLNA_Client definieren<br />
<br />
===Migration===<br />
Das "neue" Modul 70_SamsungAV ist nun fester Bestandteil des FHEM Repositories. Eine Umbenennung war notwendig, um das Modul offiziell zu machen. Bitte nutzt nur noch das 70_SamsungAV. Die letzte inoffizielle Version des 70_STV lasse ich lediglich für User attached, die unbedingt diese Version nutzen möchten.<br />
Da sich der "type" eines devices nicht ändern lässt geht Ihr am besten wie folgt vor:<br />
Code: [Auswählen]<br />
<br />
:<code>rename TV-devicename old_TV-devicename</code><br />
<br />
danach legt Ihr ein neues device<br />
Code: [Auswählen]<br />
<br />
:<code>define TV-devicename SamsungAV .....</code><br />
<br />
mit seinen Attributen(am einfachsten per cut&paste der raw definition u. Änderung des device names von old_TV-devicename nach TV-devicename) an. So bleiben Abhängigkeiten zu notify.... erhalten.<br />
Schließlich könnt Ihr das alte device löschen. save der config dann nicht vergessen, sofern autosave=0.<br />
<br />
===Alternative: Aktuelle Version aus dem Forum===<br />
<br />
Die im Anhang zu [https://forum.fhem.de/index.php/topic,57595.msg770704.html#msg770704 Post #298] vom 21.2.2018 publizierte Fassung ist in der Entwicklung, bietet aber weitergehende Funktionen.<br />
<br />
Diese dort gepostete Version des 70_SamsungAV sollte für ALLE Serien die Ausgabe von Bildschirmnachrichten per DLNA ermöglichen. Bitte lest den Post, um auf dem laufenden zu bleiben. Wenn die Version fertig ist wird sie hier dokumentiert.<br />
<br />
== Anwendung ==<br />
=== Attribute ===<br />
<br />
''Basics & Allgemeines'' <br />
* '''MAC'''<br />
: nur bei Bedarf: die IP-Adresse des Rechners auf dem FHEM läuft. Sollte das zu steuernde Gerät nicht reagieren und im FHEM-Log "[STV] mymac" mit "invalid format" auftauchen, dann bitte dieses Attribut setzen.<br />
<br />
* '''fork'''<br />
: enable|disable<br />
<br />
* '''setWhenOffline'''<br />
: execute|ignore Ist der Fehnseher ausgeschaltet hängt ein Set-Befehl, bis das Modul realisiert, dass der Fernseher ausgeschaltet ist. Mit ''setWhenOffline ignore'' lässt sich dieses Verhalten verhindern. <br />
<br />
* '''callerURI '''<br />
: Pfad zu einer URI eines Mediums (jpg,mp3....) das auf dem Bildschirm angezeigt wird Hauptzweck: URI, das auf dem Bildschirm angezeigt wird, wenn ein Anruf eingeht.<br />
<br />
* '''screenURI'''<br />
: Pfad zu einer URI eines Mediums (jpg,mp3....) das auf dem Bildschirm angezeigt wird, zu jedem anderen Zweck als einem Telefonat als Ereignis.<br />
<br />
Durch die Definition der jeweiligen URI, wurde dynamisch das Befehlsset des TV-devices erweitert. Für den Aufruf der callerURI steht der neue set-Befehl caller und für screenURI entsprechend screen zur Verfügung.<br />
<br />
* '''delayRC'''<br />
: Verzögerung in Mikrosekunden. default=0 Einige TVs benötigen eine Verzögerung vor der Übertragung eines RC-Befehls. Achtung: Attribut verursacht Systemstopps.<br />
<br />
* '''delayMacro'''<br />
: Verzögerung in Mikrosekunden. default=300000 Die meisten Fernseher benötigen eine Verzögerung zwischen jedem RC-Befehl in der Makrofunktion. be careful: attribute causes system freezes<br />
<br />
* '''deaktivieren'''<br />
: 0/1: Aktiviert/deaktiviert das Gerät<br />
<br />
=== Set ===<br />
<br />
Das Modul kennt derzeit folgende Commands<br />
<br />
''Basis-Commandset'' (bei Nutzung von Port 52235)<br />
<br />
* set <name> '''mute''' {on|off]<br />
: schaltet den Ton ein/aus<br />
<br />
* set <name> '''volume''' <nummer><br />
: Lautstärke ändern. <nummer> kann zwischen 0 und 100 liegen<br />
<br />
* set <name> '''call''' <von_name> <von_number> <an_name> <an_number><br />
: <von_name> = Name des Anrufers<br />
: <von_number> = Nummer des Anrufers<br />
: <an_name> = Name des Anzurufenden<br />
: <an_number> = Nummer des Anzurufenden<br />
<br />
* set <name> '''sms''' <von_name> <von_number> <an_name> <an_number> <text><br />
: <von_name> = Name des Anrufers<br />
: <von_number> = Nummer des Anrufers<br />
: <an_name> = Name des Anzurufenden<br />
: <an_number> = Nummer des Anzurufenden<br />
: <text> = SMS Nachrichtentext<br />
<br />
* set <name> '''date''' <start_datum> <start_zeit> <an_name> <an_number> <betreff> <ende_datum> <ende_zeit> <ort> <nachrichtentext><br />
: Termineinladung mit<br />
: <start_datum> = Startdatum<br />
: <start_zeit> = Startzeit<br />
: <an_name> = Name des Einzuladenden<br />
: <an_number> = Nummer des Einzuladenden<br />
: <betreff> = Betreff der Einladung<br />
: <ende_datum> = Enddatum<br />
: <ende_zeit> = Endzeit<br />
: <ort> = Treffpunkt<br />
: <nachrichtentext> = Text der Einladung<br />
<br />
Beispiele:<br />
: set Television mute on<br />
: set Television volume 20<br />
: set Television call Peter 012345678 Phone 87654321 <br />
<br />
''Erweitertes Commandset'' (bei Nutzung von Port 55000)<br />
<br />
* set <name> '''connect'''<br />
: Mit dem Fernseher/Player verbinden<br />
<br />
* set <name> '''button'''<br />
: Der Befehlsumfang der RC-Befehle weicht stark je nach Serie, Modell, firmware vom "allgemeinen" Samsung-Umfang ab. Daher wurden sie möglichst übersichtlich und sinnvoll gegliedert:<br />
: '''allgemein''' 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ad, aspect, av1, av2, channel:[0-99] channelDown, channelUp, channelList, clear, component1, component2, contents, convergence,, cyan, down, enter, esaving, exit, ff, guide, green, hdmi, hdmi1, hdmi2, help, home, info, left, menu, mute, pause, pip_chdown, pip_chup, pip_onoff, play, pmode, power, poweroff, poweron, prech, program, red, return, rec, rewind, right, sleep, source, stop, tools, ttx_mix, tv, tv_mode, up, volumeDown, volumeUp, yellow, <br />
: weitere in Gruppen zusammengefasste Befehle, die selten funktionieren oder genutzt werden:<br />
: '''G_AUTO_'''[AUTO_ARC_ANTENNA_AIR,AUTO_ARC_ANTENNA_CABLE,AUTO_ARC_ANTENNA_SATELLITE,AUTO_ARC_ANYNET_AUTO_START,AUTO_ARC_ANYNET_MODE_OK,AUTO_ARC_AUTOCOLOR_FAIL,AUTO_ARC_AUTOCOLOR_SUCCESS,AUTO_ARC_CAPTION_ENG,AUTO_ARC_CAPTION_KOR,AUTO_ARC_CAPTION_OFF,AUTO_ARC_CAPTION_ON,AUTO_ARC_C_FORCE_AGING,AUTO_ARC_JACK_IDENT,AUTO_ARC_LNA_OFF,AUTO_ARC_LNA_ON,AUTO_ARC_PIP_CH_CHANGE,AUTO_ARC_PIP_DOUBLE,AUTO_ARC_PIP_LARGE,AUTO_ARC_PIP_LEFT_BOTTOM,AUTO_ARC_PIP_LEFT_TOP,AUTO_ARC_PIP_RIGHT_BOTTOM,AUTO_ARC_PIP_RIGHT_TOP,AUTO_ARC_PIP_SMALL,AUTO_ARC_PIP_SOURCE_CHANGE,AUTO_ARC_PIP_WIDE,AUTO_ARC_RESET,AUTO_ARC_USBJACK_INSPECT,AUTO_FORMAT,AUTO_PROGRAM]<br />
: '''G_EXTx'''[EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7,EXT8,EXT9,EXT10,EXT11,EXT12,EXT13,EXT14,EXT15,EXT16,EXT17,EXT18,EXT19,EXT20,EXT21,EXT22,EXT23,EXT24,EXT25,EXT26,EXT27,EXT28,EXT29,EXT30,EXT31,EXT32,EXT33,EXT34,EXT35,EXT36,EXT37,EXT38,EXT39,EXT40,EXT41]<br />
: '''G_Others'''[3SPEED,4_3,16_9,ADDDEL,ALT_MHP,ANGLE,ANTENA,ANYNET,ANYVIEW,APP_LIST,AV3,BACK_MHP,BOOKMARK,CALLER_ID,CAPTION,CATV_MODE,CLOCK_DISPLAY,CONVERT_AUDIO_MAINSUB,CUSTOM,DEVICE_CONNECT,DISC_MENU,DMA,DNET,DNIe,DNSe,DOOR,DSS_MODE,DTV,DTV_LINK,DTV_SIGNAL,DVD_MODE,DVI,DVR,DVR_MENU,DYNAMIC,ENTERTAINMENT,FACTORY,FAVCH,FF_,FM_RADIO,GAME,HDMI3,HDMI4,ID_INPUT,ID_SETUP,INSTANT_REPLAY,LINK,LIVE,MAGIC_BRIGHT,MAGIC_CHANNEL,MDC,MIC,MORE,MOVIE1,MS,MTS,NINE_SEPERATE,OPEN,PANNEL_CHDOWN,PANNEL_CHUP,PANNEL_ENTER,PANNEL_MENU,PANNEL_POWER,PANNEL_SOURCE,PANNEL_VOLDOW,PANNEL_VOLUP,PANORAMA,PCMODE,PERPECT_FOCUS,PICTURE_SIZE,PIP_SCAN,PIP_SIZE,PIP_SWAP,PLUS100,POWER,PRINT,QUICK_REPLAY,REC,REPEAT,RESERVED1,REWIND_,RSS,RSURF,SCALE,SEFFECT,SETUP_CLOCK_TIMER,SOUND_MODE,SOURCE,SRS,STANDARD,STB_MODE,STILL_PICTURE,SUB_TITLE,SVIDEO1,SVIDEO2,SVIDEO3,TOPMENU,TTX_SUBFACE,TURBO,VCHIP,VCR_MODE,WHEEL_LEFT,WHEEL_RIGHT,W_LINK,ZOOM1,ZOOM2,ZOOM_IN,ZOOM_MOVE,ZOOM_OUT]<br />
<br />
Beispiel:<br />
: Fernseher stummschalten einschalten<br />
: Einstellung Fernsehlautstärke 20<br />
: Set Fernsehanruf Peter 012345678 Telefon 87654321<br />
<br />
''Spezielle Befehle''<br />
* caller/screen <br />
: Nachricht (URI definiert durch attr callerURI/screenURI) über DLNA an Gerät senden<br />
: Beispiel:<br />
: set Television caller<br />
<br />
* sayText<br />
: TTS-Funktion, wenn optionales DLNA-Gerät definiert ist.<br />
: Beispiel:<br />
: set Television sayText das ist ein Test<br />
: siehe commandref des DLNA-Gerätes für weitere Informationen.<br />
<br />
* 0_makro<br />
: Makrofunktion<br />
: mehrere kommagetrennte RC-Befehle an das Gerät senden (jeder Befehl führt zu einer Pause von delayMacro microsec.)<br />
: set <name> 0_macro <RC command1> [,RC command2,RC command3....] <br />
: Beispiel:<br />
: set Television 0_macro contents,right,right,,down,enter <br />
: einige Fernseher benötigen unterschiedliche Verzögerungen zwischen den RC-Befehlen in einem Makro. Sie können dies durch die Verwendung mehrerer Kommas lösen.<br />
<br />
* 0_text_zeile<br />
: Text an das Gerät gesendet (wäre hilfreich, um Daten zu übermitteln, die von interaktiven Anwendungen verwendet werden).<br />
: set <name> 0_text_line <TEXT> <br />
: Beispiel:<br />
: set Television 0_text_line http://192.168.178.1:8083/fhem/btip/info.html <br />
<br />
* 0_App_start Netflix/YouTube (0_App_status Netflix/YouTube)<br />
: App im TV starten (Status der App abfragen)<br />
<br />
=== Get ===<br />
<br />
Derzeit keine Funktionen realisiert.<br />
<br />
=== Readings ===<br />
<br />
* '''state''': Status der Verbindung<br />
<br />
== Anwendungsbeispiele ==<br />
<br />
===Anruferinfo als Bildschirmnachricht über DLNA===<br />
<br />
Die 70_SamsungAV sollte für ALLE Serien die Ausgabe von Bildschirmnachrichten per [https://de.wikipedia.org/wiki/Digital_Living_Network_Alliance DLNA] ermöglichen.<br />
<br />
Je nach persönlichem Geschmack, lässt es sich in 2 Varianten einrichten: ohne oder mit zusätzlichem Server. Letztere hat den Vorteil, dass man sich mit dem nicht uninteressanten Thema eines Digitalen Media Servers auseinandersetzt, der dann weitere Möglichkeiten(siehe nächster Post) bietet.<br />
<br />
Für beide Varianten ist es notwendig<br />
* z.B. mit dem RSS-Modul dynamisch, also quasi<br />
: "realtime" Bilder zu erzeugen. In unserem Fall die Anruferinfo.<br />
* das Modul DLNAClient DLNARenderer von hier hier zu installieren<br />
: (das Modul ist der Vorgänger des offiziellen DLNARenderers, welches derzeit leider nicht für Samsung TV funktioniert)<br />
: (die Installation zusätzlicher Perlmodule ist notwendig siehe commandref)<br />
: Dieses Modul führt das eigentliche streaming von Mediendateien aus und wird aus dem SamsungAV-Modul lediglich mit dem entsprechenden URI aufgerufen.<br />
* Vorbereitung des FHEMWEB-devices:<br />
: Da wir derzeit noch keine Lösung haben, wie wir username/Passwort übergeben können, muss ein FHEMWEB-device gewählt oder ggfs neu erstellt werden, welches nicht mit dem allowed-device verknüpft ist. Der Port dieses devices sollte logischerweise nicht geroutet sein(kein Zugriff von außen)<br />
: Es ist das zusätzliche Attribut allowedHttpMethods mit GET|POST|HEAD einzurichten. Bedeutung u. Auswirkungen sind in der [https://fhem.de/commandref.html#DLNARenderer commandref] beschrieben.<br />
<br />
Habt Ihr die zuvor beschriebenen Installationen ausgeführt und ein RSS-Bild definiert, sollte an dieser Stelle mit dem DLNARendererDLNAClient-Modul generell das Rendering(so nennt man die Ausgabe v. Medien auf dem TV) getestet werden:<br />
<br />
Definition<br />
<br />
<code>define MeinRenderer DLNARenderer<br/><br />
attr MeinRenderer envPrefix s<br/><br />
attr MeinRenderer envNamespace <undef><br/><br />
attr defaultRoom EuerRaum</code><br />
<br />
Das Modul sucht selbständig nach verfügbaren devices im lokalen Netzwerk und sollte in EuremRaum ein device angelegt haben.<br />
<br />
Danach ist zwingend ein shutdown/restart erforderlich.<br />
<br />
Weil das DLNARenderer-Modul außergewöhnlich und komplex ist kann es in Eurer Installation zu Problemen kommen. Dafür habe ich im übernächsten Post ein paar Details zum Verständnis geschrieben.<br />
<br />
Rendering-Test: <br />
<br />
<code>set DLNARendererdevicenamedesSamsungTV stream http://EureFHEM_IP:EuerFHEM_Port/fhem/rss/EuerRSS.jpg</code><br />
<br />
Erscheint das RSS-Bild auf dem TV, dann habt Ihr alles richtig gemacht und könnt nun den Fernseher definieren:<br />
<br />
<code>define MeinFernseher STV MeineTVIP MeinPort DLNARendererdevicenamedesSamsungTV</code><br/><br />
(MeinPort siehe Serienbeschreibung)<br />
<br />
Ist das device definiert, stehen 2 neue Attribute zur Verfügung: "callerURI" und "screenURI", wobei callerURI für die Nutzung von Anruferinfo gedacht ist, während screen allgemeiner sein soll/kann. Über screen und einen Dummy gebe ich z.B. mein InfoDisplay von FHEM auf dem TV aus. In die URIs wird der jeweilige Pfad zum Bild eingetragen.(also so, wie man es bereits beim Test des DLNARenderer gemacht hattet).<br />
<br />
Durch die Definition der jeweiligen URI, wurde dynamisch das Befehlsset des TV-devices erweitert. Für den Aufruf der callerURI steht der neue set-Befehl caller und für screenURI entsprechend screen zur Verfügung.<br />
<br />
Nun kann man erneut die Funktion über die neuen set-Befehle mit den ....URI's testen.<br />
<br />
Die letzte Lücke in der Kette für die Ausgabe des aktuellen Anrufers schließen entsprechende notify's. Ich habe ein notify, welches auf das ring-event des FB_CALLMONITOR reagiert.<br />
<br />
<code>notify ...... set MeinFernseher caller</code><br />
<br />
Das war's.....<br />
<br />
...es sei denn, man möchte nicht nur RSS-Bilder ausgeben und einen zusätzlichen Server einrichten.<br />
Wer bereits einen Server wie z.B. Apache installiert hat, sollte problemlos die Dateinamen in die URI'S des SamsungAV-Moduls eingeben bzw. diese auch direkt im DLNARendererDLNAClient-Modul streamen können.<br />
<br />
Wer einen richtigen Media-Server einrichten möchte, kann für den Rpi z.B. das recht schlanke miniDLNA installieren. Dieser hat die Besonderheit, dass er alle Medien mit einem Index versieht und nur das indizierte Medium aufgerufen werden kann, also z.B. 170.jpg. Der Originalname ist nicht verfügbar. Um dieser Besonderheit zu begegnen sind 2 wichtige Dinge zu beachten:<br />
* in der /etc/minidlna.conf ist inotify=no zu setzen. Das verhindert das Neuindizieren bei jeder Änderung/Hinzufügung einer Mediendatei.<br />
* über z.B. den WindowsMediaPlayer muss man sich den Pfad einer Datei über die Eigenschaften besorgen. Die URI, die im SamsungAV-Modul einzugeben ist, sieht dann z.B. so aus: [http://MediaServerIP:MediaServerPort/MediaItems/4711.jpg http://MediaServerIP:MediaServerPort/MediaItems/4711.jpg].<br />
<br />
Sofern Ihr nun kein Original-RSS-Bild streamen möchtet, könnt Ihr das im FHEMWEB-device angelegte zusätzliche Attribut allowedHttpMethods mit GET|POST|HEAD auch wieder löschen oder auf den Standard GET|POST setzen.<br />
<br />
'''Beachtet die beschriebenen Zusammenhänge. Ansonsten kann das zum aufhängen oder gar Absturz von FHEM führen !!!!!'''<br />
<br />
'''Und bedenkt, dass dies eine Alpha-Version ist, die aufgrund der unterschiedlichen Funktionen der TVs nicht für Euren TV getestet ist !!!'''<br />
<br />
===Allgemeine Medienausgabe===<br />
<br />
Sicherlich ist die im vorherigen Post beschriebene Bildschirmnachrichtenausgabe die für viele wichtigste Form der Medienausgabe auf dem Bildschirm. Letztendlich ist es aber nur eine Sonderform der allgemeinen Medienausgabe per DLNA mit dynamischer Mediengenerierung per RSS-Modul.<br />
<br />
Tatsächlich lassen sich mit DLNA alle Medien, ob Video, Audio, Foto, die auf einem Medien-Server gespeichert sind, auf den TV "pushen". Das eröffnet dann für die Hausautomatisierung unendlich viele Anwendungsmöglichkeiten. Ich zähle nur mal ein paar Ideen als Anregung dazu auf:<br />
* es klingelt an der Tür --> Kamera nimmt Bild auf --> Bild wird auf dem TV angezeigt --> Video- oder Audio-Konserve werden abgespielt<br />
<br />
* Einbruchalarm wird ausgelöst --> TV einschalten --> dem Einbrecher wird per Konserve gezeigt, dass sein Einbruch registriert wurde<br />
<br />
* sonstiger Alarm --> Info auf dem Bildschirm mit konkretem Auslöser des Alarms per Video-, Audio-, Foto-Konserve<br />
* Termin --> Terminerinnerung per per Video-, Audio-, Foto-Konserve<br />
<br />
Für die praktische Umsetzung in FHEM bedarf es nur der ereignisgesteuerten Nutzung des DLNARenderer. Die Voraussetzungen wurden im vorherigen Post beschrieben. ;)<br />
<br />
Mit der optionalen Definition stellt das SamsungAV-Modul ein paar Readings mit Informationen zum TV zur Verfügung. Es gibt einen zusätzlichen Befehl sayText, über den eine TTS-Funktion realisiert ist. Ein weiterer Befehl ist volume, welcher das einstellen einer absoluten Lautstärke ermöglicht.<br />
<br />
==Zusatzinformationen==<br />
<br />
===DLNARenderer für Samsung TV===<br />
<br />
Was DLNA eigentlich heißt und ist, habt Ihr doch hoffentlich bereits [https://de.wikipedia.org/wiki/Digital_Living_Network_Alliance hier] gelesen. ::)<br />
Der DLNARenderer ist also eigentlich ein DMC. Er verknüpft Ausgabegeräte(z.B. Samsung TV) mit Mediendateien(Medienserver), übernimmt die Steuerung dieser Verbindung. Was einfach klingt, ist technisch recht komplex. Deshalb ist das Modul in der Handhabung auch etwas außergewöhnlich für FHEM.<br />
<br />
Man definiert als erstes ein Masterdevice. Das ist dann später die Zentrale, wo auch gewünschte oder notwendige Attribute definiert werden. Nach dessen Definition und dem save der .cfg ist zwingend ein shutdown/restart erforderlich. Erst und nur dadurch werden manche Attribute wirksam ! Beim restart wird dann das define nebst Attributen durchlaufen und die Zentrale hat sich konfiguriert. Konfiguriert heißt, dass das Modul 3 weitere Systemdevices automatisch im room hidden angelegt hat. Außerdem werden alle DLNAdevices aufgefordert sich zu melden. Geben Sie eine Rückmeldung(können natürlich nur die, die on sind ;)), werden sie automatisch im room unsorted oder im room des Attributs defaultRoom angelegt. Die Fähigkeiten der devices werden in der Zentrale gespeichert. Das FHEM device des physischen devices dient der User-Steuerung. Dabei bedient es sich der Informationen der Zentrale.. Auch werden Veränderungen(z.B. Lautstärkeänderung per Fb) des physikalischen devices in Readings und events umgesetzt.<br />
<br />
Wie funktioniert das und welche Rolle spielen die 3 Systemdevices dabei ?<br />
Jedes der Systemdevices lauscht auf einem Port und verarbeitet eingehende Daten entsprechend seines Zwecks:<br />
Das Masterdevice setzt EINMALIG bei dessen Definition einen Search-Request ab, auf den dann alle physischen Geräte, die online sind, auf dem mitgegebenen Port antworten können(und das in der Regel auch tun). Die Antworten werden von Systemdevice Nr. 1 empfangen und wie oben beschrieben verarbeitet. Danach erfolgt NIE wieder ein "search" bis zum nächsten FHEM-Start. Deshalb haben Veränderungen der Attribute .....IP oder env.... auch keine Auswirkung im laufenden Betrieb.<br />
<br />
Warum werden später trotzdem neue Geräte erkannt ?<br />
Weil auch jedes physische device bei Ein-,Ausschalten eine Broadcast-message sendet, nach dem Motto: Hallo hier bin ich bzw. ich bin dann mal weg. (Funktioniert natürlich nicht, wenn man, wie ich, hart per Funksteckdose abschaltet ) Diese Nachrichten werden an Port 1900 "verschickt". Sie empfängt das System-device Nr. 2. Ist das device noch nicht vorhanden, wird es angelegt. Wurde es abgeschaltet, bekommt es den state absent. Nachteilig dabei ist, dass auch nicht DLNA-UPnP-Geräte solche messages auf Port 1900 schicken, z.B. Access Points. Das kann zu Problemen führen, weshalb sich der Ausschluss per ignoredIP empfiehlt. <br />
<br />
Bliebe noch System-device Nr. 3. Hier macht das Modul einen eigenen Port auf, teilt dem physischen device mit, dass es auf diesem Port lauscht, um Mitteilungen über Zustandsveränderungen am device zu erfahren. Das ist dann der subscription-process. Dabei wird auch vereinbart wie lange diese Vereinbarung Gültigkeit hat. Diese muss dann natürlich auch immer wieder erneuert werden, renewal halt. Über diesen Weg bekommen wir dann die Readings-Aktualisierung, events in FHEM.<br />
<br />
Nochmal weil wichtig zum Verständnis von Problemen:<br />
* Attribute werden nur beim start von FHEM interpretiert. Bei deren Änderung: save/shutdown/restart erforderlich !<br />
* Es ist ein Universalmodul für alle devices, die den DLNA-Standard unterstützen. Theoretisch.<br />
* Master-, 3 System- und das Userdevice(=physischem device) arbeiten verzahnt zusammen.<br />
* Nicht jedes physische device unterstützt dieselben services und actions<br />
* Die physischen devices haben in der Regel nur einen eingeschränkten und unterschiedlichen Umfang von zulässigen Mediendateiformaten<br />
* Manche devices erfordern Spezialattribute beim Master device(s.o.). Es kann aber nur genau ein Masterdevice konfiguriert werden. Der User kann möglicherweise daher nicht alle seiner Geräte in einer FHEM-Installation nutzen. Wahrscheinlich gibt es daher auch Probleme, wenn andere Module dieselben UPnP-Perlmodule nutzen, auf denen das DLNA_Renderer-Modul aufbaut, z.B. das SONOS-Modul.<br />
<br />
<br />
Das Beispiel für die Definition für Samsung TV und ein Anwenderbeispiel findet Ihr [https://forum.fhem.de/index.php/topic,82890.msg759194.html#msg759194 hier]<br />
<br />
===power,poweron,poweroff===<br />
<br />
Es gibt immer wieder Verwirrung, mit welchen RC-Befehlen sich der TV aus- oder gar einschalten lässt.<br />
<br />
Bei den TVs/firmware älteren Datums wird der Befehl poweroff für das Ausschalten des TV unterstützt. In der Regel hat der Befehl poweron keine Funktion, auch wenn sich das syntaktisch ableiten ließe. :-X<br />
<br />
Bei neueren Modellen/firmware muss man den Befehl power zum Abschalten nutzen. Auch hier gibt es in der Regel keinen Einschaltbefehl. Bei wenigen TVs(ich denke, dass das in der Regel nur auf Q-Serie zutrifft) kann man den power-Befehl auch zum einschalten benutzen.<br />
<br />
Obwohl also in der Regel kein RC-Befehl das Einschalten unterstützt, lässt sich das über folgende Möglichkeiten lösen:<br />
1. Hartes Aus-/Einschalten über eine Funksteckdose. Der TV startet so, wie er im Ausschaltzustand war, also On und vorheriger Kanal, wenn der TV on war. Standby, wenn er im standby war. Ich hab das 5 Jahre praktiziert, ohne dass der TV das übel genommen hat. Aber wer weiß....<br />
2. über das WOL-Modul. Zumindest bei neueren Modellen ist dies möglich. Bei mir sogar bei einer WLAN-Verbindung(obwohl es nicht zuverlässig funktioniert) Ich habe das device wie folgt definiert<br />
<br />
<code>define WOL_TV_device WOL MACdesTV IPdesTV UDPy</code><br />
<br />
Ob die Schnittstellen überhaupt WOL-fähig sind, sollte man außerhalb FHEM testen(z.B. Netzwerkverbindungen im FritzBox-Menü).<br />
3. Falls ein Linux-Gerät(z.B. Raspberry ) via HDMI am TV angeschlossen ist , mittels <br />
<br />
<code>echo 'on 0' | cec-client -s -d 1</code><br />
<br />
einschalten. cec-client ist im Paket libcec enthalten.<br />
<br />
Und bevor jemand schreibt, dass bei ihm das Einschalten funktioniert, es gibt noch eine Besonderheit der neueren TVs: Sie lassen sich noch ca. 1 min. nach dem Abschalten mit power wieder Einschalten. Aber eben auch nur für diesen kurzen Zeitraum. :-X<br />
<br />
== Bekannte Probleme / Fehlersuche ==<br />
<br />
Im Foum gibt es zwei Threads<br />
* [https://forum.fhem.de/index.php/topic,12988.msg79079.html Original Thread]<br />
* [https://forum.fhem.de/index.php/topic,57595.msg490160.html#msg490160 für Fernseher ab J-Serie]<br />
<br />
== Links ==<br />
* https://forum.fhem.de/index.php/topic,82890.0.html Zusammenfassende Doku: Samsung TV und FHEM<br />
<br />
[[Kategorie:Unterhaltungselektronik]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Jostarhttp://wiki.fhem.de/w/index.php?title=Netatmo&diff=38495Netatmo2023-07-16T20:08:56Z<p>Jostar: Ergänzung durch neuerdings erforderlichen refresh token, Update seit 16.07.</p>
<hr />
<div>{{SEITENTITEL:netatmo}}{{Infobox Modul<br />
|ModPurpose=Datenimport von privaten und öffentlichen netatmo Wetterstationen.<br />
|ModType=d<br />
<!-- |ModCategory= (noch?) nicht verwendet --><br />
|ModCmdRef=netatmo<br />
|ModForumArea=Sonstige Systeme<br />
|ModTechName=38_netatmo.pm<br />
|ModOwner=Markus M. ([https://forum.fhem.de/index.php?action=profile;u=291 Forum] / [[Benutzer_Diskussion:Markus M.|Wiki]])}}<br />
Das FHEM-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap].<br />
<br />
Auch für den Zugriff auf die öffentlichen Stationen ist ein netatmo Account nötig.<br />
<br />
Wird ein ACCOUNT definiert, legt das Modul (bei aktivem autocreate) selbst die Geräte an: MODULE, HOME, CAMERA, PERSON.<br />
<br />
Für die Netatmo Kameras (Welcome, Presence) können rein lokal verwendet werden: Live-Video-Stream, aktuelles Standbild und lokal gespeicherte Video-Clips deren ID?Key bereits bekannt sind. Alle weiteren Funktionen (Erkennung, Unterscheidung Person/Gesicht (Welcome) bzw. Unterscheidung Person/Tier/Fahrzeug (Presence) sowie Push-Events und Erzeugung neuer Events) sind nur mit einer aktiven Kopplung und Kommunikation über die Netatmo Server möglich.<br />
<br />
== Vorgehensweise ==<br />
1. Man benötigt einen Netatmo Account (Email und Passwort). Diesen legt man an <br />
* in der [[netatmo]]-App (z.B. auf dem iPad) <br />
* auf der [http://www.netatmo.com Homepage] (den Login Dialog aufklappen und auf den Text "Anmelden" klicken)<br />
<br />
2. Man benötigt eine Client_ID und den Client_Secret. Diese Informationen muss man auf [http://dev.netatmo.com dieser Seite] generieren. Hierfür meldet man sich mit den zuvor erstellten Account-Daten an und erstellt dann eine "eigene App". Hier werden einige Daten abgefragt, man muss jedoch nichts eingeben. Es reicht der App-Titel (z.B. "FHEM-AtmoNet" - Hinweis: Laut netatmo-Entwicklerrichtlinien ist der Begriff "netatmo" im App-Namen nicht zulässig) und eine kurze Beschreibung (z.B. "meine erste eigene app..."). Auf der dann folgenden Seite tauchen die Client_ID and der Client_Secret auf. Diese Daten braucht man wiederum in FHEM.<br />
<br />
3. refresh Token erstellen, auf ebendieser Seite, bei "choose scopes" entsprechend anhaken<br />
<br />
3. In FHEM ein Device anlegen mit den o.g. Informationen: <br />
:<code>define Wetter netatmo ACCOUNT <Email> <Passwort> <Client_ID> <Client_Secret> <refresh token></code><br />
<br />
Hinweis: Das Wort "ACCOUNT" muss in diesem define angegeben werden. Also nicht durch die o.g. Account-Daten ersetzen!<br />
<br />
Ist das modul netatmo unbekannt, muß evtl. noch ein update von FHEM durchgeführt werden. Erscheint weiterhin eine Fehlermeldung, fehlen zum Betrieb des netatmo Moduls möglicherweise einzelne Komponenten, die auf Betriebssystemebene nachinstalliert werden müssen:<br />
<br />
:<code> sudo apt-get install libjson-perl libdigest-md5-file-perl liblwp-protocol-https-perl liblwp-protocol-http-socketunix-perl</code><br />
<br />
4. Am besten das neue Device noch schnell in einen Raum schieben, damit man es besser findet: <br />
:<code>attr Wetter room Aussen</code><br />
<br />
5. Jetzt taucht in FHEM in der GUI beim Wetter-Device die Option "public " auf. <br />
<br />
6. Sollte nach kurzer Zeit beim Wetter-Device der Status "Invalid Access Token" auftauchen, muss unter Umständen die Zeit zwischen den Anfragen vergrößert werden. Manchmal sind die Netatmo Server überlastet/unerreichbar.<br />
<br />
7. Mit dem Kommando:<br />
:<code>get Wetter public <latitude> <longitude> <radius></code> <br />
geeignete öffentliche Wetterstationen suchen. <latitude> und <longitude> vom Wunschort findet man recht schnell über Google.<br />
<br />
Alternativ kann man auch mit Hilfe der PLZ Stationen in der Umgebung finden:<br />
:<code>get Wetter public <PLZ></code><br />
<br />
Aus der angezeigten Liste kann man die gewünschte Station auswählen und die <ID_der_gewählten_Station> <longitude> <latitude> kopieren.<br />
Stationen in Österreich findet man, wenn der PLZ ein a: vorangestellt wird.<br />
<br />
8. Device mit define anlegen:<br />
Dazu aus der Liste der Suchergebnisse die untere "Define"-Zeile Copy&Paste ins fhem Feld. <br />
:Beispielsweise: <code>define Berlinwetter netatmo PUBLIC 70:ee:50:00:66:86 02:00:00:00:71:b2 temperature,humidity 70:ee:50:00:66:86 pressure</code> <br />
Das erzeugt ein neues Device (mit dem Namen "Berlinwetter" als freier Name der Wetterstation) das intern aus mehreren Modulen besteht und liest pro Modul die öffentlichen readings aus.<br />
<br />
9. Alle im netatmo-Account bekannten eigenen und freigegebenen Stationen werden automatisch per autocreate in FHEM angelegt.<br />
<br />
== Links ==<br />
* Support-Thread des neuen Moduls im {{Link2Forum|Topic=53500.|Message=451696l|LinkText=Forum}}<br />
* Erklärung des in Teilen identischen alten Moduls in {{Link2Forum|Topic=14457|Message=184798|LinkText=Beitrag 184798}} im FHEM Forum.<br />
* Text zum Teil übernommen aus dem {{Link2Forum|Topic=14457|Message=83413l|LinkText=Forenbeitrag 183413}}.<br />
<br />
<br />
[[Kategorie:Wetterstationen]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Log2Syslog&diff=35999Log2Syslog2021-09-18T13:00:09Z<p>Jostar: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Senden und Empfangen von Syslog-Meldungen<br />
|ModType=h<br />
|ModCmdRef=Log2Syslog<br />
|ModForumArea=Automatisierung<br />
|ModFTopic=<br />
|ModTechName=93_Log2Syslog.pm<br />
|ModOwner=DS_Starter ({{Link2FU|16933|Forum}} / [[Benutzer Diskussion:DS_Starter|Wiki]])}}<br />
<br />
==Einführung==<br />
{{Randnotiz|RNTyp=w|RNText=Das Modul kann ab 01.03.2021 als v5.12.4 via Update bezogen werden.}}<br />
Das Modul [[Log2Syslog]] sendet FHEM Systemlog-Einträge und/oder Events an einen externen Syslog-Server weiter oder agiert als Syslog-Server um Syslog-Meldungen anderer Geräte zu empfangen.<br />
Die Implementierung des Syslog-Protokolls erfolgte entsprechend den Vorgaben von RFC5424 (IETF)<ref>https://tools.ietf.org/html/rfc5424</ref>, RFC3164 (BSD)<ref>https://tools.ietf.org/html/rfc3164</ref> sowie dem TLS Transport Protokoll nach RFC5425<ref>https://tools.ietf.org/pdf/rfc5425.pdf</ref>. <br />
<br />
==Voraussetzungen==<br />
Es werden die Perl Module "IO::Socket::INET" und "IO::Socket::SSL" (wenn SSL benutzt) benötigt und müssen installiert sein.<br />
Das Modul kann über CPAN oder, auf Debian Linux Systemen besser mit<br />
<br />
:<code>sudo apt-get install libio-socket-multicast-perl</code><br />
:<code>sudo apt-get install libio-socket-ssl-perl</code><br />
<br />
installiert werden. <br />
<br />
== Definition und Verwendung ==<br />
Je nach Verwendungszweck kann ein Syslog-Server (MODEL Collector) oder ein Syslog-Client (MODEL Sender) definiert werden.<br />
Der Collector empfängt Meldungen im Syslog-Format anderer Geräte und generiert daraus Events/Readings zur Weiterverarbeitung in FHEM. Das Sender-Device leitet FHEM Systemlog Einträge und/oder Events an einen externen Syslog-Server weiter. <br />
<br />
Siehe {{Link2CmdRef|Anker=Log2Syslog|Label=commandref}}.<br />
<br />
=== Attribut useEOF ===<br />
Model Sender (Protokoll TCP):<br />
Nach jedem Sendevorgang wird eine TCP-Verbindung mit EOF beendet.<br />
<br />
Model Collector:<br />
Wenn gesetzt wird mit dem Parsing gewartet, bis der Sender ein EOF Signal gesendet hat. CRLF wird nicht als Datentrenner berücksichtigt. Anwendungsbeispiel (Webcam Technaxx TX-66 meldet einen Bewegungsalarm):<br />
<pre>2021.03.06 23:00:17 5: Log2Syslog SyslogServer - Buffer 127 chars ready to parse:<br />
<166> Mar 06 23:00:17 192.168.178.136 "EventStop"<br />
{<br />
"Code" : "VideoMotion",<br />
"Index" : 1,<br />
"RegionName" : [ "Tuer" ]<br />
}</pre><br />
<br />
Wenn nicht gesetzt, wird CRLF als Trennung von Datensätzen gewertet. ParseFn wird pro Zeile aufgerufen:<br />
<pre>2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: <182> Feb 22 09:54:53 192.168.178.138 "EventStart"<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: {<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: "Code" : "VideoMotion",<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: "Index" : 1,<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: "RegionName" : [ "Tor" ]<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: }</pre><br />
<br />
Hinweis:<br />
Wenn der Sender kein EOF verwendet, wird nach Überschreiten eines Puffer-Schwellenwertes das Parsing der Daten erzwungen und die Warnung "Buffer overrun" im FHEM Log ausgegeben. <br />
<br />
== Anwendungsbeispiele ==<br />
* Erzeugen von zentralen Logberichten z.B. auf einer Synology Station<br />
* Einsammeln von Statusmeldungen und Bewegungsalarmen von Überwachungskameras, die Syslog-Meldungen versenden<br />
<br />
== Links ==<br />
<references /></div>Jostarhttp://wiki.fhem.de/w/index.php?title=Vitoconnect&diff=35908Vitoconnect2021-07-18T12:36:24Z<p>Jostar: Beschränkung durch API</p>
<hr />
<div>{{SEITENTITEL:vitoconnect}}{{Infobox Modul<br />
|ModPurpose=Steuerung von Viessmann Heizungen<br />
|ModCategory=Heizungssteuerung/Raumklima<br />
|ModCmdRef=vitoconnect<br />
|ModType=d<br />
|ModForumArea=Heizungssteuerung/Raumklima<br />
|ModTechName=98_vitoconnect.pm<br />
|ModOwner=andreas13 ({{Link2FU|3360|Forum}}/[[Benutzer Diskussion:Andreas13|Wiki]])}}<br />
<br />
[https://www.viessmann.de/de/viessmann-apps/vitoconnect.html Vitoconnect] ist die Schnittstelle zwischen Heizkessel und der App ViCare zum Bedienen von Viessmann Heizungsanlagen. <br />
<br />
Mit dem FHEM Modul [[vitoconnect]] können die Daten, die über die Internetschnittstelle an den Herstellerserver gemeldet und von diesem über eine API zur Verfügung gestellt werden, in FHEM in Form von Readings angezeigt werden. Auch eine Steuerung der Heizung ist mit diesem Modul möglich.<br />
<br />
Wen stört, dass die Daten in der Herstellercloud liegen, sei das Modul [[Vitotronic 200 (Viessmann Heizungssteuerung)]] empfohlen.<br />
<br />
Die Idee zu dem Modul enstand aus dem Thread {{Link2Forum|Topic=86073|LinkText="Viessmann VitoConnect API"}}. Es basiert auf dem PHP Modul von [https://github.com/thetrueavatar/Viessmann-Api thetrueavatar].<br />
<br />
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung. <br />
<br />
Das Modul wurde nach besten Wissen und Gewissen programmiert. Da Änderungen an der Heizung nur über die Viessmann API erfolgen, sollte die Nutzung risikoarm sein. Allerdings kann ich keine Garantie übernehmen, dass es nicht doch zu irgendwelchen unerwünschten Nebeneffekten kommt. Nutzung auf eigene Gefahr!<br />
<br />
Diskussionen über Fehler, Verbesserungen usw. finden im Forum im Thread {{Link2Forum|Topic=93664|LinkText="Neues Modul: vitoconnect"}} statt.}}<br />
<br />
== Einrichtung ==<br />
=== Vorbereitung ===<br />
Zur Nutzung des Moduls muss vorhanden sein:<br />
* Eine aktuelle FHEM Installation <br />
* Internet-Schnittstelle Vitoconnect 100 (Typ OPTO1)<br />
* Ein Viessmann ViCare Account, wie er im Rahmen der Nutzung der ViCare App erstellt wird.<br />
* Seit 15. Juli 2021 auch einen persönlichen API Key (=Client-ID), diesen gibts hier: <nowiki>https://developer.viessmann.com</nowiki> <br />
* Das Modul benötigt mindestens folgende Perl Libraries: Path::Tiny, JSON und DateTime. Diese können mit sudo apt install libtypes-path-tiny-perl libjson-perl libdatetime-perl oder via cpan. Sollten Libraries fehlen erhält man folgende Fehlermeldung "cannot load module vitoconnect". Dann bitte ins Logfile schauen, welche Lib fehlt.<br />
<br />
=== Define des Devices ===<br />
Dann kann das Gerät angelegt werden: <code>define <name> vitoconnect <user> <password> <interval></code><br />
<br />
Z.B. : <code>define vitoconnect vitoconnect user@mail.xx geheim 60</code><br />
<br />
User und Passwort sind das gleiche wie in der ViCare App.<br />
<br />
Da die Parameter, die beim Definieren des Devices angelegt werden im Klartext in der Detailansicht lesbar sind, kann man beim Definieren einfach ein falsches Passwort eingeben und das richtige später mit einem "set"-Kommando setzen. Also zum Beispiel:<br />
<br />
<code>define vitoconnect vitoconnect user@mail.xx fakePassword 60</code><br><br />
<code>set vitoconnect password correctPassword 60</code><br />
<br><br />
<br><br />
Nachträgliches Ändern des Intervalls:<br><br />
Man kann einfach das DEF aufrufen und dort die Parameter korrigieren (z.B. von 60 Sek. auf 180 Sek.) - dies gilt natürlich ebenso für nachträgliches Ändern des Usernamens oder Passwortes.<br />
<br />
=== Betrieb ===<br />
Der Zugriff auf die API von Viessmann ist aktuell auf 1450 pro Tag in der gratis Version beschränkt, daraus ergibt sich ein Maximum von ca. einer Abfrage pro Minute. Die Anzahl der Zugriffe ist im Entwicklerportal einsehbar: https://developer.viessmann.com/de/clients/history<br />
<br />
== Readings ==<br />
===Readings ===<br />
Die Readings werden so ausgegeben, wie sie von der API geliefert werden! Alle Reading für HK1 sind auch für HK2 und HK3 verfügbar sofern die Heizung solche Readings liefert.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR />Wertebereich !! Bedeutung <br />
|-<br />
|Aktive_Heizkreise ||0,1,2 ||Liste der aktiven Heizkreise. 0 entspricht HK1<br />
|-<br />
| || ||<br />
|-<br />
|Aussen_Status || connected/notConnected ||Ist ein Außensensor angeschlossen?<br />
|-<br />
| ''Aussen_StatusWired'' || connected/notConnected ||Ist ein Außensensor per Kabel angeschlossen? (wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
| ''Aussen_StatusWireless'' || connected/notConnected ||Ist ein kabelloser Außensensor angeschlossen? (wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|Aussentemperatur || 2.4 ||Außentemperatur in °C<br />
|-<br />
| || ||<br />
|-<br />
|Brenner_Betriebsstunden|| 934.336944444444 || Brenner Betriebsstunden<br />
|-<br />
|Brenner_Fehlercode || 0 || Brenner Fehlercode <br />
|-<br />
|Brenner_Modulation|| 11 || Brenner Modulation in %<br />
|-<br />
|Brenner_Starts|| 2717 || Brenner Starts<br />
|-<br />
|Brenner_Status || ok ||Brenner Status <br />
|-<br />
|Brenner_aktiv || 0,1|| Brenneraktiv <br />
|-<br />
| || ||<br />
|-<br />
|Controller_Seriennummer || 1234567890123456 || Controller Seriennummer <br />
|-<br />
|Device_Time_Offset || 61 || ???<br />
|-<br />
|Fehlereinträge_Historie ||ErrorListChanges||??? (noch nicht implementiert)<br />
|-<br />
|Fehlereinträge_aktive ||ErrorListChanges ||??? (noch nicht implementiert)<br />
|-<br />
| || ||<br />
|-<br />
|Gasverbrauch_Heizung/Jahr || 3293,0,0 ||Liste der jährlichen Gasverbräuche Heizung in kWH (aktuelles Jahr und die letzten beiden) '''(bis zum 09.12.2018 lieferte die API Werte, die noch durch 8 geteilt werden mussten, um auf kWh zu kommen!'''<br />
Außerdem liefert Viessmann für manche Heizungstypen (noch) '''keine getrennten Werte für Heizung und WW'''. D.h. in den Reading für WW und Heizung steht der gleiche Wert (vermutlich der Gesamtverbrauch)!<br />
|-<br />
|Gasverbrauch_Heizung/Monat || 1078,1384,590,241,0,0,0,0,0,0,0,0,0 ||Liste der monatlichen Gasverbräuche Heizung in kWH<br />
|-<br />
|Gasverbrauch_Heizung/Tag || 76,104,113,99,76,65,60,70 ||Liste der täglichen Gasverbräuche Heizung in kWH (aktueller und die letzten 7 Tage)<br />
|-<br />
|Gasverbrauch_Heizung/Woche ||555,409,416,472,289,196,254,209,24,46,<br />
183,192,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<br />
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 <br />
|| Liste der wöchentlichen Gasverbräuche Heizung in kWH<br />
|-<br />
|Gasverbrauch_WW/Jahr || 235,705,0 || Liste der jährlichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
|Gasverbrauch_WW/Monat || 27,208,213,193,215,84,0,0,0,0,0,0,0 ||Liste der monatlichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
|Gasverbrauch_WW/Tag || 2,6,0,0,0,2,9,0 ||Liste der täglichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
|Gasverbrauch_WW/Woche || 17,0,37,43,51,50,41,53,52,47,41,52,44,49,41,45,52,47,45,49,51,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ||Liste der wöchentlichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Betriebsart ||standby, dwh, dhwAndHeating, forcedReduced, forcedNormal ||Aus, Nur Warmwasser aktiv , Heizung und Warmwasser aktiv, Dauernd Reduziert, Dauernd Tagbetrieb <br />
|-<br />
| || ||<br />
|-<br />
|HK1-External_Temperatur || 0 ||Temperatur Raumsensor?<br />
|-<br />
|HK1-External_aktiv || 0 ||Raumsensor aktiv?<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Frostschutz_Status || on, off ||Frostschutz Status <br />
|-<br />
| || ||<br />
|-<br />
|HK1-Heizkurve-Niveau || 0 || Heizkurve-Niveau <br />
|-<br />
|HK1-Heizkurve-Steigung || 1.4 || Heizkurve-Steigung <br />
|-<br />
| || ||<br />
|-<br />
|HK1-Programmstatus || standby, reduced, normal, forcedReduced, forcedNormal ||Programmstatus <br />
|-<br />
|HK1-Raum_Status || error ||Raumsensor?<br />
|-<br />
|HK1-Raum_Temperatur || 20 ||Temperatur Raumsensor? Nur vorhanden, wenn HK1-Raum_Status "ok"<br />
|-<br />
|HK1-Reduzierte_Temperatur_erzwungen || 0,1 ||xxx<br />
|-<br />
|HK1-Solltemperatur_aktiv || 0,1 || Solltemperatur aktiv<br />
|-<br />
|HK1-Solltemperatur_comfort || 22 || Comfort Solltemeratur<br />
|-<br />
|HK1-Solltemperatur_comfort_aktiv || 0,1 || Comfort aktiv<br />
|-<br />
|HK1-Solltemperatur_eco || 24 || Eco Solltemperatur<br />
|-<br />
|HK1-Solltemperatur_eco_aktiv || 0,1 || Eco aktiv<br />
|-<br />
|HK1-Solltemperatur_erzwungen || 0,1 || Solltemperatur erzwungen<br />
|-<br />
|HK1-Solltemperatur_normal || 24 || Solltemperatur normal<br />
|-<br />
|HK1-Solltemperatur_reduziert || 16 || Solltemperatur reduziert<br />
|-<br />
|HK1-Solltemperatur_reduziert_aktiv || 0,1 || Reduziert aktiv<br />
|-<br />
|HK1-Standby_aktiv || 0,1 || Standby aktiv<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Urlaub_Ende || 2019-02-16T00:00:00.000Z ||Urlaubsabsenkung Ende<br />
|-<br />
|HK1-Urlaub_Start || 2019-02-02T23:59:59.000Z ||Urlaubsabsenkung Start<br />
|-<br />
|HK1-Urlaub_aktiv || 0,1 || Urlaubsabsenkung aktiv<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Vorlauftemperatur || 81 || Vorlauftemperatir<br />
|-<br />
|HK1-Vorlauftemperatur_aktiv || connected || Vorlauftemperatursensor verbunden<br />
|-<br />
| || ||<br />
|-<br />
|HK1-WW_aktiv || 0,1 ||Modus WW (dhw) aktiv<br />
|-<br />
|HK1-WW_und_Heizen_aktiv || 0,1 || Modus WW und Heizen (dhwAndHeating) aktiv<br />
|-<br />
|HK1-Zeitsteuerung_Heizung || <br />
wed start:05:00 mode:normal end:08:00 position:0, mode:normal end:23:00 position:1 start:16:00, sat position:0 end:23:00 mode:normal start:06:00,<br />
thu position:0 mode:normal end:08:00 start:05:00, start:16:00 end:23:00 mode:normal position:1, sun start:06:00 position:0 end:23:00 mode:normal,<br />
mon start:05:00 position:0 end:08:00 mode:normal, start:16:00 position:1 mode:normal end:23:00,<br />
fri start:05:00 position:0 end:08:00 mode:normal, position:1 mode:normal end:23:00 start:16:00,<br />
tue position:0 mode:normal end:08:00 start:05:00, mode:normal end:23:00 position:1 start:16:00, <br />
|| Zeitplan für Heizung<br />
|-<br />
|HK1-Zeitsteuerung_Heizung_aktiv || 0,1 || Zeitplan Heizung aktiv<br />
|-<br />
|''HK1-Zeitsteuerung_Zirkulation'' || 0,1 || Zeitplan für Zirkulationspumpe. Ist irgendwann nach WW gewandert?<br />
|-<br />
|''HK1-Zeitsteuerung_Zirkulation_aktiv'' || 0,1 || Zirkulationspumpe zeitgesteuert<br />
|-<br />
| HK1-Zirkulationspumpe || on,off || Zirkulationspumpe aktiv (neu seit 16.12.18?)<br />
|-<br />
|HK1-aktiv || 1 ||HK1 aktiv<br />
|-<br />
| || ||<br />
|-<br />
|Kessel_Common_Supply || error || ??? (neu seit 16.12.18?)<br />
|-<br />
|Kessel_Status || connected ||xxx<br />
|-<br />
|Kesseltemperatur || 53 ||xxx<br />
|-<br />
|Kesseltemperatur_exact|| 53 ||??? (neu seit 16.12.18?)<br />
|-<br />
|Mehrfamilienhaus_aktiv || 0,1 ||xxx<br />
|-<br />
| || ||<br />
|-<br />
|''Service_Betriebsstunden_seit_letzten'' || 0 ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|''Service_Intervall_Betriebsstunden'' || 0 ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|Service_Intervall_Monate || 0 || ???<br />
|-<br />
|Service_Letzter || 1970-01-01T00:00:00.000Z || ???<br />
|-<br />
|''Service_Letzter_brennerbasiert'' || 1970-01-01T00:00:00.000Z ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|Service_Monate_aktiv_seit_letzten_Service || 0 || ???<br />
|-<br />
|Service_fällig || 0,1 || Service fällig?<br />
|-<br />
|''Service_fällig_brennerbasiert'' || ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
| || ||<br />
|-<br />
|Stromverbrauch/Jahr|| 35573,66052,0 || Stromverbrauch im Jahr in Wh(?) (analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
|Stromverbrauch/Monat|| 11860,23713,22851,19264,17924,6013,0,0,0,0,0,0,0 || Stromverbrauch im Monat(analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
|Stromverbrauch/Tag|| 409,828,720,733,731,727,708,682 || Stromverbrauch im Tag (analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
|Stromverbrauch/Woche|| 4418,5058,5514,5802,5249,5109,5156,5702,5179,5547,4286,4710,5087,4236,<br />
4075,4633,4307,3675,3721,4148,4594,1419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 <br />
|| Stromverbrauch im Woche (analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
| || ||<br />
|-<br />
|WW-Aufladung|| 0,1 || WW Vorrat wird erhitzt (neu seit 16.12.18?)<br />
|-<br />
|WW-Haupttemperatur|| 54 || ?? (neu seit 16.12.18?)<br />
|-<br />
|WW-Isttemperatur || 56 || WW Ist-Temperatur<br />
|-<br />
|WW-Sensoren_Auslauf_Status|| error || ??? (neu seit 16.12.18?)<br />
|-<br />
|WW-Solltemperatur || 53 || WW Solltemperatur<br />
|-<br />
|WW-Temperatur_aktiv || connected || WW aktiv<br />
|-<br />
|WW-Zeitplan ||<br />
fri position:0 mode:on end:22:30 start:06:30, mon start:06:30 mode:on end:22:30 position:0, <br />
sat start:06:30 position:0 mode:on end:22:30, wed end:22:30 mode:on position:0 start:06:30,<br />
thu start:06:30 position:0 mode:on end:22:30,<br />
tue position:0 mode:on end:22:30 start:06:30, sun mode:on end:22:30 position:0 start:06:30,<br />
|| WW Zeitplan<br />
|-<br />
|WW-Zirkulationspumpe_Zeitsteuerung_aktiv || 0,1 || Zeitsteuerung Zirkulationspumpe aktiv(neu seit 16.12.18?)<br />
|-<br />
|WW-Zirkulationspumpe_Status|| on || Status Zirkulationspumpe(neu seit 16.12.18?)<br />
|-<br />
|WW-Zirkulationspumpe_Zeitplan ||<br />
wed start:04:30 mode:on end:22:30 position:0, mon start:04:30 position:0 end:22:30 mode:on,<br />
sun start:04:30 position:0 mode:on end:22:30, sat start:04:30 position:0 end:22:30 mode:on, thu start:04:30 end:22:30 mode:on position:0,<br />
tue start:04:30 mode:on end:22:30 position:0, fri position:0 end:22:30 mode:on start:04:30,<br />
|| Zeitplan für die Zirkulationspumpe (neu seit 16.12.18?)<br />
|-<br />
|WW-Zirkulationspumpe_primaer|| off || (neu seit 16.12.18?)<br />
|-<br />
|WW-aktiv || 0,1 || WW aktiv<br />
|-<br />
|WW-onTimeCharge_aktiv || 0,1 || einmaliges WW Aufladen aktiv<br />
|-<br />
|WW-zeitgesteuert_aktiv || 0,1 || WW zeitgesteuert<br />
|-<br />
| || ||<br />
|-<br />
|state || ok, Login failure|| Status<br />
|-<br />
<br />
|}<br />
<br />
== Settings ==<br />
<br />
===Set Befehle ===<br />
'''Benutzung der Set-Befehle auf eigenes Risiko!'''<br />
<br />
Das Modul prüft nicht, ob ein Befehl oder die Parameter für die Heizung sinnvoll und möglich sind. Die API scheint dies mit einem Fehler quittieren.<br />
<br />
Befehle für HK1 sind auch für HK2 und HK3 verfügbar. <br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR />Wertebereich !! Beschreibung <br />
|-<br />
|update|| ||löst ein Update der Reading zwischen manuell aus<br />
|-<br />
|clearReadings|| || clear all readings immeadiatlely <br />
|-<br />
|password <passwd>||String|| store password in key store<br />
|-<br />
|logResponseOnce|| || dumps the json response of Viessmann server to entities.json, gw.json, actions.json in FHEM log directory<br />
|-<br />
| || || <br />
|-<br />
|HK1-Heizkurve-Niveau <shift>||-13 bis 40 || set shift of heating curve<br />
|-<br />
|HK1-Heizkurve-Steigung <slope>||0.2 bis 3.5 || set slope of heating curve <br />
|-<br />
|HK1-Betriebsart <mode>||standby,dhw,dhwAndHeating,forcedReduced or forcedNormal ||set HK1-Betriebsart<br />
|-<br />
|HK1-Solltemperatur_comfort_aktiv <activate,deactivate>|| ||activate/deactivate comfort temperature<br />
|-<br />
|HK1-Solltemperatur_comfort <targetTemperature>|| || set comfort target temperatur <br />
|-<br />
|HK1-Solltemperatur_eco_aktiv activate,deactivate || || activate/deactivate eco temperature<br />
|-<br />
|HK1-Urlaub_Start <start>|| 2019-02-02 (früher war das Format mal 2019-02-02T23:59:59.000Z)|| set holiday start time <br />
|-<br />
|HK1-Urlaub_Ende <end>||2019-02-16 (früher war das Format mal 2019-02-16T00:00:00.000Z)|| set holiday end time (geht nur, wenn schon eine Startzeit gesetzt ist)<br />
|-<br />
|HK1-Urlaub_unschedule|| || remove holiday start and end time <br />
|-<br />
|HK1-Solltemperatur_normal <targetTemperature>|| 3 and 37|| sets the normale target temperature <br />
|-<br />
|HK1-Solltemperatur_reduziert <targetTemperature>|| 3 and 37|| sets the reduced target temperature <br />
|-<br />
| || || <br />
|-<br />
|WW-einmaliges_Aufladen activate,deactivate|| ||activate or deactivate one time charge for hot water <br />
|-<br />
|WW-Zirkulationspumpe_Zeitplan <schedule>|| || not implemented <br />
|-<br />
|WW-Zeitplan <schedule>|| || not implemented <br />
|-<br />
|WW-Haupttemperatur <targetTemperature>||10 and 60 || sets hot water main temperature to targetTemperature <br />
|-<br />
|WW-Solltemperatur <targetTemperature>|| 10 and 60|| sets hot water temperature to targetTemperature <br />
|}<br />
<br />
== Get ==<br />
<br />
Derzeit gibt es keine "get"-Kommandos.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Beschreibung<br />
|-<br />
| || <br />
|}<br />
<br />
== Attribute ==<br />
<br />
===Attribute ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR />Wertebereich !! Default-Wert !! Beschreibung<br />
|-<br />
|disable|| 0,1 || ||disable updates<br />
|-<br />
|verbose|| 0,1,2,3,4,5 || ||Loglevel<br />
|-<br />
|vitoconnect_raw_readings|| 0,1 || ||lege Reading mit dem JSON Namen wie 'heating.circuits.0.heating.curve.slope' statt der Deutschen Bezeichnungen an<br />
|-<br />
|vitoconnect_actions_active|| 0,1 || || erzeuge Readings for Befehle wie 'heating.circuits.0.heating.curve.setCurve'<br />
|}<br />
<br />
== Hilfsmittel ==<br />
=== Attribut zum Speichern der wichtigsten Werte mittels DbLog ===<br />
<syntaxhighlight lang="Perl">attr vitoconnect DbLogInclude Gasverbrauch_gestern,Gasverbrauch_Heizung/Jahr,Gasverbrauch_aktuelle_Woche,Gasverbrauch_aktueller_Monat,Gasverbrauch_heute,WW-aktiv,<br />
HK1-Frostschutz_Status,HK1-WW_und_Heizen_aktiv,HK1-WW_aktiv,HK1-Betriebsart,HK1-Programmstatus,Aussentemperatur,HK1-Solltemperatur_normal,Brenner_aktiv,<br />
HK1-Vorlauftemperatur,Kesseltemperatur,WW-Isttemperatur,WW-Solltemperatur</syntaxhighlight><br />
<br />
=== Userreadings um Reading für Einzelwerte von Gasverbräuche zu erzeugen ===<br />
<syntaxhighlight lang="Perl"><br />
attr vitoconnect userReadings<br />
Gasverbrauch_heute:Gasverbrauch_Heizung/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Gasverbrauch_Heizung/Tag",0))[0] },<br />
Gasverbrauch_gestern:Gasverbrauch_Heizung/Tag.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Tag",0))[1] },<br />
Gasverbrauch_aktuelle_Woche:Gasverbrauch_Heizung/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Woche",0))[0] },<br />
Gasverbrauch_letzte_Woche:Gasverbrauch_Heizung/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Woche",0))[1] },<br />
Gasverbrauch_aktueller_Monat:Gasverbrauch_Heizung/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Monat",0))[0] },<br />
Gasverbrauch_letzter_Monat:Gasverbrauch_Heizung/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Monat",0))[1] },<br />
Gasverbrauch_aktuelles_Jahr:Gasverbrauch_Heizung/Jahr.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Jahr",0))[0] },<br />
Gasverbrauch_letztes_Jahr:Gasverbrauch_Heizung/Jahr.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Jahr",0))[1] },<br />
<br />
Gasverbrauch_WW_heute:Gasverbrauch_WW/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Gasverbrauch_WW/Tag",0))[0] },<br />
Gasverbrauch_WW_gestern:Gasverbrauch_WW/Tag.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Tag",0))[1] },<br />
Gasverbrauch_WW_aktuelle_Woche:Gasverbrauch_WW/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Woche",0))[0] },<br />
Gasverbrauch_WW_letzte_Woche:Gasverbrauch_WW/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Woche",0))[1] },<br />
Gasverbrauch_WW_aktueller_Monat:Gasverbrauch_WW/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Monat",0))[0] },<br />
Gasverbrauch_WW_letzter_Monat:Gasverbrauch_WW/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Monat",0))[1] },<br />
Gasverbrauch_WW_aktuelles_Jahr:Gasverbrauch_WW/Jahr.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Jahr",0))[0] },<br />
Gasverbrauch_WW_letztes_Jahr:Gasverbrauch_WW/Jahr.* { (split /,/, ReadingsVal("vitoconnect", "Gasverbrauch_WW/Jahr",0))[1] },<br />
<br />
Stromverbrauch_heute:Stromverbrauch/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Tag",0))[0] },<br />
Stromverbrauch_gestern:Stromverbrauch/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Tag",0))[1] },<br />
Stromverbrauch_aktuelle_Woche:Stromverbrauch/Woche.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Woche",0))[0] },<br />
Stromverbrauch_letzte_Woche:Stromverbrauch/Woche.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Woche",0))[1] },<br />
Stromverbrauch_aktueller_Monat:Stromverbrauch/Monat.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Monat",0))[0] },<br />
Stromverbrauch_letzter_Monat:Stromverbrauch/Monat.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Monat",0))[1] },<br />
Stromverbrauch_aktuelles_Jahr:Stromverbrauch/Jahr.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Jahr",0))[0] },<br />
Stromverbrauch_letztes_Jahr:Stromverbrauch/Jahr.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Jahr",0))[1] }<br />
<br />
</syntaxhighlight><br />
<br />
=== ReadingsGroup für eine kompakte Darstellung ===<br />
<br />
<syntaxhighlight lang="perl" style="width:90%;"><br />
defmod vitoconnect_rg readingsGroup<br />
vitoconnect:Aussentemperatur<br />
<Brenner><br />
vitoconnect:Brenner_Betriebsstunden<br />
vitoconnect:Brenner_Fehlercode<br />
vitoconnect:Brenner_Modulation<br />
vitoconnect:Brenner_Starts<br />
vitoconnect:Brenner_Status<br />
vitoconnect:Brenner_aktiv<br />
<HK1><br />
vitoconnect:HK1-aktiv<br />
vitoconnect:HK1-Betriebsart<br />
<br />
vitoconnect:HK1-Frostschutz_Status<br />
<br />
vitoconnect:HK1-Heizkurve-Niveau<br />
vitoconnect:HK1-Heizkurve-Steigung<br />
<br />
vitoconnect:HK1-Programmstatus<br />
vitoconnect:HK1-Raum_Status<br />
vitoconnect:HK1-Reduzierte_Temperatur_erzwungen<br />
vitoconnect:HK1-Solltemperatur_aktiv<br />
vitoconnect:HK1-Solltemperatur_erzwungen<br />
vitoconnect:HK1-Solltemperatur_normal<br />
vitoconnect:HK1-Solltemperatur_reduziert<br />
vitoconnect:HK1-Solltemperatur_reduziert_aktiv<br />
vitoconnect:HK1-Standby_aktiv<br />
<br />
vitoconnect:HK1-Urlaub_Ende<br />
vitoconnect:HK1-Urlaub_Start<br />
vitoconnect:HK1-Urlaub_aktiv<br />
<br />
vitoconnect:HK1-Vorlauftemperatur<br />
<br />
vitoconnect:HK1-WW_aktiv<br />
vitoconnect:HK1-WW_und_Heizen_aktiv<br />
<br />
vitoconnect:HK1-Zeitsteuerung_Heizung_aktiv<br />
vitoconnect:HK1-Zeitsteuerung_Zirkulation_aktiv<br />
<br />
vitoconnect:HK1-Zirkulationspumpe<br />
<Kessel><br />
vitoconnect:Kesseltemperatur<br />
vitoconnect:Kesseltemperatur_exact<br />
<WW><br />
vitoconnect:WW-Aufladung<br />
vitoconnect:WW-Haupttemperatur<br />
vitoconnect:WW-Isttemperatur<br />
vitoconnect:WW-Solltemperatur<br />
vitoconnect:WW-Zirklationspumpe_Zeitsteuerung_aktiv<br />
vitoconnect:WW-Zirkulationspumpe_Status<br />
vitoconnect:WW-Zirkulationspumpe_primaer<br />
vitoconnect:WW-aktiv<br />
vitoconnect:WW-onTimeCharge_aktiv<br />
vitoconnect:WW-zeitgesteuert_aktiv<br />
</syntaxhighlight><br />
<br />
<syntaxhighlight lang="perl" style="width:90%;"><br />
attr vitoconnect_rg alias Heizung<br />
attr vitoconnect_rg cellStyle { <br />
"c:0"=>'style="text-align:left"', <br />
"c:1"=>'style="text-align:left"', <br />
"r:2"=>'style="text-align:right;;;;font-weight:bold"'<br />
}<br />
attr vitoconnect_rg mapping {<br />
"Aussentemperatur" => "Aussentemperatur",<br />
<br />
"Brenner_Betriebsstunden" => "Betriebsstunden",<br />
"Brenner_Fehlercode" => "Fehlercode",<br />
"Brenner_Modulation" => "Modulation",<br />
"Brenner_Starts" => "Starts",<br />
"Brenner_Status" => "Status",<br />
"Brenner_aktiv" => "aktiv",<br />
<br />
"HK1-aktiv" => "aktiv",<br />
"HK1-Betriebsart" => "Betriebsart",<br />
"HK1-Frostschutz_Status" => "Frostschutz_Status",<br />
"HK1-Heizkurve-Niveau" => "Heizkurve-Niveau",<br />
"HK1-Heizkurve-Steigung" => "Heizkurve-Steigung",<br />
"HK1-Programmstatus" => "Programmstatus",<br />
"HK1-Raum_Status" => "Raum Status",<br />
"HK1-Reduzierte_Temperatur_erzwungen" => "Reduzierte Temperatur erzwungen",<br />
"HK1-Solltemperatur_aktiv" => "Solltemperatur aktiv",<br />
"HK1-Solltemperatur_erzwungen" => "Solltemperatur erzwungen",<br />
"HK1-Solltemperatur_normal" => "Solltemperatur normal",<br />
"HK1-Solltemperatur_reduziert" => "Solltemperatur reduziert",<br />
"HK1-Solltemperatur_reduziert_aktiv" => "Solltemperatur reduziert_aktiv",<br />
"HK1-Standby_aktiv" => "Standby aktiv",<br />
"HK1-Urlaub_Ende" => "Urlaub Ende",<br />
"HK1-Urlaub_Start" => "Urlaub Start",<br />
"HK1-Urlaub_aktiv" => "Urlaub aktiv",<br />
"HK1-Vorlauftemperatur" => "Vorlauftemperatur",<br />
"HK1-WW_aktiv" => "WW aktiv",<br />
"HK1-WW_und_Heizen_aktiv" => "WW und Heizen aktiv",<br />
"HK1-Zeitsteuerung_Heizung_aktiv" => "Zeitsteuerung Heizung aktiv",<br />
"HK1-Zirkulationspumpe" => "Zirkulationspumpe",<br />
<br />
"Kesseltemperatur" => "Kesseltemperatur",<br />
"Kesseltemperatur_exact" => "Kesseltemperatur exact",<br />
<br />
"WW-Aufladung" => "Aufladung",<br />
"WW-Haupttemperatur" => "Haupttemperatur",<br />
"WW-Isttemperatur" => "Isttemperatur",<br />
"WW-Solltemperatur" => "Solltemperatur",<br />
"WW-Zirklationspumpe_Zeitsteuerung_aktiv" => "Zirkulationspumpe Zeitsteuerung aktiv",<br />
"WW-Zirkulationspumpe_Status" => "Zirkulationspumpe Status",<br />
"WW-Zirkulationspumpe_primaer" => "Zirkulationspumpe primaer",<br />
"WW-aktiv" => "aktiv",<br />
"WW-onTimeCharge_aktiv" => "onTimeCharge aktiv",<br />
"WW-zeitgesteuert_aktiv" => "zeitgesteuert aktiv"<br />
}<br />
<br />
attr vitoconnect_rg nostate 1<br />
attr vitoconnect_rg notime 1<br />
attr vitoconnect_rg room Heizung<br />
attr vitoconnect_rg sortby 1<br />
attr vitoconnect_rg valueFormat { "Brenner_Betriebsstunden" => "%2d" }<br />
attr vitoconnect_rg valueIcon {'Brenner_aktiv.0' => '1px-spacer', <br />
'Brenner_aktiv.1' => 'icoHEIZUNG',<br />
'HK1-Solltemperatur_reduziert_aktiv.0' => '10px-kreis-rot',<br />
'HK1-Solltemperatur_reduziert_aktiv.1' => '10px-kreis-gruen'<br />
}<br />
<br />
attr vitoconnect_rg valueSuffix {<br />
Aussentemperatur => "°C", <br />
<br />
Brenner_Betriebsstunden => "h",<br />
Brenner_Modulation => "%",<br />
<br />
'HK1-Solltemperatur_normal' => "°C",<br />
'HK1-Solltemperatur_reduziert' => "°C",<br />
'HK1-Vorlauftemperatur' => " °C",<br />
<br />
Kesseltemperatur => "°C",<br />
Kesseltemperatur_exact => "°C",<br />
<br />
'WW-Solltemperatur' => " °C",<br />
'WW-Isttemperatur' => " °C",<br />
<br />
'WW-Solltemperatur' => "°C"<br />
}<br />
</syntaxhighlight><br />
<br><br />
<br />
[[Datei:ReadingsGroup für Vitoconnect Modul 3.jpg|200px]]<br />
<br />
=== ReadingsGroup für eine kompakte Darstellung der Verbräuche ===<br />
<br />
<syntaxhighlight lang="Perl" style="width:100%;"><br />
defmod Heizung_Verbrauch readingsGroup <>,<Periode>,<Heizung>,<Wasser>,<Strom><br />
vitoconnect:,<heute>,Gasverbrauch_heute,Gasverbrauch_WW_heute,Stromverbrauch_heute<br />
vitoconnect:,<gestern>,Gasverbrauch_gestern,Gasverbrauch_WW_gestern,Stromverbrauch_gestern<br />
vitoconnect:,<Woche>,Gasverbrauch_aktuelle_Woche,Gasverbrauch_WW_aktuelle_Woche,Stromverbrauch_aktuelle_Woche<br />
vitoconnect:,<letzte>,Gasverbrauch_letzte_Woche,Gasverbrauch_WW_letzte_Woche,Stromverbrauch_letzte_Woche<br />
vitoconnect:,<Monat>,Gasverbrauch_aktueller_Monat,Gasverbrauch_WW_aktueller_Monat,Stromverbrauch_aktueller_Monat<br />
vitoconnect:,<letzter>,Gasverbrauch_letzter_Monat,Gasverbrauch_WW_letzter_Monat,Stromverbrauch_letzter_Monat<br />
vitoconnect:,<Jahr>,Gasverbrauch_aktuelles_Jahr,Gasverbrauch_WW_aktuelles_Jahr,Stromverbrauch_aktuelles_Jahr<br />
vitoconnect:,<letztes>,Gasverbrauch_letztes_Jahr,Gasverbrauch_WW_letztes_Jahr,Stromverbrauch_letztes_Jahr<br />
<br />
attr Heizung_Verbrauch cellStyle { <br />
"r:1"=>'style="text-align:left;;;;font-weight:bold"',<br />
"c:1"=>'style="text-align:right;;;;font-weight:bold"'<br />
}<br />
attr Heizung_Verbrauch mapping &nbsp;;<br />
attr Heizung_Verbrauch nostate 1<br />
attr Heizung_Verbrauch room Heizung<br />
attr Heizung_Verbrauch style style="text-align:right;;;;font-size:18px"<br />
attr Heizung_Verbrauch valueFormat {<br />
Gasverbrauch_heute => "%.0f kWh",<br />
Gasverbrauch_WW_heute => "%.0f kWh",<br />
Stromverbrauch_heute => "%.0f kWh",<br />
Gasverbrauch_gestern => "%.0f kWh",<br />
Gasverbrauch_WW_gestern => "%.0f kWh",<br />
Stromverbrauch_gestern => "%.0f kWh",<br />
Gasverbrauch_aktuelle_Woche => "%.0f kWh",<br />
Gasverbrauch_WW_aktuelle_Woche => "%.0f kWh",<br />
Stromverbrauch_aktuelle_Woche => "%.0f kWh",<br />
Gasverbrauch_letzte_Woche => "%.0f kWh",<br />
Gasverbrauch_WW_letzte_Woche => "%.0f kWh",<br />
Stromverbrauch_letzte_Woche => "%.0f kWh",<br />
Gasverbrauch_aktueller_Monat => "%.0f kWh",<br />
Gasverbrauch_WW_aktueller_Monat => "%.0f kWh",<br />
Stromverbrauch_aktueller_Monat => "%.0f kWh",<br />
Gasverbrauch_letzter_Monat => "%.0f kWh",<br />
Gasverbrauch_WW_letzter_Monat => "%.0f kWh",<br />
Stromverbrauch_letzter_Monat => "%.0f kWh",<br />
Gasverbrauch_aktuelles_Jahr => "%.0f kWh",<br />
Gasverbrauch_WW_aktuelles_Jahr => "%.0f kWh",<br />
Stromverbrauch_aktuelles_Jahr => "%.0f kWh",<br />
Gasverbrauch_letztes_Jahr => "%.0f kWh",<br />
Gasverbrauch_WW_letztes_Jahr => "%.0f kWh",<br />
Stromverbrauch_letztes_Jahr => "%.0f kWh"<br />
}<br />
</syntaxhighlight><br />
[[Datei:Readuingsgroup Verbräuche aus Vitoconnect 2.jpg|200px]]<br />
<br />
<br />
=== SVG Graphen ===<br />
==== Gas- und Stromverbrauch ====<br />
<br />
[[Datei:SVG Gasverbrauch für vitoconnect Modul.jpg|800px]]<br />
<br />
[[Datei:Verbräuche aus Vitoconnect.jpg|800px]]<br />
<br />
<br><br />
==== weitere Graphen ====<br />
[[Datei:Beispiel für Grafiken aus vitoconnect Daten.jpg|800px]]<br />
<br><br />
<br><br />
<br />
=== Speichern der wichtigsten Werte mittels FileLog und Erzeugung der entspr. SVG Plots ===<br />
==== FileLog erstellen ====<br />
Zunächst wird das FileLog mit ausgewählten Parametern erstellt. Dies ist die Voraussetzung für die SVG Plots.<br />
<syntaxhighlight lang="Perl"><br />
define FileLog_VitoConnect FileLog ./log/VitoConnect-%Y-%m.log vitoconnect:Aussentemperatur|vitoconnect:Brenner_Modulation|vitoconnect:Brenner_aktiv|vitoconnect:Gasverbrauch_Heizung/Jahr|vitoconnect:Gasverbrauch_aktuelle_Woche|vitoconnect:Gasverbrauch_aktueller_Monat|vitoconnect:Gasverbrauch_gestern|vitoconnect:Gasverbrauch_heute|vitoconnect:HK1-Betriebsart|vitoconnect:HK1-Frostschutz_Status|vitoconnect:HK1-Programmstatus|vitoconnect:HK1-Solltemperatur_aktiv|vitoconnect:HK1-Solltemperatur_normal|vitoconnect:HK1-Solltemperatur_reduziert|vitoconnect:HK1-Solltemperatur_reduziert_aktiv|vitoconnect:HK1-Vorlauftemperatur|vitoconnect:HK1-WW_aktiv|vitoconnect:HK1-WW_und_Heizen_aktiv|vitoconnect:HK1-Zirkulationspumpe|vitoconnect:Kessel_Common_Supply_Temperatur|vitoconnect:Kesseltemperatur_exact|vitoconnect:WW-Isttemperatur|vitoconnect:WW-Sensoren_Auslauf_Wert|vitoconnect:WW-Solltemperatur|vitoconnect:WW-Zirkulationspumpe_Status|vitoconnect:WW-zeitgesteuert_aktiv<br />
attr FileLog_VitoConnect room Log<br />
</syntaxhighlight><br />
<br />
==== SVG Graphen aus FileLog erstellen ====<br />
Nachdem das FileLog erstellt wurde, kann aus dem Log nun der Plot von ausgewählten Werten erstellt werden.<br><br />
<br />
===== SVG Plot für Heizkreis1 =====<br />
Im folgenden Beispiel werden hier verschiedene Graphen für Heizkreis1 (HK1) genommen.<br />
Einige der Logwerte speichern "on"- oder "off"-Werte, diese müssten beispielsweise mit der Formel <syntaxhighlight lang="Perl">$fld[3]=~"on"?1.5:0</syntaxhighlight> erst in Werte (on=1.5, off=0) gewandelt werden.<br />
<br><br />
<br><br />
SVG Plot mit Plot Editor:<br><br />
[[Datei:SVG FileLog VitoConnect 1 HK1 Temps.png|800px]]<br />
<br><br />
<br><br />
… mit dem entsprechenden <b>Code</b>:<br><br />
<syntaxhighlight lang="Perl"><br />
defmod SVG_FileLog_VitoConnect_1 SVG FileLog_VitoConnect:SVG_FileLog_VitoConnect_1:CURRENT<br />
attr SVG_FileLog_VitoConnect_1 room Heizung<br />
<br />
setstate SVG_FileLog_VitoConnect_1 initialized<br />
</syntaxhighlight><br />
<br />
<b>SVG_FileLog_VitoConnect_1.gplot</b>:<br />
<syntaxhighlight lang="Perl"><br />
# Created by FHEM/98_SVG.pm, 2019-11-04 20:35:38<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 'HK1 Temps'<br />
set ytics <br />
set y2tics <br />
set grid<br />
set ylabel "°C"<br />
set y2label "boolean"<br />
set y2range [0:4]<br />
<br />
#FileLog_VitoConnect 4:vitoconnect.Aussentemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_normal\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_reduziert\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_aktiv\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_reduziert_aktiv\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Vorlauftemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.Kesseltemperatur_exact\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Zirkulationspumpe\x3a::$fld[3]=~"on"?1.5:0<br />
<br />
plot "<IN>" using 1:2 axes x1y1 title 'Außentemperatur' ls l7 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Soll normal' ls l0 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Soll reduziert' ls l1 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'normal-prg' ls l0fill lw 2 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'reduziert-prg' ls l1fill lw 2 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Vorlauf' ls l2 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Kesseltemp.' ls l5 lw 1 with lines<br />
"<IN>" using 1:2 axes x1y2 title 'Zirk.pumpe' ls l8fill lw 2 with lines,\<br />
</syntaxhighlight><br />
<br />
===== SVG Plot für Warmwasser =====<br />
Im folgenden Beispiel werden hier verschiedene Graphen für Warmwasser (WW) genommen.<br />
Einige der Logwerte speichern "on"- oder "off"-Werte, diese müssten beispielsweise mit der Formel <syntaxhighlight lang="Perl">$fld[3]=~"on"?1.5:0</syntaxhighlight> erst in Werte (on=1.5, off=0) gewandelt werden.<br />
<br><br />
<br><br />
SVG Plot mit Plot Editor:<br><br />
[[Datei:SVG FileLog VitoConnect 2 WW Temps.png|800px]]<br />
<br><br />
<br><br />
… mit dem entsprechenden <b>Code</b>:<br><br />
<syntaxhighlight lang="Perl"><br />
defmod SVG_FileLog_VitoConnect_2 SVG FileLog_VitoConnect:SVG_FileLog_VitoConnect_2:CURRENT<br />
attr SVG_FileLog_VitoConnect_2 room Heizung<br />
<br />
setstate SVG_FileLog_VitoConnect_2 initialized<br />
</syntaxhighlight><br />
<br />
<b>SVG_FileLog_VitoConnect_1.gplot</b>:<br />
<syntaxhighlight lang="Perl"><br />
# Created by FHEM/98_SVG.pm, 2019-11-04 21:08:37<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 'WW Temps'<br />
set ytics <br />
set y2tics <br />
set grid<br />
set ylabel "°C"<br />
set y2label "boolean"<br />
set y2range [0:4]<br />
<br />
#FileLog_VitoConnect 4:vitoconnect.Brenner_aktiv\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Solltemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Isttemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Sensoren_Auslauf_Wert\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.Kesseltemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Zirkulationspumpe_Status\x3a::$fld[3]=~"on"?1.5:0<br />
<br />
plot "<IN>" using 1:2 axes x1y2 title 'Brenner' ls l0fill lw 2 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'WW soll' ls l1 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'WW ist' ls l2 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'WW Auslaufwert' ls l3 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Kesseltemp.' ls l4 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'Zirk.pumpe' ls l8fill lw 2 with lines,\<br />
</syntaxhighlight><br />
<br />
<br />
<br />
== Weblinks ==<br />
* {{Link2Forum|Topic=93664|LinkText="Thread zum Modul im Forum"}}<br />
<br />
[[Kategorie:Heizungssteuerung]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Vitoconnect&diff=35907Vitoconnect2021-07-18T10:05:02Z<p>Jostar: api key</p>
<hr />
<div>{{SEITENTITEL:vitoconnect}} <br />
{{Baustelle}}<br />
{{Infobox Modul<br />
|ModPurpose=Steuerung von Viessmann Heizungen<br />
|ModCategory=Heizungssteuerung/Raumklima<br />
|ModCmdRef=vitoconnect<br />
|ModType=d<br />
|ModForumArea=Heizungssteuerung/Raumklima<br />
|ModTechName=98_vitoconnect.pm<br />
|ModOwner=andreas13 ({{Link2FU|3360|Forum}}/[[Benutzer Diskussion:Andreas13|Wiki]])}}<br />
<br />
[https://www.viessmann.de/de/viessmann-apps/vitoconnect.html Vitoconnect] ist die Schnittstelle zwischen Heizkessel und der App ViCare zum Bedienen von Viessmann Heizungsanlagen. <br />
<br />
Mit dem FHEM Modul [[vitoconnect]] können die Daten, die über die Internetschnittstelle an den Herstellerserver gemeldet und von diesem über eine API zur Verfügung gestellt werden, in FHEM in Form von Readings angezeigt werden. Auch eine Steuerung der Heizung ist mit diesem Modul möglich.<br />
<br />
Wen stört, dass die Daten in der Herstellercloud liegen, sei das Modul [[Vitotronic 200 (Viessmann Heizungssteuerung)]] empfohlen.<br />
<br />
Die Idee zu dem Modul enstand aus dem Thread {{Link2Forum|Topic=86073|LinkText="Viessmann VitoConnect API"}}. Es basiert auf dem PHP Modul von [https://github.com/thetrueavatar/Viessmann-Api thetrueavatar].<br />
<br />
{{Hinweis|Das Modul befindet sich derzeit noch in der Entwicklung. <br />
<br />
Das Modul wurde nach besten Wissen und Gewissen programmiert. Da Änderungen an der Heizung nur über die Viessmann API erfolgen, sollte die Nutzung risikoarm sein. Allerdings kann ich keine Garantie übernehmen, dass es nicht doch zu irgendwelchen unerwünschten Nebeneffekten kommt. Nutzung auf eigene Gefahr!<br />
<br />
Diskussionen über Fehler, Verbesserungen usw. finden im Forum im Thread {{Link2Forum|Topic=93664|LinkText="Neues Modul: vitoconnect"}} statt.}}<br />
<br />
== Einrichtung ==<br />
=== Vorbereitung ===<br />
Zur Nutzung des Moduls muss vorhanden sein:<br />
* Eine aktuelle FHEM Installation <br />
* Internet-Schnittstelle Vitoconnect 100 (Typ OPTO1)<br />
* Ein Viessmann ViCare Account, wie er im Rahmen der Nutzung der ViCare App erstellt wird.<br />
* Seit 15. Juli 2021 auch einen persönlichen API Key (=Client-ID), diesen gibts hier: <nowiki>https://developer.viessmann.com</nowiki> <br />
* Das Modul benötigt mindestens folgende Perl Libraries: Path::Tiny, JSON und DateTime. Diese können mit sudo apt install libtypes-path-tiny-perl libjson-perl libdatetime-perl oder via cpan. Sollten Libraries fehlen erhält man folgende Fehlermeldung "cannot load module vitoconnect". Dann bitte ins Logfile schauen, welche Lib fehlt.<br />
<br />
=== Define des Devices ===<br />
Dann kann das Gerät angelegt werden: <code>define <name> vitoconnect <user> <password> <interval></code><br />
<br />
Z.B. : <code>define vitoconnect vitoconnect user@mail.xx geheim 60</code><br />
<br />
User und Passwort sind das gleiche wie in der ViCare App.<br />
<br />
Da die Parameter, die beim Definieren des Devices angelegt werden im Klartext in der Detailansicht lesbar sind, kann man beim Definieren einfach ein falsches Passwort eingeben und das richtige später mit einem "set"-Kommando setzen. Also zum Beispiel:<br />
<br />
<code>define vitoconnect vitoconnect user@mail.xx fakePassword 60</code><br><br />
<code>set vitoconnect password correctPassword 60</code><br />
<br><br />
<br><br />
Nachträgliches Ändern des Intervalls:<br><br />
Man kann einfach das DEF aufrufen und dort die Parameter korrigieren (z.B. von 60 Sek. auf 180 Sek.) - dies gilt natürlich ebenso für nachträgliches Ändern des Usernamens oder Passwortes.<br><br />
<br />
== Readings ==<br />
===Readings ===<br />
Die Readings werden so ausgegeben, wie sie von der API geliefert werden! Alle Reading für HK1 sind auch für HK2 und HK3 verfügbar sofern die Heizung solche Readings liefert.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR />Wertebereich !! Bedeutung <br />
|-<br />
|Aktive_Heizkreise ||0,1,2 ||Liste der aktiven Heizkreise. 0 entspricht HK1<br />
|-<br />
| || ||<br />
|-<br />
|Aussen_Status || connected/notConnected ||Ist ein Außensensor angeschlossen?<br />
|-<br />
| ''Aussen_StatusWired'' || connected/notConnected ||Ist ein Außensensor per Kabel angeschlossen? (wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
| ''Aussen_StatusWireless'' || connected/notConnected ||Ist ein kabelloser Außensensor angeschlossen? (wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|Aussentemperatur || 2.4 ||Außentemperatur in °C<br />
|-<br />
| || ||<br />
|-<br />
|Brenner_Betriebsstunden|| 934.336944444444 || Brenner Betriebsstunden<br />
|-<br />
|Brenner_Fehlercode || 0 || Brenner Fehlercode <br />
|-<br />
|Brenner_Modulation|| 11 || Brenner Modulation in %<br />
|-<br />
|Brenner_Starts|| 2717 || Brenner Starts<br />
|-<br />
|Brenner_Status || ok ||Brenner Status <br />
|-<br />
|Brenner_aktiv || 0,1|| Brenneraktiv <br />
|-<br />
| || ||<br />
|-<br />
|Controller_Seriennummer || 1234567890123456 || Controller Seriennummer <br />
|-<br />
|Device_Time_Offset || 61 || ???<br />
|-<br />
|Fehlereinträge_Historie ||ErrorListChanges||??? (noch nicht implementiert)<br />
|-<br />
|Fehlereinträge_aktive ||ErrorListChanges ||??? (noch nicht implementiert)<br />
|-<br />
| || ||<br />
|-<br />
|Gasverbrauch_Heizung/Jahr || 3293,0,0 ||Liste der jährlichen Gasverbräuche Heizung in kWH (aktuelles Jahr und die letzten beiden) '''(bis zum 09.12.2018 lieferte die API Werte, die noch durch 8 geteilt werden mussten, um auf kWh zu kommen!'''<br />
Außerdem liefert Viessmann für manche Heizungstypen (noch) '''keine getrennten Werte für Heizung und WW'''. D.h. in den Reading für WW und Heizung steht der gleiche Wert (vermutlich der Gesamtverbrauch)!<br />
|-<br />
|Gasverbrauch_Heizung/Monat || 1078,1384,590,241,0,0,0,0,0,0,0,0,0 ||Liste der monatlichen Gasverbräuche Heizung in kWH<br />
|-<br />
|Gasverbrauch_Heizung/Tag || 76,104,113,99,76,65,60,70 ||Liste der täglichen Gasverbräuche Heizung in kWH (aktueller und die letzten 7 Tage)<br />
|-<br />
|Gasverbrauch_Heizung/Woche ||555,409,416,472,289,196,254,209,24,46,<br />
183,192,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,<br />
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 <br />
|| Liste der wöchentlichen Gasverbräuche Heizung in kWH<br />
|-<br />
|Gasverbrauch_WW/Jahr || 235,705,0 || Liste der jährlichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
|Gasverbrauch_WW/Monat || 27,208,213,193,215,84,0,0,0,0,0,0,0 ||Liste der monatlichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
|Gasverbrauch_WW/Tag || 2,6,0,0,0,2,9,0 ||Liste der täglichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
|Gasverbrauch_WW/Woche || 17,0,37,43,51,50,41,53,52,47,41,52,44,49,41,45,52,47,45,49,51,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ||Liste der wöchentlichen Gasverbräuche Warmwasser in kWH<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Betriebsart ||standby, dwh, dhwAndHeating, forcedReduced, forcedNormal ||Aus, Nur Warmwasser aktiv , Heizung und Warmwasser aktiv, Dauernd Reduziert, Dauernd Tagbetrieb <br />
|-<br />
| || ||<br />
|-<br />
|HK1-External_Temperatur || 0 ||Temperatur Raumsensor?<br />
|-<br />
|HK1-External_aktiv || 0 ||Raumsensor aktiv?<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Frostschutz_Status || on, off ||Frostschutz Status <br />
|-<br />
| || ||<br />
|-<br />
|HK1-Heizkurve-Niveau || 0 || Heizkurve-Niveau <br />
|-<br />
|HK1-Heizkurve-Steigung || 1.4 || Heizkurve-Steigung <br />
|-<br />
| || ||<br />
|-<br />
|HK1-Programmstatus || standby, reduced, normal, forcedReduced, forcedNormal ||Programmstatus <br />
|-<br />
|HK1-Raum_Status || error ||Raumsensor?<br />
|-<br />
|HK1-Raum_Temperatur || 20 ||Temperatur Raumsensor? Nur vorhanden, wenn HK1-Raum_Status "ok"<br />
|-<br />
|HK1-Reduzierte_Temperatur_erzwungen || 0,1 ||xxx<br />
|-<br />
|HK1-Solltemperatur_aktiv || 0,1 || Solltemperatur aktiv<br />
|-<br />
|HK1-Solltemperatur_comfort || 22 || Comfort Solltemeratur<br />
|-<br />
|HK1-Solltemperatur_comfort_aktiv || 0,1 || Comfort aktiv<br />
|-<br />
|HK1-Solltemperatur_eco || 24 || Eco Solltemperatur<br />
|-<br />
|HK1-Solltemperatur_eco_aktiv || 0,1 || Eco aktiv<br />
|-<br />
|HK1-Solltemperatur_erzwungen || 0,1 || Solltemperatur erzwungen<br />
|-<br />
|HK1-Solltemperatur_normal || 24 || Solltemperatur normal<br />
|-<br />
|HK1-Solltemperatur_reduziert || 16 || Solltemperatur reduziert<br />
|-<br />
|HK1-Solltemperatur_reduziert_aktiv || 0,1 || Reduziert aktiv<br />
|-<br />
|HK1-Standby_aktiv || 0,1 || Standby aktiv<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Urlaub_Ende || 2019-02-16T00:00:00.000Z ||Urlaubsabsenkung Ende<br />
|-<br />
|HK1-Urlaub_Start || 2019-02-02T23:59:59.000Z ||Urlaubsabsenkung Start<br />
|-<br />
|HK1-Urlaub_aktiv || 0,1 || Urlaubsabsenkung aktiv<br />
|-<br />
| || ||<br />
|-<br />
|HK1-Vorlauftemperatur || 81 || Vorlauftemperatir<br />
|-<br />
|HK1-Vorlauftemperatur_aktiv || connected || Vorlauftemperatursensor verbunden<br />
|-<br />
| || ||<br />
|-<br />
|HK1-WW_aktiv || 0,1 ||Modus WW (dhw) aktiv<br />
|-<br />
|HK1-WW_und_Heizen_aktiv || 0,1 || Modus WW und Heizen (dhwAndHeating) aktiv<br />
|-<br />
|HK1-Zeitsteuerung_Heizung || <br />
wed start:05:00 mode:normal end:08:00 position:0, mode:normal end:23:00 position:1 start:16:00, sat position:0 end:23:00 mode:normal start:06:00,<br />
thu position:0 mode:normal end:08:00 start:05:00, start:16:00 end:23:00 mode:normal position:1, sun start:06:00 position:0 end:23:00 mode:normal,<br />
mon start:05:00 position:0 end:08:00 mode:normal, start:16:00 position:1 mode:normal end:23:00,<br />
fri start:05:00 position:0 end:08:00 mode:normal, position:1 mode:normal end:23:00 start:16:00,<br />
tue position:0 mode:normal end:08:00 start:05:00, mode:normal end:23:00 position:1 start:16:00, <br />
|| Zeitplan für Heizung<br />
|-<br />
|HK1-Zeitsteuerung_Heizung_aktiv || 0,1 || Zeitplan Heizung aktiv<br />
|-<br />
|''HK1-Zeitsteuerung_Zirkulation'' || 0,1 || Zeitplan für Zirkulationspumpe. Ist irgendwann nach WW gewandert?<br />
|-<br />
|''HK1-Zeitsteuerung_Zirkulation_aktiv'' || 0,1 || Zirkulationspumpe zeitgesteuert<br />
|-<br />
| HK1-Zirkulationspumpe || on,off || Zirkulationspumpe aktiv (neu seit 16.12.18?)<br />
|-<br />
|HK1-aktiv || 1 ||HK1 aktiv<br />
|-<br />
| || ||<br />
|-<br />
|Kessel_Common_Supply || error || ??? (neu seit 16.12.18?)<br />
|-<br />
|Kessel_Status || connected ||xxx<br />
|-<br />
|Kesseltemperatur || 53 ||xxx<br />
|-<br />
|Kesseltemperatur_exact|| 53 ||??? (neu seit 16.12.18?)<br />
|-<br />
|Mehrfamilienhaus_aktiv || 0,1 ||xxx<br />
|-<br />
| || ||<br />
|-<br />
|''Service_Betriebsstunden_seit_letzten'' || 0 ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|''Service_Intervall_Betriebsstunden'' || 0 ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|Service_Intervall_Monate || 0 || ???<br />
|-<br />
|Service_Letzter || 1970-01-01T00:00:00.000Z || ???<br />
|-<br />
|''Service_Letzter_brennerbasiert'' || 1970-01-01T00:00:00.000Z ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
|Service_Monate_aktiv_seit_letzten_Service || 0 || ???<br />
|-<br />
|Service_fällig || 0,1 || Service fällig?<br />
|-<br />
|''Service_fällig_brennerbasiert'' || ||(wird seit 16.12.18 nicht mehr geliefert?)<br />
|-<br />
| || ||<br />
|-<br />
|Stromverbrauch/Jahr|| 35573,66052,0 || Stromverbrauch im Jahr in Wh(?) (analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
|Stromverbrauch/Monat|| 11860,23713,22851,19264,17924,6013,0,0,0,0,0,0,0 || Stromverbrauch im Monat(analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
|Stromverbrauch/Tag|| 409,828,720,733,731,727,708,682 || Stromverbrauch im Tag (analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
|Stromverbrauch/Woche|| 4418,5058,5514,5802,5249,5109,5156,5702,5179,5547,4286,4710,5087,4236,<br />
4075,4633,4307,3675,3721,4148,4594,1419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 <br />
|| Stromverbrauch im Woche (analog Gasverbrauch) (neu seit 15.02.19?)<br />
|-<br />
| || ||<br />
|-<br />
|WW-Aufladung|| 0,1 || WW Vorrat wird erhitzt (neu seit 16.12.18?)<br />
|-<br />
|WW-Haupttemperatur|| 54 || ?? (neu seit 16.12.18?)<br />
|-<br />
|WW-Isttemperatur || 56 || WW Ist-Temperatur<br />
|-<br />
|WW-Sensoren_Auslauf_Status|| error || ??? (neu seit 16.12.18?)<br />
|-<br />
|WW-Solltemperatur || 53 || WW Solltemperatur<br />
|-<br />
|WW-Temperatur_aktiv || connected || WW aktiv<br />
|-<br />
|WW-Zeitplan ||<br />
fri position:0 mode:on end:22:30 start:06:30, mon start:06:30 mode:on end:22:30 position:0, <br />
sat start:06:30 position:0 mode:on end:22:30, wed end:22:30 mode:on position:0 start:06:30,<br />
thu start:06:30 position:0 mode:on end:22:30,<br />
tue position:0 mode:on end:22:30 start:06:30, sun mode:on end:22:30 position:0 start:06:30,<br />
|| WW Zeitplan<br />
|-<br />
|WW-Zirkulationspumpe_Zeitsteuerung_aktiv || 0,1 || Zeitsteuerung Zirkulationspumpe aktiv(neu seit 16.12.18?)<br />
|-<br />
|WW-Zirkulationspumpe_Status|| on || Status Zirkulationspumpe(neu seit 16.12.18?)<br />
|-<br />
|WW-Zirkulationspumpe_Zeitplan ||<br />
wed start:04:30 mode:on end:22:30 position:0, mon start:04:30 position:0 end:22:30 mode:on,<br />
sun start:04:30 position:0 mode:on end:22:30, sat start:04:30 position:0 end:22:30 mode:on, thu start:04:30 end:22:30 mode:on position:0,<br />
tue start:04:30 mode:on end:22:30 position:0, fri position:0 end:22:30 mode:on start:04:30,<br />
|| Zeitplan für die Zirkulationspumpe (neu seit 16.12.18?)<br />
|-<br />
|WW-Zirkulationspumpe_primaer|| off || (neu seit 16.12.18?)<br />
|-<br />
|WW-aktiv || 0,1 || WW aktiv<br />
|-<br />
|WW-onTimeCharge_aktiv || 0,1 || einmaliges WW Aufladen aktiv<br />
|-<br />
|WW-zeitgesteuert_aktiv || 0,1 || WW zeitgesteuert<br />
|-<br />
| || ||<br />
|-<br />
|state || ok, Login failure|| Status<br />
|-<br />
<br />
|}<br />
<br />
== Settings ==<br />
<br />
===Set Befehle ===<br />
'''Benutzung der Set-Befehle auf eigenes Risiko!'''<br />
<br />
Das Modul prüft nicht, ob ein Befehl oder die Parameter für die Heizung sinnvoll und möglich sind. Die API scheint dies mit einem Fehler quittieren.<br />
<br />
Befehle für HK1 sind auch für HK2 und HK3 verfügbar. <br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR />Wertebereich !! Beschreibung <br />
|-<br />
|update|| ||löst ein Update der Reading zwischen manuell aus<br />
|-<br />
|clearReadings|| || clear all readings immeadiatlely <br />
|-<br />
|password <passwd>||String|| store password in key store<br />
|-<br />
|logResponseOnce|| || dumps the json response of Viessmann server to entities.json, gw.json, actions.json in FHEM log directory<br />
|-<br />
| || || <br />
|-<br />
|HK1-Heizkurve-Niveau <shift>||-13 bis 40 || set shift of heating curve<br />
|-<br />
|HK1-Heizkurve-Steigung <slope>||0.2 bis 3.5 || set slope of heating curve <br />
|-<br />
|HK1-Betriebsart <mode>||standby,dhw,dhwAndHeating,forcedReduced or forcedNormal ||set HK1-Betriebsart<br />
|-<br />
|HK1-Solltemperatur_comfort_aktiv <activate,deactivate>|| ||activate/deactivate comfort temperature<br />
|-<br />
|HK1-Solltemperatur_comfort <targetTemperature>|| || set comfort target temperatur <br />
|-<br />
|HK1-Solltemperatur_eco_aktiv activate,deactivate || || activate/deactivate eco temperature<br />
|-<br />
|HK1-Urlaub_Start <start>|| 2019-02-02 (früher war das Format mal 2019-02-02T23:59:59.000Z)|| set holiday start time <br />
|-<br />
|HK1-Urlaub_Ende <end>||2019-02-16 (früher war das Format mal 2019-02-16T00:00:00.000Z)|| set holiday end time (geht nur, wenn schon eine Startzeit gesetzt ist)<br />
|-<br />
|HK1-Urlaub_unschedule|| || remove holiday start and end time <br />
|-<br />
|HK1-Solltemperatur_normal <targetTemperature>|| 3 and 37|| sets the normale target temperature <br />
|-<br />
|HK1-Solltemperatur_reduziert <targetTemperature>|| 3 and 37|| sets the reduced target temperature <br />
|-<br />
| || || <br />
|-<br />
|WW-einmaliges_Aufladen activate,deactivate|| ||activate or deactivate one time charge for hot water <br />
|-<br />
|WW-Zirkulationspumpe_Zeitplan <schedule>|| || not implemented <br />
|-<br />
|WW-Zeitplan <schedule>|| || not implemented <br />
|-<br />
|WW-Haupttemperatur <targetTemperature>||10 and 60 || sets hot water main temperature to targetTemperature <br />
|-<br />
|WW-Solltemperatur <targetTemperature>|| 10 and 60|| sets hot water temperature to targetTemperature <br />
|}<br />
<br />
== Get ==<br />
<br />
Derzeit gibt es keine "get"-Kommandos.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Beschreibung<br />
|-<br />
| || <br />
|}<br />
<br />
== Attribute ==<br />
<br />
===Attribute ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Name !! Datentyp/<BR />Wertebereich !! Default-Wert !! Beschreibung<br />
|-<br />
|disable|| 0,1 || ||disable updates<br />
|-<br />
|verbose|| 0,1,2,3,4,5 || ||Loglevel<br />
|-<br />
|vitoconnect_raw_readings|| 0,1 || ||lege Reading mit dem JSON Namen wie 'heating.circuits.0.heating.curve.slope' statt der Deutschen Bezeichnungen an<br />
|-<br />
|vitoconnect_actions_active|| 0,1 || || erzeuge Readings for Befehle wie 'heating.circuits.0.heating.curve.setCurve'<br />
|}<br />
<br />
== Hilfsmittel ==<br />
=== Attribut zum Speichern der wichtigsten Werte mittels DbLog ===<br />
<syntaxhighlight lang="Perl">attr vitoconnect DbLogInclude Gasverbrauch_gestern,Gasverbrauch_Heizung/Jahr,Gasverbrauch_aktuelle_Woche,Gasverbrauch_aktueller_Monat,Gasverbrauch_heute,WW-aktiv,<br />
HK1-Frostschutz_Status,HK1-WW_und_Heizen_aktiv,HK1-WW_aktiv,HK1-Betriebsart,HK1-Programmstatus,Aussentemperatur,HK1-Solltemperatur_normal,Brenner_aktiv,<br />
HK1-Vorlauftemperatur,Kesseltemperatur,WW-Isttemperatur,WW-Solltemperatur</syntaxhighlight><br />
<br />
=== Userreadings um Reading für Einzelwerte von Gasverbräuche zu erzeugen ===<br />
<syntaxhighlight lang="Perl"><br />
attr vitoconnect userReadings<br />
Gasverbrauch_heute:Gasverbrauch_Heizung/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Gasverbrauch_Heizung/Tag",0))[0] },<br />
Gasverbrauch_gestern:Gasverbrauch_Heizung/Tag.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Tag",0))[1] },<br />
Gasverbrauch_aktuelle_Woche:Gasverbrauch_Heizung/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Woche",0))[0] },<br />
Gasverbrauch_letzte_Woche:Gasverbrauch_Heizung/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Woche",0))[1] },<br />
Gasverbrauch_aktueller_Monat:Gasverbrauch_Heizung/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Monat",0))[0] },<br />
Gasverbrauch_letzter_Monat:Gasverbrauch_Heizung/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Monat",0))[1] },<br />
Gasverbrauch_aktuelles_Jahr:Gasverbrauch_Heizung/Jahr.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Jahr",0))[0] },<br />
Gasverbrauch_letztes_Jahr:Gasverbrauch_Heizung/Jahr.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_Heizung/Jahr",0))[1] },<br />
<br />
Gasverbrauch_WW_heute:Gasverbrauch_WW/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Gasverbrauch_WW/Tag",0))[0] },<br />
Gasverbrauch_WW_gestern:Gasverbrauch_WW/Tag.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Tag",0))[1] },<br />
Gasverbrauch_WW_aktuelle_Woche:Gasverbrauch_WW/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Woche",0))[0] },<br />
Gasverbrauch_WW_letzte_Woche:Gasverbrauch_WW/Woche.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Woche",0))[1] },<br />
Gasverbrauch_WW_aktueller_Monat:Gasverbrauch_WW/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Monat",0))[0] },<br />
Gasverbrauch_WW_letzter_Monat:Gasverbrauch_WW/Monat.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Monat",0))[1] },<br />
Gasverbrauch_WW_aktuelles_Jahr:Gasverbrauch_WW/Jahr.* { (split /,/, ReadingsVal("vitoconnect","Gasverbrauch_WW/Jahr",0))[0] },<br />
Gasverbrauch_WW_letztes_Jahr:Gasverbrauch_WW/Jahr.* { (split /,/, ReadingsVal("vitoconnect", "Gasverbrauch_WW/Jahr",0))[1] },<br />
<br />
Stromverbrauch_heute:Stromverbrauch/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Tag",0))[0] },<br />
Stromverbrauch_gestern:Stromverbrauch/Tag.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Tag",0))[1] },<br />
Stromverbrauch_aktuelle_Woche:Stromverbrauch/Woche.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Woche",0))[0] },<br />
Stromverbrauch_letzte_Woche:Stromverbrauch/Woche.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Woche",0))[1] },<br />
Stromverbrauch_aktueller_Monat:Stromverbrauch/Monat.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Monat",0))[0] },<br />
Stromverbrauch_letzter_Monat:Stromverbrauch/Monat.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Monat",0))[1] },<br />
Stromverbrauch_aktuelles_Jahr:Stromverbrauch/Jahr.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Jahr",0))[0] },<br />
Stromverbrauch_letztes_Jahr:Stromverbrauch/Jahr.* { (split /,/, ReadingsVal("vitoconnect", "Stromverbrauch/Jahr",0))[1] }<br />
<br />
</syntaxhighlight><br />
<br />
=== ReadingsGroup für eine kompakte Darstellung ===<br />
<br />
<syntaxhighlight lang="perl" style="width:90%;"><br />
defmod vitoconnect_rg readingsGroup<br />
vitoconnect:Aussentemperatur<br />
<Brenner><br />
vitoconnect:Brenner_Betriebsstunden<br />
vitoconnect:Brenner_Fehlercode<br />
vitoconnect:Brenner_Modulation<br />
vitoconnect:Brenner_Starts<br />
vitoconnect:Brenner_Status<br />
vitoconnect:Brenner_aktiv<br />
<HK1><br />
vitoconnect:HK1-aktiv<br />
vitoconnect:HK1-Betriebsart<br />
<br />
vitoconnect:HK1-Frostschutz_Status<br />
<br />
vitoconnect:HK1-Heizkurve-Niveau<br />
vitoconnect:HK1-Heizkurve-Steigung<br />
<br />
vitoconnect:HK1-Programmstatus<br />
vitoconnect:HK1-Raum_Status<br />
vitoconnect:HK1-Reduzierte_Temperatur_erzwungen<br />
vitoconnect:HK1-Solltemperatur_aktiv<br />
vitoconnect:HK1-Solltemperatur_erzwungen<br />
vitoconnect:HK1-Solltemperatur_normal<br />
vitoconnect:HK1-Solltemperatur_reduziert<br />
vitoconnect:HK1-Solltemperatur_reduziert_aktiv<br />
vitoconnect:HK1-Standby_aktiv<br />
<br />
vitoconnect:HK1-Urlaub_Ende<br />
vitoconnect:HK1-Urlaub_Start<br />
vitoconnect:HK1-Urlaub_aktiv<br />
<br />
vitoconnect:HK1-Vorlauftemperatur<br />
<br />
vitoconnect:HK1-WW_aktiv<br />
vitoconnect:HK1-WW_und_Heizen_aktiv<br />
<br />
vitoconnect:HK1-Zeitsteuerung_Heizung_aktiv<br />
vitoconnect:HK1-Zeitsteuerung_Zirkulation_aktiv<br />
<br />
vitoconnect:HK1-Zirkulationspumpe<br />
<Kessel><br />
vitoconnect:Kesseltemperatur<br />
vitoconnect:Kesseltemperatur_exact<br />
<WW><br />
vitoconnect:WW-Aufladung<br />
vitoconnect:WW-Haupttemperatur<br />
vitoconnect:WW-Isttemperatur<br />
vitoconnect:WW-Solltemperatur<br />
vitoconnect:WW-Zirklationspumpe_Zeitsteuerung_aktiv<br />
vitoconnect:WW-Zirkulationspumpe_Status<br />
vitoconnect:WW-Zirkulationspumpe_primaer<br />
vitoconnect:WW-aktiv<br />
vitoconnect:WW-onTimeCharge_aktiv<br />
vitoconnect:WW-zeitgesteuert_aktiv<br />
</syntaxhighlight><br />
<br />
<syntaxhighlight lang="perl" style="width:90%;"><br />
attr vitoconnect_rg alias Heizung<br />
attr vitoconnect_rg cellStyle { <br />
"c:0"=>'style="text-align:left"', <br />
"c:1"=>'style="text-align:left"', <br />
"r:2"=>'style="text-align:right;;;;font-weight:bold"'<br />
}<br />
attr vitoconnect_rg mapping {<br />
"Aussentemperatur" => "Aussentemperatur",<br />
<br />
"Brenner_Betriebsstunden" => "Betriebsstunden",<br />
"Brenner_Fehlercode" => "Fehlercode",<br />
"Brenner_Modulation" => "Modulation",<br />
"Brenner_Starts" => "Starts",<br />
"Brenner_Status" => "Status",<br />
"Brenner_aktiv" => "aktiv",<br />
<br />
"HK1-aktiv" => "aktiv",<br />
"HK1-Betriebsart" => "Betriebsart",<br />
"HK1-Frostschutz_Status" => "Frostschutz_Status",<br />
"HK1-Heizkurve-Niveau" => "Heizkurve-Niveau",<br />
"HK1-Heizkurve-Steigung" => "Heizkurve-Steigung",<br />
"HK1-Programmstatus" => "Programmstatus",<br />
"HK1-Raum_Status" => "Raum Status",<br />
"HK1-Reduzierte_Temperatur_erzwungen" => "Reduzierte Temperatur erzwungen",<br />
"HK1-Solltemperatur_aktiv" => "Solltemperatur aktiv",<br />
"HK1-Solltemperatur_erzwungen" => "Solltemperatur erzwungen",<br />
"HK1-Solltemperatur_normal" => "Solltemperatur normal",<br />
"HK1-Solltemperatur_reduziert" => "Solltemperatur reduziert",<br />
"HK1-Solltemperatur_reduziert_aktiv" => "Solltemperatur reduziert_aktiv",<br />
"HK1-Standby_aktiv" => "Standby aktiv",<br />
"HK1-Urlaub_Ende" => "Urlaub Ende",<br />
"HK1-Urlaub_Start" => "Urlaub Start",<br />
"HK1-Urlaub_aktiv" => "Urlaub aktiv",<br />
"HK1-Vorlauftemperatur" => "Vorlauftemperatur",<br />
"HK1-WW_aktiv" => "WW aktiv",<br />
"HK1-WW_und_Heizen_aktiv" => "WW und Heizen aktiv",<br />
"HK1-Zeitsteuerung_Heizung_aktiv" => "Zeitsteuerung Heizung aktiv",<br />
"HK1-Zirkulationspumpe" => "Zirkulationspumpe",<br />
<br />
"Kesseltemperatur" => "Kesseltemperatur",<br />
"Kesseltemperatur_exact" => "Kesseltemperatur exact",<br />
<br />
"WW-Aufladung" => "Aufladung",<br />
"WW-Haupttemperatur" => "Haupttemperatur",<br />
"WW-Isttemperatur" => "Isttemperatur",<br />
"WW-Solltemperatur" => "Solltemperatur",<br />
"WW-Zirklationspumpe_Zeitsteuerung_aktiv" => "Zirkulationspumpe Zeitsteuerung aktiv",<br />
"WW-Zirkulationspumpe_Status" => "Zirkulationspumpe Status",<br />
"WW-Zirkulationspumpe_primaer" => "Zirkulationspumpe primaer",<br />
"WW-aktiv" => "aktiv",<br />
"WW-onTimeCharge_aktiv" => "onTimeCharge aktiv",<br />
"WW-zeitgesteuert_aktiv" => "zeitgesteuert aktiv"<br />
}<br />
<br />
attr vitoconnect_rg nostate 1<br />
attr vitoconnect_rg notime 1<br />
attr vitoconnect_rg room Heizung<br />
attr vitoconnect_rg sortby 1<br />
attr vitoconnect_rg valueFormat { "Brenner_Betriebsstunden" => "%2d" }<br />
attr vitoconnect_rg valueIcon {'Brenner_aktiv.0' => '1px-spacer', <br />
'Brenner_aktiv.1' => 'icoHEIZUNG',<br />
'HK1-Solltemperatur_reduziert_aktiv.0' => '10px-kreis-rot',<br />
'HK1-Solltemperatur_reduziert_aktiv.1' => '10px-kreis-gruen'<br />
}<br />
<br />
attr vitoconnect_rg valueSuffix {<br />
Aussentemperatur => "°C", <br />
<br />
Brenner_Betriebsstunden => "h",<br />
Brenner_Modulation => "%",<br />
<br />
'HK1-Solltemperatur_normal' => "°C",<br />
'HK1-Solltemperatur_reduziert' => "°C",<br />
'HK1-Vorlauftemperatur' => " °C",<br />
<br />
Kesseltemperatur => "°C",<br />
Kesseltemperatur_exact => "°C",<br />
<br />
'WW-Solltemperatur' => " °C",<br />
'WW-Isttemperatur' => " °C",<br />
<br />
'WW-Solltemperatur' => "°C"<br />
}<br />
</syntaxhighlight><br />
<br><br />
<br />
[[Datei:ReadingsGroup für Vitoconnect Modul 3.jpg|200px]]<br />
<br />
=== ReadingsGroup für eine kompakte Darstellung der Verbräuche ===<br />
<br />
<syntaxhighlight lang="Perl" style="width:100%;"><br />
defmod Heizung_Verbrauch readingsGroup <>,<Periode>,<Heizung>,<Wasser>,<Strom><br />
vitoconnect:,<heute>,Gasverbrauch_heute,Gasverbrauch_WW_heute,Stromverbrauch_heute<br />
vitoconnect:,<gestern>,Gasverbrauch_gestern,Gasverbrauch_WW_gestern,Stromverbrauch_gestern<br />
vitoconnect:,<Woche>,Gasverbrauch_aktuelle_Woche,Gasverbrauch_WW_aktuelle_Woche,Stromverbrauch_aktuelle_Woche<br />
vitoconnect:,<letzte>,Gasverbrauch_letzte_Woche,Gasverbrauch_WW_letzte_Woche,Stromverbrauch_letzte_Woche<br />
vitoconnect:,<Monat>,Gasverbrauch_aktueller_Monat,Gasverbrauch_WW_aktueller_Monat,Stromverbrauch_aktueller_Monat<br />
vitoconnect:,<letzter>,Gasverbrauch_letzter_Monat,Gasverbrauch_WW_letzter_Monat,Stromverbrauch_letzter_Monat<br />
vitoconnect:,<Jahr>,Gasverbrauch_aktuelles_Jahr,Gasverbrauch_WW_aktuelles_Jahr,Stromverbrauch_aktuelles_Jahr<br />
vitoconnect:,<letztes>,Gasverbrauch_letztes_Jahr,Gasverbrauch_WW_letztes_Jahr,Stromverbrauch_letztes_Jahr<br />
<br />
attr Heizung_Verbrauch cellStyle { <br />
"r:1"=>'style="text-align:left;;;;font-weight:bold"',<br />
"c:1"=>'style="text-align:right;;;;font-weight:bold"'<br />
}<br />
attr Heizung_Verbrauch mapping &nbsp;;<br />
attr Heizung_Verbrauch nostate 1<br />
attr Heizung_Verbrauch room Heizung<br />
attr Heizung_Verbrauch style style="text-align:right;;;;font-size:18px"<br />
attr Heizung_Verbrauch valueFormat {<br />
Gasverbrauch_heute => "%.0f kWh",<br />
Gasverbrauch_WW_heute => "%.0f kWh",<br />
Stromverbrauch_heute => "%.0f kWh",<br />
Gasverbrauch_gestern => "%.0f kWh",<br />
Gasverbrauch_WW_gestern => "%.0f kWh",<br />
Stromverbrauch_gestern => "%.0f kWh",<br />
Gasverbrauch_aktuelle_Woche => "%.0f kWh",<br />
Gasverbrauch_WW_aktuelle_Woche => "%.0f kWh",<br />
Stromverbrauch_aktuelle_Woche => "%.0f kWh",<br />
Gasverbrauch_letzte_Woche => "%.0f kWh",<br />
Gasverbrauch_WW_letzte_Woche => "%.0f kWh",<br />
Stromverbrauch_letzte_Woche => "%.0f kWh",<br />
Gasverbrauch_aktueller_Monat => "%.0f kWh",<br />
Gasverbrauch_WW_aktueller_Monat => "%.0f kWh",<br />
Stromverbrauch_aktueller_Monat => "%.0f kWh",<br />
Gasverbrauch_letzter_Monat => "%.0f kWh",<br />
Gasverbrauch_WW_letzter_Monat => "%.0f kWh",<br />
Stromverbrauch_letzter_Monat => "%.0f kWh",<br />
Gasverbrauch_aktuelles_Jahr => "%.0f kWh",<br />
Gasverbrauch_WW_aktuelles_Jahr => "%.0f kWh",<br />
Stromverbrauch_aktuelles_Jahr => "%.0f kWh",<br />
Gasverbrauch_letztes_Jahr => "%.0f kWh",<br />
Gasverbrauch_WW_letztes_Jahr => "%.0f kWh",<br />
Stromverbrauch_letztes_Jahr => "%.0f kWh"<br />
}<br />
</syntaxhighlight><br />
[[Datei:Readuingsgroup Verbräuche aus Vitoconnect 2.jpg|200px]]<br />
<br />
<br />
=== SVG Graphen ===<br />
==== Gas- und Stromverbrauch ====<br />
<br />
[[Datei:SVG Gasverbrauch für vitoconnect Modul.jpg|800px]]<br />
<br />
[[Datei:Verbräuche aus Vitoconnect.jpg|800px]]<br />
<br />
<br><br />
==== weitere Graphen ====<br />
[[Datei:Beispiel für Grafiken aus vitoconnect Daten.jpg|800px]]<br />
<br><br />
<br><br />
<br />
=== Speichern der wichtigsten Werte mittels FileLog und Erzeugung der entspr. SVG Plots ===<br />
==== FileLog erstellen ====<br />
Zunächst wird das FileLog mit ausgewählten Parametern erstellt. Dies ist die Voraussetzung für die SVG Plots.<br />
<syntaxhighlight lang="Perl"><br />
define FileLog_VitoConnect FileLog ./log/VitoConnect-%Y-%m.log vitoconnect:Aussentemperatur|vitoconnect:Brenner_Modulation|vitoconnect:Brenner_aktiv|vitoconnect:Gasverbrauch_Heizung/Jahr|vitoconnect:Gasverbrauch_aktuelle_Woche|vitoconnect:Gasverbrauch_aktueller_Monat|vitoconnect:Gasverbrauch_gestern|vitoconnect:Gasverbrauch_heute|vitoconnect:HK1-Betriebsart|vitoconnect:HK1-Frostschutz_Status|vitoconnect:HK1-Programmstatus|vitoconnect:HK1-Solltemperatur_aktiv|vitoconnect:HK1-Solltemperatur_normal|vitoconnect:HK1-Solltemperatur_reduziert|vitoconnect:HK1-Solltemperatur_reduziert_aktiv|vitoconnect:HK1-Vorlauftemperatur|vitoconnect:HK1-WW_aktiv|vitoconnect:HK1-WW_und_Heizen_aktiv|vitoconnect:HK1-Zirkulationspumpe|vitoconnect:Kessel_Common_Supply_Temperatur|vitoconnect:Kesseltemperatur_exact|vitoconnect:WW-Isttemperatur|vitoconnect:WW-Sensoren_Auslauf_Wert|vitoconnect:WW-Solltemperatur|vitoconnect:WW-Zirkulationspumpe_Status|vitoconnect:WW-zeitgesteuert_aktiv<br />
attr FileLog_VitoConnect room Log<br />
</syntaxhighlight><br />
<br />
==== SVG Graphen aus FileLog erstellen ====<br />
Nachdem das FileLog erstellt wurde, kann aus dem Log nun der Plot von ausgewählten Werten erstellt werden.<br><br />
<br />
===== SVG Plot für Heizkreis1 =====<br />
Im folgenden Beispiel werden hier verschiedene Graphen für Heizkreis1 (HK1) genommen.<br />
Einige der Logwerte speichern "on"- oder "off"-Werte, diese müssten beispielsweise mit der Formel <syntaxhighlight lang="Perl">$fld[3]=~"on"?1.5:0</syntaxhighlight> erst in Werte (on=1.5, off=0) gewandelt werden.<br />
<br><br />
<br><br />
SVG Plot mit Plot Editor:<br><br />
[[Datei:SVG FileLog VitoConnect 1 HK1 Temps.png|800px]]<br />
<br><br />
<br><br />
… mit dem entsprechenden <b>Code</b>:<br><br />
<syntaxhighlight lang="Perl"><br />
defmod SVG_FileLog_VitoConnect_1 SVG FileLog_VitoConnect:SVG_FileLog_VitoConnect_1:CURRENT<br />
attr SVG_FileLog_VitoConnect_1 room Heizung<br />
<br />
setstate SVG_FileLog_VitoConnect_1 initialized<br />
</syntaxhighlight><br />
<br />
<b>SVG_FileLog_VitoConnect_1.gplot</b>:<br />
<syntaxhighlight lang="Perl"><br />
# Created by FHEM/98_SVG.pm, 2019-11-04 20:35:38<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 'HK1 Temps'<br />
set ytics <br />
set y2tics <br />
set grid<br />
set ylabel "°C"<br />
set y2label "boolean"<br />
set y2range [0:4]<br />
<br />
#FileLog_VitoConnect 4:vitoconnect.Aussentemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_normal\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_reduziert\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_aktiv\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Solltemperatur_reduziert_aktiv\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Vorlauftemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.Kesseltemperatur_exact\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.HK1-Zirkulationspumpe\x3a::$fld[3]=~"on"?1.5:0<br />
<br />
plot "<IN>" using 1:2 axes x1y1 title 'Außentemperatur' ls l7 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Soll normal' ls l0 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Soll reduziert' ls l1 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'normal-prg' ls l0fill lw 2 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'reduziert-prg' ls l1fill lw 2 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Vorlauf' ls l2 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Kesseltemp.' ls l5 lw 1 with lines<br />
"<IN>" using 1:2 axes x1y2 title 'Zirk.pumpe' ls l8fill lw 2 with lines,\<br />
</syntaxhighlight><br />
<br />
===== SVG Plot für Warmwasser =====<br />
Im folgenden Beispiel werden hier verschiedene Graphen für Warmwasser (WW) genommen.<br />
Einige der Logwerte speichern "on"- oder "off"-Werte, diese müssten beispielsweise mit der Formel <syntaxhighlight lang="Perl">$fld[3]=~"on"?1.5:0</syntaxhighlight> erst in Werte (on=1.5, off=0) gewandelt werden.<br />
<br><br />
<br><br />
SVG Plot mit Plot Editor:<br><br />
[[Datei:SVG FileLog VitoConnect 2 WW Temps.png|800px]]<br />
<br><br />
<br><br />
… mit dem entsprechenden <b>Code</b>:<br><br />
<syntaxhighlight lang="Perl"><br />
defmod SVG_FileLog_VitoConnect_2 SVG FileLog_VitoConnect:SVG_FileLog_VitoConnect_2:CURRENT<br />
attr SVG_FileLog_VitoConnect_2 room Heizung<br />
<br />
setstate SVG_FileLog_VitoConnect_2 initialized<br />
</syntaxhighlight><br />
<br />
<b>SVG_FileLog_VitoConnect_1.gplot</b>:<br />
<syntaxhighlight lang="Perl"><br />
# Created by FHEM/98_SVG.pm, 2019-11-04 21:08:37<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 'WW Temps'<br />
set ytics <br />
set y2tics <br />
set grid<br />
set ylabel "°C"<br />
set y2label "boolean"<br />
set y2range [0:4]<br />
<br />
#FileLog_VitoConnect 4:vitoconnect.Brenner_aktiv\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Solltemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Isttemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Sensoren_Auslauf_Wert\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.Kesseltemperatur\x3a::<br />
#FileLog_VitoConnect 4:vitoconnect.WW-Zirkulationspumpe_Status\x3a::$fld[3]=~"on"?1.5:0<br />
<br />
plot "<IN>" using 1:2 axes x1y2 title 'Brenner' ls l0fill lw 2 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'WW soll' ls l1 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'WW ist' ls l2 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'WW Auslaufwert' ls l3 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Kesseltemp.' ls l4 lw 1 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'Zirk.pumpe' ls l8fill lw 2 with lines,\<br />
</syntaxhighlight><br />
<br />
<br />
<br />
== Weblinks ==<br />
* {{Link2Forum|Topic=93664|LinkText="Thread zum Modul im Forum"}}<br />
<br />
[[Kategorie:Heizungssteuerung]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Log2Syslog&diff=35158Log2Syslog2021-03-06T22:57:52Z<p>Jostar: Die Seite wurde neu angelegt: „{{Infobox Modul |ModPurpose=Senden und Empfangen von Syslog-Meldungen |ModType= |ModForumArea=Automatisierung |ModFTopic= |ModTechName=93_Log2Syslog.pm |ModOwn…“</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Senden und Empfangen von Syslog-Meldungen<br />
|ModType=<br />
|ModForumArea=Automatisierung<br />
|ModFTopic=<br />
|ModTechName=93_Log2Syslog.pm<br />
|ModOwner= {{Link2FU|16933|DS_Starter}} }}<br />
<br />
{{Baustelle}}<br />
<br />
==Einführung==<br />
{{Randnotiz|RNTyp=w|RNText=Das Modul kann ab 01.03.2021 als v5.12.4 via Update bezogen werden.}}<br />
Das Modul sendet FHEM Systemlog-Einträge und/oder Events an einen externen Syslog-Server weiter oder agiert als Syslog-Server um Syslog-Meldungen anderer Geräte zu empfangen.<br />
Die Implementierung des Syslog-Protokolls erfolgte entsprechend den Vorgaben von RFC5424 (IETF)<ref>https://tools.ietf.org/html/rfc5424</ref>, RFC3164 (BSD)<ref>https://tools.ietf.org/html/rfc3164</ref> sowie dem TLS Transport Protokoll nach RFC5425<ref>https://tools.ietf.org/pdf/rfc5425.pdf</ref>. <br />
<br />
<br />
==Voraussetzungen==<br />
<br />
Es werden die Perl Module "IO::Socket::INET" und "IO::Socket::SSL" (wenn SSL benutzt) benötigt und müssen installiert sein.<br />
Das Modul kann über CPAN oder, auf Debian Linux Systemen, besser mit<br />
<br />
:<code>sudo apt-get install libio-socket-multicast-perl</code><br />
:<code>sudo apt-get install libio-socket-ssl-perl</code><br />
<br />
installiert werden. <br />
<br />
== Definition und Verwendung ==<br />
Je nach Verwendungszweck kann ein Syslog-Server (MODEL Collector) oder ein Syslog-Client (MODEL Sender) definiert werden.<br />
Der Collector empfängt Meldungen im Syslog-Format anderer Geräte und generiert daraus Events/Readings zur Weiterverarbeitung in FHEM. Das Sender-Device leitet FHEM Systemlog Einträge und/oder Events an einen externen Syslog-Server weiter. <br />
<br />
Siehe commandref...<br />
<br />
=== Attribut useEOF ===<br />
<br />
Model Sender (Protokoll TCP):<br />
Nach jedem Sendevorgang wird eine TCP-Verbindung mit EOF beendet.<br />
<br />
Model Collector:<br />
Wenn gesetzt wird mit dem Parsing gewartet, bis der Sender ein EOF Signal gesendet hat. CRLF wird nicht als Datentrenner berücksichtigt. Anwendungsbeispiel (Webcam Technaxx TX-66 meldet einen Bewegungsalarm):<br />
<pre>2021.03.06 23:00:17 5: Log2Syslog SyslogServer - Buffer 127 chars ready to parse:<br />
<166> Mar 06 23:00:17 192.168.178.136 "EventStop"<br />
{<br />
"Code" : "VideoMotion",<br />
"Index" : 1,<br />
"RegionName" : [ "Tuer" ]<br />
}</pre><br />
<br />
Wenn nicht gesetzt, wird CRLF als Trennung von Datensätzen gewertet. ParseFn wird pro Zeile aufgerufen:<br />
<pre>2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: <182> Feb 22 09:54:53 192.168.178.138 "EventStart"<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: {<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: "Code" : "VideoMotion",<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: "Index" : 1,<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: "RegionName" : [ "Tor" ]<br />
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: }</pre><br />
<br />
Hinweis:<br />
Wenn der Sender kein EOF verwendet, wird nach Überschreiten eines Puffer-Schwellenwertes das Parsing der Daten erzwungen und die Warnung "Buffer overrun" im FHEM Log ausgegeben. <br />
<br />
== Anwendungsbeispiele ==<br />
* Erzeugen von zentralen Logberichten z.B. auf einer Synology Station<br />
* Einsammeln von Statusmeldungen und Bewegungsalarmen von Überwachungskameras, die Syslog-Meldungen versenden<br />
<br />
== Links ==<br />
<references/><br />
<br />
[[Kategorie:Automatisierung]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=OW2S0SMSGUARD&diff=35157OW2S0SMSGUARD2021-03-06T22:22:12Z<p>Jostar: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=1-Wire Busmaster mit 2x S0-Interface und USB-Anschluss<br />
|ModType=d<br />
|ModForumArea=1Wire<br />
|ModFTopic=28447<br />
|ModTechName=00_OW2S0SMSGUARD<br />
|ModOwner= {{Link2FU|4065|Wzut}} }}<br />
<br />
==Einführung==<br />
{{Randnotiz|RNTyp=w|RNText=Das Modul kann ab 4.2.2021 via Update bezogen werden.}}<br />
Das Modul [[OW2S0SMSGUARD]] ermöglicht den direkten Betrieb des ''1Wire-USB-Masters'' in FHEM.<ref>https://www.sms-guard.org/downloads/1wire-USB-Master.pdf Datenblatt</ref><br />
So können leicht zwei Zählerstände erzeugt werden, zum Beispiel für Gas- bzw. Wasserzähler. An die Schraubkontakte lassen sich außerdem 1-Wire Geräte anschließen (maximal 64 Stück), allerdings werden nur ausgewählte Geräte unterstützt (Stand Firmware u1-02f vom 09.04.2020): "Keinesfalls ist unser 1wire-USB-Master mit einem Treiber einzulesen, der ein Busmaster-IC wie DS2482 erwartet".<br />
<br />
Positiv berichtet wurde der Betrieb von bis jetzt 32 Sensoren (DS18b20) und einer Gesamtbuslänge (Cat5) von 200 Metern ohne einen Ausfall.<br />
:''SMS-GUARD sind kompakte Schaltmodule in diversen Funktionsvarianten, z.B. mit Funknetzanbindung, der Firma "easy automation components GmbH"''<ref>https://www.sms-guard.org/dwasist.htm easy automation components GmbH Internetseiten des Anbieters</ref><br />
<br />
Der Vorteil der SMSGUARD-Lösung: nun ja, einfach an USB anschließen, keine extra Spannungsversorgung. Bezug über einen Shop in Potsdam.<ref>https://www.sms-guard.org/shop.php WebShop</ref><br />
<br />
Die Firmware wurde von 2014 bis 2020 erweitert.<br />
<br />
== Modulversion Jahr 2004 ==<br />
Es werden automatisch Slave-Module (Typ "OW2S0SLAVE") für jedes Gerät am Bus angelegt. <br />
Das Attribut "disable" wird nicht unterstützt.<br />
<br />
== Modulversion Jahr 2005 ==<br />
[[Datei:Smsguard2020.PNG|mini]]<br />
Das Modul bietet auch ein Reset der Zählerstände der beiden S0-Zähler.<br />
DS2401 werden nur in der id als Internal angezeigt. Mittels userreadings bekommt man das aber gelöst:<br />
<br />
<code>userReadings dev1 { InternalVal($NAME,"OW-Dev1","") }</code><br />
<br />
== Modulversion Jahr 2021 ==<br />
<br />
Es müssen keine Slave Device mehr erzeugt werden, alle OW Teilnehmer sind Readings direkt im Device.<br />
Da die IDs als nackte Readings etwas unschön sind, hat das Modul ein neues Attribut map_OWIDs bekommen.<br />
Damit können die abstrackten IDs direkt in sprechende Namen überführt werden , Bsp:<br />
<code>attr <name> map_OWIDs 10D64CBF02080077=Keller,018468411C0000BA=TestDS</code><br />
<br />
Das Attribut "useSubDevices" erzeugt für jeden Busteilnehmer ein eigenes Gerät in FHEM.<br />
<br />
DS2401 hat im Reading "presence" die Werte "absent" oder "present", im Reading "last_present" den Zeitstempel des letzten Kontakts zum Bus.<br />
DS18xx haben im Reading ihren aktuellen Temperaturwert.<br />
<br />
== Sensoren ==<br />
Laut Herstellerdokumentation: "DS18B20, DS18S20, sowie intelligente 1wire-Sensorbus-Module, wie SB-S0-Module (S0-Zähler), SB-SS-S0-Module (Stromsensor als Klappwandler), SB-D0-Module (Mehrrichtungs-Stromzähler) etc."<br />
<br />
Funktionieren:<br />
* DS1820<br />
* DS1822<br />
* DS18B20 (Temperatursensor, wasserdicht)<br />
* DS2401 (nur ID) Verwendung nach<br />
** a) Nachricht wenn ein neuer Teilnehmer hinzukommt (Nachteil, in dem kurzen Moment ist der Busmaster blind, könnte ggf. für kurze Zeit eine andere Nachricht nicht empfangen)<br />
** b) Nachricht wenn ein bestehender Teilnehmer verschwindet (aus meiner Sicht keine Nachteile, der dauernde Stromverbrauch ist minimal)<br />
<br />
Funktionieren nicht:<br />
* DHT22<br />
<br />
== Protokoll ==<br />
Der 1Wire-USB-Master kann recht einfach mit einem seriellen Terminal auf Funktion überprüft werden:<br />
# serielle Schnittstelle einstellen auf 115200 8-N-1 kein Handshake RTS/CTS, kein On/Off Protokoll<br />
# Startbefehl eingeben, damit wird auch die Wandlung im Sensor ausgelöst: $?<CR><br />
# mit angeschlossenen 1-Wire Sensoren werden die gefundenen IDs gelistet: $0;o;1080974B020800BA; das „o“ steht für „ok“ und die Checksumme der ID wurde geprüft und ist ok<br />
# danach gibt der 1Wire-USB-Master die beiden S0-Zählerstände zurück: $S0;0;0;<br />
# die Werte der 1-Wire Sensoren können nach 1s abgefragt werden mit: $0<CR> ... $63<CR><br />
# danach gibt der 1Wire-USB-Master die Daten des Sensors zurück: $0;o;31;00;4B;46;FF;FF;07;10;8D;64; das „o“ steht für „ok“ und die Checksumme (9.Byte) der 8 Datenbytes wurde geprüft und ist ok („n“ wäre „nicht ok“). Die Beschreibung der 8 Datenbytes in Hex ist dem Sensordatenblatt zu entnehmen. Das 10.Byte ist eine Checksumme für die serielle Übertragung (Byte1-9 aufaddiert)<br />
<br />
== Links ==<br />
<references/><br />
<br />
[[Kategorie:1-Wire]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=IPCAM&diff=34970IPCAM2021-02-15T21:44:49Z<p>Jostar: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Einbindung von Netzwerkkameras<br />
|ModType=d<br />
|ModForumArea=Sonstiges<br />
|ModTechName=49_IPCAM.pm<br />
|ModOwner=mfr69bs ({{Link2FU|6|Martin Fischer}})}}<br />
<br />
[[IPCAM]] ermöglicht die ereignis- oder zeitgesteuerte Erzeugung von Mitschnitten bei Netzwerkkameras. Außerdem ist es möglich, die Kamera im PTZ-Modus oder über eigene Befehle zu steuern.<br />
<br />
== Voraussetzungen ==<br />
Die Kamera(bilder) müssen über eine URL erreichbar sein.<br />
<br />
== Definition ==<br />
Das IPCAM Objekt wird angelegt mit<br />
:<code><nowiki>define <name> IPCAM <ip[:port]> </nowiki></code><br />
<br />
Zusätzlich zum obigen Define muss zwingend noch das ''path'' Attribut gesetzt werden.<br />
<br />
== Attribute ==<br />
Die wichtigsten Attribute von ''IPCAM'' werden im Folgenden aufgeführt, die komplette Liste findet sich in der {{Link2CmdRef|Anker=IPCAMattr}}.<br />
<br />
=== Authentifizierung ===<br />
;basicauth<br />
:Hinterlegung von Benutzernamen und Passwort <br />
<br />
=== Eigene Befehle ===<br />
;cmd01, cmd02, ... cmd15<br />
:Festlegung von Befehlen, die nicht zu den vordefinierten gehören, z.B. <code>attr ipcam cmd01 led_mode=0</code><br />
<br />
=== Vordefinierte Befehle ===<br />
;cmdPanLeft, cmdPanRight, cmdTiltUp, cmdTiltDown, cmdStep <br />
:Diesen Befehlen können die Kameraspezifischen Werte zugeordnet werden, z.B. <code>attr ipcam cmdTiltUp command=0</code><br />
<br />
=== Pfade ===<br />
;path<br />
:...<br />
<br />
== Unterstützte Netzwerkkameras ==<br />
{{Randnotiz|RNText=Die Aufzählungen der unterstützten und der problematischen Netzwerkkameras sollten ergänzt werden, sobald neue Erkenntnisse vorliegen; beide Listen sind nicht vollständig.}}<br />
Bei den folgenden Netzwerkkameras ist gesichert, dass sie durch das ''IPCAM'' Modul unterstützt sind:<br />
* {{Link2Forum|Topic=33347|Message=257115|LinkText=Foscam 9805W}}<br />
* Foscam FI9831P<br />
* Foscam FI9853EP<br />
* {{Link2Forum|Topic=13826|LinkText=Instar 2905}}<br />
* {{Link2Forum|Topic=100493|LinkText=IN-8015 Full HD}}<br />
* {{Link2Forum|Topic=36201|LinkText=IN-6001HD}}<br />
* {{Link2Forum|Topic=11664|LinkText=Instar 6011, 6012, 2905}}<br />
* {{Link2Forum|Topic=58676|LinkText=Instar IN-5905HD, IN-5907HD, IN-6014HD, IN-6012HD-PoE}}<br />
* {{Link2Forum|Topic=15217|LinkText=WansView (Modell nicht näher spezifiziert)}}<br />
* {{Link2Forum|Topic=11664|Message=158052|LinkText=Wansview 620, 625, 6012}}<br />
* Axis 205<br />
* D-Link DCS-933<br />
* Mobotix (jedenfalls S26 und Q25)<br />
* Xiaomi Dafang (nur mit alternativer Firmware)<br />
<br />
Nicht gesichert, ob die Kamera unterstützt wird bzw. ob alle Funktionen nutzbar sind:<br />
* {{Link2Forum|Topic=33347|LinkText=Foscam FI9831W}}<br />
<br />
<br />
=== Pfad-Parameter für Axis 205 ===<br />
<pre><br />
attr Cam1 path /jpg/image.jpg<br />
</pre><br />
<br />
=== Pfad-Parameter für D-Link DCS-933 ===<br />
<pre>attr Cam1 path image.jpg</pre><br />
<br />
=== Parameter für Hikvision DS-2CD2032-I ===<br />
Mit folgenden Parameter wurde (lt. diesem {{Link2Forum|Topic=39932|Message=322269|LinkText=Forenbeitrag}}) die Hikvision DS-2CD2032-I erfolgreich betrieben:<br />
<pre><br />
define Cam1 IPCAM 192.168.xxx.xxx<br />
attr Cam1 basicauth <username>:<passwort><br />
attr Cam1 delay 0<br />
attr Cam1 group Kamera<br />
attr Cam1 icon it_camera<br />
attr Cam1 path Streaming/channels/1/picture?snapShotImageType=JPEG<br />
attr Cam1 snapshots 1<br />
attr Cam1 storage /opt/fhem/www/snapshots/cam1<br />
</pre><br />
<br />
=== Pfad-Parameter für Foscam FI9831P ===<br />
Die Version ist ohne basicauth und hat Nutzer und Passwort direkt in der URL. Kann natürlich geändert werden.<br />
Sämtliche Befehle für die Foscam HD Kameras findet man [https://www.manualslib.com/manual/728928/Foscam-Ip-Camera.html hier]<br />
<pre><br />
define IPKamera IPCAM <ip>:<port><br />
attr IPKamera cmd01 cmd=ptzStopRun&usr=xxx&pwd=xxx<br />
attr IPKamera cmdPanLeft cmd=ptzMoveLeft&usr=xxx&pwd=xxx<br />
attr IPKamera cmdPanRight cmd=ptzMoveRight&usr=xxx&pwd=xxx<br />
attr IPKamera cmdPos01 cmd=ptzGotoPresetPoint&name=<Nameposition>&usr=xxx&pwd=xxx<br />
attr IPKamera cmdTiltDown cmd=ptzMoveDown&usr=xxx&pwd=xxx<br />
attr IPKamera cmdTiltUp cmd=ptzMoveUp&usr=xxx&pwd=xxx<br />
attr IPKamera path cgi-bin/CGIProxy.fcgi?usr=xxx&pwd=xxx&cmd=snapPicture2<br />
attr IPKamera pathCmd cgi-bin/CGIProxy.fcgi<br />
attr IPKamera pathPanTilt cgi-bin/CGIProxy.fcgi?usr=xxx&pwd=xxx<br />
attr IPKamera storage ./www/images/webcam<br />
</pre><br />
<br />
=== Pfad-Parameter für Mobotix ===<br />
<pre><br />
attr IPKamera path /record/current.jpg<br />
</pre><br />
<br />
=== Pfad-Parameter für reolink (E1 Zoom) ===<br />
<pre><br />
attr IPKamera path cgi-bin/api.cgi?cmd=Snap&width=<Breite>&height=<Hoehe>&channel=0&rs=<irgendwas>&user=Username&password=Passwort<br />
</pre><br />
<br />
Beispiel:<br />
<pre><br />
attr IPKamera path cgi-bin/api.cgi?cmd=Snap&width=1024&height=768&channel=0&rs=12345&user=User&password=Pwd<br />
</pre><br />
<br />
Weitere Befehle sind aktuell noch nicht bekannt.<br />
<br />
Es gibt eine spärliche Doku bzgl. cgi hier: https://cdn.reolink.com/wp-content/uploads/2017/01/Reolink-CGI-command-v1.61.pdf<br />
<br />
Allerdings wird wohl für die Steuerbefehle (PTZ) ein Post-Request benötigt.<br />
<br />
Weitere Kommandos wurden hier gesammelt: https://community.jeedom.com/t/reolink-liste-de-commandes-via-api-maj-29-04/25565<br />
<br />
<br />
=== Einstellungen für Foscam C2 und Foscam R2 ===<br />
Eine ausführliche Beschreibung zur Benutzung der IP Kameras Foscam C2 und Foscam R2 findet sich in {{Link2Forum|Topic=84677|LinkText=diesem Forenthread}}.<br />
<br />
<br />
=== Parameter für Xiaomi Dafang ===<br />
Diese Parameter gelten bei installierter alternativer Firmware von [https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks hier]<br />
<pre><br />
<br />
Attributes:<br />
attr IPKamera cmdPanLeft cmd=motor_left<br />
attr IPKamera cmdPanRight cmd=motor_right<br />
attr IPKamera cmdTiltDown cmd=motor_down<br />
attr IPKamera cmdTiltUp cmd=motor_up<br />
attr IPKamera delay 10<br />
attr IPKamera event-on-update-reading snapshots<br />
attr IPKamera icon it_camera<br />
attr IPKamera path cgi-bin/currentpic.cgi<br />
attr IPKamera pathPanTilt cgi-bin/action.cgi?<br />
attr IPKamera snapshots 5<br />
attr IPKamera storage /opt/fhem/www/ipcamera/dafang_1/shot<br />
</pre><br />
<br />
=== Parameter für INSTAR Full HD ===<br />
Die vollständige Schnittstelle und weitere Beispiele können direkt im [https://wiki.instar.de/Erweitert/ INSTAR-Wiki] eingesehen werden.<br><br />
Zur Integration einer INSTAR Full HD CAM können zum Beispiel folgende Attribute verwendet werden:<br />
<pre><br />
attr INSTAR_8015 basicauth {USERNAME}:{PASSWORD}<br />
attr INSTAR_8015 cmd01 cmd=setinfrared&-infraredstat=auto<br />
attr INSTAR_8015 cmd02 cmd=setinfrared&-infraredstat=close<br />
attr INSTAR_8015 cmd03 cmd=setinfrared&-infraredstat=open<br />
attr INSTAR_8015 cmd04 cmd=setmdalarm&-aname=ftprec&-switch=on<br />
attr INSTAR_8015 cmd05 cmd=setmdalarm&-aname=ftprec&-switch=off<br />
attr INSTAR_8015 cmd06 cmd=setplanrecattr&-planrec_enable=0<br />
attr INSTAR_8015 cmd07 cmd=setplanrecattr&-planrec_enable=1<br />
attr INSTAR_8015 cmd08 cmd=setplanrecattr&-planrec_chn=11<br />
attr INSTAR_8015 cmd09 cmd=setplanrecattr&-planrec_chn=12<br />
attr INSTAR_8015 cmd10 cmd=manualrec&-act=on<br />
attr INSTAR_8015 cmd11 cmd=manualrec&-act=off<br />
attr INSTAR_8015 cmd12 cmd=sdfrmt<br />
attr INSTAR_8015 cmd13 cmd=preset&-act=goto&-number=0<br />
attr INSTAR_8015 cmd14 cmd=preset&-act=goto&-number=1<br />
attr INSTAR_8015 cmd15 cmd=preset&-act=goto&-number=2<br />
attr INSTAR_8015 cmdPanLeft -act=left<br />
attr INSTAR_8015 cmdPanRight -act=right<br />
attr INSTAR_8015 cmdPos15 -act=stop<br />
attr INSTAR_8015 cmdTiltDown -act=down<br />
attr INSTAR_8015 cmdTiltUp -act=up<br />
attr INSTAR_8015 credentials /<ipcam-conf-path>/ipcam.conf<br />
attr INSTAR_8015 eventMap /pos 15:MOVE-STOP/pan left:MOVE-LEFT/pan right:MOVE-RIGHT/tilt up:MOVE-UP/tilt down:MOVE-DOWN/cmd 1:IR-LED-auto/cmd 2:IR-LED-off/cmd 3:IR-LED-on/cmd 4:FTP-rec-on/cmd 5:FTP-rec-off/cmd 6:REC-SD-DISABLE/cmd 7:REC-SD-ENABLE/cmd 8:REC-SD-QUAL-HIGH/cmd 9:REC-SD-QUAL-MID/cmd 10:MAN-REC-Start/cmd 11:MAN-REC-Stop/cmd 12:FORMAT-SD-CARD/cmd 13:POS-WZ/cmd 14:POS-Flur/cmd 15:POS-Park/<br />
attr INSTAR_8015 icon it_camera<br />
attr INSTAR_8015 path tmpfs/snap.jpg<br />
attr INSTAR_8015 pathCmd param.cgi<br />
attr INSTAR_8015 pathPanTilt ptzctrl.cgi?-step=<br />
attr INSTAR_8015 scheme https<br />
attr INSTAR_8015 storage /<ipcam-snapshot-path>/snapshots<br />
attr INSTAR_8015 webCmd POS-WZ:POS-Flur:POS-Park<br />
</pre><br />
<br />
== Nicht unterstützte Netzwerkkameras ==<br />
{{Randnotiz|RNTyp=y|RNText=Die hier aufgeführten Netzwerkkameras sind definitiv nicht unterstützt oder es gibt gravierende, hier beschriebene Einschränkungen.}}<br />
;TRENDnet TV-IP320PI <br />
:Aufruf der Funktion <code>get ''myCam'' image</code> führt zur Fehlermeldung ''...invalid Format''; auf Kamerabild oder Stream kann jedoch über die URL camHostnameOrIP/Streaming/channels/1/Picture (Bild) bzw. camHostnameOrIP/Streaming/channels/1/httpPreview (Stream) zugegriffen werden.<br />
<br />
== Generierte Ereignisse ==<br />
Das Modul ''IPCAM'' generiert die Ereignisse <br />
* <code><nowiki>last: <name_of_device>_snapshot.<image_extension></nowiki></code><br />
* <code><nowiki>snapshots: <total_number_of_taken_snapshots_at_end></nowiki></code><br />
<br />
== Bekannte Probleme ==<br />
Derzeit (08/2015) ist das Logging aus dem Modul zumindest lückenhaft und verbesserungsfähig. So sollten z.B. einige weitere Meldungen zur Fehlereingrenzung bei der Einrichtung eines IPCAM Objekts eingefügt werden:<br />
* Ausgabe des kompletten Pfads / der URL, die bei der Erzeugung eines Snapshots aus einzelnen Bestandteilen zusammengesetzt wird<br />
* Die Zuordnung von Meldungen zu ''verbose''-Leveln sollte kontrolliert und ggf. umgestellt werden<br />
* siehe auch diesen {{Link2Forum|Topic=39932|LinkText=Forenthread}}, der Beschreibung von Problemen, eine Hikvision IPCam in Betrieb zu nehmen<br />
<br />
Außerdem müsste das Modul dringend auf die aktuelle Form des Logging, [[verbose|verbose/Log3]], umgestellt werden.<br />
<br />
Eine mögliche Lösung für das Problem "Wrong or not supported image format: unknown" habe ich hier beschrieben: {{Link2Forum|Topic=10772|Message=425265|LinkText=Forenbeitrag}}<br />
<br />
== Links ==<br />
* Forenthread zur {{Link2Forum|Topic=10772|LinkText=Erweiterung des IPCAM Moduls}}<br />
* Forenthread zum Thema {{Link2Forum|Topic=21005|LinkText=Bewegungserkennung}}<br />
* Forenthread zum Thema {{Link2Forum|Topic=30723|LinkText=Bewegungsmelder der Kamera "anzapfen"}}<br />
* Webseite des Modulautors zum Thema [http://www.fischer-net.de/hausautomation/videoueberwachung.html Videoüberwachung]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Alexa-Fhem&diff=34943Alexa-Fhem2021-02-13T23:06:13Z<p>Jostar: /* Was ist zu tun, wenn alexa-fhem keine Geräte findet? */ typo</p>
<hr />
<div>{{Randnotiz|RNTyp=r|RNText='''ACHTUNG''': Diese Seite beschreibt nicht mehr exakt die jeweils nötigen Amazon Seiten. Es ist etwas Interpretation und Verständnis nötig. <br />
<br />
Für alle, die neu einsteigen und sich mit dem FHEM Vereinsserver als Proxy anfreunden können, empfiehlt es sich hier: [[FHEM Connector für Amazon Alexa]] einzusteigen.}}<br />
<br />
<br />
'''alexa-fhem''' ist eine in JavaScript geschriebene und auf NodeJS basierende Software, welche es ermöglicht, der digitalen Amazon Assistentin Alexa zusätzliche Skills für die Heimautomatisierung via FHEM beizubringen. Eine erste funktionierende Version wurde von [https://forum.fhem.de/index.php?action=profile;u=430 justme1968] im {{Link2Forum|Topic=60244|LinkText=Forum}} veröffentlicht.<br />
Das ist eine erste Version der Dokumentation zur Installation und Einrichtung, eine Erweiterung wird sicherlich in nächster Zeit noch folgen.<br />
{{Infobox Modul<br />
|ModPurpose=Anbindung von FHEM an Amazon Assistent Alexa<br />
|ModType=x<br />
|ModTechName=<br />
|ModForumArea=Frontends/Sprachsteuerung<br />
|ModOwner=justme1968<br />
}}<br />
<br />
==Einführung==<br />
===Glossar===<br />
*Echo bzw. Echo Dot (im Folgenden maskulin bezeichnet) sind die derzeit verfügbaren Geräte des Alexa-Systems '''BILDER EINSTELLEN - Achtung Urheberrecht'''<br />
*AVS ist der Amazon Voice Service, d.h. die Spracherkennungskomponente des Systems.<br />
{{Randnotiz|RNTyp=r|RNText=Für die Nutzung der Amazon AWS-Dienste müssen zwingend die Daten einer Kreditkarte angegeben werden. Nach gegenwärtigem Kenntnisstand sollen jedoch keine Kosten für die Nutzung der im Rahmen dieses How To beschriebenen Dienste anfallen, sofern diese in einem Rahmen genutzt werden, der selbst eine intensive private Nutzung nicht überschreitet. Der Benutzer sei an dieser Stelle auf die von Amazon veröffentlichten Preislisten verwiesen. Die Autoren dieser Anleitung und der darin beschriebenen Module übernehmen keine Haftung für eventuelle Kosten, die aus der Nutzung der AWS entstehen. }}<br />
*AWS sind die Amazon Web Services, also per URL erreichbare Dienste zur Ausführung von Berechnungen etc. Im Rahmen von Alexa-Fhem wird bei AWS eine eigene JavaScript-Funktion hinterlegt, die zur Kommunikation mit dem FHEM-Server dient. Im Jargon von Amazon ist dies eine so genannte Lambda-Funktion '''WARUM ? Nachlesen bei Amazon'''.<br />
*Card bezeichnet einen Eintrag in der Alexa-App, der die erkannte Sprachnachricht, sowie weitergehende Informationen über die Reaktion von Alexa enthält und Rückmeldung an Amazon erlaubt.<br />
*Skill (engl. für Fertigkeit, Können) ist die Bezeichnung für eine per Spracherkennung zu bedienende Funktionalität des Alexa-Systems, z.B. zur Nachrichtenansage, Wettervorhersage oder zur Steuerung von FHEM<br />
<br />
===Arbeitsweise und Datenfluss===<br />
[[Datei:2gpXyLN.jpg|200px|thumb|right|Grafische Darstellung der beteiligten Komponenten]]<br />
Echo → AVS → AWS Lambda → alexa-fhem → AWS Lambda → AVS → Echo<br />
<br />
*Der Echo (oder ein anderes Alexa/AVS fähiges Gerät) nimmt Audiodaten auf und schickt diese an AVS (Amazon Voice Service) zur Erkennung<br />
*AVS führt die Spracherkennung durch und erzeugt ein Event mit Informationen zu den erkannten Daten<br />
:*Beim Alexa SmartHome Skill sind die möglichen Sätze für die Spracherkennung relativ fest vorgegeben <br />
:*Beim Alexa Custom Skill kommen die dazu nötigen Informationen aus dem ''Interaction Model'' der Alexa Skills Configuration<br />
*Das Event wird an den unter ''Configuration'' in der Alexa Skills Configuration hinterlegten Endpoint geschickt<br />
:*Beim Alexa SmartHome Skill ist das zwingend eine AWS Lambda Routine<br />
:*Beim Alexa Custom Skill kann das im Prinzip auch ein eigener Web Service sein<br />
*Das Event wird vom <code>lambda.js</code> code an alexa-fhem weitergeleitet<br />
*alexa-fhem steuert FHEM und sendet ein Antwort-Event zurück<br />
*<code>lambda.js</code> nimmt diese Antwort entgegen und gibt sie an AVS zurück<br />
*AVS sogt dafür das der Echo 'antwortet' und dass die Card in der Alexa App erscheint<br />
<br />
===Anmerkungen===<br />
*Ein Skill hat keinen Zugriff auf die Audiodaten<br />
*Mit dem Skill API kann ein Skill zu zu keiner Zeit von sich aus aktiv werden und 'einfach' Daten an den Echo schicken oder ihn dazu bringen irgendetwas zu tun.<br />
*Wenn man berücksichtigt welchen Weg die Daten insgesamt gehen, ist es erstaunlich, wie schnell die Reaktion auf einen gesprochenen Satz erfolgt.<br />
<br />
=== Abgrenzung des '''Alexa Smart Home Skills''' und des '''Alexa Custom Skills''' ===<br />
<br />
Der [[Alexa-Fhem#Smart_Home|Alexa Smart Home Skill]] ist ein Amazon-Alexa-Standard-Skill, der nur Basisfunktionalitäten bereitstellt. Zu diesen gehört im Wesentlichen die Funktionalität, durch Alexa-FHEM bereitgestellte Devices im Alexa-Account des Benutzers anzulegen. Der Alexa Smart Home Skill reagiert auf gesprochene Interaktion in einem beschränkten Umfang. Beispielsweise genügt ein "Alexa, schalte die Wohnzimmerlampe an" um eine Interaktion zwischen Alexa Smart Home Skill und FHEM-Alexa auszulösen. Nach erfolgreicher Einrichtung wird dieser Skill in der Alexa-App bzw. im Web in der Rubrik "Smart Home" als Skill angezeigt.<br />
<br />
Der [[Alexa-Fhem#Custom|Alexa Custom Skill]] ist ein individuell entwickelter Skill, so wie die meisten anderen Skills auch. Er wird daher auch nicht in der Alexa-App unter der Rubrik "Smart Home" angezeigt. Gesprochene Interaktion mit diesem Skill erfolgt dadurch, dass entweder der Skill explizit gestartet wird (z.B. "Alexa, starte [Name des Skills]") oder direkt angesprochen wird (z.B. "Alexa, frage [Name des Skills] wie ist der Status von [Device] "). Der Alexa Custom Skill befindet sich in Entwicklung und wird hinsichtlich seiner Funktionalitäten laufend weiterentwickelt. Die Einrichtung dieses Skills ist grundsätzlich optional, jedoch können anspruchsvollere Steuerungsmöglichkeiten auf diese Weise verwirklicht werden.<br />
<br />
==Installation==<br />
{{Randnotiz|RNTyp=[g|Info]|RNText=Da die einzelnen Schritte der Anleitung an verschiedenen Stellen unterbrochen und später fortgesetzt werden müssen, empfiehlt es sich, die Anleitung einmal vollständig gelesen zu haben. Während der Konfiguration sollten alle nachfolgenden Abschnitte parallel in gleichzeitig geöffneten Browserfenstern durchgeführt werden, die jeweils bis zum Abschluss geöffnet bleiben müssen. }}<br />
Grundvoraussetzung für alle folgenden Schritte ist das Vorhandensein eines Amazon-Accounts. Es wird davon ausgegangen, dass die Konten für alle im Folgenden genutzten Amazon-Dienste eingerichtet wurden.<br />
<br />
===node.js installieren===<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 Node.js installiert werden. Versuchen Sie dies erst mit<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
sudo apt-get install nodejs<br />
</syntaxhighlight><br />
Überprüfen Sie dann die Version mit <br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
dpkg-query -W nodejs<br />
</syntaxhighlight><br />
Sollte die Versionsnummer kleiner als 8.10 sein, müssen Sie einen Umweg gehen, dazu wird mit den folgenden Befehlen das Node Repository hinzugefügt und node.js (in der LTS Version) entsprechend installiert:<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
</syntaxhighlight><br />
<br />
===node.js updaten===<br />
Um node.js aus einer vorherigen Installation zu updaten (Version 4 ist deprecated und in AWS Amazon nicht mehr unterstützt):<br />
<syntaxhighlight lang="bash" style="width:50%;"><br />
# Zuerst alexa-fhem stoppen, dann<br />
sudo apt-get remove nodejs<br />
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -<br />
sudo apt-get install -y nodejs<br />
sudo npm install npm@latest -g<br />
<br />
#--> in Amazon Konsole NodeJs auf 8.1 umstellen (Funktion in AWS Konsole editieren, im Pulldown-Menü "Runtime" eine neuere Version auswählen, und speichern)<br />
#--> Raspi Reboot (vielleicht nicht nötig)<br />
</syntaxhighlight><br />
<br />
=== Alexa-Fhem installieren ===<br />
'''Aus gegebenem Anlass: Dies ist weder eine Einführung in Linux, noch eine Anfängerdokumentation für FHEM.''' Also erst die Grundlagen lernen, und dann mit Alexa beginnen!<br />
<br />
Die aktuelle Version ist jeweils {{Link2Forum|Topic=81324|Message=733986|LinkText=hier}} zu finden.<br />
Wer bisher noch keinen Alexa-FHEM Skill angelegt hat, bitte {{Link2Forum|Topic=81324|Message=733986|LinkText=diesen Forumsbeitrag}} beachten!<br />
<br />
====Erstinstallation====<br />
Hier wird die Erstinstallation von Alexa-Fhem beschrieben.<br />
===== Linux =====<br />
# Die tgz-Datei unter Linux im Hauptverzeichnis von FHEM (typischerweise <code>/opt/fhem</code>) entpacken (''nicht'' unter Windows, das zerstört die Rechteeinstellungen).<syntaxhighlight lang="bash" style="width:50%;">tar -xvzf dateiname.tgz</syntaxhighlight><br />
# Das dabei entstandene Verzeichnis ''package'' in ''alexa-fhem'' umbenennen <syntaxhighlight lang="bash" style="width:50%;">mv package alexa-fhem</syntaxhighlight><br />
# Durch <syntaxhighlight lang="bash" style="width:50%;">cd alexa-fhem</syntaxhighlight> in das Verzeichnis wechseln<br />
# Mit <syntaxhighlight lang="bash" style="width:50%;">npm install</syntaxhighlight> alle Abhängigkeiten installieren (kein sudo!).<br />
{{Randnotiz|RNTyp=[g|Info]|RNText=createKey.sh erzeugt ein Zertifikat, das 365 Tage gültig ist. Dies muss deswegen jedes Jahr erneuert werden }}<br />
# SSL Zertifikat erzeugen durch Aufruf von <syntaxhighlight lang="bash" style="width:50%;">./createKey.sh</syntaxhighlight> (kein sudo!). Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken.<br />
# Das Verzeichnis ''.alexa'' anlegen, ''und zwar im Home-Verzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.'' Insbesondere ist zu beachten, dass dieser Nutzer u.U. im Startskript explizit gesetzt wird. Mit dem untenstehenden Skript ist das ''nicht'' der User fhem, sondern der User ''pi''. Das Symbol ''~/'' verweist auf das Home-Verzeichnis des Benutzers, der gerade die Installation vornimmt.<br />
# Die Datei ''config-sample.json'' nach ''.alexa/config.json'' kopieren. Achtung: Installiert man alexa-fhem als root-user, zeigt das Symbol ''~/'' auf ''/root'' - und die Konfigurationsdatei wird ggf. bei einem manuellen Start von Alexa-Fhem nicht gefunden.<br />
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis kopiert werden.<br />
===== Windows =====<br />
''Vor'' der Installation von Alexa-Fhem muss man folgende Anwendungen installieren:<br />
* Node.js (die aktuelle Version findet man unter https://nodejs.org/en/download/)<br />
* OpenSSL (http://slproweb.com/products/Win32OpenSSL.html oder https://www.heise.de/download/product/win32-openssl-47316/download)<br />
Erst dann fängt man mit Alexa-Fhem an.<br />
<br />
<br />
# Die tgz-Datei im Hauptverzeichnis von FHEM (z.B. <code>С:\Program Files (x86)\fhem</code>) entpacken.<br />
# Das dabei entstandene Verzeichnis ''package'' in ''alexa-fhem'' umbenennen<br />
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. "Start" -> "Ausführen" (oder [Windows-Taste]+[R]) -> cmd -> Ok. Durch <syntaxhighlight lang="bash" style="width:50%;">cd "<FHEM-Hauptverzeichis>\alexa-fhem"</syntaxhighlight> in das Verzeichnis wechseln. <br />Dabei ist natürlich das <FHEM-Hauptverzeichis> durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es <code>cd "С:\Program Files (x86)\fhem\alexa-fhem"</code><br />
# Mit <syntaxhighlight lang="bash" style="width:50%;">npm install</syntaxhighlight> alle Abhängigkeiten installieren.<br /> Bei der Fehlermeldung wie "Der Befehl "npm" ist entweder falsch geschrieben oder konnte nicht gefunden werden." ist die Installation von Node.js zu überprüfen.<br />
# SSL Zertifikat erzeugen. Dafür muss man alle Befehle aus dem Skript ''createKey.sh'' nacheinander manuell ausführen. Hierbei beachten, dass ein Kennwort vergeben werden muss, das mindestens aus 4 Zeichen besteht, dieses Kennwort bitte merken. Der Windows-Welt unbekannter Befehl <code>mv</code> ist durch <code>move /y</code> zu ersetzen:<syntaxhighlight lang="bash" style="width:50%;">openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365</syntaxhighlight><syntaxhighlight lang="bash" style="width:50%;">openssl rsa -in key.pem -out newkey.pem</syntaxhighlight><syntaxhighlight lang="bash" style="width:50%;">move /y newkey.pem key.pem</syntaxhighlight> Eventuelle Fehlermeldung "can't open config file: /usr/local/ssl/openssl.cnf" o.Ä. lässt sich durch Befehl <code>set OPENSSL_CONF=<OpenSSL-Verzeichnis>\bin\openssl.cfg</code> beheben, wobei <OpenSSL-Verzeichnis> durch den entsprechenden Installationspfad (typischerweise <code>c:\OpenSSL-Win32</code>) zu ersetzen ist.<br />
# Das Verzeichnis ''.alexa'' anlegen, ''und zwar im Benutzerverzeichnis desjenigen Benutzers, unter dem Alexa-Fhem laufen soll.'' In aktuellen Versionen von Windows (ab Windows 7 bzw. ab Windows Server 2008 R2) liegt das Verzeichnis unter <code>C:\Users\<Benutzername></code>, also z.B. für Benutzer "Administrator" - unter <code>C:\Users\Administrator</code>.<br />Falls Windows sich weigert das Verzichniss mit dem Punkt am Anfang zu erstellen, kann man das aus der Kommandozeile machen:<syntaxhighlight lang="bash" style="width:50%;">cd "C:\Users\<Benutzername>"</syntaxhighlight><syntaxhighlight lang="bash" style="width:50%;"><br />
mkdir ".alexa"</syntaxhighlight><br />
# Die Datei ''config-sample.json'' nach ''C:\Users\<Benutzername>\.alexa\config.json'' kopieren.<br />
# Achtung: Ggf. müssen auch die Dateien key.pem und cert.pem ins entsprechende Verzeichnis (<code>"<FHEM-Hauptverzeichis>\alexa-fhem\bin</code>) kopiert werden.<br />
<br />
====Update====<br />
Hier wir das Update auf eine neue Version von Alexa-Fhem beschrieben<br />
===== Linux =====<br />
# Das Verzeichnis ''alexa-fhem'' im Hauptverzeichnis von FHEM (typischerweise <code>/opt/fhem</code>) umbenennen in ''alexa-fhem.old''.<br />
# Die tgz-Datei der neuen Alexa-Fhem-Version unter Linux im Hauptverzeichnis von FHEM (typischerweise <code>/opt/fhem</code>) entpacken (''nicht'' unter Windows, das zerstört die Rechteeinstellungen).<br />
# Das dabei entstandene Verzeichnis ''package'' in ''alexa-fhem'' umbenennen, in das Verzeichnis wechseln<br />
# Mit <syntaxhighlight lang="bash" style="width:50%;">npm install</syntaxhighlight> alle Abhängigkeiten installieren (kein sudo!).<br />
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis ''alexa-fhem.old'' ins neue Verzeichnis ''alexa-fhem'' kopieren.<br />
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis ''alexa-fhem.old'' gelöscht werden.<br />
===== Windows =====<br />
# Das Verzeichnis ''alexa-fhem'' im Hauptverzeichnis von FHEM (z.B. <code>С:\Program Files (x86)\fhem</code>) umbenennen in ''alexa-fhem.old''.<br />
# Die tgz-Datei der neuen Alexa-Fhem-Version im Hauptverzeichnis von FHEM entpacken.<br />
# Das dabei entstandene Verzeichnis ''package'' in ''alexa-fhem'' umbenennen<br />
# Windows-Shell (Kommandozeile, Eingabeaufforderung usw.) öffnen. "Start" -> "Ausführen" (oder [Windows-Taste]+[R]) -> cmd -> Ok. Durch <syntaxhighlight lang="bash" style="width:50%;">cd "<FHEM-Hauptverzeichis>\alexa-fhem"</syntaxhighlight> in das Verzeichnis wechseln. <br />Dabei ist natürlich das <FHEM-Hauptverzeichis> durch den entsprechenden Pfad aus dem Schritt 1 zu ersetzen. Im o.g. Beispiel wäre es <code>cd "С:\Program Files (x86)\fhem\alexa-fhem"</code><br />
# Mit <syntaxhighlight lang="bash" style="width:50%;">npm install</syntaxhighlight> alle Abhängigkeiten installieren.<br />
# Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis ''alexa-fhem.old'' ins neue Verzeichnis ''alexa-fhem'' kopieren.<br />
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis ''alexa-fhem.old'' gelöscht werden.<br />
<br />
==== Alexa-Fhem konfigurieren ====<br />
Der Inhalt der Datei ''~/.alexa/config.json'' muss an die eigene Umgebung angepasst werden. <br />
# ''nat-pmp'' -> wenn nat-pmp verwendet werden soll: die ip des eigenen routers, sonst die Zeile löschen!<br />
# ''nat-upnp'' -> wenn nat-upnp verwendet werden soll: ''true'', sonst die Zeile löschen!<br />
# ''applicationId'' <br />
#:* Wenn man nur den SmartHome-Skill verwenden möchte, kann dieser Eintrag leer bleiben.<br />
#:* Ansonsten ist er mit der SkillID des Alexa Custom Skills zu belegen, siehe Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]]<br />
# ''oauthClientID'' -> ''Client ID'' dem Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1<br />
# ''server'' -> IP-Adresse des eigenen FHEM-Servers<br />
# ''port'' -> Portnummer des eigenen FHEM-Servers<br />
<br />
<br />
Beispiel a) Offenes fhem - System ohne Absicherung:<br />
{<br />
"alexa": {<br />
"name": "Alexa TEST",<br />
"keyFile": "./key.pem",<br />
"certFile": "./cert.pem",<br />
"applicationId": "amzn1.ask.skill.xxxxxxxxxxxxxxxxxxxxxxxxxxxx",<br />
"oauthClientID": "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"<br />
},<br />
"connections": [<br />
{<br />
"name": "FHEM",<br />
"server": "192.168.0.xxx.xxx",<br />
"port": "8083",<br />
"filter": "room=AlexaRoom"<br />
}<br />
]<br />
}<br />
<br />
<br />
Beispiel b) Abgesichertes fhem - System mit TLS/SSL und HTTP Basic-Authentication:<br />
{<br />
"alexa": {<br />
"name": "Alexa TEST",<br />
"keyFile": "./key.pem",<br />
"certFile": "./cert.pem",<br />
"applicationId": "amzn1.ask.skill.xxxxxxxxxxxxxxxxxxxxxxxxxxxx",<br />
"oauthClientID": "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"<br />
},<br />
"connections": [<br />
{<br />
"name": "FHEM",<br />
"server": "192.168.0.xxx.xxx",<br />
"auth": {"user": "fhemuser", "pass": "fhempassword"},<br />
"ssl": true,<br />
"port": "8083",<br />
"filter": "room=AlexaRoom"<br />
}<br />
]<br />
}<br />
<br />
Mehrere Custom Skills lassen sich mit der folgenden Syntax eintragen<br />
"applicationId": [ "amzn1.ask.skill.1" , "amzn1.ask.skill.2" ],<br />
"oauthClientID": [ "amzn1.application-oa2-client.1" , "amzn1.application-oa2-client.1" ]<br />
<br />
Danach durch Aufruf von <syntaxhighlight lang="bash" style="width:50%;">./bin/alexa</syntaxhighlight> den Dienst starten (kein sudo!)<br />
<br />
<br />
Unter Windows startet man den Alexa-Dienst durch <syntaxhighlight lang="bash" style="width:50%;">node alexa</syntaxhighlight> aus der <code>alex-fhem/bin</code> (also erst z.B. durch <code>cd "<FHEM-Hauptverzeichis>\alexa-fhem\bin"</code> ins richtige Verzeichnis kommen)<br />
<br />
Der Start des Alexa-Dienstes auf der Console ist immer dann zu empfehlen, wenn man auf die Ausgaben des Dienstes angewiesen ist und beispielsweise sehen möchte, welche Devices durch den Dienst bereitgestellt werden oder ob Fehler auftreten. Beendet man die Console-Session wird auch der Dienst wieder beendet. Insofern ist die vorgenannte Vorgehensweise nur für ein Debugging zu empfehlen und nicht im Regelbetrieb. Nachfolgend ist beschrieben, wie man den Alexa-Dienst aus FHEM heraus starten / stoppen und neu starten kann.<br />
<br />
==== Alexa-Fhem aus FHEM heraus starten ====<br />
Hierbei muss man zunächst herausfinden, welche der folgenden Startvarianten sein LINUX - OS zum Einsatz kommen:<br />
initd.d oder systemd.<br />
<br />
Auf keinen Fall darf man "sicherheitshalber" beide Varianten installieren, dies zu Fehler(-meldungen) führt.<br />
<br />
===== Vorgehen bei Linux-Versionen mit init.d =====<br />
Diese Variante kommt unter anderem auf dem Raspberry Pi mit dem OS-Varianten "Wheezy" zum Einsatz<br />
<br />
Zunächst das Start-up-Skript aus diesem Post herunterladen {{Link2Forum|Topic=60244|Message=517271|LinkText=https://forum.fhem.de/index.php/topic,60244.msg517271.html#msg517271}} und unter /etc/init.d/alexa speichern.<br />
<br />
Das Script geht davon aus, das das alexa-fhem Skript unter /opt/fhem/alexa-fhem liegt, und die Logfiles später unter /opt/fhem/log. Sollte das nicht der Fall sein, muss das Skript angepasst werden.<br />
<br />
Nun folgende Kommandos ausführen:<br />
<syntaxhighlight lang="bash" style="width:50%;">sudo chmod 755 /etc/init.d/alexa<br />
sudo update-rc.d alexa defaults</syntaxhighlight><br />
<br />
In der Datei <code>/etc/sudoers</code> den User fhem für die Nutzung von sudo zulassen (<code>sudo nano /etc/sudoers</code>), z.B. durch Anfügen der nachfolgenden Zeile:<br />
<code>fhem ALL=(ALL) NOPASSWD: ALL</code><br />
<br />
Nun folgende Devices anlegen (ggf. einem Raum zuordnen, z.B. AlexaControl):<br />
<syntaxhighlight lang="bash" style="width:75%;">define FHEM.Alexa.Status dummy<br />
<br />
define FHEM.Alexa dummy<br />
attr FHEM.Alexa event-on-change-reading state<br />
attr FHEM.Alexa webCmd status:start:stop:restart<br />
<br />
define FHEM.Alexa.DOIF DOIF ([FHEM.Alexa] eq "start") <br />
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa start > /dev/null 2>&1 &")}) <br />
DOELSEIF ([FHEM.Alexa] eq "stop")<br />
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa stop > /dev/null 2>&1 &")}) <br />
DOELSEIF ([FHEM.Alexa] eq "restart") <br />
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa restart > /dev/null 2>&1 &")}) <br />
DOELSEIF ([FHEM.Alexa] eq "status") <br />
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa status > /dev/null 2>&1 &")})</syntaxhighlight><br />
<br />
===== Vorgehen bei Linux-Versionen mit systemd =====<br />
Diese Variante kommt unter anderem auf dem Raspberry Pi ab/seit der OS-Variante "Jessie" zum Einsatz<br />
<br />
Bei systemd Systemen funktioniert das obengenannte vorgehen leider nicht, man kann das gleiche aber mit dem Modul <br />
[https://forum.fhem.de/index.php/topic,79952.0.html 98_serviced.pm - systemd und initd Dienste steuern] umsetzen.<br />
Wichtig ist das der User unter dem alexa ausgeführt wird ohne Passwort abfrage sudo ausführen darf, dazu muss er in der <code>/etc/sudoers</code> eingetragen werden, z.b. so <code>fhem ALL=(ALL) NOPASSWD: ALL</code><br />
<br />
Sollte es dann nicht funktionieren kann das an einem Gruppen eintrag unterhalb der User definition in der <code>/etc/sudoers</code>, in diesem Fall den user am ende der <code>/etc/sudoers</code> eintragen, dann sollte es funktionieren<br />
<br />
==== Alexa-Fhem als Service (systemd) installieren ====<br />
Auf neueren Installationen (z.B. RPi Jessie) wird init.d durch systemd ersetzt. Folgend die Anleitung um alexa-fhem als Service zu installieren auf einem Raspberry Pi mit Jessie.<br />
<br />
Zunächst einen neuen Benutzer anlegen unter dem alexa-fhem laufen soll, falls man nicht möchtet dass alexa-fhem z.B. mit dem fhem User ausgeführt wird:<br />
<br />
<code style="width:75%;" lang="bash"><br />
sudo useradd -M --system alexa<br />
</code><br />
<br />
Eigentlich braucht der Benutzer keine Gruppen, aber man kann den Benutzer auch der Gruppe <code>dialout</code> hinzufügen (<code>sudo usermod -a -G dialout alexa</code>)<br />
<br />
Datei "alexa.service" unter <code>/etc/systemd/system</code> anlegen:<br />
<br />
[Unit]<br />
Description=Node.js Alexa Server <br />
After=syslog.target network-online.target<br />
<br />
[Service]<br />
Type=simple<br />
User=alexa <br />
WorkingDirectory=/opt/fhem/alexa-fhem<br />
ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa<br />
Restart=on-failure<br />
RestartSec=10<br />
KillMode=process<br />
<br />
[Install]<br />
WantedBy=multi-user.target <br />
<br />
Den Pfad <code>/home/alexa/.alexa</code> an die Systemgegebenheiten anpassen. Letztendlich kann die config.json irgendwo liegen, hauptsache alexa-fhem weiß wo. <br />
<br />
Im WorkingDirectory wird der alexa Dienst die Zertifikate suchen.<br />
<br />
Achtung: Natürlich muss der Benutzer auch Zugriff sowohl auf das Verzeichnis mit der config als auch das alexa-fhem Verzeichnis und das WorkingDirectory haben.<br />
<br />
Um den Service zu aktiveren und zu starten helfen folgende Befehle:<br />
sudo systemctl daemon-reload<br />
sudo systemctl enable alexa<br />
sudo systemctl start alexa<br />
<br />
Status abfragen mit<br />
sudo systemctl status alexa<br />
<br />
Sollte sich der Service nicht starten lassen und endet die Ausgabe ähnlich wie hier:<br />
<code>Feb 02 09:47:25 inet alexa[2738]: STDIN EOF</code><br />
kann eine Anpassung der ExecStart Zeile aus der alexa.service Datei helfen:<br />
ExecStart=/opt/fhem/alexa-fhem/bin/alexa --dockerDetached -U /home/alexa/.alexa<br />
Log einsehen?<br />
sudo journalctl -u alexa<br />
<br />
(mit <code>-f</code> kann man den follow Modus aktivieren, wie <code>tail -f</code>).<br />
Bei einen reboot startet alexa-fhem jetzt automatisch.<br />
<br />
==== Alexa-Fhem testen ====<br />
Node.Js stellt einen Web-Server am Port 3000 bereit, das oben erzeugte Zertifikat sichert diesen Zugang per SSL ab. Durch Aufruf der Adresse<br />
<code>https://<IP-Adresse des Servers>:3000</code> kann man testen, ob der Alexa-Fhem Service läuft - der Seitenaufruf liefert eine Zeile JSON-Code, beginnend mit<br />
<code>{"header":{"name":"UnsupportedOperationError"...</code><br />
<br />
=== Alexa Device anlegen ===<br />
Das Modul 39_alexa.pm stellt innerhalb von FHEM verschiedene Attribute z.B. alexaName oder alexaRoom zur Verfügung. Manche dieser Attribute (wie z.b. alexaName) werden in beiden Skills verwendet, andere werden ausschließlich bei einer Nutzung des Alexa Custom Skill verwendet.<br />
<br />
Die Einrichtung des Alexa Device geschieht durch die nachfolgende Definition:<br />
<syntaxhighlight lang="bash" style="width:70%;">define MyAlexa alexa</syntaxhighlight><br />
<br />
<hr /><br />
<br />
=== Alexa Skills ===<br />
Für folgende Schritte muss man unter der Adresse http://developer.amazon.com angemeldet sein<br />
# Anmeldung auswählen<br />[[Datei:Amazon Developer.jpg||200px]]<br />
# Anmeldedaten eingeben<br />[[Datei:LogIn.jpg||200px]]<br />
<br />
==== Security Profile anlegen ====<br />
Die Erzeugung eines Sicherheitsprofils muss nur einmal erfolgen, es wird dann für alle weiteren Skills verwendet.<br />
# Nach der Anmeldung Auswahl von ''APPS & SERVICES''<br />[[Datei:Apps1.jpg|200px]]<br />
# Anschließend auswählen ''Security Profiles''<br />[[Datei:Security.jpg|200px]]<br />
# Auswählen ''Create a New Security Profile'' aus<br />[[Datei:Newsecurity.jpg|200px]]<br />
# Dann einen Namen und eine Beschreibung für das Profil eingeben und mit ''Save'' bestätigen<br />[[Datei:SecurityName.jpg|200px]]<br />
# Anschließend den die Daten unter ''Gneral'' merken oder Kopieren <br />[[Datei:SecurityGenerl.jpg|200px]]<br />
# Im Anschluß daran auf ''Web Settings'' klicken und dort auf ''Edit'' <br />[[Datei:WebSettings.jpg|200px]] <br />
# Und nun die im Bild gezeigten Daten eintragen <br />[[Datei:WebSettingsDaten.jpg|200px]] <br />
## https://layla.amazon.co.uk/api/skill/link/xxx<br />
## https://pitangui.amazon.com/api/skill/link/xxx<br />
## https://layla.amazon.com/api/skill/link/xxx<br />
# Das xxx muss hierbei durch den Wert ersetzt werden, der in den beiden Abschnitten SmartHome Skill anlegen bzw. Custom Skill anlegen jeweils unter Punkt 4 (Seite Configuration) bei Redirect Urls am Ende der URLs angezeigt wird<br />
# Im anschluß daran oben auf ''Login with Amazon'' <br />[[Datei:LoginwithAlexa.jpg|200px]]<br />
<br />
===== Login with Amazon =====<br />
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo ''Client Id'' und ''Client Secret'' zu finden sind}}<br />
# In der neu geladenen Seite im Dropdown Menü das vorher angelegte Profil unter ''Select a Security Profil'' auswählen und mit ''Confirm'' bestätigen<br />[[Datei:LoginwithAlexaSelect.jpg|200px]]<br />
# Im folgenden Fenster die Adresse https://www.amazon.com/gp/help/customer/display.html?nodeId=468496 eingeben und mit ''Save'' bestätigen. '''Todo Erklärungsbedarf: WARUM diese Adresse'''<br />[[Datei:Developer.amazon.com-12-login_with_amazon_-_enter_consent_screen_information.png|200px]]<br />
# Anschließend bei dem neu angelegten Eintrag auf der rechten Seite auf das Zahnrad klicken und ''Web Settings'' auswählen<br />[[Datei:Developer.amazon.com-13-login_with_amazon_-_web_settings.png|200px]]<br />
<br />
==== Skills bearbeiten (Gilt für den SmartHome wie auch den Customer Skill)====<br />
# Im Menü den Punkt ''ALEXA'' auswählen und anschließend im Dropdown Menü ''Alexa Skills Kit'' auswählen<br />[[Datei:AlexaSkill.jpg|200px]]<br />
<br />
===== SmartHome Skill anlegen =====<br />
# Rechts ''Create Skill'' auswählen<br />[[Datei:AlexaSkillCreate.jpg|200px]]<br />
# Auf der folgenden Seite die folgenden Daten eingeben und dann mit ''Next'' bestätigen:<br />
#:* ''Skill Name'' -> beliebiger Name, z.B. "MySmartHome Basic")<br />
#:* ''Default Language'' -> ''German''<br />
#:* ''Choose a model to add to your skill'' -> ''SmartHome '' anklicken<br />
#:* ''Anschließend rechts oben auf ''Create Skill'' <br />[[Datei:AlexaSkillCreateSmart.jpg|200px]]''<br />
# Nun auf die Seite https://signin.aws.amazon.com/ wechseln und dort einloggen <br />[[Datei:AWSAnmelden.jpg|200px]]<br />
# Nach dem Login links oben auf ''Services'' klicken und anschließend auf ''Lambda'' <br /> [[Datei:AWSLambda.jpg|200px]]<br />
# Auf der ''Lambda'' Seite "Funktion' auswählen links im Menü und dann rechts auf ''Funktion erstellen'' klicken <br /> [[Datei:LamdbaFunktion.jpg|200px]]<br />
# Auf der Seite ''Funktion erstellen'' dann auf ''Ohne Vorgabe erstellen' klicken''<br />
#:* Unter ''Name'' einen Beliebigen Namen eingeben<br />
#:* Bei ''Laufzeit'' ''Nodejs 8.10'' auswählen<br />
#:* Unter ''Rolle'' ''Erstellen einer benutzerdefinierten Rolle'' auswählen, im anschluß daran sollte sich automatisch ein neues Fenster öffnen, in diesem alles unverändert lassen und auf ''Allow'' klicken wodurch sich das Fenster wieder schließen sollte<br /> [[Datei:IAM.jpg|200px]] <br />
#:*Jetzt noch rechts unten auf ''Funktion erstellen klicken''<br /> [[Datei:OhneVorgabe.jpg|200px]]<br />
<br />
# Auf der jetzt geöffneten Seite rechts oben die ''arn'' Nummer aufschreiben/kopieren und links aus dem Menü ''Alexa Smart Home'' hinzufügen <br />[[Datei:Arn.jpg|200px]]<br />
# Unten auf der Seite unter ''Auslöser konfigurieren'' muss die Skill ID eingetragen werden, diese findet man im developer account unter dem Skill. <br /> [[Datei:Auslöser.jpg|200px]] <br />
# Anschließend noch rechts unten auf ''Hinzufügen'' klicken und danach rechts oben auf ''Speichern''<br />
<br />
# Nun auf ''Test'' (Bezeichnung im Screenshot) klicken und unten auf der Seite unter ''Funktionscode'' den vorhanden Code löschen und den Code aus der ''Lambda.js'' welche sich in dem ''alexa-fhem-0.4.4'' Paket befindet einfügen <br /> [[Datei:Arn2.jpg|200px]]<br />
<br /> [[Datei:Code.jpg|200px]]<br />
# Im Code müsst ihr den ''Hostname'' anpassen, also eure DynDns z.b. einfügen, anschließen rechts oben wieder auf ''Speichern''<br />
<br />
# Nun wieder zurück in den Alexa developer Account und hier folgende Daten eintragen<br />
{{Randnotiz|RNTyp=r|RNText=Es funktioniert nur noch die v3 api (v2 ist deprecated). Die Version hierfür gibt es im {{Link2Forum|Topic=81324|LinkText=Forum}}. bitte die hinweise dort lesen und beachten.}}<br />
#:* ''Payload Version'' -> ''v3(preferred)'' auswählen <br /><br />
#:* ''Default endpoint'' -> Hier die ''arn'' Nummer von oben eintragen/einfügen<br />
#:* Dann den Haken setzen bei ''Europe, India'' und nochmals die ''arn'' eintragen und anschließend rechts oben auf ''Save''<br />
# Links im Menü ''Account Linking'' auswählen und dort folgende Daten eintragen<br />
#:* ''Authorization URI'' -> ''https://www.amazon.com/ap/oa''<br />
#:* ''Access Token URI'' -> ''https://api.amazon.com/auth/o2/token''<br />
#:* ''Client ID'' -> ''Eure Client ID, fängt mit amzn......an'', zu finden unter ''https://developer.amazon.com'' -> '' Apps & Services'' -> ''Security Profiles'' -> Profil auswählen -> ''Web Settings'' <br />
#.* ''Client Secret'' -> ''Euer Client Secret'', siehe ''Client ID''<br />
#:* ''Scope'' -> ''Add Scope'' auswählen und ''profile:user_id'' (wörtlich 1:1 eintragen) eintragen<br />
#:* ''Redirect URLs'' -> Diese 3 Adressen merken/kopieren<br />
# Alles andere auf dieser seite kann gleich bleiben, jetzt noch rechts oben wieder auf ''Save'' klicken <br /> [[Datei:Account.jpg|200px]]<br />
<br />
# Anschließend wieder zurück zum ''Amazon developer Account'' https://developer.amazon.com , dort wieder das ''Security Profile'' aufrufen und die drei Links unter ''Allowed Return URLs'' (wo eingangs am Schluss 3 XXX gesetzt wurden) mit den Links von Oben ''Redirect URLs'' ersetzen<br />
# Nun geht es weiter in der ''Amazon Alexa developer Konsole'' https://developer.amazon.com/alexa/console/ask wo oben auf ''Distribution'' geklickt werden muss.<br />
# Hier sind alle angaben Freiwillig bzw. können Frei gewählt werden bis auf die ''Privacy Policy URL'' , diese muss eingetragen werden, anschließend links unten auf ''Save and continue''<br />[[Datei:German.jpg|200px]]<br />
<br />
# Auf der kommenden Seite ''Privacy & Compliance'' entsprechend anklicken und wieder unter auf ''Save and continue''<br />
# Unter ''Availability'' alles so lassen und wieder auf ''Save and continue''<br />
# Nun den Alexa Service auf dem Fhem Rechner neustarten, den Skill in der Alexa App aktivieren und nach geräten suchen lassen<br />
<br />
===== Custom Skill anlegen =====<br />
<ol><br />
<li> Oben rechts ''Add a New Skill'' auswählen<br />[[Datei:Developer.amazon.com-18-alexa_-_alex_skills_kit_-_add_a_new_skill.png|200px]]</li><br />
<li> Auf der folgenden Seite (''Skill Information'') die nachstehenden Daten eingeben und dann mit ''Next'' bestätigen:<br />
<ul><br />
<li> ''Skill Type'' -> ''Custom Interaction Model'' </li><br />
<li> ''Language'' -> ''German''</li><br />
<li> ''Name'' -> beliebiger Name, z.B. "MySmartHome Advanced". Dieser wird in der Alexa App unter "Meine Skills" angezeigt.</li><br />
<li> ''Invocation Name'' -> Aufruf des Skills, unter dem dieser später gestartet wird. Z.B. "Alexa, starte James"<br />[[Datei:CustomSkill_2.PNG|400px]]</li><br />
</ul></li><br />
<li>Auf der Seite ''Interaction Model'' folgende Eingaben tätigen und mit ''Next'' abschließen<br />
<ul><br />
<li>In einem separaten Browserfenster FHEM aufrufen, und für das bereits definierte Alexa-Gerät das Kommando <code>get MyAlexa interactionModel</code> aufrufen. Es erscheint ein Popup-Fenster mit ziemlich vielen Zeilen.<br />
<li>In die Box ''Intent Schema'' kopiert man den ersten Teil dieser FHEM-Ausgabe hinein, also:<br /><blockquote><br />
{ <br />
"intents" : [ <br />
<hier ziemlich viele Zeilen> <br />
]<br />
}<br />
</blockquote></li><br />
<li>Nun die ''Custom Slot Types'' einrichten. Dazu muss aus dem zweiten Teil der FHEM-Ausgabe jeweils der Slot-Type (z.B. <code>FHEM_article</code>) in das Feld ''TYPE'' eingetragen werden, das nach dem Anklicken von ''Add Slot Type'' erscheint. In das darunter liegende größere Textfeld kommen die möglichen Werte für diesen Slot, so wie sie aus der FHEM-Ausgabe abzulesen sind. Dann mit ''Save'' sichern. Als Custom Slot Type erscheint dann für diesen Beispiel-Slot<br />
FHEM_article der | die | das | den<br />
d.h., die Zeilenumbrüche bei den möglichen Werten werden als "|" dargestellt.</li><br />
<li>Hier muss nun ein Bruch im Arbeitsfluss durchgeführt werden, denn bei der Erstellung des Custom Skills kommt es auf die Reihenfolge der Einträge an. Deshalb zunächst diese FHEM-Ausgabe schließen, und für dasselbe FHEM-Device <code>get MyAlexa customSlotTypes</code> ausführen. Auch diese Ausgabe wird, wie oben beschriebeen, in Custom Slot Types eingetragen (erst der TYPE, dann die möglichen Werte)<br />
<li>Anschließend erneut die FHEM-Ausgabe schließen und erneut für das bereits definierte Alexa-Gerät das Kommando <code>get MyAlexa interactionModel</code> aufrufen.<br />
<li>Unter ''Sample Utterances'' nun den Text aus dem dritten Teil dieser FHEM-Ausgabe hineinkopieren<br />[[Datei:CustomSkill_5.PNG|400px]]</li><br />
</ul></li><br />
<li>Auf der Seite ''Configuration'' Folgendes eingeben und mit ''Next'' bestätigen:<br />
<ul><br />
<li>''Service Endpoint Type'' -> ''AWS Lambda'' auswählen</li><br />
<li>''Geographical Region'' -> ''Europe'' auswählen und im Textfeld den Wert aus Abschnitt [[#AWS_Lambda_Funktion_anlegen | AWS Lambda Funktion anlegen]] (Punkt 12) eintragen. </li><br />
<li>''Do you allow users to create an account or link to an existing account with you?'' -> ''Yes''</li><br />
<li>''Authorization URL'' -> <code>https://www.amazon.com/ap/oa</code></li><br />
<li>''Client ID'' -> ''Client ID'' aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1</li><br />
<li>''Scope'' -> '''<code>profile:user_id</code>''' (wörtlich 1:1 eintragen)</li><br />
<li>''Redirect URLs'' - sollten vorbelegt sein</li><br />
<li>''Authorization Grant Type'' -> ''Auth Code Grant'' auswählen</li><br />
<li>''Access Token URI'' -> <code>https://api.amazon.com/auth/o2/token</code></li><br />
<li>''Client Secret'' -> ''Client Secret'' aus Abschnitt [[#Login_with_Amazon | Login with Amazon]], Punkt 1</li><br />
<li>''Client Authentication Scheme'' -> ''HTTP Basic''</li><br />
<li>''Privacy Policy URL'' -> <code>https://www.amazon.com/gp/help/customer/display.html?nodeId=468496</code></li><br />
</ul><br />
Beim Sichern dieser Seite mit ''Next'' kann es zu einer Fehlermeldung kommen, wenn man seine Skill-Definitionen mit dem einfachen SmartHome-Skill begonnen hat. Deshalb muss noch der entsprechende Trigger für die [[#AWS_Lambda-Funktion | AWS Lambda Funktion]] nachgetragen werden, dies wird in Abschnitt [[#Trigger_f.C3.BCr_Custom_Skill_hinzuf.C3.BCgen | Trigger für Custom Skill hinzufügen]] beschrieben.<br />
<br />[[Datei:CustomSkill_6.PNG|400px]] [[Datei:CustomSkill_7.PNG|400px]]</li><br />
<br />
==== Testen ====<br />
Hat man den Custom Skill angelegt, bietet dieser auch eine komfortable Testmöglichkeit. Dazu wählt man in der Übersichtsseite ''All Skills'' den Button ''Edit'' des Alexa Custom Skill aus. Auf der nachfolgenden Seite dann links ''Test''. <br />
Die Testseite enthält <br />
* ein Feld ''Voice Simulator'', mit dem man die Sprachsausgabe testen kann, <br />
* ein Feld ''Service Simulator'', mit dem die Verarbeitung von Alexa-Kommandois getestet werden kann. Hier kann man z.B. eintragen<br />
"Alexa, sage <Custom Skill Invocation Name>: Stelle Weckzeit auf Neunzehn Siebenundzwanzig Uhr"<br />
"Alexa, frage <Custom Skill Invocation Name> nach dem Status von Weckzeit"<br />
<br />
Dabei ist natürlich der ''Custom Skill Invocation Name'' durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.<br />
<br />
==== Skill Id bestimmen ====<br />
{{Randnotiz|RNTyp=[g|Info]|RNText=Hier wird beschrieben, wo die ''Alexa Skill Id'' zu finden ist}}<br />
Für das [[#AWS_Lamba_Funktion_anlegen | Anlegen einer ''AWS Lambda Funktion'']] bzw für die [[#Alexa-Fhem_konfigurieren | Konfiguration von Alexa-Fhem]] wird die ''Alexa Skill Id'' benötigt. An diese kommt man wie folgt:<br />
# Anmelden wie unter [[#Alexa_Skills | Alexa Skills]] beschrieben.<br />
# Menüpunkt ''ALEXA'' auswählen, wie [[#Skills_bearbeiten | Skills bearbeiten]] erklärt.<br />
# Beim gewünschten Eintrag auf ''Edit'' klicken<br />[[Datei:Developer.amazon.com-23-alexa_-_alex_skills_kit_-_overview.png|200px]]<br />
# Die Id, die nun oben angezeigt wird, ist die gesuchte. Sie hat typischerweise das Format <code>amzn1.ask.skill.[Zahlen und Bindestriche]</code><br />[[Datei:Aws.amazon.com-06-configure_triggers2.png|200px]]<br />
<br />
<hr /><br />
<br />
=== AWS Lambda Funktion ===<br />
Für folgende Schritte muss man unter der Adresse http://aws.amazon.com angemeldet sein<br />
# Anmeldung auswählen<br />[[Datei:Aws.amazon.com-01-site.png|200px]]<br />
# Anmeldedaten eingeben<br />[[Datei:Aws.amazon.com-02-login.png|200px]]<br />
# Den Punkt ''Lambda'' links auf der Startseite auswählen, bzw. im Menü ''Services'' unter ''Compute'' den Menüpunkt ''Lambda'' auswählen<br />[[Datei:Aws.amazon.com-03-lambda.png|200px]]<br />
<br />
==== AWS Lambda Funktion anlegen ===={{Randnotiz|RNTyp=r|RNText=Die AWS Seiten sehen inzwischen etwas anders aus. Eine angepasste Beschreibung findet sich im {{Link2Forum|Topic=81790|Message=739211|LinkText=Forum}}. Bitte auch die Hinweise dort lesen.}}<br />
# Für eine erste Lambda-Funktion den Punkt ''Get Started Now'' auswählen<br />[[Datei:Aws.amazon.com-04-get_started_now.png|200px]]<br />
# Den Blueprint ''Blank function'' auswählen<br />[[Datei:Aws.amazon.com-05-select_blueprint.png|200px]]<br />
# Im neuen Fenster dann auf den gestrichelten Kasten klicken und ''Alexa Smart Home'' auswählen und mit ''Next'' bestätigen<br />[[Datei:Aws.amazon.com-06-configure_triggers1.png|200px]]<br />
## Achtung, es ist möglich, dass dabei ''Alexa Smart Home'' überhaupt nicht angeboten wird. Dann bitte ganz rechts oben in der Ecke nachsehen, welche Region bzw. welches Land ausgewählt ist. Empfohlen wird, ''Ireland'' auszuwählen. Dann erscheint bei den Funktionen auch ''Alexa Smart Home''.<br />
# Bei ''Application Id'' den Wert eintragen, dessen Ermittlung im Abschnitt [[#Skill_Id_bestimmen | Skill Id bestimmen]] beschrieben wird, den Haken bei ''Enable trigger'' setzen und mit ''Next'' bestätigen <br />[[Datei:Aws.amazon.com-06-configure_triggers3.png|200px]]<br />
# Auf der Konfigurationsseite eingeben:<br />
## ''Name'' -> ''FHEM''<br />
## ''Runtime'' -> Node.js 6.10 (oder 8.10). <br />
## ''Role'' -> ''Choose an existing role'' <br />
### Achtung: wenn es noch keine existing role gibt, zuerst ''Create a custom role'' -> in dem Popup dann ''lambda_basic_execution'' auswählen und auf ''Allow'' klicken sowie bei ''Existing role'' dann ''x'' wählen.<br />
# Auf der Code-Seite ist im großen Textfeld dann der Code aus der Datei ''lambda.js'' im Paket [[#Alexa-Fhem_installieren | Alexa-Fhem]] vollständig einzufügen. Dabei muss der vorhandene Code im Texteil komplett gelöscht, der Teil aus der ''lamda.js'' eingefügt und noch der Hostname im Quellcode an den eigenen Hostnamen angepasst werden. <br />
# Anschließend alles mit ''Next'' bestätigen.<br />[[Datei:Aws.amazon.com-07-configure_function.png|200px]]<br />
# Auf der Übersichtsseite dann ''Create function'' anklicken<br />[[Datei:Aws.amazon.com-08-review.png|200px]]<br />
<br />
==== Trigger für Custom Skill hinzufügen ====<br />
Editiert man eine Lambda-Funktion, werden auf der Seite ''Triggers'' diejenigen Dienste angezeigt, die diese Funktion aufrufen.<br />
* Hier taucht der Trigger ''Alexa Smart Home'' zusammen mit der ''Application Id'' auf, der bei der Einrichtung des SmartHome-Skills eingetragen wurde.<br />
* Zur Verbindung mit dem Custom Skill ist es nötig, einen zweiten Trigger hinzuzufügen. Durch Anklicken von ''Add Trigger'' wird eine Auswahlseite eingeblendet. Im neuen Fenster dann auf den gestrichelten Kasten klicken und ''Alexa Skills Kit' auswählen und mit ''Next'' bestätigen''<br />
<br />
==== ARN der AWS Lambda Funktion bestimmen ====<br />
# Auf der Übersichtsseite oben links den Menüpunkt ''Functions'' aúswählen<br />[[Datei:Aws.amazon.com-09-go_overview.png|200px]]<br />
# Anschließend den Radiobutton der angelegten Funktion ''FHEM'' markieren und im Menü ''Action'' den Punkt ''Show ARN'' auswählen<br />[[Datei:Aws.amazon.com-10-1-show_arn.png|200px]]<br />
# Es wird nun eine ARN Adresse angezeigt, die für den Abschnitt [[#SmartHome_Skill_anlegen| SmartHome Skill anlegen]] benötigt wird<br />[[Datei:Aws.amazon.com-10-2-arn.png|200px]]<br />
<br />
=== Absichern des Zugriffs ===<br />
Natürlich muss der Zugriff auf den von Alexa-Fhem verwendeten Port (default: 3000, Bestandteil des Codes in der AWS Lambda-Funktion) durch die Firewall freigeschaltet werden (auf einer FritzBox unter "Portfreigaben").<br />
<br />
==== Absicherung direkt in Alexa-FHEM ====<br />
Die Kommunikation zwischen Amazon AWS und Alexa-FHEM ist auf die folgenden Arten gesichert:<br />
* Die Verbindung erfolgt per HTTPS<br />
* Es werden nur Verbindung angenommen auf denen ein gültiges Alexa-Event gesendet wird. <br />
* Es werden nur Verbindungen angenommen die ein gültiges und noch nicht abgelaufenes OAuth-Token enthalten. Jedes neue Token wird live bei Amazon auf Gültigkeit geprüft. <br />
* Es werden nur Verbindungen mit lokal konfigurierter Skill-ID angenommen.<br />
* Es ist nicht möglich von außen beliebige FHEM Kommandos zu senden. Die FHEM Kommandos werden nur lokal erzeugt.<br />
<br />
Wer möchte kann Alexa-FHEM natürlich noch weiter absichern. Es gilt aber, dass nicht jedes zusätzliche Glied in der Kette die Sicherheit sondern unter Umständen nur die Angriffsfläche erhöht. Ein falsch konfigurierter und nach aussen offener Apache (oder anderer ReverseProxy) ist unter Umständen ein größeres Risiko als Alexa-FHEM alleine.<br />
<br />
==== Absicherung per ReverseProxy ====<br />
<s>Die Kommunikation zwischen Amazon und FHEM ist wegen der Verwendung von SSL schon verschlüsselt - prinzipiell kann aber jeder von außen mit Alexa-Fhem kommunizieren. Man sollte sich deshalb im Klaren darüber sein, dass dies eine Sicherheitslücke darstellt:</s> Jeder offene Port verleitet zu Angriffen, und mit zunehmender Verbreitung von Alexa steigt auch das Risiko. Es wird deshalb empfohlen, vor den eigentlichen Alexa-Server zur Absicherung einen Apache-Webserver als ReverseProxy zu setzen. Nicht nur ist der Apache eine hervorragend stabile und seit Jahrzehnten getestete Software, sondern die Konfiguration als ReverseProxy erlaubt auch, den Zugriff auf den Alexa-Fhem-Rechner auf die Amazon-Maschinen zu beschränken.<br />
<br />
'''Achtung: Dies ist keine allgemeine Anleitung in Sachen Computersicherheit.''' Im Folgenden gehen wir davon aus, dass <br />
* Grundbegriffe wie Firewall, IP-Ports, SSL und Dynamic DNS vertraut sind<br />
* Ein Apache Webserver (idealerweise auf einer zweiten Maschine) bereits installiert ist und die Konfiguration verstanden wurde (wenn nicht: Es gibt im Netz ''tausende'' von Anleitungen dafür...)<br />
* Ein Servername von einem DynDNS-Anbieter - sagen wir ''myhome.is-my-castle.com'' - bereits von ''außen'' auf unser SmartHome zeigt.<br />
* Alexa-Fhem in einer der oben beschriebenen Basiskonfigurationen läuft, d.h. der Zugriff auf <code>https://myhome.is-my-castle.com:3000</code> ergibt, wie im Punkt [[#Alexa-Fhem_testen|Alexa-Fhem testen]] beschrieben, eine Antwort des Node.js Servers.<br />
<br />
Als erster Schritt zur Absicherung muss das ReverseProxy Modul für den Apache installiert und mit <code>a2enmod</code> aktiviert werden, hierzu sei auf [https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension diese Anleitung] verwiesen. Der zweite Schritt besteht darin, den SSL-Zugriff durch ein Passwort abzusichern. Dazu wird auf dem Apache-Rechner das Programm <br />
<br />
htpasswd <passwdfile> <username><br />
<br />
ausgeführt, das Programm fragt dann nach dem gewünschten Passwort. Wir nehmen im Folgenden an, dass das Passwortfile ''/etc/apache2/htpasswd'' ist, der gesetzte Username ''alexa'' lautet und das Passwort ''my_smarthome'' ist.<br />
<br />
Im dritten Schritt wird nun in das Apache-Konfigurationsfile die Weiterleitung auf den eigentlichen Alexa-Fhem-Rechner eingetragen. Dazu wählen wir, dass von außen der Standard-SSL-Port 443 benutzt werden soll, sowie als Verzeichnisname ''/alexa''. '''Achtung:''' Dieser Code soll '''nicht''' in die Default-Konfiguration des Apache-Webservers. Sondern in eine separate Datei (Dateiname z.B. "fhem"), die ins Unterverzeichnis /etc/apache2/conf.d gestellt wird.<br />
<br />
<VirtualHost *:443><br />
ServerName myhome.is-my-castle.com<br />
SSLEngine on<br />
SSLProxyEngine on<br />
SSLProxyCheckPeerCN off<br />
SSLProxyCheckPeerName off<br />
SSLCertificateKeyFile /etc/apache2/mycert/server.key<br />
SSLCertificateFile /etc/apache2/mycert/server.crt<br />
<Location /alexa><br />
AuthType Basic<br />
AuthName "Authentication Required"<br />
AuthUserFile "/etc/apache2/htpasswd"<br />
Require valid-user<br />
ProxyPass https://<hier IP-Adresse des Alexa-Fhem-Rechners>:3000/<br />
ProxyPassReverse https://<hier IP-Adresse des Alexa-Fhem-Rechners>:3000/<br />
Order deny,allow<br />
Allow from All<br />
</Location><br />
(... Hier eventuell weitere Umleitungen)<br />
</VirtualHost><br />
<br />
Nach einem Neustart des Apache-Servers, dem Schließen des Ports 3000 in der Firewall sowie dem Öffnen des Ports 443 ist der Alexa-Fhem-Rechner von außen nur noch erreichbar durch den Aufruf von <code>https://myhome.is-my-castle.com/alexa</code> und verlangt unmittelbar die Eingabe von Username und Passwort.<br />
<br />
Der vierte Schritt ist nun, den Code der AWS Lambda-Funktion an fünf Stellen zu verändern<br />
<br />
'''const PORT=443;'''<br />
<br />
const HOST='myhome.is-my-castle.com';<br />
<br />
'''const PATH='/alexa';'''<br />
'''const AUTH='alexa:my_smarthome';'''<br />
// entry<br />
exports.handler = function(event, context, callback) {<br />
console.log(`EVENT: ${event}`);<br />
console.log(`CONTEXT: ${context}`); <br />
var post_data = JSON.stringify(event);<br />
var options = {<br />
hostname: HOST,<br />
port: PORT,<br />
//family: 6,<br />
'''path: PATH,'''<br />
method: 'POST',<br />
'''auth: AUTH,'''<br />
rejectUnauthorized: false, // accept self-signed<br />
(etc., Rest des Codes wie gehabt)<br />
<br />
Natürlich muss der Zugriff getestet werden. Bei Beachtung aller dieser Schritte werden alle un-autorisierten Zugriffe von außen abgewehrt. Eine noch weiter gehende Sicherung ist möglich, dazu kann in der Serverkonfiguration der Zugriff auf die Amazon-Domains beschränkt werden. Das ganze Alexa-System ist aber noch in konstanter Weiterentwicklung, diese Domain-Namen können sich also noch ändern.<br />
<br />
== Einrichtung in der Alexa App==<br />
Nachdem die Alexa Skills angelegt wurden, müssen diese noch in der Alexa App eingerichtet werden.<br />
Dafür jeweils per Desktop-Browser auf [http://alexa.amazon.de alexa.amazon.de] anmelden, nicht die App unter iOS oder Android verwenden. Diese hat Probleme mit der OAuth Verknüpfung.<br />
<br />
=== Alexa Skill ===<br />
# Auf ''Skills'' klicken<br />[[Datei:Alexa.amazon.de-01-startseite.png|200px]]<br />
# Oben rechts ''Meine Skills'' bzw. ''Ihre Skills'' auswählen<br />[[Datei:Alexa.amazon.de-03-meine_skills.png|200px]]<br />
# In der Liste der Skills sollte das angelegte FHEM Skill angezeigt werden. Dieses anklicken<br />[[Datei:Alexa.amazon.de-02-liste_skills.png|200px]]<br />
# Oben Rechts in den Details des Skills auf ''Skill aktivieren'' klicken<br />[[Datei:Alexa.amazon.de-04-skill_details.png|200px]]<br />
# In dem neu geöffneten Fenster die Autorisierung bestätigen<br />[[Datei:Alexa.amazon.de-05-amazon_auth.png|200px]]<br />
# Anschließend sollte die Verbindung erfolgreich aufgebaut worden sein <br />[[Datei:Alexa.amazon.de-06-success.png|200px]]<br />
<br />
=== Geräte ===<br />
# Auf http://alexa.amazon.de anmelden<br />
# Auf ''Smart Home'' klicken<br />[[Datei:Alexa.amazon.de-01-startseite.png|200px]]<br />
# Anschließend den Punkt ''Geräte suchen'' anklicken<br />[[Datei:Alexa.amazon.de-07-Gerätesuche.png|200px]]<br />
# Wurde soweit alles korrekt eingerichtet, werden nun die gefundenen Geräte angezeigt.<br />
<br />
Tip: Es macht Sinn, unter ''Meine Gruppen'' Gruppen benannt nach den Räumen einzurichten. Hierdurch kann Alexa die Geräte besser auseinander halten, vor allem wenn die den gleichen Alias (z.B. "Licht") haben.<br />
<br />
== Einrichtung unter FHEM ==<br />
Im Folgenden werden exemplarisch ein paar Geräte beschrieben, die man nutzbringend mit FHEM einsetzen kann.<br />
<br />
Bei Verwendung des Custom Skills übersetzt die Kombination der Attribute ''alexaMapping'' und ''homebridgeMapping'' Sprachbefehle ("Intents") in gerätespezifische Kommandos. <br />
* Das Attribut alexaMapping wird am Alexa-Device gesetzt und dient dazu, erkannte Sprachkommandos in abstrakte Characteristiken zu überführen. Für den einfacheren SmartHome Skill hat darum das Attribut ''alexaMapping'' keine Bedeutung, sondern nur der ''genericDeviceType'' des zu steuernden Gerätes.<br />
* Das Attribut homebridgeMapping wird für beide Skills am zu steuernden Gerät gesetzt und übersetzt diese Charakteristiken in die konkreten Befehle, die das Gerät versteht. Der inhalt des Attributs wird von links nach rechts ausgewertet und ist wie folgt aufgebaut:<br />
** Das Attribut enthält eine durch Leerzeichen getrennte Liste aus Konfigurationen für jeweils eine Characteristik<br />
** Jede einzelne der Characteristik-Konfigurationen besteht aus dem Namen der Characteristik, gefolgt von "=" und einer kommaseparierten Liste von Parametern.<br />
attr <device> homebridgeMapping <Characteristic1>=<param1.1>,<param1.2>,... <Characteristic2>=<param2.1>,<param2.2>,...<br />
** Jeder Parameter besteht entweder aus<br />
*** <code><cmd>:<device>:<reading></code>, hier können nicht verwendete Elemente von links nach rechts weg gelassen werden.<br />
*** <code><name>=<value></code>, hier kann <code><value></code> entweder ein Wert oder semikolonseparierte Liste sein.<br />
*** Oder dem schlüsselwort <code>clear</code>, welches alle vorhandenen (default) Parameter dieser Characteristik löscht. <code>clear</code> kann auch an Stelle einer ganzen Characteristik-Konfiguration stehen<br />
Weiter führende Dokumentation zum homebridgeMapping findet sich unter https://forum.fhem.de/index.php/topic,48558.0.html<br />
<br />
=== Einfacher Schalter ===<br />
* Ein einfacher Schalter, der die set-Kommandos ''on'' und ''off'' kennt, kann direkt mit Alexa-Fhem gekoppelt werden <br />
* Für kompliziertere Aktionen, etwa das Übermitteln eines spezifischen Schaltbefehls an FHEM, ist die Einrichtung eines Dummies zu empfehlen. <br />
Ob Dummy oder nicht, wichtig sind die drei fett gedruckten Zeilen<br />
<br />
define Alexa.Party dummy<br />
<br />
'''attr Alexa.Party alexaName party'''<br />
<br />
'''attr Alexa.Party alexaRoom alexaroom'''<br />
'''attr Alexa.Party genericDeviceType switch'''<br />
attr Alexa.Party group AlexaGeräte<br />
attr Alexa.Party room AlexaRoom<br />
attr Alexa.Party setList on off<br />
<br />
Selbstverständlich kann man diesen Dummy mit einem notify oder DOIF abfangen, um die gewünschte Schaltaktion auszuführen. <br />
<br />
Ein Alternative zum Dummy ist das Anlegen eines readingsProxy, dem die entsprechenden Attribute gegeben werden.<br />
<br />
Weil es sich hierbei um eines der einfachen Geräte handelt, die Alexa selbst im SmartHome Skill bearbeiten kann, ist auch der zweite Schritt bei der Einrichtung in der Alexa App sinnvoll: Der Schalter wird dann im Bereich Smart Home der Alexa App erkannt. Wer ihn auch mit dem Custon Skill bedienen möchte, muss natürlich Sorge tragen, dass der Alexa-Name ''party'' bei den FHEM_Devices auftaucht und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sind (siehe Abschnitt [[##Custom_Skill_anlegen | Custom Skill Anlegen]]).<br />
<br />
=== Wecker ===<br />
Dieses Gerät kann man nur mit dem Custom Skill bedienen, es wird also '''nicht''' im Bereich Smart Home der Alexa App auftauchen. Wir richten einen Dummy ein, wichtig sind wieder die fett gedruckten Zeilen:<br />
<br />
define Alexa.Weckzeit dummy<br />
<br />
'''attr Alexa.Weckzeit alexaName weckzeit'''<br />
<br />
'''attr Alexa.Weckzeit alexaRoom alexaroom'''<br />
attr Alexa.Weckzeit genericDeviceType clock<br />
attr Alexa.Weckzeit group AlexaGeräte<br />
'''attr Alexa.Weckzeit homebridgeMapping Weckzeit=state,cmd=+'''<br />
attr Alexa.Weckzeit room AlexaRoom<br />
'''attr Alexa.Weckzeit setList Weckzeit:time'''<br />
<br />
Das Attribut ''genericDeviceTye'' ist nicht wichtig, weil es ein generisches Device dieser Art gar nicht gibt. Wichtig hingegen ist das Attribut ''homebridgeMapping'' <br />
<br />
Für das Gerät ''MyAlexa'', das in Abschnitt definiert wurde, muss im Attribut ''alexaMapping'' auftauchen<br />
<br />
Weckzeit=verb=stelle,valuePrefix=für;auf,values=AMAZON.TIME,valueSuffix=uhr<br />
<br />
Darüber hinaus muss der Alexa-Name ''weckzeit'' bei den FHEM_Devices auftauchen und die entsprechenden weiteren Slot Types und Example Utterances in der Konfiguration des Custom Skills vorhanden sein (siehe Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]]).<br />
<br />
Der Aufruf dieses Gerätes mit Alexa erfolgt dann z.B. mit den Sätzen<br />
<pre style="width:50%;"><br />
"Alexa, sage <Custom Skill Invocation Name>: Stelle Weckzeit auf Neunzehn Uhr Siebenundzwanzig"<br />
"Alexa, frage <Custom Skill Invocation Name> nach dem Status von Weckzeit"<br />
</pre><br />
Dabei ist natürlich der ''Custom Skill Invocation Name'' durch den Wert zu ersetzen, den man im Abschnitt [[#Custom_Skill_anlegen | Custom Skill Anlegen]] unter Punkt 2 eingetragen hat.<br />
<br />
Zur weiteren Bearbeitung kann man jetzt mit einem DOIF Statusänderungen des Dummies abfangen und durch eine kleine Helperfunktion ins "echte" FHEM weiterleiten.<br />
<br />
define Alexa.Weckzeit.N DOIF (["Alexa.Weckzeit:.*"])({AlexaHelper("Alexa.Weckzeit","$EVENT")}) <br />
<br />
Die Helperfunktion (z.B. in 99_myUtils.pm) stellt aus der übergebenen Zeit (immer im Format dd:mm) eine sprachkompatible Nachricht $nc und einen mit den FHEM-Zeitangaben kompatiblen String $nt zusammen und reicht beide an eine Routine ''changeWakeTime'' weiter (dokumentiert in den [https://www.dpunkt.de/buecher/12387/9783960090120-smarthome-hacks.html Smart Home Hacks]).<br />
sub AlexaHelper($$){<br />
my ($name,$event)=@_;<br />
if( $name eq "Alexa.Weckzeit" ){ <br />
my ($nc,$nt);<br />
#-- volle Stunde----------------------------------------<br />
if( $event =~ /(\d+):00/ ){<br />
$nc=sprintf("%d Uhr",$1);<br />
$nt=sprintf("%02d:00:00",$1);<br />
#-- nicht volle Stunde---------------------------------<br />
}elsif( $event =~ /(\d+):(\d+)/ ){<br />
$nc=sprintf("%d Uhr %d",$1,$2);<br />
$nt=sprintf("%02d:%02d:00",$1,$2);<br />
}<br />
changeWakeTime(\'GalaxyTab.EG\',\'$nc\',\'$nt\');<br />
}<br />
}<br />
<br />
<hr /><br />
<br />
=== Lichtszene ===<br />
Eine Lichtszene wird mit dem Modul LightScene angelegt. Wir gehen davon aus, dass in der Lichtszene die beiden Szenen Alle_An und Alle_Aus, sowie mindestens eine weitere Szene (hier: Sitzgruppe) definiert wurde.<br />
* Nachfolgend wird ein Beispiel beschrieben, wie man eine Lichtszene mit dem einfachen SmartHome Skill steuern kann. Die verwendeten Kommandos sind dann<br />
<pre><br />
"Alexa, schalte (die) Beleuchtung an" -> LightScene Alle_An wird ausgewählt<br />
"Alexa, schalte (die) Beleuchtungsitzgruppe an" -> LightScene Sitzgruppe wird ausgewählt<br />
...<br />
"Alexa, schalte (die) Beleuchtung aus" -> LightScene Alle_Aus wird ausgewählt<br />
</pre><br />
* Künftig wird man LightScene mit dem Custom Skill eventuell direkt steuern können - allerdings hat das einen geringeren WAF, als die Steuerung über den SmartHome Skill: Der Einschaltsatz muss dann mindestens lauten<br />
<pre><br />
"Alexa, sage <Custom Skill Invocation Name>: schalte (die) Beleuchtung an" -> LightScene Alle_An wird ausgewählt<br />
</pre><br />
Dafür wird es aber auch möglich sein direkt die SzenenNamen im gesprochenen Kommando zu verwenden und so auf die Umwege über dummys und ähnliches zu verzichten.<br />
<br />
<br />
Im ersten Schritt wird ein Dummy für die Gesamtbeleuchtung eingerichtet:<br />
<br />
define Alexa.Beleuchtung dummy <br />
<br />
attr Beleuchtung setList on off<br />
<br />
'''attr Alexa.Beleuchtung alexaName beleuchtung'''<br />
'''attr Alexa.Beleuchtung alexaRoom alexaroom'''<br />
'''attr Alexa.Beleuchtung genericDeviceType switch'''<br />
<br />
Anschließend wird für jede vorhandene Lichtszene (außer Alle_An und Alle_Aus) ein weiterer Dummy angelegt:<br />
<br />
define Alexa.Beleuchtung.Sitzgruppe dummy <br />
<br />
attr Beleuchtung setList on off<br />
<br />
'''attr Alexa.Beleuchtung.Sitzgruppe alexaName beleuchtungsitzgruppe'''<br />
'''attr Alexa.Beleuchtung.Sitzgruppe alexaRoom alexaroom'''<br />
'''attr Alexa.Beleuchtung.Sitzgruppe genericDeviceType switch''' <br />
<br />
Die eigentliche Steuerung übernimmt dann ein DOIF<br />
<br />
define Alexa.Beleuchtung.N DOIF<br />
<br />
(["Alexa.Beleuchtung.Sitzgruppe:on"])<br />
<br />
(set <devicename der Lichtszene> scene Sitzgruppe,<br />
set Alexa.Beleuchtung off,<br />
...<weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet><br />
)<br />
DOELSIF<br />
... <weitere on-Events der anderen Szenen werden abgefangen><br />
DOELSEIF<br />
(["Alexa.Beleuchtung:on"])<br />
(set <devicename der Lichtszene> scene Alle_An,<br />
set Alexa.Beleuchtung.Sitzgruppe off,<br />
...<weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet><br />
)<br />
DOELSEIF<br />
(["Alexa.Beleuchtung:off"])<br />
(set <devicename der Lichtszene> scene Alle_Aus,<br />
set Alexa.Beleuchtung.Sitzgruppe off,<br />
...<weitere dummies der anderen Szenen werden ebenfalls ausgeschaltet><br />
)<br />
<br />
Mit diesem DOIF wird ein Radiobutton simuliert, d.h. wie bei den Stationstasten vor Uralt-Radios sorgt die Auswahl einer Szene immer dafür, dass alle anderen Dummies ausgeschaltet werden.<br />
Natürlich kann man das auch mit einem kleinen Perl-Programm erreichen.<br />
<br />
<br />
Zwei andere Ansätze Lichtszenen zu schalten die ohne DOIF auskommen sind im Folgenden beschrieben:<br />
<br />
* Wenn es von Interesse ist die Steuerung mit einer Darstellung in FTUI zu verbinden: Statt der oben beschriebenen dummy Devices kann man readingsProxy Devices mit passenden setFn und valueFn analog zum [[Harmony#Button_f.C3.BCr_eine_bestimmte_Activity_im_Frontend_und_Homekit_.C3.BCber_readingsProxy|diesem Beispiel für harmony aktivitäten]] verwenden.<br />
<br />
* Für jede zu schaltende Szene wird ein dummy angelegt dessen homebridgeMapping direkt auf das LightScene Device zeigt:<br />
<br />
define <dummy> dummy<br />
attr <dummy> setList on off<br />
attr <dummy> genericDeviceType switch<br />
attr <dummy> homebridgeMapping On=<light scene>::state,valueOn=<szene>,cmdOn=scene+<szene>,cmdOff=scene+<szene aus><br />
<br />
Bei der zweiten Variante wird davon ausgegangen das der aktuelle status nicht abgefragt oder angezeigt werden soll. Deshalb gibt es keine direkte RadioButton Funktionalität.<br />
<br />
=== Harmony Hub ===<br />
Ein [https://forum.fhem.de/index.php/topic,60244.msg550298.html#msg550298 HowTo-Beitrag im Forum] beschreibt die Ansteuerung von Harmony-Aktionen über den Custom Skill, beispielsweise für eine Aktion ''ARD'': „Alexa, sage FHEM stelle Anlage auf ARD“.<br />
<br />
== Nutzung ==<br />
Um den Namen zu bestimmen, unter dem ein Gerät mit Alexa angesprochen wird, verwendet Alexa-Fhem mit absteigender Priorität:<br />
* das alexaName Attribut<br />
* das alias Attribut<br />
* das NAME Internal<br />
Damit Alexa ein Gerät eindeutig identifizieren kann, sollten eindeutige Gerätenamen verwendet werden, bestehed möglichst aus einem Wort und ohne Ziffern. Wenn Alexa einen Namen nicht versteht, kann man unter [http://alexa.amazon.de/spa/index.html] nachsehen was tatsächlich verstanden wurde und den Gerätenamen ggf. anpassen.<br />
<br />
=== SmartHome Skill ===<br />
Gruppen (Räume) müssen in der Alexa App konfiguriert werden. Über das API lassen sich nur der Name und die Schalteigenschaften übergeben.<br />
<br />
Nach erfolgreicher Einrichtung des SmartHome Skills sollte Alexa mit den folgenden Befehlen nutzbar sein:<br />
<pre style="width:50%;"><br />
“alexa, schalte <gerät/gruppe> ein”<br />
“alexa, schalte <gerät/gruppe> aus”<br />
“alexa, stelle <gerät/gruppe> auf <wert> prozent”<br />
“alexa, stelle <gerät/gruppe> auf <anzahl> grad”<br />
“alexa, erhöhe <gerät/gruppe> um <anzahl> prozent”<br />
“alexa, reduziere <gerät/gruppe> um <anzahl> prozent”<br />
“alexa, erhöhe <gerät/gruppe> um <anzahl> grad”<br />
“alexa, reduziere <gerät/gruppe> um <anzahl> grad”<br />
</pre><br />
<br />
=== Custom Skill ===<br />
Der Custom Skill erlaubt im Gegensatz zum SmartHome Skill eine weitreichende Konfiguration der möglichen Kommandos. Die Dokumentation ist aktuell noch über diverse Artikel im Wiki verstreut:<br />
<br />
*Das Prinzip der Kommandokonfiguration ist {{Link2Forum|Topic=60244|Message=532513|LinkText=hier}} beschrieben.<br />
*Die erste Umsetzung ist {{Link2Forum|Topic=60244|Message=540117|LinkText=hier}} beschrieben.<br />
*Mehr zu FHEM-Intents und deren Möglichkeiten gibt es {{Link2Forum|Topic=67490|Message=589378|LinkText=hier}}.<br />
*Wie man die Alexa TTS-Engine bei den Antworten auf FHEM-Intents beeinflussen kann {{Link2Forum|Topic=77421|Message=693631|LinkText=hier}}.<br />
<br />
<br />
<br />
TODO: Abfragen, Attribute (alexaMapping, alexaTypes, fhemIntents, articles, prepositions), alles hier sammeln.<br />
<br />
== Troubleshooting ==<br />
<br />
====Allgemeiner Hinweis====<br />
Besonders wichtig ist, dass man sich sehr genau an diese Anleitung hält. Ein häufiger Fehler ist, dass die einfachen Anführungszeichen in der Anleitung unter '''AWS Lambda Funktion anlegen''' Punkt 8 einfach weggelassen werden. Diese sind zwingend notwendig. Es darf auch nur der reine Hostname eingetragen werden. Also kein ''http://'' davor. Entweder eine feste IP Adresse oder den Hostnamen, um den Rechner zu erreichen, den ihr über den Port 3000 freigegeben habt. Das sollte dann so aussehen:<br />
<pre style="width:50%;"><br />
const PORT=3000;<br />
const HOST='mein.host.name';<br />
</pre><br />
<br />
====Freigabe von Port 3000====<br />
{{Randnotiz|RNTyp=Fehl|RNText=Derzeit müsst ihr über einen echten IPv4 Anschluss verfügen, damit der Amazon Lambda-Server euch erreichen kann. DS-Lite Anschlüsse wie die von <b>UnityMedia</b> z.B. funktionieren derzeit leider nicht. Eine möglicher "Workaround" wird hier beschrieben: https://forum.fhem.de/index.php/topic,60244.msg518276.html#msg518276}}<br />
<br />
Auf dem Router muss der Port 3000 Protokoll TCP freigegeben werden. D.h. von außen muss man wenn man den Port 3000 aufruft, auf dem intern laufenden node.js Alexa-Dienst zugreifen können.<br />
Je nach Router gestaltet sich das Portforwarding bzw. die Portumleitung etwas schwieriger.<br />
<br />
Bei einem Speedport Router der Telekom beispielsweise, muss der Router komplett neu gestartet werden, wenn die Portfreigabe eingerichtet wurde. <br />
<br />
Bei der Fritz!Box ist das nicht nötig, bei dieser finden die Freigabe unter ''Internet -> Freigaben -> Portfreigaben'' statt. Dort wählt man dann den Rechner aus und richtet eine neue Freigabe ein. Wichtig hierbei ist, dass man Portfreigabe auswählt und nicht MyFRITZ!-Freigabe. Bei Port von bis trägt man 3000 ein, bei Port extern ebenfalls.<br />
<br />
Um die Portweiterleitung zu testen, solltet ihr euch auch nicht im gleichen Netz befinden. Viele Router blockieren den Netzaufruf aus dem gleichen Netz. Am besten testet ihr es, wenn ihr an eurem Mobiltelefon W-LAN deaktiviert und im Browser folgende Seite aufruft: ''https://mein.hostname:3000''. Wenn ihr im Browser dann einen Quellcode von Alexa seht, funktioniert die Portumleitung.<br />
<br />
Wenn bis hier alles funktioniert und es läuft dennoch nicht rund, liegt das Problem woanders. Kommt z.B. bei der Gerätesuche kein Request rein (sichtbar auf dem Bildschirm, wenn bin/alexa gestartet wurden), kann evtl. der Lambda-Dienst falsch konfiguriert sein.<br />
<br />
====Probleme mit node.js - npm install====<br />
<br />
Falls eine Fehlermeldung auftritt, dass "npm" nicht gefunden werden kann, bitte NodeJS entsprechend der Anleitung im Homebridge-Artikel vorgehen: [[Homebridge_einrichten#NodeJS_installieren|NodeJS installieren]] sowie [[Homebridge_einrichten#Python.2C_g.2B.2B.2C_MDNS_installieren|Python, g++, MDNS installieren]], siehe auch folgenden Abschnitt.<br />
<br />
====Es kommen diverse Fehlermeldungen beim Starten von alexa-fhem und es beendet sich====<br />
Wenn man auf der Konsole angemeldet ist, den Befehl<syntaxhighlight lang="bash" style="width:50%;">node -v</syntaxhighlight>eingeben. Ist die Version niedriger als die geforderte 0.12, muss eine neuere installiert werden. Hier darf man dann im Wiki unter [[Homebridge_einrichten#NodeJS_installieren]] nachschauen. NodeJS V4 sollte hierbei schon ausreichen. Solange die node.js Version nicht passt, gar nicht groß rum experimentieren! Bitte beachtet, dass alle Voraussetzungen unter [[Alexa-Fhem#Voraussetzungen]] erfüllt sind! Keine Experimente mit Versionen die darunter liegen.<br />
<br />
====Fehlermeldung ''NAT-PMP failed: Error: timeout'' Fehler angezeigt beim Start von alexa-fhem====<br />
Wenn ihr dann alexa-fhem über die Konsole startet und bekommt folgenden Fehler: ''NAT-PMP failed: Error: timeout'', lasst euch davon nicht irritieren. Das bedeutet lediglich, dass der Port nicht automatich freigegeben wurde über uPNP. Alternativ prüft, ob die Funktion der Portfreigabe via uPNP auf eurem Router aktiviert ist.<br />
<br />
====Nach Start auf der Console beendet sich Alexa-FHEM sofort wieder====<br />
Unmittelbar nach dem Start von Alexa-FHEM werden ein paar UPNP Fehlermeldungen ausgegeben. Unmittelbar danach beendet sich Alexa-FHEM wieder. <br />
<br />
Viele scheinen ein Problem mit UPNP auf dem Raspberry Pi zu haben. Wenn dieses Problem auftritt einfach in der <code>~/.alexa/config.json</code> die folgenden Zeilen rauslöschen:<br />
<br />
<pre><br />
"nat-pmp": "10.0.1.1",<br />
"nat-upnp": true,<br />
</pre><br />
<br />
Jetzt erneut Alexa-FHEM starten. Sollte nun laufen.<br />
<br />
====Was ist zu tun, wenn alexa-fhem keine Geräte findet?====<br />
Zunächst müssen die Geräte, die angesprochen werden wollen, unter FHEM ein neues Attribut zugewiesen bekommen. Dazu das Gerät in FHEM öffnen und das Attribut ''genericDeviceType switch'' hinzufügen, wenn es ein Schalter mit der Funktiona AN/AUS sein soll. Wenn man will, kann man dem Gerät jetzt noch über das Attribut ''alias'' einen besseren Namen geben, mit dem Alexa das Gerät dann auch finden kann.<br />
Anschließend muss alexa-fhem neu gestartet werden und die definierten Geräte sollten nun gefunden werden.<br />
<br />
====Was ist zu tun, wenn Alexa zwar Geräte findet, diese aber nicht angesprochen werden können?====<br />
Zuerst die Informationen zum Datenfluss ganz oben ansehen. Dann am besten von hinten nach vorne vorgehen:<br />
* wenn nichts bei alexa-fhem ankommt: port forwarding prüfen<br />
* wenn lambda.js nichts los wird: im cloudwatch log nachsehen<br />
* wenn bei lambda.js nichts ankommt: den trigger prüfen<br />
<br />
<br />
Zunächst sollte man sich unter ''http://aws.amazon.com'' das Logfile seiner erstellten Funktion anschauen. Ist überhaupt ein Logfile vorhanden? Falls nicht, liegt es vermutlich am Trigger.<br />
Den solltet ihr überprüfen. Scheinbar kommt es hin und wieder vor, dass dieser nicht gesetzt ist. Dazu einfach auf ''Triggers'' klicken und mit ''Add trigger'' erneut einen anlegen. Hier muss, wie in der Anleitung unter '''AWS Lambda Funktion anlegen''' Punkt 7, die ''Application Id'' stehen und der Haken bei ''Enable trigger'' gesetzt sein. Dann alexa-fhem neu starten.<br />
Wenn ihr Änderungen gemacht habt und den alexa-fhem Dienst noch nicht neu gestartet habt, wäre jetzt der richtige Zeitpunkt. Fürs Debugging empfiehlt es sich, alexa-fhem in einer Konsole laufen zu lassen, um eingehende Anfragen mitverfolgen zu können.<br />
<br />
<br />
Es kann sein, dass immer noch keine Log im Cloudwatch ([http://docs.aws.amazon.com/de_de/lambda/latest/dg/monitoring-functions-logs.html]) zu sehen ist. In dem Fall hilft es, eine neue Role Policy anzulegen. <br />
* in der AWS Console [https://console.aws.amazon.com] oben links auf Services klicken, und in der Gruppe "Security, Identity & Compliance" auf IAM klicken<br />
* links auf Roles klicken<br />
* Auf dem Knopf "Create Role" klicken<br />
* AWS Services > Lambda auswählen, unten auf Next:Permissions klicken<br />
* im Filter / Policy Type, "log" eintragen (ohne quotes)<br />
* CloudWatchLogsFullAccess hacken, auf Next:Review unten klicken<br />
* Name vergeben und mit "Create role" bestätigen<br />
* Oben links auf Services klicken, und in der Gruppe "Compute", auf Lambda klicken<br />
* auf den Name der Funktion klicken<br />
* Reiter Configuration auswählen<br />
* in Existing Role, den neukreierten Role auswählen<br />
* oben auf Save (und Testen wenn gewünscht) klicken.<br />
Schon sollte eine neue Gruppe im Cloudwatch sichtbar sein. Die Suche von den Devices in Alexa wiederholen, und die Logs analysieren<br />
<br />
====Was ist zu tun, wenn sich der Alexa-Service nicht starten lässt?====<br />
{{Randnotiz|RNTyp=[g|Info]|RNText=Der User in der User= Directive von alexa.service muss Ausführungsrecht auf dem alexa binary haben (x), so wie auch mind. Lesezugriff auf dem Verzeichnis nach -U Option in der ExecStart= Directive und auch auf dem WorkingDirectory }}<br />
Schaut bitte in das Unterverzeichnis [alexa-fhem (also dort, wo Ihr Alexa-FHEM instelliert habt]/bin. Die dort befindliche Datei ''alexa'' muss ausführbar sein. Also z.B. so:<br />
<syntaxhighlight lang="bash" style="width:70%;">2755327 4 -rwxr-xr-x 1 pi pi 339 Nov 26 23:20 alexa</syntaxhighlight><br />
Sollte dies nicht der Fall sein bitte mit:<br />
<syntaxhighlight lang="bash" style="width:70%;">chmod +x alexa</syntaxhighlight><br />
die Datei ausführbar machen. Sofern der User "pi" Eigentümer ist, ist kein sudo erforderlich.<br />
<br />
Eine lauffähige Konfiguration ist {{Link2Forum|Topic=71612|Message=668383|LinkText=hier}} zu sehen.<br />
<br />
Ein Fehler in der Rechtekonfiguration führt in der Regel zu folgendem Ergebnis nach <code>sudo systemctl status alexa</code>:<br />
<br />
<syntaxhighlight lang="bash"> Loaded: loaded (/etc/systemd/system/alexa.service; enabled)<br />
Active: activating (auto-restart) (Result: exit-code) since mer. 2017-09-06 02:33:23 CEST; 3s ago<br />
Process: 18332 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa (code=exited, status=217/USER)<br />
Main PID: 18332 (code=exited, status=217/USER)</syntaxhighlight><br />
<br />
====Wie kann ich via Alexa-FHEM auf FHEM zugreifen, wenn der Port mit Benutzername/Kennwort geschützt ist?====<br />
<br />
Hierzu muss die Datei <code>~/.alexa/config.json</code> geöffnet werden und der Abschnitt "connections" um folgende Zeile ergänzt werden:<pre><br />
"auth": {"user": "fhem", "pass": "fhempassword"},</pre><br />
Bei Verwendung von SSL bei FHEM muss auch noch <pre><br />
"ssl": true,</pre> hinzugefügt werden<br />
<br />
==Weitergehende Informationen==<br />
*[[Alexa_und_Mappings]]<br />
*[[Alexa_Tipps_und_Kniffe]]<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Sprachsteuerung]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Diskussion:1W-IF-ETH&diff=34819Diskussion:1W-IF-ETH2021-02-10T23:30:51Z<p>Jostar: Die Seite wurde neu angelegt: „https://wiki.fhem.de/wiki/1W-IF-ETH scheint es nicht mehr zu geben, die Links sind down, die Firma scheint nur noch ein großes Produkt im Sortiment zu haben?“</p>
<hr />
<div>https://wiki.fhem.de/wiki/1W-IF-ETH scheint es nicht mehr zu geben, die Links sind down, die Firma scheint nur noch ein großes Produkt im Sortiment zu haben?</div>Jostarhttp://wiki.fhem.de/w/index.php?title=OW2S0SMSGUARD&diff=34783OW2S0SMSGUARD2021-02-09T21:37:24Z<p>Jostar: </p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=1-Wire Busmaster mit 2x S0-Interface und USB-Anschluss<br />
|ModType=d<br />
|ModForumArea=1Wire<br />
|ModFTopic=28447<br />
|ModTechName=00_OW2S0SMSGUARD<br />
|ModOwner= {{Link2FU|4065|Wzut}} }}<br />
<br />
{{Baustelle}}<br />
<br />
==Einführung==<br />
{{Randnotiz|RNTyp=w|RNText=Das Modul kann ab 4.2.2021 via Update bezogen werden.}}<br />
Das Modul [[OW2S0SMSGUARD]] ermöglicht den direkten Betrieb des ''1Wire-USB-Masters'' in FHEM.<ref>https://www.sms-guard.org/downloads/1wire-USB-Master.pdf Datenblatt</ref><br />
So können leicht zwei Zählerstände erzeugt werden, zum Beispiel für Gas- bzw. Wasserzähler. An die Schraubkontakte lassen sich außerdem 1-Wire Geräte anschließen (maximal 64 Stück), allerdings werden nur ausgewählte Geräte unterstützt (Stand Firmware u1-02f vom 09.04.2020): "Keinesfalls ist unser 1wire-USB-Master mit einem Treiber einzulesen, der ein Busmaster-IC wie DS2482 erwartet".<br />
<br />
Positiv berichtet wurde der Betrieb von bis jetzt 32 Sensoren (DS18b20) und einer Gesamtbuslänge (Cat5) von 200 Metern ohne einen Ausfall.<br />
:''SMS-GUARD sind kompakte Schaltmodule in diversen Funktionsvarianten, z.B. mit Funknetzanbindung, der Firma "easy automation components GmbH"''<ref>https://www.sms-guard.org/dwasist.htm easy automation components GmbH Internetseiten des Anbieters</ref><br />
<br />
Der Vorteil der SMSGUARD-Lösung: nun ja, einfach an USB anschließen, keine extra Spannungsversorgung. Bezug über einen Shop in Potsdam.<ref>https://www.sms-guard.org/shop.php WebShop</ref><br />
<br />
Die Firmware wurde von 2014 bis 2020 erweitert.<br />
<br />
== Modulversion Jahr 2004 ==<br />
Es werden automatisch Slave-Module (Typ "OW2S0SLAVE") für jedes Gerät am Bus angelegt. <br />
Das Attribut "disable" wird nicht unterstützt.<br />
<br />
== Modulversion Jahr 2005 ==<br />
[[Datei:Smsguard2020.PNG|mini]]<br />
Das Modul bietet auch ein Reset der Zählerstände der beiden S0-Zähler.<br />
DS2401 werden nur in der id als Internal angezeigt. Mittels userreadings bekommt man das aber gelöst:<br />
<br />
<code>userReadings dev1 { InternalVal($NAME,"OW-Dev1","") }</code><br />
<br />
== Modulversion Jahr 2021 ==<br />
<br />
Es müssen keine Slave Device mehr erzeugt werden, alle OW Teilnehmer sind Readings direkt im Device.<br />
Da die IDs als nackte Readings etwas unschön sind, hat das Modul ein neues Attribut map_OWIDs bekommen.<br />
Damit können die abstrackten IDs direkt in sprechende Namen überführt werden , Bsp:<br />
<code>attr <name> map_OWIDs 10D64CBF02080077=Keller,018468411C0000BA=TestDS</code><br />
<br />
Das Attribut "useSubDevices" erzeugt für jeden Busteilnehmer ein eigenes Gerät in FHEM.<br />
<br />
DS2401 hat im Reading "presence" die Werte "absent" oder "present", im Reading "last_present" den Zeitstempel des letzten Kontakts zum Bus.<br />
DS18xx haben im Reading ihren aktuellen Temperaturwert.<br />
<br />
== Sensoren ==<br />
Laut Herstellerdokumentation: "DS18B20, DS18S20, sowie intelligente 1wire-Sensorbus-Module, wie SB-S0-Module (S0-Zähler), SB-SS-S0-Module (Stromsensor als Klappwandler), SB-D0-Module (Mehrrichtungs-Stromzähler) etc."<br />
<br />
Funktionieren:<br />
* DS1820<br />
* DS1822<br />
* DS18B20 (Temperatursensor, wasserdicht)<br />
* DS2401 (nur ID) Verwendung nach<br />
** a) Nachricht wenn ein neuer Teilnehmer hinzukommt (Nachteil, in dem kurzen Moment ist der Busmaster blind, könnte ggf. für kurze Zeit eine andere Nachricht nicht empfangen)<br />
** b) Nachricht wenn ein bestehender Teilnehmer verschwindet (aus meiner Sicht keine Nachteile, der dauernde Stromverbrauch ist minimal)<br />
<br />
Funktionieren nicht:<br />
* DHT22<br />
<br />
== Protokoll ==<br />
Der 1Wire-USB-Master kann recht einfach mit einem seriellen Terminal auf Funktion überprüft werden:<br />
# serielle Schnittstelle einstellen auf 115200 8-N-1 kein Handshake RTS/CTS, kein On/Off Protokoll<br />
# Startbefehl eingeben, damit wird auch die Wandlung im Sensor ausgelöst: $?<CR><br />
# mit angeschlossenen 1-Wire Sensoren werden die gefundenen IDs gelistet: $0;o;1080974B020800BA; das „o“ steht für „ok“ und die Checksumme der ID wurde geprüft und ist ok<br />
# danach gibt der 1Wire-USB-Master die beiden S0-Zählerstände zurück: $S0;0;0;<br />
# die Werte der 1-Wire Sensoren können nach 1s abgefragt werden mit: $0<CR> ... $63<CR><br />
# danach gibt der 1Wire-USB-Master die Daten des Sensors zurück: $0;o;31;00;4B;46;FF;FF;07;10;8D;64; das „o“ steht für „ok“ und die Checksumme (9.Byte) der 8 Datenbytes wurde geprüft und ist ok („n“ wäre „nicht ok“). Die Beschreibung der 8 Datenbytes in Hex ist dem Sensordatenblatt zu entnehmen. Das 10.Byte ist eine Checksumme für die serielle Übertragung (Byte1-9 aufaddiert)<br />
<br />
== Links ==<br />
<references/><br />
<br />
[[Kategorie:1-Wire]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=OW2S0SMSGUARD&diff=34707OW2S0SMSGUARD2021-02-03T21:50:03Z<p>Jostar: typo, refs, funktionierende Sensoren ergänzt</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=1-Wire Busmaster mit 2x S0-Interface und USB-Anschluss<br />
|ModType=x<br />
|ModForumArea=1Wire<br />
|ModFTopic=28447<br />
|ModTechName=00_OW2S0SMSGUARD_2021<br />
|ModOwner= {{Link2FU|4065|Wzut}} }}<br />
<br />
{{Baustelle}}<br />
<br />
==Einführung==<br />
{{Randnotiz|RNTyp=w|RNText=Das Modul kann ab 4.2.2021 via Update bezogen werden.}}<br />
Das Modul [[OW2S0SMSGUARD]] ermöglicht den direkten Betrieb des ''1Wire-USB-Masters'' in FHEM.<ref>https://www.sms-guard.org/downloads/1wire-USB-Master.pdf Datenblatt</ref><br />
So können leicht zwei Zählerstände erzeugt werden, zum Beispiel für Gas- bzw. Wasserzähler. An die Schraubkontakte lassen sich außerdem 1-wire-Geräte anschließen (maximal 64 Stück), allerdings werden nur ausgewählte Geräte unterstützt (Stand Firmware u1-02f vom 09.04.2020): "Keinesfalls ist unser 1wire-USB-Master mit einem Treiber einzulesen, der ein Busmaster-IC wie DS2482 erwartet".<br />
<br />
Positiv berichtet wurde der Betrieb von bis jetzt 32 Sensoren (DS18b20) und einer Gesamtbuslänge (Cat5) von 200 Metern ohne einen Ausfall.<br />
:''SMS-GUARD sind kompakte Schaltmodule in diversen Funktionsvarianten, z.B. mit Funknetzanbindung, der Firma "easy automation components GmbH"''<ref>https://www.sms-guard.org/dwasist.htm easy automation components GmbH Internetseiten des Anbieters</ref><br />
<br />
Der Vorteil der SMSGUARD-Lösung: nun ja, einfach an USB anschließen, keine extra Spannungsversorgung. Bezug über einen Shop in Potsdam.<ref>https://www.sms-guard.org/shop.php WebShop</ref><br />
<br />
Die Firmware wurde von 2014 bis 2020 erweitert.<br />
<br />
== Modulversion Jahr 2004 ==<br />
Es werden automatisch Slave-Module (Typ "OW2S0SLAVE") für jedes Gerät am Bus angelegt. <br />
Das Attribut "disable" wird nicht unterstützt.<br />
<br />
== Modulversion Jahr 2005 ==<br />
[[Datei:Smsguard2020.PNG|mini]]<br />
Das Modul bietet auch ein Reset der Zählerstände der beiden S0-Zähler.<br />
DS2401 werden nur in der id als Internal angezeigt. Mittels userreadings bekommt man das aber gelöst:<br />
<br />
<code>userReadings dev1 { InternalVal($NAME,"OW-Dev1","") }</code><br />
<br />
== Modulversion Jahr 2021 ==<br />
<br />
Es müssen keine Slave Device mehr erzeugt werden, alle OW Teilnehmer sind Readings direkt im Device.<br />
Da die IDs als nackte Readings etwas unschön sind, hat das Modul ein neues Attribut map_OWIDs bekommen.<br />
Damit können die abstrackten IDs direkt in sprechende Namen überführt werden , Bsp:<br />
<code>attr <name> map_OWIDs 10D64CBF02080077=Keller,018468411C0000BA=TestDS</code><br />
<br />
Mittels Attribut "useSubDevices" erzeugt für jeden Busteilnehmer ein eigenes Gerät in FHEM.<br />
<br />
Die DS2401 haben im Reading "presence" die Werte "absent" oder "present", DS18xx ihren aktuellen Temperaturwert.<br />
<br />
== Sensoren ==<br />
Funktionieren:<br />
* DS1820<br />
* DS1822<br />
* DS18B20 (Temperatursensor, wasserdicht)<br />
* DS2401 (nur ID) Verwendung nach<br />
** a) Nachricht wenn ein neuer Teilnehmer hinzukommt (Nachteil, in dem kurzen Moment ist der Busmaster blind, könnte ggf. für kurze Zeit eine andere Nachricht nicht empfangen)<br />
** b) Nachricht wenn ein bestehender Teilnehmer verschwindet (aus meiner Sicht keine Nachteile, der dauernde Stromverbrauch ist minimal)<br />
<br />
Funktionieren nicht:<br />
* DHT22<br />
<br />
== Protokoll ==<br />
Der 1Wire-USB-Master kann recht einfach mit einem seriellen Terminal auf Funktion überprüft werden:<br />
# serielle Schnittstelle einstellen auf 115200 8-N-1 kein Handshake RTS/CTS, kein On/Off Protokoll<br />
# Startbefehl eingeben, damit wird auch die Wandlung im Sensor ausgelöst: $?<CR><br />
# mit angeschlossenen 1-Wire Sensoren werden die gefundenen IDs gelistet: $0;o;1080974B020800BA; das „o“ steht für „ok“ und die Checksumme der ID wurde geprüft und ist ok<br />
# danach gibt der 1Wire-USB-Master die beiden S0-Zählerstände zurück: $S0;0;0;<br />
# die Werte der 1-Wire Sensoren können nach 1s abgefragt werden mit: $0<CR> ... $63<CR><br />
# danach gibt der 1Wire-USB-Master die Daten des Sensors zurück: $0;o;31;00;4B;46;FF;FF;07;10;8D;64; das „o“ steht für „ok“ und die Checksumme (9.Byte) der 8 Datenbytes wurde geprüft und ist ok („n“ wäre „nicht ok“). Die Beschreibung der 8 Datenbytes in Hex ist dem Sensordatenblatt zu entnehmen. Das 10.Byte ist eine Checksumme für die serielle Übertragung (Byte1-9 aufaddiert)<br />
<br />
== Links ==<br />
<references/><br />
<br />
[[Kategorie:1-Wire]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=FHEM2FHEM&diff=34679FHEM2FHEM2021-01-30T22:17:21Z<p>Jostar: /* <host>[:<portnr>][:SSL] */ typo</p>
<hr />
<div>{{SEITENTITEL:FHEM2FHEM}} <br />
{{Infobox Modul<br />
|ModPurpose=Hilfsmodul, um mehrere FHEM-Installationen zu verbinden<br />
|ModType=h<br />
|ModForumArea=Automatisierung<br />
|ModTechName=93_FHEM2FHEM.pm<br />
|ModOwner=rudolfkoenig ({{Link2FU|8|Forum}} / [[Benutzer Diskussion:Rudolfkoenig|Wiki]])<br />
}}<br />
[[FHEM2FHEM]] ist ein Hilfsmodul mit dem mehrere FHEM-Installationen - auch auf verschiedenen Rechnern - verbunden werden können.<br />
<br />
__TOC__<br />
<br />
{{Todo|Fehlerkontrolle, Formatierung, Ergänzungen aus dem Forum, Bedeutung des Attributs dummy, Ergänzung ''Bekannte Probleme''}}<br />
<br />
== Features / Funktionen ==<br />
Dieses Modul bietet zwei grundsätzlich unterschiedliche Funktionsmöglichkeiten: <br />
# Es kann alle Ereignisse (Events) von einem entfernten (remote) host abgreifen und an die lokale FHEM Instanz zur Weiterverarbeitung weiterreichen.<br />
# Es kann die unaufbereiteten Ereignisse (raw messages) von einem entfernten (remote) host und bestimmten Interfaces (z.B.CUL_0, keine einzelnen Endgeräte/Aktoren) abgreifen und an die lokale FHEM Instanz weiterreichen.<br />
<br />
Die Kommunikation ist unidirektional bzw. die Daten werden auf der lokalen Instanz von einer entfernten Instanz abgegriffen (pull Verfahren). Ein Element vom Type FHEM2FHEM wird auf der lokalen Instanz definiert.<br />
<br />
== Anwendung ==<br />
<br />
Beispiele für die Anwendung sind:<br />
* Verteilung der Interfaces auf mehrere FHEM Instanzen, <br />
** da an einer Hardwareinstanz ggf. zu wenig USB-Ports vorhanden sind, um stabil betrieben werden zu könne (z.B. RPi),<br />
** um eine zeitkritische und eine weniger zeitkritische Hardwareinstanz zu betreiben, da bestimmte Module die FHEM Instanz für eine gewisse Zeit verzögern können (Verzögerungen verursachen z.B. disconnects des HMLan beim keepalive),<br />
** um die Hauptinstanz von bestimmten Verarbeitungsschritten der Events zu entlasten, obwohl man hier zunächst untersuchen sollte, ob die Verarbeitung nicht eleganter und weniger prozessorintensiv ausgeführt werden kann. <br />
* Überbrückung längerer örtlicher Distanzen, <br />
** da z.B. die Funkreichweite bestimmter Signale für einen stabilen Betrieb zu gering ist,<br />
** da ein Sensor nur lokal betrieben werden kann und die Distanz zur Hauptinstanz zu groß ist, z.B. bei direkt per USB an der Hardware Instanz angeschlossen Sensoren (CO2/VOC-Sensor)<br />
<br />
Lokale und remote FHEM-Instanz sind über ein Netzwerk verbunden.<br />
<br />
=== Definition ===<br />
<br />
Die Definition erfolgt über<br />
<pre><br />
define <name> FHEM2FHEM <host>[:<portnr>][:SSL] [LOG:regexp|RAW:devicename] {portpassword} <br />
</pre><br />
<br />
==== Parameter ====<br />
<br />
Die Parameter der Definition beziehen sich auf die Verbindung zur entfernten FHEM-Instanz, zum Type der übernommenen Events und auf das Portpasswort, falls bei der entfernten FHEM-Instanz vergeben.<br />
<br />
===== <host>[:<portnr>][:SSL] =====<br />
<br />
Über <host> ist die IP-Adresse der entfernten FHEM-Instanz zu definieren. Die Portnummer bezieht sich auf die Nummer der Telnetschnittstelle, wie sie auf der entfernten Instanz vergeben ist. Falls nicht explizit verändert, ist diese Nummer standardmäßig 7072. Der letzte Zusatz :SSL muss angegeben werden, wenn die entfernte Instanz eine SSL-verschlüsselte Kommunikation voraussetzt. Ist dieses der Fall, muss auch auf dem lokalen Host das Perl-Modul IO::Socket::SSL installiert sein.<br />
<br />
===== [LOG:regexp|RAW:devicename] =====<br />
Der nächste Parameter spezifiziert den Verbindungs-Typ:<br />
; LOG<br />
Bei Verwendung dieses Verbindungstyps werden alle Ereignisse (Events) der entfernten FHEM-Instanz empfangen. Die Ereignisse sehen aus wie die, die nach dem <code>inform on</code> Befehl erzeugt werden. Sie können wie lokale Ereignisse durch FileLog oder notify genutzt werden und mit einem regulären Ausdruck gefiltert werden. Die Syntax dafür ist unter der notify-Definition beschrieben.<br />
<br />
Einschränkungen: Geräte der entfernten FHEM-Instanz werden über autocreate lokal nicht automatisch angelegt und können weder mit list angezeigt noch lokal angesprochen werden. <br />
<br />
Falls auf beiden FHEM-Installationen Geräte mit gleichem Namen angelegt wurden und die Geräte auch beide dasselbe Ereignis empfangen können (z.B. wenn an beiden Installationen CULs angeschlossen sind), werden logischer Weise alle FileLogs und notifys doppelt, einmal über das lokale Ereignis, einmal über das remote Ereignis ausgelöst.<br />
<br />
<br />
; RAW<br />
Bei diesem Verbindungstyp werden unaufbereitete Ereignisse (raw messages) des remote FHEM-Geräts devicename genau so empfangen, als wäre das Gerät lokal verbunden.<br />
<br />
Einschränkungen: Nur Geräte, welche die "Dispatch-Funktion" unterstützen (CUL, FHZ, CM11, SISPM, RFXCOM, TCM, TRX, TUL), erzeugen raw messages. Für jedes entfernte Gerät, von dem raw messages abgegriffen werden sollen, muss ein eigenes FHEM2FHEM Objekt definiert werden. Dabei ist darauf zu achten, dass der angegebene Name für <code>devicename </code> gleichlautend ist, wie der Devicename auf der entfernten FHEM-Instanz. <br />
<br />
Zusätzlich der Definition des FHEM2FHEM Elements, muss für das übernommene Geräte auf der lokalen Instanz ein Dummygerät gleichen Typs, d.h. als device-node "none" definiert werden. An dieses Dummygerät werden alle raw messages von FHME2FHEM weitergeleitet, weshalb auch alle notwendigen Attribute lokal für dieses Dummygerät gesetzt sein müssen (z.B. rfmode, wenn die remote CUL im HomeMatic-Modus läuft).<br />
Die Verwendung bereits bestehender lokaler Geräte für die Weiterverarbeitung des raw messages ist zu vermeiden, weil sonst die Duplikatsfilterung nicht richtig funktioniert (siehe dupTimeout).<br />
<br />
Komponenten, die über das Dummygerät erkannt werden, werden über autocreate automatisch angelegt.<br />
<br />
===== {portpassword} =====<br />
<br />
Falls ein Portpasswort auf der entfernten FHEM-Instanz gesetzt ist, übergibt dieser Parameter das entsprechende Passwort.<br />
<br />
=== Attribute ===<br />
<br />
==== dummy ====<br />
???<br />
<br />
==== disable ====<br />
<br />
Deaktiviert die Verbindung.<br />
<br />
==== disableForIntervals ====<br />
<br />
Das Attribut ist eine leerzeichengetrennte Liste von Minuszeichen- getrennten HH:MM Paaren. Falls die aktuelle Uhrzeit zwischen diesen Werten fällt, dann wird die Ausführung, wie beim disable, ausgesetzt. Eine genaue Beschreibung findet sich in der {{Link2CmdRef|Anker=disabledForIntervals}} des Moduls <code>at</code>.<br />
<br />
<br />
=== Set ===<br />
<br />
==== reopen ====<br />
<br />
Öffnet die Verbindung erneut.<br />
<br />
== Voraussetzungen ==<br />
<br />
* Zwei FHEM-Instanzen verbunden über ein Netzwerk mit der Möglichkeit, von der einen (lokal) auf den Telnetport der anderen (entfernte/remote) zuzugreifen zu können.<br />
* Aktivierter Telnetport der entfernten FHEM-Instanz. Diese ist standardmäßig aktiviert.<br />
* Fall das Perl-Modul für die SSL-Verschlüsselung nicht installiert sein, so kann dieses je nach Platform z.B. über folgenden Befehl nachinstalliert werden:<br />
<pre><br />
sudo apt-get install libwww-perl<br />
</pre><br />
<br />
== Anwendungsbeispiele ==<br />
=== Type LOG ===<br />
<br />
==== Verbindung von 2 Fritzboxen ====<br />
<br />
Ich habe lange gesucht, wie ich FHEM2FHEM einsetzen kann. Das folgende habe ich mir (Danke an Rübezahl) von den entsprechenden Seiten zusammengeklaubt:<br />
<br />
Code FritzBox 1 (entfernte Instanz):<br />
<nowiki>define forwardRemote dummy</nowiki><br />
<br />
Code FritzBox 2 (lokale Instanz):<br />
define Remoteserver FHEM2FHEM 192.168.178.1:7072 LOG:.*<br />
<br />
define executeRemote notify forwardRemote {fhem "$EVENT"}<br />
<br />
Gast-WLAN bei beiden Boxen ausschalten (siehe Beitrag "Fritzbox: WLAN ein/ausschalten", Dummys, notifys und 99_myUtils_irgendwas.pm müssen natürlich auf beiden Boxen vorhanden sein):<br />
<br />
Aufruf FritzBox 1:<br />
fhem("set D_G_WLAN off");;fhem("set forwardRemote set D_G_WLAN off");;<br />
<br />
Für die eher visuell orientierten unter uns sieht das dann so aus:<br />
<br />
Fritzbox 1 (Sender) Fritzbox 2 (Empfänger)<br />
192.168.178.1 192.168.178.10<br />
+---------------------------------------+ +-----------------------------------------------------------+<br />
! ! ! !<br />
! define forwardRemote dummy ! ! !<br />
! ! ! !<br />
! [ fhem log ] ! --pull--> ! define Remoteserver FHEM2FHEM 192.168.178.1:7072 LOG:.* !<br />
! ! ! !<br />
! ! ! define executeRemote notify forwardRemote {fhem "$EVENT"} !<br />
! ! ! !<br />
! set forwardRemote set D_G_WLAN off ! ! [ notify executeRemote -> {fhem "$EVENT"} ] -> !<br />
! ! ! set D_G_WLAN off !<br />
! ! ! !<br />
+---------------------------------------+ +-----------------------------------------------------------+<br />
<br />
==== Weitergabe von Events ====<br />
<br />
An eine Fritzbox (entfernte Instanz) ist ein RFXtrx433 angeschlossen. Die Events der erkannten Geräte, in diesem Falle ein Strommesser Revolt-5461 und ein Temperatur- und Feuchtigkeitssensor TFA 30.3150 sollen auf der Hauptinstanz (lokale Instanz) zur Verfügung stehen. Darüber hinaus wird auf der Fritzbox noch der Spritpreis abgerufen, dessen Events ebenfalls auf der Hauptinstanz zur Verfügung stehen sollen.<br />
<br />
; Definition auf der entfernten Instanz<br />
Auf der Fritzbox sind die Komponenten ganz normal definiert und loggen in mehrere Filelogs.<br />
Der Telnetport ist standardmäßig auf 7072 definiert.<br />
Es ist keine SSL Verschlüsselung aktiviert und kein Passwort vergeben.<br />
<br />
; Definition auf der lokalen Instanz<br />
Die Definition lautet wie folgt, wobei für die Regexp die Readings, die übernommen werden sollen, filtert.<br />
<pre><br />
define FHEM_on_FB FHEM2FHEM 192.168.1.10:7072 LOG:.*(SuperE[0-9]|temperature|humidity|battery|voltage|energy_power|state).*<br />
</pre><br />
<br />
Damit auf der lokalen Instanz die Geräte dargestellt werden können und nicht nur die Daten in der Datenbank landen, wurden entsprechende Dummies und dazu passende Notfies definiert.<br />
<br />
Für den Revolt-5461 <br />
<pre><br />
define KU_Ofen_r dummy<br />
attr KU_Ofen_r DbLogExclude .*<br />
<br />
define KU_Ofen_notify notify KU_Ofen { $EVENT=~s/://;;;; fhem("setreading KU_Ofen_r $EVENT");;;; my $KU_Ofen_P= ReadingsVal("KU_Ofen_r","energy_power",0) ;;;; my $KU_Ofen_V= ReadingsVal("KU_Ofen_r","voltage",0) ;;;; fhem("setreading KU_Ofen_r state P: $KU_Ofen_P V: $KU_Ofen_V") }<br />
attr KU_Ofen_notify DbLogExclude .*<br />
</pre><br />
<br />
Für den Spritpreismonitor<br />
<pre><br />
define Shell_r dummy<br />
attr Shell DbLogExclude .*<br />
<br />
define Shell_notify notify Shell { $EVENT=~s/://;;;; fhem("setreading Shell_r $EVENT") ;;;; my $Shell_SE10= ReadingsVal("Shell_r","SuperE10",0) ;;;; my $Shell_SE5= ReadingsVal("Shell_r","SuperE5",0) ;;;; fhem("setreading Shell_r state S_E10: $Shell_SE10 S_E5: $Shell_SE5")}<br />
attr Shell_notify DbLogExclude .*<br />
</pre><br />
<br />
Für den TFA 30.3150<br />
<pre><br />
define Aussen_Temp_Hum_r dummy<br />
attr Aussen_Temp_Hum DbLogExclude .*<br />
<br />
define Aussen_Temp_Hum_notify notify Aussen_Temp_Hum { $EVENT=~s/://;;;; fhem("setreading Aussen_Temp_Hum_r $EVENT") ;;;; my $Aussen_Temp_Hum_T= ReadingsVal("Aussen_Temp_Hum_r","temperature",0) ;;;; my $Aussen_Temp_Hum_H= ReadingsVal("Aussen_Temp_Hum_r","humidity",0) ;;;; my $Aussen_Temp_Hum_D= ReadingsVal("Aussen_Temp_Hum_r","dewpoint",0) ;;;; fhem("setreading Aussen_Temp_Hum_r state T: $Aussen_Temp_Hum_T H: $Aussen_Temp_Hum_H D: $Aussen_Temp_Hum_D")}<br />
attr Aussen_Temp_Hum_notify DbLogExclude .*<br />
</pre><br />
<br />
Das Logging in die Datenbank funktioniert bereits direkt über die FHEM2FHEM Definition. Für das Logging in Filelogs müssten diese wie üblich definiert werden.<br />
Damit die dummies und die notifies keine Extraeinträge in der Datenbank produzieren, wurde das Attribut DbLogExclude mit der Regexp <code>.*</code> gesetzt.<br />
Die Notfies lösen jeweils 2 Aktionen aus<br />
# Schreiben der Readings in das Dummy, wobei der zusätzliche Doppelpunkt übersprungen wird.<br />
# Zusammensammeln der wichtigsten Werte und schreiben des Readings "state" des Dummy<br />
<br />
=== Type RAW ===<br />
<br />
==== Weitergabe eines Interfaces ====<br />
<br />
An eine Fritzbox (entfernte Instanz) ist ein RFXtrx433 angeschlossen. Alle raw messages sollen auf einer weiteren Hauptinstanz zur Verfügung stehen. Vom RFTtrx433 werden messages von einem Strommesser Revolt-5461 und einem Temperatur- und Feuchtigkeitssensor TFA 30.3150 empfangen.<br />
<br />
; Definition auf der entfernten Instanz<br />
Auf der Fritzbox ist das Interface RFXtrx433 mit dem Namen RFXTRX_on_FB definiert.<br />
Der Telnetport ist standardmäßig auf 7072 definiert.<br />
Es ist keine SSL Verschlüsselung aktiviert und kein Passwort vergeben.<br />
<br />
; Definition auf der lokalen Instanz<br />
Die Definition lautet wie folgt, wobei hinter RAW: der Name des abgegriffenen Interfaces angegeben wird.<br />
<pre><br />
define FHEM_on_FB FHEM2FHEM 192.168.1.10:7072 RAW:RFXTRX_on_FB<br />
attr FHEM_on_FB DbLogExclude .*<br />
</pre><br />
<br />
Zusätzlich wird ein Dummygerät benötigt, das wie ein lokales Interface agiert.<br />
<pre><br />
define RFXTRX_on_FB TRX none 0000<br />
attr RFXTRX_on_FB dummy 1<br />
</pre><br />
<br />
In dieser Konfiguration werden die Komponenten an der Fritzbox auf der lokalen Instanz als neue Geräte erkannt mit dem IODev RFXTRX_on_FB.<br />
<br />
== Bekannte Probleme ==<br />
Bei auf Dummies gespiegelten Komponenten und einfachem notify/setreading (Type LOG), <br />
* erhalten die Readings einen zusätzlichen Doppelpunkt (Abhilfe: siehe Beispiel bzw. Links)<br />
* muss das Reading "state" explizit geschrieben werden. Sonst zeigt der Status des Dummy nur "???" (Abhilfe: siehe Beispiel)<br />
* FHEM2FHEM stellt nicht immer neue Verbindung hier, wenn das entfernte FHEM stromlos gemacht wurde oder sich anderweitig "unfreundlich" verabschiedet hat. Lösung: Watchdog auf dem Hauptsystem, wie {{Link2Forum|Topic=20654|LinkText=hier}} beschrieben. Dabei kann inzwischen statt "modify" auch ein "set <name> reopen" verwendet werden.<br />
<br />
== Troubleshooting ==<br />
* Lässt sich der entfernte Host anpingen?<br />
* Lässt sich vom lokalen Host auf der Kommandozeile auf die Telnet-Schnittstelle der entfernten FHEM-Instanz zugreifen?<br />
* Welche Meldungen stehen im Logfile nach einem Restart und dem Versuch des Verbindungsaufbaus zur entfernten FHEM-Instanz?<br />
* Mögliche Fehler beim Loggen<br />
** Tauchen die Messages im Event Monitor der lokalen Instanz auf?<br />
** etc.<br />
<br />
== Links ==<br />
* Doppelpunkt hinter den Readings im Dummy ({{Link2Forum|Topic=20766|Message=143244|LinkText=Forenbeitrag}})<br />
<br />
<br />
== sonstiges ==<br />
[[Kategorie:Code Snippets]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=OW2S0SMSGUARD&diff=34678OW2S0SMSGUARD2021-01-30T21:49:07Z<p>Jostar: Screenshot des Gerätes hinzugefügt</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=1-Wire Busmaster mit 2x S0-Interface und USB-Anschluss<br />
|ModType= d<br />
|ModCmdRef= OW2S0SMSGUARD<br />
|ModForumArea= https://forum.fhem.de/index.php/topic,28447.0.html<br />
|ModTechName=00_OW2S0SMSGUARD_2021<br />
|ModOwner=Wzut ({{Link2FU|4065|Forum}}) }}<br />
<br />
{{Baustelle}}<br />
<br />
==Einführung==<br />
<br />
Das Modul "OW2S0SMSGUARD" ermöglicht den direkten Betrieb in fhem.<br />
So können leicht zwei Zählerstände erzeugt werden, zum Beispiel für Gas- bzw. Wasserzähler.<br />
Positiv berichtet wurde der Betrieb von bis jetzt 32 Sensoren (DS18b20) und einer Gesamtbuslänge (Cat5) von 200 Metern ohne einen Ausfall.<br />
Der Vorteil von der SMSGUARD-Lösung: nun ja, einfach an USB anschließen, keine extra Spannungsversorgung. Shop: https://www.sms-guard.org/shop.php<br />
Die Firmware wurde von 2014 bis 2020 erweitert.<br />
<br />
== Version Jahr 2004 ==<br />
<br />
Es werden automatisch Slave-Module (Typ "OW2S0SLAVE") für jedes Gerät am Bus angelegt. <br />
Das Attribut "disable" wird nicht unterstützt.<br />
<br />
== Version Jahr 2005 ==<br />
[[Datei:Smsguard2020.PNG|mini]]<br />
Das Modul bietet auch ein Reset der Zählerstände der beiden S0-Zähler.<br />
DS2401 werden nur in der id als Internal angezeigt. Mittels userreadings bekommt man das aber gelöst:<br />
<br />
<code>userReadings dev1 { InternalVal($NAME,"OW-Dev1","") }</code><br />
<br />
== Version Jahr 2021 ==<br />
<br />
Es wird keine Slave Device mehr erzeugt, alle OW Teilnehmer sind Readings direkt im Device.<br />
Die DS2401 haben als Wert "absent" oder "present", DS18xx ihren aktuellen Temperaturwert.<br />
Da die IDs als als nackte Readings etwas unschön sind, hat das Modul ein neues Attribut map_OWIDs bekommen.<br />
Damit können die abstrackten IDs direkt in sprechende Namen überführt werden , Bsp:<br />
<code>attr <name> map_OWIDs 10D64CBF02080077=Keller,018468411C0000BA=TestDS</code><br />
<br />
== Sensoren ==<br />
Funktionieren:<br />
* DS18B20<br />
* DS2401<br />
** a) Nachricht wenn ein neuer Teilnehmer hinzukommt (Nachteil, in dem kurzen Moment ist der Busmaster blind, könnte ggf. für kurze Zeit eine andere Nachricht nicht empfangen)<br />
** b) Nachricht wenn ein bestehender Teilnehmer verschwindet (aus meiner Sicht keine Nachteile, der dauernde Stromverbrauch ist minimal)<br />
<br />
Funktionieren nicht:<br />
* DHT22<br />
<br />
== Protokoll ==<br />
Der 1wire-USB-Master kann recht einfach mit einem seriellen Terminal auf Funktion überprüft werden:<br />
# serielle Schnittstelle einstellen auf 115200 8-N-1 kein Handshake RTS/CTS, kein On/Off Protokoll<br />
# Startbefehl eingeben, damit wird auch die Wandlung im Sensor ausgelöst: $?<CR><br />
# mit angeschlossenen 1wire-Sensoren werden die gefundenen IDs gelistet: $0;o;1080974B020800BA; das „o“ steht für „ok“ und die Checksumme der ID wurde geprüft und ist ok<br />
# danach gibt der 1wire-USB-Master die beiden S0-Zählerstände zurück: $S0;0;0;<br />
# die Werte der 1-wire Sensoren können nach 1s abgefragt werden mit: $0<CR> ... $63<CR><br />
# danach gibt der 1wire-USB-Master die Daten des Sensors zurück: $0;o;31;00;4B;46;FF;FF;07;10;8D;64; das „o“ steht für „ok“ und die Checksumme (9.Byte) der 8 Datenbytes wurde geprüft und ist ok („n“ wäre „nicht ok“). Die Beschreibung der 8 Datenbytes in Hex ist dem Sensordatenblatt zu entnehmen. Das 10.Byte ist eine Checksumme für die serielle Übertragung (Byte1-9 aufaddiert)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Datei:Smsguard2020.PNG&diff=34677Datei:Smsguard2020.PNG2021-01-30T21:46:17Z<p>Jostar: Selbst erstellter Screenshot des Gerätes</p>
<hr />
<div>== Beschreibung ==<br />
Selbst erstellter Screenshot des Gerätes</div>Jostarhttp://wiki.fhem.de/w/index.php?title=OW2S0SMSGUARD&diff=34676OW2S0SMSGUARD2021-01-30T21:43:08Z<p>Jostar: Die Seite wurde neu angelegt: „{{Infobox Modul |ModPurpose=1-Wire Busmaster mit 2x S0-Interface und USB-Anschluss |ModType= d |ModCmdRef= OW2S0SMSGUARD |ModForumArea= https://forum.fhem.de/i…“</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=1-Wire Busmaster mit 2x S0-Interface und USB-Anschluss<br />
|ModType= d<br />
|ModCmdRef= OW2S0SMSGUARD<br />
|ModForumArea= https://forum.fhem.de/index.php/topic,28447.0.html<br />
|ModTechName=00_OW2S0SMSGUARD_2021<br />
|ModOwner=Wzut ({{Link2FU|4065|Forum}}) }}<br />
<br />
{{Baustelle}}<br />
<br />
==Einführung==<br />
<br />
Das Modul "OW2S0SMSGUARD" ermöglicht den direkten Betrieb in fhem.<br />
So können leicht zwei Zählerstände erzeugt werden, zum Beispiel für Gas- bzw. Wasserzähler.<br />
Positiv berichtet wurde der Betrieb von bis jetzt 32 Sensoren (DS18b20) und einer Gesamtbuslänge (Cat5) von 200 Metern ohne einen Ausfall.<br />
Der Vorteil von der SMSGUARD-Lösung: nun ja, einfach an USB anschließen, keine extra Spannungsversorgung. Shop: https://www.sms-guard.org/shop.php<br />
Die Firmware wurde von 2014 bis 2020 erweitert.<br />
<br />
== Version Jahr 2004 ==<br />
<br />
Es werden automatisch Slave-Module (Typ "OW2S0SLAVE") für jedes Gerät am Bus angelegt. <br />
Das Attribut "disable" wird nicht unterstützt.<br />
<br />
== Version Jahr 2005 ==<br />
Das Modul bietet auch ein Reset der Zählerstände der beiden S0-Zähler.<br />
DS2401 werden nur in der id als Internal angezeigt. Mittels userreadings bekommt man das aber gelöst:<br />
<code>userReadings dev1 { InternalVal($NAME,"OW-Dev1","") }</code><br />
<br />
== Version Jahr 2021 ==<br />
<br />
Es wird keine Slave Device mehr erzeugt, alle OW Teilnehmer sind Readings direkt im Device.<br />
Die DS2401 haben als Wert "absent" oder "present", DS18xx ihren aktuellen Temperaturwert.<br />
Da die IDs als als nackte Readings etwas unschön sind, hat das Modul ein neues Attribut map_OWIDs bekommen.<br />
Damit können die abstrackten IDs direkt in sprechende Namen überführt werden , Bsp:<br />
<code>attr <name> map_OWIDs 10D64CBF02080077=Keller,018468411C0000BA=TestDS</code><br />
<br />
== Sensoren ==<br />
Funktionieren:<br />
* DS18B20<br />
* DS2401<br />
** a) Nachricht wenn ein neuer Teilnehmer hinzukommt (Nachteil, in dem kurzen Moment ist der Busmaster blind, könnte ggf. für kurze Zeit eine andere Nachricht nicht empfangen)<br />
** b) Nachricht wenn ein bestehender Teilnehmer verschwindet (aus meiner Sicht keine Nachteile, der dauernde Stromverbrauch ist minimal)<br />
<br />
Funktionieren nicht:<br />
* DHT22<br />
<br />
== Protokoll ==<br />
Der 1wire-USB-Master kann recht einfach mit einem seriellen Terminal auf Funktion überprüft werden:<br />
# serielle Schnittstelle einstellen auf 115200 8-N-1 kein Handshake RTS/CTS, kein On/Off Protokoll<br />
# Startbefehl eingeben, damit wird auch die Wandlung im Sensor ausgelöst: $?<CR><br />
# mit angeschlossenen 1wire-Sensoren werden die gefundenen IDs gelistet: $0;o;1080974B020800BA; das „o“ steht für „ok“ und die Checksumme der ID wurde geprüft und ist ok<br />
# danach gibt der 1wire-USB-Master die beiden S0-Zählerstände zurück: $S0;0;0;<br />
# die Werte der 1-wire Sensoren können nach 1s abgefragt werden mit: $0<CR> ... $63<CR><br />
# danach gibt der 1wire-USB-Master die Daten des Sensors zurück: $0;o;31;00;4B;46;FF;FF;07;10;8D;64; das „o“ steht für „ok“ und die Checksumme (9.Byte) der 8 Datenbytes wurde geprüft und ist ok („n“ wäre „nicht ok“). Die Beschreibung der 8 Datenbytes in Hex ist dem Sensordatenblatt zu entnehmen. Das 10.Byte ist eine Checksumme für die serielle Übertragung (Byte1-9 aufaddiert)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Benutzer:Jostar&diff=32556Benutzer:Jostar2020-01-24T21:41:19Z<p>Jostar: </p>
<hr />
<div>Anfänger, aktuell unterwegs mit:<br />
* Raspberry Pi 2<br />
* Raspberry Pi 3<br />
* Piface 2<br />
* CUL von busware<br />
<br />
Ziele:<br />
* Wetterstation dauerhaft loggen (Oregon Scientific RAR213HG Weather@Home mit Bluetoothfähiges Innenthermometer / Außenthermometer / Hygrometer) - FHEMduino?<br />
** geht durch das Auswerten der eigentlichen Sensoren<br />
* Wetterstation dauerhaft loggen und benutzerdefinierte Alarme erstellen (netatmo)<br />
** funktioniert via Webzugriff auf API von netatmo, fraglich ist wie lange das in der Zukunft möglich ist<br />
* Energiemessung (Stromzähler anzapfen, mit EVL Energiemonitorsystem 62671 EM 1000) - funktioniert schon via CUL und Modul CUL_EM -> Erweiterungen?<br />
* Analoges Wahlgerät ersetzen (Alarmanlage anzapfen) - Signal geht für 100 ms weg, das ist etwas wenig um bequem am Piface ausgewertet zu werden<br />
** gibt wohl Umweg über script, dass außerhalb von fhem interrupts überwacht<br />
Hardware:<br />
* Bresser 433 MHz "Hygro-Thermo Sensor" (Art. 7009998) mit 8 wählbaren Kanälen scheint mit [[RFXtrx]] nicht zu funktionieren<br />
Suchhilfe:<br />
* https://forum.fhem.de/index.php/topic,17196.1575.html<br />
* [[FHEMWiki:Über_FHEMWiki#Vorlagen_und_Schablonen|Vorlagen und Schablonen]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Benutzer:Jostar&diff=32555Benutzer:Jostar2020-01-24T21:39:02Z<p>Jostar: </p>
<hr />
<div>Blutiger Anfänger, aktuell unterwegs mit:<br />
* Raspberry Pi 2<br />
* Piface 2<br />
* CUL von busware<br />
<br />
Ziele:<br />
* Wetterstation dauerhaft loggen (Oregon Scientific RAR213HG Weather@Home mit Bluetoothfähiges Innenthermometer / Außenthermometer / Hygrometer) - FHEMduino?<br />
* Wetterstation dauerhaft loggen und benutzerdefinierte Alarme erstellen (netatmo) - funktioniert via Webzugriff auf API von netatmo<br />
* Energiemessung (Stromzähler anzapfen, mit EVL Energiemonitorsystem 62671 EM 1000) - funktioniert schon via CUL und Modul CUL_EM -> Erweiterungen?<br />
* Analoges Wahlgerät ersetzen (Alarmanlage anzapfen) - Signal geht für 100 ms weg, das ist etwas wenig um bequem am Piface ausgewertet zu werden<br />
Hardware:<br />
* Bresser 433 MHz "Hygro-Thermo Sensor" (Art. 7009998) mit 8 wählbaren Kanälen scheint mit [[RFXtrx]] nicht zu funktionieren<br />
Suchhilfe:<br />
* https://forum.fhem.de/index.php/topic,17196.1575.html<br />
* [[FHEMWiki:Über_FHEMWiki#Vorlagen_und_Schablonen|Vorlagen und Schablonen]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Piface&diff=31103Piface2019-08-11T17:14:46Z<p>Jostar: Ein Anfang um die Informationen zusammenzuführen</p>
<hr />
<div>'''PiFace''' ist eine Erweiterungsplatine für den Raspberry Pi. Sie zeichnet sich durch die einfache Installation (einfaches Aufstecken auf die GPIO-Leiste) und Anschlussmöoglichkeiten (Schraubkontakte) aus.<br />
<br />
Es gibt PiFace und das neuere PiFace Digital 2 (letzterer ermöglicht die Auswertung von Interrupts). Hersteller <ref>http://www.piface.org.uk/products/piface_digital_2/</ref><br />
<br />
Angesteuert werden kann sie via:<br />
* wiringPi und 50-piface2<br />
** Pull-Downwiderstände können gesteuert werden<br />
** keine Auswertung von interrupt, sondern im Poll-Verfahren (kleinste Periode 1 s)<br />
** aktuell scheint wiringPi nicht mehr für die Allgemeinheit verfügbar, Bezug über git nicht mehr möglich <ref>http://wiringpi.com/wiringpi-deprecated/</ref><br />
* pifacedigitalio, phytonscript<br />
** Mini-Programm in Python ist nötig, das die Interrupts des PiFace2 auswertet. Nur so kann z.B. bei Druck einer angeschlossenen Taste unmittelbar eine FHEM-Aktion auslöst werden. Das Programm läuft "unsichtbar" im Hintergrund und ist noch im Beta-Status.{{Link2Forum|Topic=101299|Message=948631|LinkText="Forum"}}<ref>https://forum.fhem.de/index.php/topic,101299.msg948631.html#msg948631</ref><br />
<br />
== Projekte ==<br />
* [[DoorPiBoard]]<br />
<br />
== Einzelnachweise ==<br />
<references /></div>Jostarhttp://wiki.fhem.de/w/index.php?title=TR%C3%85DFRI&diff=29945TRÅDFRI2019-03-19T08:03:29Z<p>Jostar: /* tradfri */</p>
<hr />
<div><div style="float:right">{{Infobox Modul<br />
|Name=tradfri<br />
|ModPurpose=Anbindung IKEA TRÅDFRI Gateway<br />
|ModType=d<br />
<!-- |ModCategory= (noch?) nicht verwendet --><br />
|ModCmdRef=tradfri<br />
|ModForumArea=Zigbee<br />
|ModTechName=30_tradfri.pm<br />
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])<br />
}}<br />
</div><br />
<br />
== tradfri ==<br />
<br />
TRÅDFRI ist die Serie smarter Beleuchtungslösungen von IKEA. Ähnlich von Phillips [[Hue]] gibt es diverse LEDs in Glühbirnenform, LED-Streifen-Treiber, Flächenleuchten, Wandtaster, Bewegungsmelder, Fernbedienung, Dimmer, etc. und alles via Funk gekoppelt. Außerdem ein Gateway, das sich via Ethernetstecker ins heimische LAN einbinden lässt und die Bedienung via IKEA-App auf dem Handy ermöglicht. Daneben ist auch eine Anbindung in FHEM möglich, dazu funktionieren zwei alternative Lösungen:<br />
<br />
1. IKEA Trådfri Modul (TYPE ''TradfriDevice'' und ''TradfriGateway'', mehr Infos: https://forum.fhem.de/index.php/topic,70653.0.html seit April 2017)<br />
* Erkennt Lampen<br />
* Fernbedienung erscheint zwar in der Geräteliste, lässt sich aber nicht als Gerät anlegen oder Status lesen<br />
2. tradfri-fhem Modul (TYPE ''HUEDevice'' und ''tradfri'' Gateway, mehr Infos: https://forum.fhem.de/index.php/topic,96125.0.html seit Januar 2019, Beschreibung folgt auf dieser Seite)<br />
* Erkennt Lampen (als [[Hue#HUE-Device|HUE-Device]])<br />
* Erkennt Fernbedienung (Batteriestatus als einzigstes Reading)<br />
* Erstellt (wenn gewünscht) automatisch Gruppen<br />
* Bewegungsmelder scheinen nicht unterstützt<br />
<br />
=== Einrichtung in FHEM ===<br />
<br />
# node installieren (mindestens version 8)<br />
# sudo npm install -g tradfri-fhem<br />
# <code>define <tradfri> tradfri</code><br />
# <code>attr <tradfri> tradfriFHEM-securityCode <security code></code><br />
<br />
wenn das gateway nicht automatisch erkannt wird:<br />
<code>attr <tradfri> tradfriFHEM-params --ip <ip></code><br />
<br />
WICHTIG: danach in FHEM einmal die Konfiguration speichern damit der Pairing-Key gesichert wird. Sonst muss beim nächsten FHEM-Neustart das Pairing erneut durchgeführt werden.<br />
<br />
== HUE-Device ==<br />
Alle auf dem Gateway bekannten Geräte automatisch als [[Hue#HUE-Device|HUEDevice]] in FHEM angelegt:<br />
* Lampen, Stecker, Trafos, ...<br />
: Hiermit werden die einzelnen Leuchten gesteuert<br />
* Gruppen<br />
: Hiermit lassen sich ganze Gruppen und Räume steuern<br />
* Fernbedienungen<br />
: aktuell gibt es nur ein battery Reading<br />
<br />
=== Darstellung im Webfrontend ===<br />
Wenn man die SVG Icons verwendet ist es sinnvoll, das Attribut color-icons zu setzen. Mit <code>attr HUEDevice1 color-icons 2</code> werden z.B. die Farben und der Dimmzustand der Lampe als Icon dargestellt.<br />
Damit das ganze funktioniert, müsst ihr auch noch das <code>attr WEB iconPath fhemSVG:openautomation:default</code> setzen.<br />
<br />
[[Kategorie:ZigBee Components]]<br />
[[Kategorie:ZigBee]]<br />
[[Kategorie:Lichteffektgeräte]]<br />
[[Kategorie:IP Components]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=TR%C3%85DFRI&diff=29331TRÅDFRI2019-02-01T19:26:15Z<p>Jostar: Einleitung</p>
<hr />
<div><div style="float:right">{{Infobox Modul<br />
|Name=tradfri<br />
|ModPurpose=Anbindung IKEA TRÅDFRI Gateway<br />
|ModType=d<br />
<!-- |ModCategory= (noch?) nicht verwendet --><br />
|ModCmdRef=tradfri<br />
|ModForumArea=Zigbee<br />
|ModTechName=30_tradfri.pm<br />
|ModOwner=Andre ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer Diskussion:justme|Wiki]])<br />
}}<br />
</div><br />
<br />
== tradfri ==<br />
<br />
TRÅDFRI ist die Serie smarter Beleuchtungslösungen von IKEA. Ähnlich von Phillips [[Hue]] gibt es diverse LEDs in Glühbirnenform, LED-Streifen-Treiber, Flächenleuchten, Wandtaster, Bewegungsmelder, Fernbedienung, Dimmer, etc. und alles via Funk gekoppelt. Außerdem ein Gateway, das sich via Ethernetstecker ins heimische LAN einbinden lässt und die Bedienung via IKEA-App auf dem Handy ermöglicht. Daneben ist auch eine Anbindung in FHEM möglich:<br />
* IKEA Trådfri Modul (TYPE TradfriDevice und TradfriGateway, mehr Infos: https://forum.fhem.de/index.php/topic,70653.0.html seit April 2017)<br />
* tradfri-fhem Modul (TYPE HUEDevice und Gateway, mehr Infos: https://forum.fhem.de/index.php/topic,96125.0.html seit Januar 2019, Beschreibung auf dieser Seite)<br />
<br />
=== Einrichtung in FHEM ===<br />
<br />
# node installieren (mindestens version 8)<br />
# sudo npm install -g tradfri-fhem<br />
# <code>define <tradfri> tradfri</code><br />
# <code>attr <tradfri> tradfriFHEM-securityCode <security code></code><br />
<br />
wenn das gateway nicht automatisch erkannt wird:<br />
<code>attr <tradfri> tradfriFHEM-params --ip <ip></code><br />
<br />
<br />
WICHTIG: danach in FHEM einmal die Konfiguration speichern damit der Pairing-Key gesichert wird. Sonst muss beim nächsten FHEM-Neustart das Pairing erneut durchgeführt werden.<br />
<br />
== HUE-Device ==<br />
Alle auf dem Gateway bekannten Geräte automatisch als [[Hue#HUE-Device|HUEDevice]] in FHEM angelegt:<br />
* Lampen, Stecker, Trafos, ...<br />
: Hiermit werden die einzelnen Leuchten gesteuert<br />
* Gruppen<br />
: Hiermit lassen sich ganze Gruppen und Räume steuern<br />
* Fernbedienungen<br />
: aktuell gibt es nur ein battery Reading<br />
<br />
=== Darstellung im Webfrontend ===<br />
Wenn man die SVG Icons verwendet ist es sinnvoll, das Attribut color-icons zu setzen. Mit <code>attr HUEDevice1 color-icons 2</code> werden z.B. die Farben und der Dimmzustand der Lampe als Icon dargestellt.<br />
Damit das ganze funktioniert, müsst ihr auch noch das <code>attr WEB iconPath fhemSVG:openautomation:default</code> setzen.<br />
<br />
[[Kategorie:ZigBee Components]]<br />
[[Kategorie:ZigBee]]<br />
[[Kategorie:Lichteffektgeräte]]<br />
[[Kategorie:IP Components]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=FRITZ!DECT_210&diff=28257FRITZ!DECT 2102018-11-06T21:50:25Z<p>Jostar: /* Readings */</p>
<hr />
<div>{{Infobox Hardware<br />
|Bild=PlatzHalter.png <br />
|Bildbeschreibung=<br />
|HWProtocol=DECT<br />
|HWType=Sensor, Aktor<br />
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensor]]<br />[[:Kategorie:Energieverbrauchsmessung|Energieverbrauchsmessung]]<br />[[:Kategorie:Schalter (Empfänger)|Schalter (Empfänger)]]<br />
|HWComm=DECT<br />
|HWChannels=<br />
|HWVoltage=230 V<br />
|HWPowerConsumption=ca. 0,4 Watt (Standby)<br />1,5W (Betrieb)<br />
|HWPoweredBy=Stromnetz<br />
|HWSize=B/H/T 59 x 41 x 93 mm<br />(ohne Stecker)<br />
|HWDeviceFHEM= FBDECT, FBAHAHTTP<br />
|HWManufacturer=AVM<br />
}}<br />
<br />
== Features ==<br />
Der FRITZ!DECT 210 ist ein automatisch und manuell schaltbarer Zwischenstecker mit Energie- und Temperaturmessung. Er ist spritzwassergeschützt nach IP 44 und daher in ''Feuchträumen'' und im Außenbereich einsetzbar. Er wird von AVM hergestellt und ist speziell auf deren DSL-Router mit DECT Telefonen angepasst.<br />
<br />
Seine Funkkommunikation basiert auf dem sicher verschlüsselten DECT-Standard. Damit ist er einer der wenigen Funkschalter, der vor missbräuchlicher Auslösung oder Ausspähung geschützt ist.<br />
<br />
Der Stromverbrauch ist relativ hoch.<br />
*Verbrauch Standby: 0,4 W<br />
*Verbrauch Betrieb: 1,5 W<br />
Durch den Betrieb des Gerätes, kann zudem der DECT-Eco-Mode der Fritz!Box nicht mehr ausgewählt werden, was den Stromverbrauch zusätzlich erhöhen kann.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
siehe {{Link2CmdRef|Lang=de|Anker=FBDECT}}<br />
<br />
Für die Verbindung zwischen der Fritz!Box und FHEM wird das Modul {{Link2CmdRef|Anker=FBAHA|Label=FBAHA}} oder {{Link2CmdRef|Anker=FBAHAHTTP|Label=FBAHAHTTP}} (Unterschiede zwischen den beiden Modulen und Hinweise zum Umstieg von FBAHA zu FBAHAHTTP: {{Link2Forum|Topic=53147}}) benötigt.<br />
<br />
Außerdem müssen die Smarthome-Funktion im FRITZ!Box-Heimnetz freigegeben werden.<br />
(Fehlermeldung: Can't connect to fritz.box:2002: Connection refused)<br />
<br />
Diese erfolgt über die Fritz!Box Oberfläche in der erweiterten Ansicht (Fußzeile der FB Oberfläche).<br />
Den Punkt "Smarthome-Funktion im FRITZ!Box-Heimnetz freigeben" findet man unter Netzwerk->Netzwerkeinstellungen (OS 6.20).<br />
<br />
* Max. Schaltleistung: 3.450W<br />
* manuelles Schalten am Device (deaktivierbar) oder durch Fernsteuerung möglich<br />
* Messung von Spannung, Strom, Leistung, Temperatur<br />
* Akustiksensor zum Schalten per Geräusch (Klatschen, Rufen) - derzeit (04/2017) eher unzuverlässig<br />
* Reichweite: 300m im Freien, 40m in Gebäuden (lt. Hersteller)<br />
* für den Außeneinsatz geeignet: IP44<br />
* Betriebsumgebung: -20...+40°C<br />
<br />
== Readings ==<br />
<pre><br />
AIN 12345 0123456<br />
FBNAME Brunnenpumpe<br />
FBPROP powerMeter,tempSensor,switch<br />
FBTYPE FRITZ!DECT 210<br />
ID 31<br />
devicelock no<br />
energy 136575 Wh<br />
fwversion 04. Sep<br />
leistung 0.0<br />
locked no<br />
mode auto<br />
power 0.00 W<br />
present yes<br />
state off<br />
tempadjust 0.0 C<br />
temperature 7.0 C (measured)<br />
</pre><br />
<br />
== Bekannte Probleme ==<br />
Durch den Klappdeckel passen ggf. nicht alle Einsteckgeräte (z.B. Stromzähler als Steckergerät). Im Innenbereich kann die günstigere [[FRITZ!DECT 200]] dienen, sie kommt ohne Deckel aus.<br />
<br />
== Links ==<br />
* [https://avm.de/produkte/fritzdect/fritzdect-210/ AVM-Produktseite]<br />
<br />
[[Kategorie:AVM-Produktserie FRITZ!DECT]]<br />
[[Kategorie:Schalter (Empfänger)]]<br />
[[Kategorie:Energieverbrauchsmessung]]<br />
[[Kategorie:Temperatursensoren]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=FRITZ!DECT_210&diff=28256FRITZ!DECT 2102018-11-06T21:45:35Z<p>Jostar: /* Bekannte Probleme */</p>
<hr />
<div>{{Infobox Hardware<br />
|Bild=PlatzHalter.png <br />
|Bildbeschreibung=<br />
|HWProtocol=DECT<br />
|HWType=Sensor, Aktor<br />
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensor]]<br />[[:Kategorie:Energieverbrauchsmessung|Energieverbrauchsmessung]]<br />[[:Kategorie:Schalter (Empfänger)|Schalter (Empfänger)]]<br />
|HWComm=DECT<br />
|HWChannels=<br />
|HWVoltage=230 V<br />
|HWPowerConsumption=ca. 0,4 Watt (Standby)<br />1,5W (Betrieb)<br />
|HWPoweredBy=Stromnetz<br />
|HWSize=B/H/T 59 x 41 x 93 mm<br />(ohne Stecker)<br />
|HWDeviceFHEM= FBDECT, FBAHAHTTP<br />
|HWManufacturer=AVM<br />
}}<br />
<br />
== Features ==<br />
Der FRITZ!DECT 210 ist ein automatisch und manuell schaltbarer Zwischenstecker mit Energie- und Temperaturmessung. Er ist spritzwassergeschützt nach IP 44 und daher in ''Feuchträumen'' und im Außenbereich einsetzbar. Er wird von AVM hergestellt und ist speziell auf deren DSL-Router mit DECT Telefonen angepasst.<br />
<br />
Seine Funkkommunikation basiert auf dem sicher verschlüsselten DECT-Standard. Damit ist er einer der wenigen Funkschalter, der vor missbräuchlicher Auslösung oder Ausspähung geschützt ist.<br />
<br />
Der Stromverbrauch ist relativ hoch.<br />
*Verbrauch Standby: 0,4 W<br />
*Verbrauch Betrieb: 1,5 W<br />
Durch den Betrieb des Gerätes, kann zudem der DECT-Eco-Mode der Fritz!Box nicht mehr ausgewählt werden, was den Stromverbrauch zusätzlich erhöhen kann.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
siehe {{Link2CmdRef|Lang=de|Anker=FBDECT}}<br />
<br />
Für die Verbindung zwischen der Fritz!Box und FHEM wird das Modul {{Link2CmdRef|Anker=FBAHA|Label=FBAHA}} oder {{Link2CmdRef|Anker=FBAHAHTTP|Label=FBAHAHTTP}} (Unterschiede zwischen den beiden Modulen und Hinweise zum Umstieg von FBAHA zu FBAHAHTTP: {{Link2Forum|Topic=53147}}) benötigt.<br />
<br />
Außerdem müssen die Smarthome-Funktion im FRITZ!Box-Heimnetz freigegeben werden.<br />
(Fehlermeldung: Can't connect to fritz.box:2002: Connection refused)<br />
<br />
Diese erfolgt über die Fritz!Box Oberfläche in der erweiterten Ansicht (Fußzeile der FB Oberfläche).<br />
Den Punkt "Smarthome-Funktion im FRITZ!Box-Heimnetz freigeben" findet man unter Netzwerk->Netzwerkeinstellungen (OS 6.20).<br />
<br />
* Max. Schaltleistung: 3.450W<br />
* manuelles Schalten am Device (deaktivierbar) oder durch Fernsteuerung möglich<br />
* Messung von Spannung, Strom, Leistung, Temperatur<br />
* Akustiksensor zum Schalten per Geräusch (Klatschen, Rufen) - derzeit (04/2017) eher unzuverlässig<br />
* Reichweite: 300m im Freien, 40m in Gebäuden (lt. Hersteller)<br />
* für den Außeneinsatz geeignet: IP44<br />
* Betriebsumgebung: -20...+40°C<br />
<br />
== Readings ==<br />
todo<br />
<br />
== Bekannte Probleme ==<br />
Durch den Klappdeckel passen ggf. nicht alle Einsteckgeräte (z.B. Stromzähler als Steckergerät). Im Innenbereich kann die günstigere [[FRITZ!DECT 200]] dienen, sie kommt ohne Deckel aus.<br />
<br />
== Links ==<br />
* [https://avm.de/produkte/fritzdect/fritzdect-210/ AVM-Produktseite]<br />
<br />
[[Kategorie:AVM-Produktserie FRITZ!DECT]]<br />
[[Kategorie:Schalter (Empfänger)]]<br />
[[Kategorie:Energieverbrauchsmessung]]<br />
[[Kategorie:Temperatursensoren]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=FRITZ!DECT_200&diff=28255FRITZ!DECT 2002018-11-06T21:41:45Z<p>Jostar: https://avm.de/produkte/fritzdect/fritzdect-200/technische-daten/</p>
<hr />
<div>{{Infobox Hardware<br />
|Bild=FritzDECT.JPG <br />
|Bildbeschreibung=<br />
|HWProtocol=DECT<br />
|HWType=Sensor, Aktor<br />
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensor]]<br />[[:Kategorie:Energieverbrauchsmessung|Energieverbrauchsmessung]]<br />[[:Kategorie:Schalter (Empfänger)|Schalter (Empfänger)]]<br />
|HWComm=DECT<br />
|HWChannels=<br />
|HWVoltage=230 V<br />
|HWPowerConsumption=ca. 0,5..0,9 Watt (Standby)<br />1,5W (Betrieb)<br />
|HWPoweredBy=Stromnetz<br />
|HWSize=B/H/T 59/93/41 mm<br />(ohne Stecker)<br />
|HWDeviceFHEM= FBDECT, FBAHAHTTP<br />
|HWManufacturer=AVM<br />
}}<br />
<br />
== Features ==<br />
Der FRITZ!DECT 200 ist ein automatisch und manuell schaltbarer Zwischenstecker mit Energie- und (mit aktueller Firmware) Temperaturmessung. Er wird von AVM hergestellt und ist speziell auf deren DSL-Router mit DECT Telefonen angepasst.<br />
<br />
Seine Funkkommunikation basiert auf dem sicher verschlüsselten DECT-Standard. Damit ist er einer der wenigen Funkschalter, der vor missbräuchlicher Auslösung oder Ausspähung geschützt ist.<br />
<br />
Der Stromverbrauch ist relativ hoch (ab FRITZ!OS 6.50 deutlich geringer).<br />
*Verbrauch Standby: 0,9 W (0,5 Watt ab FRITZ!OS 6.50)<br />
*Verbrauch Betrieb: 1,5 W (1,1 Watt ab FRITZ!OS 6.50)<br />
Durch den Betrieb des Gerätes, kann zudem der DECT-Eco-Mode der Fritz!Box nicht mehr ausgewählt werden, was den Stromverbrauch zusätzlich erhöhen kann.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
siehe {{Link2CmdRef|Lang=de|Anker=FBDECT}}<br />
<br />
Für die Verbindung zwischen der Fritz!Box und FHEM wird das Modul {{Link2CmdRef|Anker=FBAHA|Label=FBAHA}} oder {{Link2CmdRef|Anker=FBAHAHTTP|Label=FBAHAHTTP}} (Unterschiede zwischen den beiden Modulen und Hinweise zum Umstieg von FBAHA zu FBAHAHTTP: {{Link2Forum|Topic=53147}}) benötigt.<br />
<br />
Außerdem müssen die Smarthome-Funktion im FRITZ!Box-Heimnetz freigegeben werden.<br />
(Fehlermeldung: Can't connect to fritz.box:2002: Connection refused)<br />
<br />
Diese erfolgt über die Fritz!Box Oberfläche in der erweiterten Ansicht (Fußzeile der FB Oberfläche).<br />
Den Punkt "Smarthome-Funktion im FRITZ!Box-Heimnetz freigeben" findet man unter Netzwerk->Netzwerkeinstellungen (OS 6.20).<br />
<br />
* Max. Schaltleistung: 2.300W<br />
* manuelles Schalten am Device (deaktivierbar) oder durch Fernsteuerung möglich<br />
* Messung von Spannung, Strom, Leistung, Temperatur<br />
* Akustiksensor zum Schalten per Geräusch (Klatschen, Rufen) - derzeit (04/2017) eher unzuverlässig<br />
* Reichweite: 300m im Freien, 40m in Gebäuden (lt. Hersteller)<br />
<br />
== Readings ==<br />
Reading gefolgt von einem Beispielswert.<br />
* FBNAME Ventilator<br />
*FBPROP powerMeter,switch<br />
*FBTYPE AVM FRITZ!Dect 200<br />
*control on fn=1 > 0.00 delay:0sec do:state off<br />
*current 0.0017 A<br />
*energy 6507 Wh<br>(Wert wird bei 1.000.000 wieder auf 0 gesetzt, siehe {{Link2Forum|Topic=90076}})<br />
*options powerOnState:last,lock:none<br />
*power 0.00 W<br />
*powerFactor 0.000<br />
*relayTimes disabled<br />
*state off<br />
*tempadjust 0.0 C<br />
*temperature 18.0 C (measured)<br />
*voltage 234.490 V<br />
<br />
== Bekannte Probleme ==<br />
Die Fritz!DECT200 ist nicht für den Einsatz im Außenbereich vorgesehen. Dafür ist die [[FRITZ!DECT 210]] gebaut.<br />
<br />
== Links ==<br />
* [https://avm.de/produkte/fritzdect/fritzdect-200/ AVM-Produktseite]<br />
<br />
[[Kategorie:AVM-Produktserie FRITZ!DECT]]<br />
[[Kategorie:Schalter (Empfänger)]]<br />
[[Kategorie:Energieverbrauchsmessung]]<br />
[[Kategorie:Temperatursensoren]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=FRITZ!DECT_200&diff=28254FRITZ!DECT 2002018-11-06T21:38:39Z<p>Jostar: /* Bekannte Probleme */</p>
<hr />
<div>{{Infobox Hardware<br />
|Bild=FritzDECT.JPG <br />
|Bildbeschreibung=<br />
|HWProtocol=DECT<br />
|HWType=Sensor, Aktor<br />
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensor]]<br />[[:Kategorie:Energieverbrauchsmessung|Energieverbrauchsmessung]]<br />[[:Kategorie:Schalter (Empfänger)|Schalter (Empfänger)]]<br />
|HWComm=DECT<br />
|HWChannels=<br />
|HWVoltage=230 V<br />
|HWPowerConsumption=ca. 0,5..0,9 Watt (Standby)<br />1,5W (Betrieb)<br />
|HWPoweredBy=Stromnetz<br />
|HWSize=B/H/T 59/93/41 mm<br />(ohne Stecker)<br />
|HWDeviceFHEM= FBDECT, FBAHAHTTP<br />
|HWManufacturer=AVM<br />
}}<br />
<br />
== Features ==<br />
Der FRITZ!DECT 200 ist ein automatisch und manuell schaltbarer Zwischenstecker mit Energie- und (mit aktueller Firmware) Temperaturmessung. Er wird von AVM hergestellt und ist speziell auf deren DSL-Router mit DECT Telefonen angepasst.<br />
<br />
Seine Funkkommunikation basiert auf dem sicher verschlüsselten DECT-Standard. Damit ist er einer der wenigen Funkschalter, der vor missbräuchlicher Auslösung oder Ausspähung geschützt ist.<br />
<br />
Der Stromverbrauch ist relativ hoch.<br />
*Verbrauch Standby: 0,9 W<br />
*Verbrauch Betrieb: 1,5 W<br />
Durch den Betrieb des Gerätes, kann zudem der DECT-Eco-Mode der Fritz!Box nicht mehr ausgewählt werden, was den Stromverbrauch zusätzlich erhöhen kann.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
siehe {{Link2CmdRef|Lang=de|Anker=FBDECT}}<br />
<br />
Für die Verbindung zwischen der Fritz!Box und FHEM wird das Modul {{Link2CmdRef|Anker=FBAHA|Label=FBAHA}} oder {{Link2CmdRef|Anker=FBAHAHTTP|Label=FBAHAHTTP}} (Unterschiede zwischen den beiden Modulen und Hinweise zum Umstieg von FBAHA zu FBAHAHTTP: {{Link2Forum|Topic=53147}}) benötigt.<br />
<br />
Außerdem müssen die Smarthome-Funktion im FRITZ!Box-Heimnetz freigegeben werden.<br />
(Fehlermeldung: Can't connect to fritz.box:2002: Connection refused)<br />
<br />
Diese erfolgt über die Fritz!Box Oberfläche in der erweiterten Ansicht (Fußzeile der FB Oberfläche).<br />
Den Punkt "Smarthome-Funktion im FRITZ!Box-Heimnetz freigeben" findet man unter Netzwerk->Netzwerkeinstellungen (OS 6.20).<br />
<br />
* Max. Schaltleistung: 2.300W<br />
* manuelles Schalten am Device (deaktivierbar) oder durch Fernsteuerung möglich<br />
* Messung von Spannung, Strom, Leistung, Temperatur<br />
* Akustiksensor zum Schalten per Geräusch (Klatschen, Rufen) - derzeit (04/2017) eher unzuverlässig<br />
* Reichweite: 300m im Freien, 40m in Gebäuden (lt. Hersteller)<br />
<br />
== Readings ==<br />
Reading gefolgt von einem Beispielswert.<br />
* FBNAME Ventilator<br />
*FBPROP powerMeter,switch<br />
*FBTYPE AVM FRITZ!Dect 200<br />
*control on fn=1 > 0.00 delay:0sec do:state off<br />
*current 0.0017 A<br />
*energy 6507 Wh<br>(Wert wird bei 1.000.000 wieder auf 0 gesetzt, siehe {{Link2Forum|Topic=90076}})<br />
*options powerOnState:last,lock:none<br />
*power 0.00 W<br />
*powerFactor 0.000<br />
*relayTimes disabled<br />
*state off<br />
*tempadjust 0.0 C<br />
*temperature 18.0 C (measured)<br />
*voltage 234.490 V<br />
<br />
== Bekannte Probleme ==<br />
Die Fritz!DECT200 ist nicht für den Einsatz im Außenbereich vorgesehen. Dafür ist die [[FRITZ!DECT 210]] gebaut.<br />
<br />
== Links ==<br />
* [https://avm.de/produkte/fritzdect/fritzdect-200/ AVM-Produktseite]<br />
<br />
[[Kategorie:AVM-Produktserie FRITZ!DECT]]<br />
[[Kategorie:Schalter (Empfänger)]]<br />
[[Kategorie:Energieverbrauchsmessung]]<br />
[[Kategorie:Temperatursensoren]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=ELV_Powerline_Schaltsteckdose_SOP112&diff=24489ELV Powerline Schaltsteckdose SOP1122018-01-11T23:47:49Z<p>Jostar: /* Stromverbrauch */ typo</p>
<hr />
<div>=ELV Powerline Schaltsteckdose SOP112=<br />
<br />
{{Infobox Modul<br />
|Name=SOP112<br />
|ModPurpose=Schalten der ELV Steckdose SOP112<br />
|ModType=x<br />
|ModCmdRef=SOP112<br />
|ModFTopic=30501<br />
|ModForumArea=Sonstige Systeme<br />
|ModTechName=54_SOP112.pm<br />
|ModOwner=Per,JoergOstertag<br />
}}<br />
<br />
Die [http://www.elv.de/elv-spar-set-mit-2x-schaltsteckdose-sop112-und-1x-powerline-adapter.html ELV Powerline Schaltsteckdose SOP112]<br />
gibt es bei [http://www.elv.de/elv-spar-set-mit-2x-schaltsteckdose-sop112-und-1x-powerline-adapter.html hier bei ELV].<br />
<br />
Artikelnummer 11 74 92 – Startset PowerLan-Adaper PL501 + 2 Steckdosen SOP112<br />
Artikelnummer 11 74 97 – Erweiterung 1 Steckdose SOP112<br />
Diese Angebote können aber variieren, so gab es auch Startsets mit 1 PL501 + 3 SOP112.<br />
<br />
<br />
Die Steckdosen wird über [https://de.wikipedia.org/wiki/PowerLAN PowerLAN] mit dem Hausnetzwerk verbunden. Zum Einbinden ins LAN wird der im Set enthaltenen PowerLAN Adapter verwendet werden. Es kann ein PowerLAN Adapter für mehrere Steckdosen verwendet werden.<br />
Jede Steckdose bekommt (über DHCP) eine eigene IP Adresse und kann dann darüber angesprochen werden.<br />
Die Steckdosen werden im Lokalen Netzwerk über http Requests mit json kodierten Parametern gesteuert und abgefragt werden.<br />
<br />
Die Steckdosen können sowohl direkt aus dem LAN gesteuert und abgefragt werden. Zu den Steckdosen gibt es auch eine APP mit der man aus dem Internet die Steckdosen abfragen und steuern kann.<br />
<br />
Die Steckdosen messen auch die Leistungsaufnahme des angeschlossenen Verbrauchers.<br />
<br />
Die SOP112 haben eine Seriennummer aufgedruckt, bisher gab es aber noch keine Notwendigkeit, diese zu verwenden. <br />
<br />
<br />
<br />
==Stromverbrauch==<br />
<br />
Die SOP112 benötigt etwas über 2 Watt, die PL501 etwas unter 2 Watt. Bei 0,30 €/kWh sind das ~22 € pro Jahr und Gerät. Die Homematic Zwischenstecker HM-LC-Sw1-Pl liegen bei ~1 Watt, die GHoma-Dosen lassen mein "Messgerät" (eine SOP112) nicht ausschlagen.<br />
<br />
== Installation ==<br />
<br />
Das Modul aus dem Forum laden: {{Link2Forum|Topic=30501|Message=383894|LinkText=Download Modul}} und in das FHEM Modul-Verzeichnis (/opt/fhem/FHEM/) kopieren.<br />
<br />
Json Library installieren:<br />
sudo aptitude install libjson-perl<br />
<br />
Konfigurieren(Bsp.):<br />
define doseSop1 SOP112 BC:2B:D7:00:71:24 192.168.0.101<br />
<br />
==Anwendung==<br />
<br />
Define<br />
define <name> SOP112 <MAC> <IP><br />
<br />
IP, unter welcher die SOP112 angesprochen wird. Solange die Erkennung anhand der MAC noch nicht existiert, ist dies ein Pflichtparameter!<br />
<br />
attr <name> IconPrefix <Prefix><br />
<br />
Prefix für die Icons Prefix.on.png, Prefix.off.png, Prefix.start.png, Prefix.ready.png, Prefix.ooo.png. Diese Werte werden bei Änderung automatisiert in "devStateIcon" geschrieben, können dort aber anschließend übersteuert werden. Wird in IconPrefix UND devStateIcon nichts eingetragen, werden nur die Status on und off mit den Standardsymbolen angezeigt, die anderen Status werden als Text dargestellt.<br />
<br />
attr <name> Ready <Watt><br />
<br />
Standby-Leistung in Watt, welche das Modul zum Umschalten von start -> on sowie von on -> ready über- bzw. unterschritten wird. Wird dieser Parameter nicht angegeben, erfolgt keine automatische Abschaltung und Ready_CMD wird nicht ausgeführt. 0 (Null) ist ein gültiger Parameter!<br />
<br />
attr <name> Ready_Time <sec><br />
<br />
Zeit in Sekunden, welche die Standby-Leistung unterschritten sein muss, um von on zu ready umzuschalten. Ist der Parameter leer, wird sofort (nach Rückmeldung der Steckdose!) bei Unterschreiten der Standby-Leistung der Status ready eingenommen.<br />
<br />
attr <name> Ready_CMD <command><br />
<br />
Befehl, welcher mit Erreichen des Ready-Status ausgeführt wird. Dabei gilt die normale FHEM-Syntax, der String wird intern der Perl-Funktion fhem() übergeben.<br />
<br />
attr <name> Ready_on 0|off|1|on<br />
<br />
Wird ready erreicht, wird SOP112 normalerweise ausgeschaltet. Mit Ready_on = 1 bleibt sie eingeschaltet, Ready_CMD wird dennoch abgesendet.<br />
<br />
attr <name> sn Seriennummer<br />
<br />
Lt. Forumsbeitrag sendet die App die Seriennummer bei den Anfragen mit, ein Unterschied zu Befehlen ohne oder mit falscher Seriennummer konnte bisher nicht festgestellt werden. Für Dokumentationszwecke und evtl. spätere Funktionen kann sie aber bereichts übergeben werden.<br />
<br />
==Readings==<br />
<br />
status<br />
start Steckdose ist eingeschaltet, der Stromverbrauch ist nicht größer als StandBy<br />
on Steckdose ist eingeschaltet, der Stromverbrauch ist größer als StandBy<br />
ready der Stromverbrauch ist über die angegebene Zeit kleiner als StandBy, Steckdose wird ausgeschaltet, wenn Ready_on nicht gesetzt ist<br />
off Steckdose wurde manuel ausgeschaltet oder Status ready wurde bestätigt<br />
ooo Steckdose ist unter eingetragener IP nicht erreichbar<br />
<br />
amp aktuell gemessene Stromstärke in Amperé<br />
<br />
watt aktuell gemessene Leistung in Watt<br />
<br />
switch aktueller Zustand des Schalters<br />
<br />
master, limit, rule: werden zwar abgefragt und angezeigt, die Bedeutung und Format ist aber bisher unklar<br />
<br />
start, delay: werden nicht abgefragt und daher nicht angezeigt, auch deren Bedeutung und Format ist unklar<br />
<br />
Befehle<br />
set <name> on|1<br />
<br />
Einschalten (Status = start)<br />
<br />
set <name> off|0<br />
<br />
Ausschalten (Status = off)<br />
<br />
<br />
<br />
==Ansteuerung==<br />
<br />
Die Ansteuerung und Abfrage der SOP112 erfolgt über die TCP/IP und kann mittels Browser oder entsprechenden Schnittstellen erfolgen.<br />
Die Steckdosen werden im lokalen Netzwerk über http Requests mit json kodierten Parametern gesteuert und abgefragt.<br />
<br />
Exemplarisch mit curl:<br />
<br />
<nowiki>curl --globoff -v 'http://192.168.0.222/?cmd=200&json={"sn":"SWP1040003001149","state":1}'</nowiki><br />
<br />
<br />
Der PL501 Adapter verbindet das lokale Netzwerk (Ethernet) mit dem PowerLAN. Die SOP112-Steckdosen holen sich per dhcp eine IP-Adresse vom lokalen DHCP Server. Über diese IP Adresse kann die Dose dann auch zugegriffen werden.<br />
<br />
Der Power Plug, also der schaltbare Adapter, hat eine Serien Nummer aufgedruckt,<br />
z.B. so etwas wie SW10400100123<br />
<br />
Sendet man per Browser<br />
<br />
<nowiki>http://192.168.3.82/?cmd=200&json={"sn":"SWP1040001000123","port":0,"state":1}</nowiki><br />
<br />
wird die Steckdose eingeschaltet<br />
<br />
Einschalten:<br />
<nowiki>http://192.168.xxx.yyy/?cmd=200&json={"state":0}</nowiki><br />
für aus und state=1 für an.<br />
<br />
Abfragen Alles:<br />
<nowiki>http://192.168.xxx.yyy/?cmd=511</nowiki><br />
{"response":511,"code":200,"data":{"watt":["0.00"],"amp":["0.0"],"switch":[0]}}<br />
<br />
Abfragen Limit:<br />
<nowiki>http://192.168.xxx.yyy/?cmd=512</nowiki><br />
{"response":512,"code":200,"data":{"master":[0],"limit":0}}<br />
<br />
Abfrage Status:<br />
<nowiki>http://192.168.xxx.yyy/?cmd=513</nowiki><br />
{"response":513,"code":200,"data":{"switch":[0]}}<br />
<br />
Abfrage Regeln:<br />
<nowiki>http://192.168.xxx.yyy/?cmd=514</nowiki><br />
{"response":514,"code":200,"data":{"rule":[]}}<br />
<br />
Abfrage:<br />
<nowiki>http://192.168.xxx.yyy/?cmd=515</nowiki><br />
{"response":515,"code":200,"data":{"start":"<br />
dann geht es mit Steuerzeichen weiter.<br />
<br />
Weitere Abfragen und das Setzen von Parametern ist möglich, so z.B.: das Ändern des in der App angezeigten Namens, die Einschaltdauer u.a.m.<br />
Die Syntax ist aber noch nicht ermittelt wurden und bisher ist auch kein Bedarf für diese erweiterten Möglichkeiten.<br />
<br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=30501.0|LinkText=Forenthread}}<br />
* {{Link2Forum|Topic=30501|Message=383894|LinkText=Download Modul}}<br />
* [http://www.elv.de/elv-spar-set-mit-2x-schaltsteckdose-sop112-und-1x-powerline-adapter.html ELV Schaltsteckdose SOP112 mit PowerLAN Adapter]<br />
<br />
[[Kategorie:IP Components]]<br />
[[Kategorie:Energieverbrauchsmessung]]<br />
[[Kategorie:Schalter (Empfänger)]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Vitotronic_200_(Viessmann_Heizungssteuerung)&diff=23169Vitotronic 200 (Viessmann Heizungssteuerung)2017-11-03T23:29:03Z<p>Jostar: /* Hardware */ typo</p>
<hr />
<div>{{Randnotiz|RNTyp=r|RNText=Die Verwendung des VCONTROL zur ''Ansteuerung'' eines Heizungssystems kann dieses bei unsachgemäßer Anwendung beschädigen. Für unmittelbare oder mittelbare Folgen, die sich aus dem Nachbau des Interfaces oder der Verwendung der hier zur Verfügung gestellten Information ergeben, übernimmt der Autor keine Haftung.}}<br />
Eine angebundene [[Vitotronic 200 (Viessmann Heizungssteuerung)]] wird von FHEM über das Modul 89_VCONTROL.pm sowie das Modul 89_VCONTROL300.pm unterstützt. Beide Module senden direkt an die Viessmann-Anlage. Es gibt ein drittes Modul 89_VCLIENT.pm (hier der [https://forum.fhem.de/index.php/topic,78101.0.html Forenthread]), das auf dem Daemon vcontrold (siehe [https://openv.wikispaces.com/vcontrold diesen Link]) aufbaut und mit dem sich, wenn vcontrold läuft, ebenfalls die Anlage auslesen und steuern lässt. 89_VCONTROL.pm und 89_VCONTROL300.pm benötigen den Daemon nicht.<br />
<br />
== Einleitung ==<br />
<br clear=all><br />
{{Infobox Modul<br />
|ModPurpose=Anbindung einer Viessmann Heizung<br />
|ModType=d<br />
|ModCmdRef=VCONTROL und VCONTROL300<br />
|ModFTopic=20280<br />
|ModForumArea=Heizungssteuerung/Raumklima<br />
|ModTechName=89_VCONTROL.pm<br />
|ModOwner=adamwit ({{Link2FU|448|Forum}}/[[Benutzer Diskussion:Adam|Wiki]])<br />
}}<br />
Mit Hilfe verschiedener Zusatzgeräte ist es möglich, bei einer Viessmann-Heizung die Temperaturen, Timern, Verbrauch usw. auszulesen und verschiedene Heizungszustände (Heizen, Warm Wasser, Spar Modus, Party Modus) zu steuern.<br />
<br />
== Hardware ==<br />
Bevor die Heizung an FHEM angebunden werden kann, muss eine entsprechende Hardware vorliegen. Die Vitotronic weist zwei LEDs sowie ein eingefrästes Viessmann-V auf, das Bestandteil der Steuerung ist. Eine der beiden Diode dient der Steuerung als Empfangsgerät, während die andere Diode Signale sendet. Durch das eingefräste V kann ein entsprechend konstruiertes Gerät passgenau an die Heizung angeschlossen werden. Derzeit sind folgende Geräte bekannt, die mit der Vitotronic kommunzieren können:<br />
* Optolink-Kabel (Originalbauteil Nr. 7856059, relativ teuer: um 100 €<ref>[http://openv.wikispaces.com/Adapter+Eigenbau openv-Selbstbau-Anleitung]</ref> bzw. ca. 60 €<ref>[https://www.wolf-online-shop.de/Viessmann-Aschlussleitung-USB-Optolink-7856059::59899.html?gclid=EAIaIQobChMIzt-etMH31gIVncmyCh1Q1wSQEAQYASABEgLdrvD_BwE Wolf Online Shop]</ref>)<br />
* selbstgebaute Geräte (zum Teil kommerziell angeboten, Eigenbau ist sehr preiswert - erfordert aber Lötmaterialien)<br />
<br />
Der Eigenbau wird auf der eigens dazu errichteten Webseite [https://openv.wikispaces.com/ openv] genauer beschrieben. <br />
Man muss sich beim Eigenbau insbesondere mit der Frage befassen, über welche Schnittstelle die Hardware dann mit FHEM kommuniziert. Derzeit sind folgende Schnittstellen realisiert, deren Einbindung nach Aussage verschiedener Forenteilnehmer auch geglückt ist:<br />
* USB<br />
* seriell (Anschluss an RPi, dort RxTx)<br />
* WLAN<br />
* LAN<br />
Die serielle Schnittstelle kann mit Hilfe des Programms [http://ser2net.sourceforge.net/ ser2net] auch auf eine LAN-Schnittstelle gemappt werden. Derzeit (Herbst 2017) entwickelt der Forumsteilnehmer PeMue ein allgemeines Modul, das sowohl per WLAN, USB als auch seriell an die Heizung angeschlossen werden kann: {{Link2Forum|Topic=51431|LinkText=Optolink Adapterplatine}}.<br />
<br />
Bevor die Software angeschlossen wird, sollte man sich Informationen bezüglich der verwendeten Heizung sowie der entsprechenden Steuerung besorgen. Diese Angaben müssen bei der Definition des Gerätes sowie in der Konfigurationsdatei in FHEM angegeben werden.<br />
<br />
== Software: Einbindung in FHEM ==<br />
Es existieren momentan (2017) drei verschiedene Module, die eine Einbindung der Heizung in FHEM sicherstellen: <br />
# 89_VCONTROL.pm, <br />
# 89_VCONTROL300.pm <br />
# 89_VCLIENT.pm<br />
Das zweite Modul scheint eine schnellere Kommunikation zu ermöglichen und wird derzeit (Herbst 2017) aktiv weiterentwickelt. <br />
<br />
Das dritte Modul setzt einen laufenden vcontrold-Daemon voraus, der die Kommunikation mit Viessmann übernimmt und wird hier nicht weiter beschrieben (siehe dazu diesen [https://forum.fhem.de/index.php/topic,78101.0.html Foreneintrag]). <br />
<br />
Die Definition des Gerätes erfolgt bei den beiden ersten Modulen typischerweise wie folgt.<br />
{{Randnotiz|RNText='''Weiterentwicklung'''<br />
In {{Link2Forum|Topic=51167|LinkText=diesem Forenthread}} wird über Korrekturen und Bereinigungen im Modul berichtet. }}<br />
defmod <name> VCONTROL300 <IP-Adresse>:3002 /opt/fhem/FHEM/VScotHO1_300.cfg 300 kw<br />
In dem hier vorliegenden Fall wird das Modul 89_VCONTROL300.pm verwendet. Dieses kommuniziert mit einer LAN-Schnittstelle auf Port 3002 an der angegebenen IP-Adresse mit der Hardware. Im Fall eines USB-Anschluss muss der entsprechende Pfad auf die USB-Schnittstelle angegeben werden. Es wird alle 300 Sekunden abgefragt, das verwendete Protokoll lautet kw (eine andere Option besteht darin, das neuere Protokoll 300 zu verwenden). <br />
<br />
Zur Konfiguration wird die Datei /opt/fhem/FHEM/VScotHO1_300.cfg verwendet. Details zu dieser Datei und ihrer Funktion werden im nächsten Abschnitt erläutert.<br />
<br />
== Konfiguration ==<br />
<br />
Um die Heizung mit FHEM zu verbinden, müssen die Daten zwischen der Heizungssteuerung und dem Perl-Server ausgetauscht werden. Die Werte in der Heizungssteuerung werden an speziellen Speicheradressen (die durch vierstellige Hexadezimalzahlen beschrieben werden) gesichert, im Viessmann-device befinden sich die entsprechenden Werte dagegen in Readings. Beide Werte müssen nun eindeutig einander zugeordnet werden. Diese Zuordnung gelingt durch die im define genannte Konfigurationsdatei *.cfg, die sowohl die Speicheradressen als auch die Readingsnamen enthält. Die Datei ist zeilenweise aufgebaut (je Zeile eine Zuordnung). Dabei wird noch zwischen Lesezugriff und Schreibzugriff unterschieden, da möglicherweise verschiedene Speicheradressen involviert sind.<br />
<br />
Informationen zu den Speicheradressen findet man ebenfalls im Forum http://openv.wikispaces.com/, in diesem Forum sind die Adressen teilweise als XML-Datei hinterlegt und müssen entsprechend übertragen werden. In der im Forum geposteten Datei [http://forum.fhem.de/index.php?action=dlattach;topic=20280.0;attach=17498 Viessmann-Software-Config.zip] sind XML Dateien der original Viessmann-Software enthalten. Diese können nützlich sein, um Adressen für den eigenen Heizungstyp zu finden.<br />
<br />
=== Daten lesen ===<br />
Die Konfiguration geschieht mit Hilfe einer cfg-Datei, die von FHEM eingelesen wird. Die Einträge in dieser Datei sind von folgendem Format (wir beschränken uns hier auf das Modul VCONTROL300, für das Modul VCONTROL sind die Einträge analog aufgebaut - dort ist allerdings ein etwas erweitertes Adressformat zu verwenden):<br />
POLL, <adresse>, <parse-methode>, <divisor>, <reading>, <kumulationsmethode><br />
Dies ist wie folgt zu verstehen. POLL zeigt an, dass Daten geholt werden. <adresse> ist die interne Viessmann-Adresse, die die zu holende Variable beherbergt. Dies ist typischerweise eine Hexadezimalzahl mit vier Stellen; beispielsweise findet man unter der Adresse 00F8 die Gerätekennung. Zum Teil können diese Adressen aus Dokumentation bezogen werden, ein Teil der Adressen ist auf der Webseite [http://openv.wikispaces.com/Adressen von openv] dokumentiert. Nicht alle Adressen sind dabei korrekt, hier muss viel probiert werden.<br />
<br />
<divisor> beschreibt, ob die Größe durch eben diesen Divisor dividiert werden soll (Temperaturangaben sind etwa in Zehntelgrad), <reading> nennt den Namen des FHEM-Readings. <kumulationsmethode> kennt die Einträge - (nicht kumulieren) und "day" (über den Tag hinweg addieren). Im letzten Fall werden dann jeweils nach Mitternacht die Werte des letzten Tages ebenfalls als Readings in das Device eingetragen; bei den Readingnamen wird dann jeweils DayStart,Today und LastDay angehangen. Diese Bezeichnungen können mit Readings des Devices angepasst werden.<br />
<br />
<parse-methode> hat die folgenden Auswahlmöglichkeiten<br />
* "1ByteS": Größe 1 Byte mit Vorzeichen, <br />
* "2ByteS": Größe 2 Byte mit Vorzeichen<br />
* "2ByteU": Größe 2 Byte ohne Vorzeichen <br />
* "2ByteU_1stByte": Größe 2 Byte ohne Vorzeichen, 1.tes Byte (allerdings im Thread nicht angegeben)<br />
* "2ByteU_2ndByte": Größe 2 Byte ohne Vorzeichen, 1.tes Byte <br />
* "1ByteH": Größe 1 Byte, vermutlich (im Thread nicht angegeben) hexadezimalkodiert<br />
* "2ByteH": Größe 2 Byte, vermutlich (im Thread nicht angegeben) hexadezimalkodiert<br />
* "2BytePercent": nicht implementiert<br />
* "4Byte": Größe 4 Byte<br />
* "mode": einer der beiden Werte on, off<br />
* "date": 8 Byte Datumswert (Beispiel: Do,28.09.2017 17:01:12)<br />
* "timer": 8 Byte Timer Wert<br />
<br />
Alle Größen, die mit timer kodiert sind, müssen mit einem expliziten Get-Befehl geholt werden und werden nicht automatisch gepollt. Ein User berichtet, dass diese Timerzeiten nur geholt werden konnten, nachdem das automatische Ausfüllen ("Mo-Fr automatic") in der Steuerung ausgeschaltet und jedem Tag ein individueller Wert zugewiesen wurde.<br />
<br />
Ein Beispiel soll einen Eintrag in der cfg-Datei beschreiben:<br />
POLL, 2306, 1ByteU, 1, Temperatur_Haus , -<br />
Die Viessmann-Steuerung enthält an der Speicheradresse 0x2306 den Wert für die Solltemperatur des Hauptheizkreises (oft als M1 bezeichnet). Dieser Wert hat die Größe eines unsignierten Bytes (deshalb 1ByteU). Der Wert soll in FHEM im Reading Temperatur_Haus gespeichert werden. Es soll nur der aktuelle Wert gespeichert werden, die Werte werden über den Tag hinweg nicht addiert/kumuliert (deshalb der Strich am Ende).<br />
<br />
=== Daten schreiben ===<br />
Will man Daten senden, so ist folgendes Kommando zu verwenden<br />
SET, <adresse>, <adresstyp>, <multiplikator>, <setname>, <nextset oder day><br />
Dies ist wie folgt zu verstehen. SET zeigt an, dass Daten gesendet werden. <adresse> ist die interne Viessmann-Adresse (oft, aber nicht immer, sind die Adressen der SET-Kommandos read/write; hier muss man in den Dokumentationen nachschauen). Wieder ist dies eine Hexadezimalzahl mit vier Stellen. Adresstyp entspricht der <parse-methode> oben und gibt an, ob es sich um eine 2Byte-, eine 1Byte- oder was auch immer -Adresse handelt. Als <multiplikator> wird oft 1 verwendet; setzt man hier eine Zahl ein, so wird der zu sendende Wert mit eben diesem Multiplikator multipliziert. Beim Kennwort "mode" und "state" für <multiplikator> können auch Zustände gesendet werden (unklar, wie genau). <setname> ist der Name, mit dem in FHEMWEB auf den Wert zugegriffen wird. <br />
<br />
Dazu ein Beispiel. Im Reading "Temperatur_Haus" wird die Soll-Temperatur des Hauses gespeichert, die dazugehörige Kodierung sei 2306. Der entsprechende POLL-Eintrag in der *.cfg würde dann lauten<br />
POLL, 2306, 1ByteU, 1, Temperatur_Haus , -<br />
(sowohl die Adresse als auch die Übergabeform der Daten, hier 1ByteU, muss natürlich korrekt sein). Nun soll innerhalb von FHEM durch ein Befehl der Form<br />
set <Viessmanndevice> Temperatur_Haus 25 <br />
versucht werden, die Temperatur auf 25 Grad einzustellen. Damit dies möglich ist, muss in der *.cfg folgende Zeile stehen (auch hier gilt: die Adresse muss korrekt sein und es muss möglich sein, in die Steuerung zu schreiben) <br />
SET, 2306, 1ByteU, 1, Temperatur_Haus, <nextset oder day><br />
Nextset bedeutet, dass nach diesem SET-Befehl unmittelbar ein weiterer Setbefehl ausgelöst wird (und zwar genau der, der an dieser Stelle zu finden ist). Day wird nur dann verwendet, wenn der Adresstyp "time" war. In diesem Fall gibt day an, um welchen Wochentag, der einzustellen ist, es sich handelt. Hier sind nur Einträge der Form MO, DI bis SO möglich. Beispielsweise bedeutet<br />
SET, 2028 , timer, 1, TIMER_Haus_SA , SA<br />
dass das Reading TIMER_Haus_SA die Zeiten für die Heizung Samstags enthält, es sich um den Adresstyp timer handelt, die Daten in der Adresse 2028 kodiert sind und die von FHEM gesendeten Daten für Samstag festgeschrieben werden. Der FHEM-Befehl sähe dann so aus<br />
set Heizung TIMER_Haus_SA 08:00,23:00,--,--,--,--,--,--,<br />
Auslesen kann man die Daten dann mit<br />
POLL, 2028, timer, 1 , TIMER_Haus_SA , -<br />
<br />
Etwas umständlicher wird es, wenn eine Auswahlmöglichkeit mit vordefinierten Werten angegeben werden soll. Der Betriebszustand einer Vitotronic 100 HO1A beispielsweise kann nur die Werte 0 (nur_Warmwasser), 3 (Normalbetrieb) und 5 (Frostschutz) annehmen. Die entsprechende Adresse sei 3301. Ziel ist eine Dropdown-Liste in FHEM. Dies muss dann wie folgt in der cfg beschrieben werden<br />
SET, 3301, mode, Betriebsart_Fussb , - <br />
SET, 330100, 1ByteU, 1, nur_Warmwasser , -<br />
SET, 330103, 1ByteU, 1, Normalbetrieb , -<br />
SET, 330105, 1ByteU, 1, Frostschutz , - <br />
<br />
Einige User haben bereits Ihre Heizungen mit der Hilfe diese Moduls angebunden:<br />
* [http://forum.fhem.de/index.php?action=dlattach;topic=20280.0;attach=20811 V200KW1.cfg]<br />
* [http://forum.fhem.de/index.php?action=dlattach;topic=20280.0;attach=21727 VPlusHO1.cfg]<br />
* [http://forum.fhem.de/index.php?action=dlattach;topic=20280.0;attach=21728 VScotHO1.cfg]<br />
* [http://forum.fhem.de/index.php?action=dlattach;topic=20280.0;attach=22863 V200WO1B.cfg]<br />
* [http://forum.fhem.de/index.php?action=dlattach;topic=20280.0;attach=23767 V300KW3_V0002.cfg]<br />
* [https://forum.fhem.de/index.php/topic,67744.msg692581.html#msg692581 Vitotronic 100 HO1A]<br />
* besonders umfangreiche Materialien befinden sich [https://forum.fhem.de/index.php/topic,20280.msg611057.html#msg611057 in diesem Thread]<br />
<br />
== Links ==<br />
* Forenthema zur {{Link2Forum|Topic=51167|LinkText=Weiterentwicklung}} des Moduls<br />
* neueste Version: [https://forum.fhem.de/index.php?action=profile;area=showposts;sa=attach;u=16142 hier]<br />
* Forenthema/-umfrage {{Link2Forum|Topic=51431|LinkText=Optolink Adapterplatine}}<br />
* [http://www.haustechnikdialog.de/SHKwissen/341/Heizkurve Heizkennlinie erläutert]<br />
<br />
== Quellen ==<br />
<references /><br />
<br />
<br />
[[Kategorie:Heizungssteuerung]]<br />
[[Kategorie:Other Components]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=FRITZ!DECT_200&diff=22938FRITZ!DECT 2002017-10-18T18:07:02Z<p>Jostar: /* Readings */</p>
<hr />
<div>{{Infobox Hardware<br />
|Bild=FritzDECT.JPG <br />
|Bildbeschreibung=<br />
|HWProtocol=DECT<br />
|HWType=Sensor, Aktor<br />
|HWCategory=[[:Kategorie:Temperatursensoren|Temperatursensor]]<br />[[:Kategorie:Energieverbrauchsmessung|Energieverbrauchsmessung]]<br />[[:Kategorie:Schalter (Empfänger)|Schalter (Empfänger)]]<br />
|HWComm=DECT<br />
|HWChannels=<br />
|HWVoltage=230 V<br />
|HWPowerConsumption=ca. 0,5..0,9 Watt (Standby)<br />1,5W (Betrieb)<br />
|HWPoweredBy=Stromnetz<br />
|HWSize=B/H/T 59/93/41 mm<br />(ohne Stecker)<br />
|HWDeviceFHEM= FBDECT, FBAHAHTTP<br />
|HWManufacturer=AVM<br />
}}<br />
<br />
== Features ==<br />
Der FRITZ!DECT 200 ist ein automatisch und manuell schaltbarer Zwischenstecker mit Energie- und (mit aktueller Firmware) Temperaturmessung. Er wird von AVM hergestellt und ist speziell auf deren DSL-Router mit DECT Telefonen angepasst.<br />
<br />
Seine Funkkommunikation basiert auf dem sicher verschlüsselten DECT-Standard. Damit ist er einer der wenigen Funkschalter, der vor missbräuchlicher Auslösung oder Ausspähung geschützt ist.<br />
<br />
Der Stromverbrauch ist relativ hoch.<br />
*Verbrauch Standby: 0,9 W<br />
*Verbrauch Betrieb: 1,5 W<br />
Durch den Betrieb des Gerätes, kann zudem der DECT-Eco-Mode der Fritz!Box nicht mehr ausgewählt werden, was den Stromverbrauch zusätzlich erhöhen kann.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
siehe commandref [http://fhem.de/commandref_DE.html#FBDECT]<br />
<br />
Für die Verbindung zwischen der Fritz!Box und FHEM wird das Modul [http://fhem.de/commandref.html#FBAHA FBAHA] oder [http://fhem.de/commandref.html#FBAHAHTTP FBAHAHTTP] (Unterschiede zwischen den beiden Modulen und Hinweise zum Umstieg von FBAHA zu FBAHAHTTP: {{Link2Forum|Topic=53147}}) benötigt.<br />
<br />
Außerdem müssen die Smarthome-Funktion im FRITZ!Box-Heimnetz freigegeben werden.<br />
(Fehlermeldung: Can't connect to fritz.box:2002: Connection refused)<br />
<br />
Diese erfolgt über die Fritz!Box Oberfläche in der erweiterten Ansicht (Fußzeile der FB Oberfläche).<br />
Den Punkt "Smarthome-Funktion im FRITZ!Box-Heimnetz freigeben" findet man unter Netzwerk->Netzwerkeinstellungen (OS 6.20).<br />
<br />
* Max. Schaltleistung: 2.300W<br />
* manuelles Schalten am Device (deaktivierbar) oder durch Fernsteuerung möglich<br />
* Messung von Spannung, Strom, Leistung, Temperatur<br />
* Akustiksensor zum Schalten per Geräusch (Klatschen, Rufen) - derzeit (04/2017) eher unzuverlässig<br />
* Reichweite: 300m im Freien, 40m in Gebäuden (lt. Hersteller)<br />
<br />
== Readings ==<br />
Reading gefolgt von einem Beispielswert.<br />
* FBNAME Ventilator<br />
*FBPROP powerMeter,switch<br />
*FBTYPE AVM FRITZ!Dect 200<br />
*control on fn=1 > 0.00 delay:0sec do:state off<br />
*current 0.0017 A<br />
*energy 6507 Wh<br />
*options powerOnState:last,lock:none<br />
*power 0.00 W<br />
*powerFactor 0.000<br />
*relayTimes disabled<br />
*state off<br />
*tempadjust 0.0 C<br />
*temperature 18.0 C (measured)<br />
*voltage 234.490 V<br />
<br />
== Bekannte Probleme ==<br />
Nicht für den Einsatz im Außenbereich vorgesehen. vgl.: [[FRITZ!DECT 210]]<br />
<br />
== Links ==<br />
* [https://avm.de/produkte/fritzdect/fritzdect-200/ AVM-Produktseite]<br />
<br />
[[Kategorie:AVM-Produktserie FRITZ!DECT]]<br />
[[Kategorie:Schalter (Empfänger)]]<br />
[[Kategorie:Energieverbrauchsmessung]]<br />
[[Kategorie:Temperatursensoren]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Diskussion:ELV_Powerline_Schaltsteckdose_SOP112&diff=21439Diskussion:ELV Powerline Schaltsteckdose SOP1122017-05-02T17:32:17Z<p>Jostar: Rechenfehler</p>
<hr />
<div>Stromverbrauch: 2 Watt Verbrauch sollen 22 € im Jahr ausmachen? Nach meiner Rechnung sind es mit den gegebenen 0,30 €/kWh nur 5,12 € (17 kWh). Denkfehler oder Fehler in der Beschreibung? <br />
Gruß --[[Benutzer:Jostar|Jostar]] ([[Benutzer Diskussion:Jostar|Diskussion]]) 19:31, 2. Mai 2017 (CEST)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=XiaomiBTLESens&diff=21192XiaomiBTLESens2017-04-06T09:08:06Z<p>Jostar: /* Beschreibung */ Link zum Gerät</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Auslesen eines Xiaomi Flower Sensors<br />
|ModType=d<br />
|ModForumArea=Sonstige Systeme<br />
|ModTechName=74_XiaomiFlowerSens.pm<br />
|ModOwner=CoolTux <br/>({{Link2FU|13684|Forum}} / [[Benutzer:CoolTux|Wiki]])<br />
}}<br />
<br />
==Beschreibung==<br />
Mit diesem Modul ist es möglich den XiaomiFlowerMonitor (Device [[Xiaomi Flower Sensor]]) auszulesen und die entsprechenden Daten als Readings darzustellen.<br />
<br />
Voraussetzung zur Verwendung des Modules ist:<br />
* libjson-perl<br />
* bluez (gatttool und hcitool)<br />
<br />
Mittels <code>hcitool lescan</code> bekommt man die BT-MAC, die benötigte Bluetooth MAC Adresse.<br />
<br />
<br />
===Definition===<br />
<code>define <name> XiaomiFlowerSens <BT-MAC></code><br />
<br />
'''Beispiel:'''<br />
<br />
<code>define Weihnachtskaktus XiaomiFlowerSens C4:7C:8D:62:42:6F</code><br />
<br />
Diese Anweisung erstellt ein XiaomiFlowerSens Device mit dem Namen Weihnachtskaktus und der BT MAC C4:7C:8D:62:42:6F.<br />
<br />
<br />
===Readings===<br />
* state - aktueller Status des Device.<br />
* battery - Status der Batterie in Abhängigkeit des batteryLevel Readings.<br />
* batteryLevel - Füllstand der Batterie in Prozent.<br />
* fertility - Nährstoffgehalt des Pflanzenbodens (Dünger)<br />
* firmware - aktuelle Firmware auf dem Device<br />
* lux - aktuelle Lichtintensität<br />
* moisture - Wassergehalt (Feuchtigkeit) des Pflanzenbodens<br />
* temperature - Umgebungstemperatur<br />
<br />
<br />
===Set===<br />
* statusRequest - einmaliges abrufen der Daten vom Sensor<br />
<br />
<br />
===Attribute===<br />
* interval - Intervalzeit in Sekunden welcher ein automatischer Datenabruf erfolgen soll<br />
* disable - deaktiviert die den Intervalabruf</div>Jostarhttp://wiki.fhem.de/w/index.php?title=TelegramBot&diff=20611TelegramBot2017-03-07T20:00:25Z<p>Jostar: https://forum.fhem.de/index.php?topic=38328.1305</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messagingdienst Telegram<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste<br />
|ModFTopic=38328<br />
|ModTechName=[https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm]<br />
|ModOwner=[[Benutzer:Viegener|Viegener]] ({{Link2FU|12772|Forum}} / [[Benutzer Diskussion:Viegener|Wiki]])}}<br />
<br />
Das [[TelegramBot]]-Modul ermöglicht das Senden und Empfangen von Nachrichten über den Telegram-instant messaging Dienst (https://telegram.org/). <br />
Es entsteht eine Möglichkeit Benachrichtungen aus FHEM zu versenden, zum Beispiel Alarmmeldungen.<br />
Ausserdem können auch Kommandos über Telegram an FHEM gesendet werden um Steuerungsbefehle in FHEM auszulösen.<br />
<br />
Das TelegramBot-Modul benötigt keine Zusatzsoftware auf dem FHEM-Server (anders als die Variante [[Telegram]]), sondern verwendet das [https://core.telegram.org/bots/api TelegramBot-API] über https-Aufrufe. Es muss jedoch das [http://www.fhemwiki.de/wiki/Raspberry_Pi#N.C3.BCtzliche_Zusatzpakete perl JSON modul] installiert sein. <br />
<br />
== Über Telegram Instant Messaging ==<br />
Telegram-IDs und Versand/Empfang von Nachrichten sind kostenfrei. <br />
Clients sind für gängige Smartphonesysteme erhältlich (iOS iPhone und Tablet, Android, Windows Phone) und <br />
können auch aus dem WebBrowser verwendet werden. <br />
Es gibt auch einen Kommandozeilen-Client für Linux, der die Grundlage dieses Moduls darstellt. <br />
Mehrfachanmeldungen, auch parallel mit verschiedenen Geräten (z.B. Tablet und Smartphone), sind möglich.<br />
Gruppenchats und Chats mit End-2-End-Verschlüsselung werden ebenfalls unterstützt.<br />
<br />
Für die Unterstützung von ''WhatsApp'' siehe Modul [[yowsup]].<br />
<br />
== Features ==<br />
Unterstützt werden:<br />
<br />
* Versand von Textnachrichten <br />
* Versand und Empfang von Bildern/Audio/etc <br />
* Empfang von Textnachrichten von beliebigen Kontakten<br />
* Kommandos in FHEM über Telegram-Nachrichten von aussen auslösen<br />
* Ergebnisse der Kommandos zusenden lassen<br />
<br />
Eine detaillierte Beschreibung des Moduls ist im FHEM Forum und in der (englischen) Dokumentation zum Modul in der Commandref diesem {{Link2Forum|Topic=38328|LinkText=Diskussionsthread}} zu finden. Seit Oktober 2015 wird das Modul offiziell über FHEM-Update verteilt.<br />
<br />
Die jeweils aktuellste Entwicklungs-Version des Moduls ist in Github [https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm 50_TelegramBot.pm] verfügbar.<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Dieses Authtoken ist die einzige Authentifizierung für den Bot und sollte deshalb nicht aus der Hand gegeben werden. Die verwendeten Urls sind deshalb auch in den Log-Files nicht enthalten, da diese das Authtoken in Klartext enthalten. Auch im Forum sollte dieses Token nicht aufgenommen werden.<br />
}}<br />
<br />
Für die Anlage eines TelegramBot Devices in FHEM ist ein Authtoken erforderlich. Dieses Token wird über Anlegen eines neuen Bots im [https://core.telegram.org/bots#botfather BotFather] erzeugt. Dort mit dem Telegram-Befehl <code>/newbot</code> einen neuen Bot anlegen und mit einem Namen versehen. Hinweis: Die Namen für Bots müssen auf "Bot" enden.<br><br />
<br />
Das Anlegen eines TelegramBot devices erfolgt durch die Angabe dieses Tokens:<br />
<br />
<code>define &lt;name&gt; TelegramBot &lt;token&gt; </code><br />
<br />
Beispiel: <code>define teleBot TelegramBot 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw</code><br />
<br />
'''Das Empfangen von Nachrichten (polling) erfordert die Einstellung des Attributes''' <br />
<code>pollingTimeout</code> '''auf einen Wert der grösser als Null ist. Beim Wert 0 oder ohne Setzen des Attributes findet kein Polling und damit auch kein Empfang statt.''' <br />
<br />
Beispiel: <code>attr teleBot pollingTimeout 120</code><br />
<br />
'''Der TelegramBot kann erst dann Nachrichten an einen telegram user schicken, wenn dieser zuerst an den telegram bot eine Nachricht gesendet hat.'''<br />
<br />
{{Randnotiz|RNTyp=Warn|RNText=TelegramBot setzt eine aktuelle Version von FHEM voraus, insbesondere Versionen weit vor der Umstellung auf 5.7 (also vor Herbst 2015) können mit einem TelegramBot-Modul nicht funktionieren, da insbesondere das HTTPSRV-Modul dann veraltet ist. Am besten auch den TelegramBot über den offiziellen Update mit dem Rest von FHEM installieren/aktualisieren.<br />
}}<br />
<br />
== Registrierung eines neuen Bot ==<br />
Zur Registrierung wird ein funktionierender Telegram-Client (egal ob Web, App oder Programm)benötigt. Hier wird ein Chat zum BotFather gestartet und der Befehl /newbot gesendet. Nun fragt der BotFather die benötigten Angaben ab und liefert am Ende des Dialogs die Informationen für den neuen Bot.<br />
Hier ein Beispiel, wie so ein Chat aussehen könnte:<br />
<pre>Client: <br />
/newbot<br />
----------------<br />
BotFather:<br />
Alright, a new bot. How are we going to call it? Please choose a name for your bot. <br />
----------------<br />
Client: <br />
Mein Name <br />
----------------<br />
BotFather: <br />
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.<br />
----------------<br />
Client: <br />
fhem_bot<br />
----------------<br />
BotFather: <br />
Sorry, this username is already taken. Think of something different.<br />
----------------<br />
Client: <br />
fhem1234_bot<br />
----------------<br />
BotFather: <br />
Done! Congratulations on your new bot.<br />
You will find it at telegram.me/fhem1234_bot.<br />
You can now add a description, about section and profile picture for your bot, see /help for a list of commands.<br />
----------------<br />
Use this token to access the HTTP API:<br />
1234567890:AbCdefgHIJklmnOPQRst-uvwxyz <br />
<br />
For a description of the Bot API, see this page: https://core.telegram.org/bots/api <br />
</pre><br />
Um einen Chat an einen "Contact" versenden zu können, muss zuerst in Contacts (bei Readings) ein Kontakt auftauchen. Wenn man sich zum allerersten Mal bei Telegram angemeldet hat, gibt es noch keinen Chat mit irgendjemanden. Man muss sich zuerstmal selbst eine Nachricht im Smartphone zusenden, dann taucht unter Readings der Eintrag Contacts auf. Erst dann kann man eine Nachricht mit @msgPeerId (das ist Ziffernfolge des Contacts ) oder mit @msgPeer (das ist der Name nach dem Doppelpunkt) vom TelegramBot auf sein Smartphone senden.<br />
<br />
== Tipps ==<br />
<br />
=== Privacyeinstellungen ===<br />
<br />
Damit der TelegramBot auch Meldungen in Gruppen sieht, müssen über den BotFather die Privacy-Einstellungen geändert werden.<br>Beispielchat:<pre>Client:<br />
/setprivacy<br />
----------------<br />
BotFather:<br />
Choose a bot to change group messages settings.<br />
----------------<br />
Client:<br />
@fhem1234_bot<br />
----------------<br />
BotFather:<br />
'Enable' - your bot will only receive messages that either start with the '/' symbol or mention the bot by username.<br />
'Disable' - your bot will receive all messages that people send to groups.<br />
Current status is: ENABLED<br />
----------------<br />
Client:<br />
Disable<br />
----------------<br />
BotFather:<br />
Success! The new status is: DISABLED. /help</pre><br />
<br />
=== Kontakte ===<br />
<br />
Der Bot merkt sich die bereits bekannten Kontakte im Reading <code>Contacts</code>. Dabei werden die einzelnen Kontakte jeweils als 3-teilige Einträge bestehend aus UserID, Vor- und Nachname des Benutzers (mit _ verbunden) und dem Username (mit vorangestelltem @). <br />
<br />
Beispiel: <code>123456:Ralf_Mustermann:@ralf</code><br />
<br />
Verschiedene Einträge werden durch Leerzeichen getrennt.<br />
<br />
Man kann die Kontakte auch manuell überschreiben (z.B. wenn das Reading fehlerhaft oder verloren sein sollte). Dazu gibt es den Set-Befehl <code>replaceContacts</code>. Dieser nimmt die Kontakte ebenfalls in der gleichen Form wie oben beschrieben entgegen.<br />
<br />
Die Kontaktliste wird ansonsten nur durch den Empfang von Nachrichten erweitert, da es im TelegramBot-API keine Möglichkeit gibt Kontaktdaten von Telegram abzufragen (siehe auch pollingTimeout)<br />
<br />
=== Reset ===<br />
<br />
Es ist möglich den Bot im laufenden Betrieb zurückzusetzen (Set-Befehl <code>reset</code>). Dabei werden noch nicht abgeschlossene Übetragungen entfernt und die internen Zustände des Devices zurückgesetzt. <br />
<br />
=== Gruppen ===<br />
<br />
Um eine Nachricht von FHEM an eine Gruppe zu senden, muss der BOT in die Gruppe aufgenommen werden. Nach dem Senden einer Nachricht an die Gruppe kann im Modul die Gruppen-ID ermittelt werden und zum Senden von Nachrichten verwendet werden. Wenn die Privacy-Einstellungen nicht auf 'Disabled' gesetzt wurden, muss die Nachricht mit einem Slash (/) beginnen.<br />
<br />
==== Supergroups / Supergruppen ====<br />
<br />
Auch die neuen Supergruppen werden mit dem Bot unterstützt, es ist allerdings zu beachten, dass bei der Umwandlung einer Gruppe in eine Supergruppe eine neue ID in den Kontakten von Telegram vergeben wird. Wenn man also wie empfohlen IDs zur Identifikation von Benutzern einsetzt, muss entsprechend angepasst werden.<br />
<br />
== Beispielszenarien ==<br />
<br />
=== Benachrichtigungen über Ereignisse ===<br />
<br />
Das einfachste Szenario für die Integration von Messaging-Diensten mit FHEM ist zur Benachrichtigung über Ereignisse. Diese Funktion kann zum Beispiel verwendet werden, um über einen erfolgten Neustart von FHEM zu informieren:<br />
<br />
<code>define notify_fhem_reload notify global:INITIALIZED set telebotdevice message fhem newly started - just now !</code><br />
<br />
In diesem Beispiel wird der Nachrichtentext "fhem newly started - just now !" an den als default eingestellten Kontakt (Attribut: defaultPeer) gesendet, sobald FHEM neu gestartet wurde. Natürlich kann man auch beliebige andere Benachrichtigungen einführen.<br />
<br />
=== Versand von Bildern ===<br />
<br />
Es ist auch möglich Bilder auf dem FHEM-Server, die zum Beispiel von einer Kamera oder einem Wettermodul stammen über Telegram zu versenden. So wäre es z.B. möglich jeweils morgens die aktuelle Wetterkarte zu erhalten.<br />
<br />
ACHTUNG: TelegramBot verwendet das HTTPUtils-Modul zur Kommunikation mit dem TelegramBot-API. Erst mit der Version, die seit 22.10.2015 <br />
([r9576] HttpUtils.pm: Async write for POST Requests {{Link2Forum|Topic=41583|LinkText=FHEM-Forum}}) verteilt wird, erlaubt auch den Transfer grösserer Bilder. Die Grenze liegt ansonsten bei ca. 14kb auf Raspberries (Plattformspezifische Grenze).<br />
<br />
<br />
<code>define notify_fhem_reload notify wetter:report set telebotdevice sendPhoto /opt/fhem/wetter.jpg</code><br />
<br />
Bei Erreichen des entsprechenden Status am Wetter-Modul wird ein Image über Telegram versendet. Hier sind lokale Pfade (relativ zu fhem) oder absolute Pfade wie oben möglich.<br />
<br />
=== Versand von SVG-Plots ===<br />
<br />
Der Versand ist nicht direkt über das Device möglich, jedoch über den Perl-Befehl 'TelegramBot_ExecuteCommand':<br />
<br />
<code>{TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
Hierbei ist die Ziel-ID ohne das @-Zeichen, Anführungszeichen o.ä. anzugeben. Das Ziel kann auch eine Gruppen-ID (beginnend mit dem Minus-Zeichen) sein. <br />
<br />
mit <code> define cmd_sendTelegramSVG cmdalias TGSVG .* AS {TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng($EVENT)}');; return;;}</code><br />
<br />
kann man mit einem kurzen <br />
<code> TGSVG SVG_Garten </code><br />
ein beliebiges SVG versenden.<br />
<br />
Um das SVG nun noch mit einem Text zu versehen, muss eine Textnachricht dazu gesendet werden, was sich am einfachsten durch das Ausführen eines FHEM-Befehls auf Perl-Ebene realisieren lässt:<br />
<br />
<code>{fhem "set mein_telegramBot message \@meine_ZielID Mein Text" ;; TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
'''Hinweis:''' seit dem Update Ende Februar 2017 hat die Funktion einen Parameter mehr, somit benötigt <br />
<br />
<code>{TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
die folgende Erweiterung<br />
<br />
<code>{TelegramBot_ExecuteCommand($defs{"mein_telegramBot"}, meine_ZielID, undef, '{plotAsPng("mein_SVG")}');; return;;}</code><br />
<br />
<br />
==== Voraussetzungen für den Versand von SVG-Plots ====<br />
Es muss das Modul libimage-librsvg-perl installiert sein:<br />
<br />
<code>sudo apt-get install libimage-librsvg-perl</code><br />
<br />
Evtl. sind weitere Module erforderlich:<br />
<br />
<code>sudo apt-get install libgd-graph-perl<br />
<br />
sudo apt-get install libgd-text-perl</code><br />
<br />
=== Empfang von Bildern oder ähnlichem ===<br />
<br />
Beim Empfang von Bildern wird zuerst nur eine ID vom Telegram-Server empfangen, diese befindet sich im Reading <code>msgFileId</code> angelegt (<code>123456:xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx</code>) und im Reading <code>msgText</code> steht dann so etwas wie<br />
<code>received photo # Size: 107701</code><br />
<br />
Über das Get-Kommando <code>urlForFile</code> mit der ID aus dem msgFileId Reading lässt sich dann daraus ein URL ableiten, der dann zur eigentlichen Datei führt: <br />
<br />
<code>https://api.telegram.org/file/bot123456:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/photo/file_25.jpg</code><br />
<br />
<br />
=== Versand von Emojis (Smileys) ===<br />
<br />
Es ist auch möglich Emojis mit den (Text-)Nachrichten zu versenden. Die entsprechenden (Unicode-)Zeichen werden einfach direkt mit in den Text der Nachricht aufgenommen. Um das zu vereinfachen kann man das einfach per Copy und Paste von dieser Seite <br />
<br />
http://apps.timwhitlock.info/emoji/tables/unicode (Spalte "Native") <br />
<br />
übernehmen und mit der Nachricht verschicken. <br />
<br />
Die Emojis können auch empfangen werden und werden so auch in FHEM / FHEMWeb angezeigt. Plattformspezifische (z.B. von iOS oder Android) Emojis werden dabei nicht unterstützt (gerade mit iOS sind viele neue farbige Emojis hinzugekommen, die wohl leider nur auf Apple-devices funktionieren).<br />
<br />
=== Kommandos auslösen ===<br />
<br />
Ein wichtiges Szenario ist die Möglichkeit Kommandos in FHEM ausführen zu können, ohne einen Zugang durch die Firewall einrichten zu müssen. Dazu ist die Definition eines Schlüsselwortes (Attribut: "cmdKeyword")erforderlich, mit dem man die Nachrichten beginnen muss, damit der TelegramBot die Kommandos erkennt.<br />
<br />
<code>attr telebotdevice cmdKeyword doit</code><br />
<br />
Somit kann man dann durch Nachrichten die mit "doit" beginnen Kommandos an FHEM senden, die ähnlich wie im Kommandoeingabefeld von FHEMweb dann von FHEM ausgeführt werden. Das Ergebnis der Ausführung wird zurück an den Sender (und an den definierten defaultPeer) geschickt.<br />
<br />
Somit können nicht nur Aktionen angestossen werden, sondern auch Infos abgefragt werden.<br />
<br />
Beispiele<br />
<br />
<code>doit set schalter on</code><br />
<br />
<code>doit list telegrambot</code><br />
<br />
{{Randnotiz|RNTyp=Warn|RNText=Achtung: Bei den Kommandos sollten man unbedingt das Attribut "cmdRestrictedPeer" setzen, damit nicht jeder Kommandos auf dem FHEM-Server ausführen kann. Dazu sollten die BenutzerIDs der erlaubten Benutzer (durch Leerzeichen getrennt angeben). Da Benutzernamen selber vergeben werden und nicht unbedingt eindeutig sind, sollten hier auch NUR BenutzerIDs verwendet werden.<br />
}}<br />
<br />
==== Favoriten für Kommandos anlegen ====<br />
<br />
Grundidee bei den Favoriten ist, dass man lange Befehle, die man häufig braucht auf "Kurzwahl" legt.<br />
<br />
Beispiel-Kommandos wie z.B. <code>set TYPE=ROLLADEN pos 100</code> und <code>set TYPE=ROLLADEN pos 0</code>, die man immer wieder braucht. Um nicht jedes mal dieses Kommando eintippen zu müssen auf dem Smartphone, kann man auch dafür Favoriten anlegen.<br />
<br />
Dazu gibt man erst mal die beiden Kommandos getrennt durch Semikolon im Attribut favorites an:<br />
<br />
<code>attr telegrambotdevice favorites set TYPE=ROLLADEN pos 100;set TYPE=ROLLADEN pos 0</code><br />
<br />
Um die Favorites jetzt ausführen zu können braucht man noch ein Schlüsselwort dafür.<br />
Nehmen wir mal an man möchte die Favoriten mit <code>/short</code> ausführen können. Dazu muss dann das Attribut "cmdFavorites" setzen<br />
<br />
<code>attr telegrambotdevice cmdFavorites /short</code><br />
<br />
Wenn man nun im Telegram Client <br />
<code>/short 1</code> an den Bot schickt führt der Bot den ersten Favoriten aus und das Ergebnis der Ausführung wird zurückgeschickt.<br />
<br />
Ausserdem kann man im Telegram Client <br />
<code>/short</code> an den Bot schicken, dann antwortet der Bot mit<br />
<br />
<pre><br />
Favorites<br />
<br />
/short1 = set TYPE=ROLLADEN pos 100<br />
<br />
/short2 = set TYPE=ROLLADEN pos 0<br />
<br />
</pre><br />
<br />
Die Antworten werden als Schaltflächen dargestellt (Telegram inline Keyboard) und können am Mobile-Client direkt angeklickt werden um sie auszuführen.<br />
Um die Beschriftung der Schaltflächen zu optimieren, können die Befehle im Attribut favorites mit Beschreibungen versehen werden:<br />
<br />
<code>/[Rollaeden zu ]=set TYPE=ROLLADEN pos 100;/[Rollaeden auf]=set TYPE=ROLLADEN pos 0</code><br />
<br />
Nun antwortet der Bot auf das Schlüsselwort für die Favoriten mit:<br />
<br />
<pre><br />
Favorites<br />
<br />
/short1 = Rollaeden zu<br />
<br />
/short2 = Rollaeden auf<br />
<br />
</pre><br />
<br />
== Links ==<br />
* Github Repository für die Telegram-FHEM Entwicklung: https://github.com/viegener/Telegram-fhem<br />
* Infos zum Telegram BotFather: https://core.telegram.org/bots#botfather<br />
<br />
* Source code für das 50_TelegramBot.pm-Modul: https://github.com/viegener/Telegram-fhem/blob/master/50_TelegramBot.pm<br />
<br />
* Forum-Thread in dem das Modul vorgestellt wurde {{Link2Forum|Topic=38328|LinkText=FHEM-Forum}}<br />
* Telegram messaging system https://telegram.org/<br />
* TelegramBot API https://core.telegram.org/bots/api</div>Jostarhttp://wiki.fhem.de/w/index.php?title=FRITZBOX&diff=20312FRITZBOX2017-02-26T11:21:58Z<p>Jostar: /* Klingel- und Sprachausgabe per TR-064 */ Alternative getestet mit FritzOS 06.80</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 ('''und nur 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 />
In der Fritzbox muss dann auch "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" ausgewählt sein.<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 Beispiele ===<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 />
*Daten eines Smart-Home-Gerätes auslesen: <code>get <device> tr064Command X_AVM-DE_Homeauto:1 x_homeauto GetGenericDeviceInfos NewIndex 0</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 />
Eine Alternative um Telefone klingeln zu lassen, ist die Nutzung des [[SIP-Client]]s.<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 urMobilteil_1 {my $resp=fhem("get Fritzbox tr064Command X_AVM-DE_OnTel:1 x_contact GetDECTHandsetInfo NewDectID 1",1);;$resp =~/'NewHandsetName' => '(.*)'/;;return $1;;},<br />
urDownstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewDownstreamCurrRate' => '(.*)'/;;return $1;;},<br />
urUpstreamDSLRate {my $resp=fhem("get Fritzbox tr064Command WANDSLInterfaceConfig:1 wandslifconfig1 GetInfo",1);;$resp =~/'NewUpstreamCurrRate' => '(.*)'/;;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 und auch keine Sprachnachricht über ein Fritz!Fon ausgegeben 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 M3U-Datei, die unter dem Internal ''M3U_LOCAL'' steht, eingetragen.<br> <br />
Standardmäßig wird versucht, diese Datei im image-Verzeichnis von FHEM abzulegen. Diese kann dann vom Fritz!Fon über [[FHEMWEB]] abgespielt werden (IP-Freigaben beachten). 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 />
<br />
Aufgrund der Beschränkungen von [[FHEMWEB]] oder auch bei Authentifizierungsanforderungen ist es empfehlenswert, die Datei über das Attribute ''m3uFileLocal'' selber vorzugeben. Am besten auf einem Webserver, der auf dem FHEM-Server läuft und dessen Seiten-Verzeichnis durch FHEM beschreibbar ist.<br><br />
Beispiel: <code>attr Fritzbox m3uFileLocal /var/www/mp3/Fritzbox.m3u</code><br />
<br />
In dem Radioeintrag ''FHEM'' muss dann '''auf der FritzBox''', die '''Web'''-Adresse der entsprechenden Datei eingetragen werden. Dieser Sender sollte zu Testzwecken dann auch einmal am Fritz!Fon von Hand gestartet werden.<br><br />
Das Modul versucht, beim Start die einzutragende Radio-URL im image-Verzeichnis selber zu ermitteln (IP-Freigabe beachten). Gelingt dies, so steht diese im Internal ''M3U_URL''.<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 />
=== Fehler nach Firmware Update===<br />
Nach einem Firmwareupdate der Fritzbox am besten auch FHEM neu starten.<br />
<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 />
Alternativ kann das Ausschalten des WLANs nicht direkt über TR064-Kommandos, sondern über einen indirekten Weg erfolgen: über TR064 ein set call abzusetzen und hier den Tastencode zum Ausschalten des WLANs einzugeben, bei einer FritzBox 7490 wäre dies z. B. #96*0*. <br />
Schaltet man über diese Methode das WLAN aus, kann es über die Nachtschaltung wieder automatisch auf beiden Frequenzen angeschaltet werden.<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 />
Zumindest für Unitymedia und einer FRITZ!Box 6490 Cable (lgi) mit FRITZ!OS:06.50 funktioniert TR064. <br />
<br />
Eine Rufumleitung bei Abwesenheit (Modul PRESENCE) funktioniert mit einer vorher eingerichten Telefonnummer wie folgt: <br />
<code>define Rufumleitung DOIF ([Anwesenheit.dum:state] eq "off") (set FritzBox6490 diversity 1 on) DOELSEIF ([Anwesenheit.dum:state] eq "on") (set FritzBox6490 diversity 1 off)</code><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 />
=== "Error: Old SID not valid anymore." nach Erlauben von IPv6 auf der Fritzbox ===<br />
Ohne hier den genauen Grund zu kennen - es hilft die Angabe der IPv4-Adresse: also statt <code>define FritzBox FRITZBOX</code> dann <code>define FritzBox FRITZBOX <IP></code> (z.B. <code>define FritzBox FRITZBOX 192.168.10.1</code>), so dass das Modul nicht über IPv6 geht.<br />
<br />
=== "Didn't get a session ID" ===<br />
Höchstwahrscheinlich wurde ein falsches Passwort gesetzt.<br />
<br />
:<code>set <DEVICE> password <PASSWORD></code><br />
<br />
=== TR064-Error 401:invalid action ===<br />
Eventuell ist auf der Fritzbox ein Benutzer gesetzt und im Modul nicht korrekt angegeben bzw. mit falschen Rechten versehen (attribut boxUser).<br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=29725|LinkText=Forenthread}} zu diesem Modul<br />
<br />
[[Kategorie:FritzBox]] <br />
<!-- (Modulkategorie wird automatisch gesetzt) --></div>Jostarhttp://wiki.fhem.de/w/index.php?title=UWZ&diff=19507UWZ2017-02-07T16:29:16Z<p>Jostar: /* Installation */</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Daten von Unwetterzentrale.de holen<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=77_UWZ.pm<br />
|ModOwner=Tdoe, CoolTux ([https://forum.fhem.de/index.php/topic,51233.0.html Forum])<br />
}}<br />
<br />
Das Modul [[UWZ]] holt Informationen für eine zu spezifizierende Postleitzahl von der Seite [Unwetterzentrale.de] und bereitet sie für die Darstellung in FHEM auf.<br />
{{Randnotiz|RNTyp=y|RNText=Diese Anleitung ist etwas in die Tage gekommen, es hat viele Änderungen/Neuerungen gegeben. Die Commandref ist up2date und sollte eine gute Hilfestellung geben. Ansonsten bitte ins Forum schauen ob hier bereits Lösungen zum Problem bestehen.<br />
Die Wikiseite wird nach und nach aktualisiert. Wenn du dies liest und du dich mit dem Modul auskennst, bist du recht herzlich eingeladen den Artikel upzudaten. So bleibt uns (Entwicklern) mehr Zeit um uns um das Modul zu kümmern und dies zu verbessern/erweitern.}}<br />
<br />
<br />
== Voraussetzungen ==<br />
Standardinstallation und eine Internetverbindung werden für das Funktionieren des Moduls benötigt.<br />
<br />
== Installation ==<br />
Das Modul wird als offizielles Modul per [[update]] verteilt und muss nicht extra installiert werden.<br />
<br />
Falls nach dem "define" der Fehler "unable..." kommt und im Log "...Can't locate XML/Simple.pm in @INC (you may need to install the XML::Simple module)..." steht, so kommt man auf der Konsole mit der folgenden Installation weiter:<br />
<br />
<code>cpan install XML::Simple</code><br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Abhängig davon, ob man Unwetterwarnungen aus Deutschland oder einem anderen Land abfragen möchte, muss für das Attribut PLZ entweder die Postleitzahl (Deutschland) oder die AREA_ID (Rest der Welt) verwendet werden.<br />
<br />
==== Deutschland ====<br />
:<code><nowiki>define <name> UWZ <Ländercode> <PLZ> <INTERVAL> </nowiki></code><br />
<br />
==== Rest der Welt ====<br />
:<code><nowiki>define <name> UWZ <Ländercode> <AREA_ID> <INTERVAL> </nowiki></code><br />
<br />
Die AREA_ID kann folgendermaßen ermittelt werden:<br />
<br />
===== Geokoordinaten ermitteln =====<br />
Dazu wird folgende URL aufgerufen, und am Ende der URL bei dem ''search'' Parameter der Name des Ortes eingegeben. Im Fall von Oberwaltersdorf AT:<br />
:<code><nowiki>http://alertspro.geoservice.meteogroup.de/weatherpro/SearchFeed.php?search=oberwalt</nowiki></code><br />
<br />
Als Antwort bekommt man eine XML Struktur mit gefundenen Orten:<br />
<pre><br />
<result><br />
<cities previousOffset="-1" nextOffset="-1"><br />
<city country="49" city="8512" id="18226609" country-name="Germany" province-name="Bavaria" continent="6" inhabitants="7500" longitude="12.17092" latitude="48.57422" name="Oberwaltenkofen (Ergolding)" timezone="Europe/Berlin"/><br />
<city country="49" city="8671" id="18226768" country-name="Germany" province-name="Bavaria" continent="6" inhabitants="4000" longitude="12.51418" latitude="48.77301" name="Oberwalting (Leiblfing)" timezone="Europe/Berlin"/><br />
<city country="43" city="1161" id="18134912" country-name="Austria" province-name="Niederösterreich" continent="6" inhabitants="2500" longitude="16.3203" latitude="47.9756" name="Oberwaltersdorf" timezone="Europe/Vienna"/><br />
<city country="43" city="1305915" id="182199490" country-name="Austria" province-name="Niederösterreich" continent="6" inhabitants="150" longitude="15.0844" latitude="48.5394" name="Oberwaltenreith" timezone="Europe/Vienna"/><br />
</cities><br />
</result><br />
</pre><br />
<br />
Dort sucht man sich die beiden Attribute ''latitude'' und ''longitude'' für den passenden Ort heraus. Im verwendeten Beispiel wäre es für Oberwaltersdorf in Österreich:<br />
:<code>latitude="47.9756" </code><br />
:<code>longitude="16.3203" </code><br />
<br />
===== AREA_ID abfragen =====<br />
Mit diesen Werten wird nun die nächste URL zusammengebaut (Parameter ''lat'' + ''lon''):<br />
:<code><nowiki> http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=lookupCoord&lat=47.9756&lon=16.3203 </nowiki></code><br />
<br />
Das Resultat:<br />
:<code><nowiki>[{"AREA_TYPE":"UWZ","AREA_ID":"UWZAT00234","CENTER_ID":"2"}] </nowiki></code><br />
<br />
Nun wissen wir, dass die AREA_ID für Oberwaltersdorf:<br />
:<code>UWZAT00234 </code><br />
ist. Bei der Definition wird nun die Nummer ''00234'' anstelle der PLZ, und ''AT'' beim Ländercode verwendet:<br />
:<code>define Unwetterzentrale UWZ AT 00234 3600 </code><br />
<br />
=== Attribute ===<br />
Siehe Dokumentation.<br />
<br />
== Anwendungsbeispiele ==<br />
Zur Anzeige der Warnhinweise bietet das Modul vordefinierte Funktionen an, die in [[weblink|Weblinks]] benutzt werden können.<br />
<!-- Beispiele für UWZAsHtmlLite und UWZAsHtmlKarteLand werden ergänzt, sobald (zur Erhöhung der Variationen) andere/mehr/weniger Warnhinweise vorliegen --><br />
<br />
[[Datei:UWZAsHtmlFP.png|mini|right|400px|Warnmeldungen als reine Icons (Format ''UWZAsHtmlFP'') mit Teilen der Objektdetails]]<br />
=== Anzeige der Warnhinweise nur als Icon ===<br />
Die UWZ-Warnhinweise können über die Definition <br />
:<code>define ''UnwetterFloorplan'' weblink htmlCode {UWZAsHtmlFP("''Unwetterzentrale''")}</code><br />
als reine Icons angezeigt werden. Diese Darstellung eignet sich besonders für die Einbindung in einen [[FLOORPLAN]].<br />
<br />
Im gezeigten Beispiel ist ''Unwetterzentrale'' der Name des UWZ-Objekts und ''UnwetterDetailliert'' der Name des erzeugten weblink-Objekts.<br />
<br />
<br clear=all><br />
[[Datei:UWZAsHtml.png|mini|right|400px|Warnmeldungen im Format ''UWZAsHtml'']]<br />
=== Detaillierte Anzeige der Warnhinweise ===<br />
Zur Anzeige der Warnhinweise in der ausführlichsten Form kann mit<br />
:<code>define ''UnwetterDetailliert'' weblink htmlCode {UWZAsHtml("''Unwetterzentrale''")}</code><br />
ein weblink definiert werden.<br />
<br />
Im gezeigten Beispiel ist ''Unwetterzentrale'' der Name des UWZ-Objekts und ''UnwetterDetailliert'' der Name des erzeugten weblink-Objekts.<br />
<br />
=== Unwetterkarten ===<br />
Auch diverse Unwetterkarten können eingebunden und gedownloadet werden. <br />
Hierfür stehen eine Reihe von Karten zur Verfügung.<br />
Mögliche Karten sind: <br />
*europa<br />
<br />
<br />
*deutschland<br />
*deutschland-small<br />
*bayern<br />
*bremen<br />
*baden-wuerttemberg<br />
*brandenburg<br />
*berlin<br />
*hessen<br />
*niedersachsen<br />
*rheinland-pfalz<br />
*saarland<br />
*sachsen<br />
*sachsen-anhalt<br />
*thueringen<br />
*nordrhein-westfalen<br />
*mecklenburg-vorpommern<br />
*schleswig-holstein<br />
*hamburg<br />
<br />
<br />
*oesterreich<br />
*burgenland<br />
*kaernten<br />
*niederoesterreich<br />
*oberoesterreich<br />
*salzburg<br />
*steiermark<br />
*tirol<br />
*vorarlberg<br />
*wien<br />
<br />
<br />
*schweiz<br />
*aargau<br />
*appenzell_ausserrhoden<br />
*appenzell_innerrhoden<br />
*basel_landschaft<br />
*basel_stadt<br />
*bern<br />
*fribourg<br />
*geneve<br />
*glarus<br />
*graubuenden<br />
*jura<br />
*luzern<br />
*neuchatel<br />
*nidwalden<br />
*obwalden<br />
*schaffhausen<br />
*schwyz<br />
*solothurn<br />
*stgallen<br />
*ticino<br />
*thurgau<br />
*uri<br />
*waadt<br />
*wallis<br />
*zug<br />
*zuerich<br />
<br />
<br />
*liechtenstein<br />
<br />
*belgique<br />
<br />
*denmark<br />
<br />
*finnland<br />
<br />
*france<br />
<br />
*letzebuerg<br />
<br />
*nederland<br />
<br />
*norwegen<br />
<br />
*portugal<br />
<br />
*sverige<br />
<br />
*espana<br />
<br />
<br />
*unitedkingdom<br />
*eastofengland<br />
*eastmidlands<br />
*london<br />
*northeastengland<br />
*northernireland<br />
*northwestengland<br />
*scotland<br />
*southeastengland<br />
*southwestengland<br />
*wales<br />
*westmidlands<br />
*yorkshireandthehumber<br />
<br />
<br />
*isobaren1<br />
*isobaren2<br />
*isobaren3<br />
<br />
==== Anzeige von Unwetterkarten ====<br />
Dies erfolgt ebenfalls durch einem weblink.<br />
:<code>define ''UnwetterKarteDeutschland'' weblink htmlCode {UWZAsHtmlKarteLand("''Unwetterzentrale''","''Deutschland''")}</code><br />
<br />
==== Download von Unwetterkarten ====<br />
Um die Karten herunterzuladen um sie beispielsweise mit dem RSS Modul zu nutzen, muss dies am UWZ Device via Attribute konfiguriert werden. <br />
Hierfür stehen folgende Attribute zur Verfügung:<br />
*download [0|1]<br />
*savepath (default:"/tmp/")<br />
*maps (leerzeichen separierte Liste der zu speichernden Unwetterkarten)<br />
<br />
:<code>attr ''Unwetterzentrale'' download 1</code><br />
:<code>attr ''Unwetterzentrale'' savepath /tmp/</code><br />
:<code>attr ''Unwetterzentrale'' maps deutschland europa bayern</code><br />
<br />
Die angegebenen Karten werden bei jedem Lauf erneut heruntergeladen und überschreiben das alte File.<br />
<br />
<br />
==== Wetteranimation ====<br />
Ab der Version 1.4.1 bietet das Modul auch die Möglichkeit diverse Wetteranimationen zu integrieren. Diese können ebenfalls mittels weblink genutzt werden.<br />
<br />
Beispiel:<br />
:<code>define ''UnwetterKarteMovie'' weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","stroemung")}</code><br />
<br />
<br />
<br />
Der erste Parameter definiert das zugehörige UWZ Device.<br />
<br />
Der zweite Parameter kann einer der folgenden sein:<br />
<br />
*niederschlag-wolken<br />
*stroemung<br />
*temperatur<br />
<br />
<br />
*niederschlag-wolken-de<br />
*stroemung-de<br />
<br />
<br />
*niederschlag-wolken-ch<br />
*stroemung-ch<br />
<br />
<br />
*niederschlag-wolken-at<br />
*stroemung-at<br />
<br />
<br />
*niederschlag-wolken-uk<br />
*stroemung-uk<br />
<br />
== Links ==<br />
* [http://www.unwetterzentrale.de Unwetterzentrale] (für Deutschland)<br />
* [http://unwetter.wetteralarm.at wetteralarm] (für Österreich)<br />
* Geoservice [http://alertspro.geoservice.meteogroup.de/] zur Bestimmung von Geokoordinaten und Areacode<br />
* Modulthread im Forum: {{Link2Forum|Topic=51233}}</div>Jostarhttp://wiki.fhem.de/w/index.php?title=UWZ&diff=19505UWZ2017-02-07T15:51:11Z<p>Jostar: Rahmen</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Daten von Unwetterzentrale.de holen<br />
|ModType=d<br />
|ModForumArea=Unterstützende Dienste/Wettermodule<br />
|ModTechName=77_UWZ.pm<br />
|ModOwner=Tdoe, CoolTux ([https://forum.fhem.de/index.php/topic,51233.0.html Forum])<br />
}}<br />
<br />
Das Modul [[UWZ]] holt Informationen für eine zu spezifizierende Postleitzahl von der Seite [Unwetterzentrale.de] und bereitet sie für die Darstellung in FHEM auf.<br />
{{Randnotiz|RNTyp=y|RNText=Diese Anleitung ist etwas in die Tage gekommen, es hat viele Änderungen/Neuerungen gegeben. Die Commandref ist up2date und sollte eine gute Hilfestellung geben. Ansonsten bitte ins Forum schauen ob hier bereits Lösungen zum Problem bestehen.<br />
Die Wikiseite wird nach und nach aktualisiert. Wenn du dies liest und du dich mit dem Modul auskennst, bist du recht herzlich eingeladen den Artikel upzudaten. So bleibt uns (Entwicklern) mehr Zeit um uns um das Modul zu kümmern und dies zu verbessern/erweitern.}}<br />
<br />
<br />
== Voraussetzungen ==<br />
Standardinstallation und eine Internetverbindung werden für das Funktionieren des Moduls benötigt.<br />
<br />
== Installation ==<br />
Das Modul wird als offizielles Modul per [[update]] verteilt und muss nicht extra installiert werden.<br />
<br />
== Anwendung ==<br />
=== Define ===<br />
Abhängig davon, ob man Unwetterwarnungen aus Deutschland oder einem anderen Land abfragen möchte, muss für das Attribut PLZ entweder die Postleitzahl (Deutschland) oder die AREA_ID (Rest der Welt) verwendet werden.<br />
<br />
==== Deutschland ====<br />
:<code><nowiki>define <name> UWZ <Ländercode> <PLZ> <INTERVAL> </nowiki></code><br />
<br />
==== Rest der Welt ====<br />
:<code><nowiki>define <name> UWZ <Ländercode> <AREA_ID> <INTERVAL> </nowiki></code><br />
<br />
Die AREA_ID kann folgendermaßen ermittelt werden:<br />
<br />
===== Geokoordinaten ermitteln =====<br />
Dazu wird folgende URL aufgerufen, und am Ende der URL bei dem ''search'' Parameter der Name des Ortes eingegeben. Im Fall von Oberwaltersdorf AT:<br />
:<code><nowiki>http://alertspro.geoservice.meteogroup.de/weatherpro/SearchFeed.php?search=oberwalt</nowiki></code><br />
<br />
Als Antwort bekommt man eine XML Struktur mit gefundenen Orten:<br />
<pre><br />
<result><br />
<cities previousOffset="-1" nextOffset="-1"><br />
<city country="49" city="8512" id="18226609" country-name="Germany" province-name="Bavaria" continent="6" inhabitants="7500" longitude="12.17092" latitude="48.57422" name="Oberwaltenkofen (Ergolding)" timezone="Europe/Berlin"/><br />
<city country="49" city="8671" id="18226768" country-name="Germany" province-name="Bavaria" continent="6" inhabitants="4000" longitude="12.51418" latitude="48.77301" name="Oberwalting (Leiblfing)" timezone="Europe/Berlin"/><br />
<city country="43" city="1161" id="18134912" country-name="Austria" province-name="Niederösterreich" continent="6" inhabitants="2500" longitude="16.3203" latitude="47.9756" name="Oberwaltersdorf" timezone="Europe/Vienna"/><br />
<city country="43" city="1305915" id="182199490" country-name="Austria" province-name="Niederösterreich" continent="6" inhabitants="150" longitude="15.0844" latitude="48.5394" name="Oberwaltenreith" timezone="Europe/Vienna"/><br />
</cities><br />
</result><br />
</pre><br />
<br />
Dort sucht man sich die beiden Attribute ''latitude'' und ''longitude'' für den passenden Ort heraus. Im verwendeten Beispiel wäre es für Oberwaltersdorf in Österreich:<br />
:<code>latitude="47.9756" </code><br />
:<code>longitude="16.3203" </code><br />
<br />
===== AREA_ID abfragen =====<br />
Mit diesen Werten wird nun die nächste URL zusammengebaut (Parameter ''lat'' + ''lon''):<br />
:<code><nowiki> http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=lookupCoord&lat=47.9756&lon=16.3203 </nowiki></code><br />
<br />
Das Resultat:<br />
:<code><nowiki>[{"AREA_TYPE":"UWZ","AREA_ID":"UWZAT00234","CENTER_ID":"2"}] </nowiki></code><br />
<br />
Nun wissen wir, dass die AREA_ID für Oberwaltersdorf:<br />
:<code>UWZAT00234 </code><br />
ist. Bei der Definition wird nun die Nummer ''00234'' anstelle der PLZ, und ''AT'' beim Ländercode verwendet:<br />
:<code>define Unwetterzentrale UWZ AT 00234 3600 </code><br />
<br />
=== Attribute ===<br />
Siehe Dokumentation.<br />
<br />
== Anwendungsbeispiele ==<br />
Zur Anzeige der Warnhinweise bietet das Modul vordefinierte Funktionen an, die in [[weblink|Weblinks]] benutzt werden können.<br />
<!-- Beispiele für UWZAsHtmlLite und UWZAsHtmlKarteLand werden ergänzt, sobald (zur Erhöhung der Variationen) andere/mehr/weniger Warnhinweise vorliegen --><br />
<br />
[[Datei:UWZAsHtmlFP.png|mini|right|400px|Warnmeldungen als reine Icons (Format ''UWZAsHtmlFP'') mit Teilen der Objektdetails]]<br />
=== Anzeige der Warnhinweise nur als Icon ===<br />
Die UWZ-Warnhinweise können über die Definition <br />
:<code>define ''UnwetterFloorplan'' weblink htmlCode {UWZAsHtmlFP("''Unwetterzentrale''")}</code><br />
als reine Icons angezeigt werden. Diese Darstellung eignet sich besonders für die Einbindung in einen [[FLOORPLAN]].<br />
<br />
Im gezeigten Beispiel ist ''Unwetterzentrale'' der Name des UWZ-Objekts und ''UnwetterDetailliert'' der Name des erzeugten weblink-Objekts.<br />
<br />
<br clear=all><br />
[[Datei:UWZAsHtml.png|mini|right|400px|Warnmeldungen im Format ''UWZAsHtml'']]<br />
=== Detaillierte Anzeige der Warnhinweise ===<br />
Zur Anzeige der Warnhinweise in der ausführlichsten Form kann mit<br />
:<code>define ''UnwetterDetailliert'' weblink htmlCode {UWZAsHtml("''Unwetterzentrale''")}</code><br />
ein weblink definiert werden.<br />
<br />
Im gezeigten Beispiel ist ''Unwetterzentrale'' der Name des UWZ-Objekts und ''UnwetterDetailliert'' der Name des erzeugten weblink-Objekts.<br />
<br />
=== Unwetterkarten ===<br />
Auch diverse Unwetterkarten können eingebunden und gedownloadet werden. <br />
Hierfür stehen eine Reihe von Karten zur Verfügung.<br />
Mögliche Karten sind: <br />
*europa<br />
<br />
<br />
*deutschland<br />
*deutschland-small<br />
*bayern<br />
*bremen<br />
*baden-wuerttemberg<br />
*brandenburg<br />
*berlin<br />
*hessen<br />
*niedersachsen<br />
*rheinland-pfalz<br />
*saarland<br />
*sachsen<br />
*sachsen-anhalt<br />
*thueringen<br />
*nordrhein-westfalen<br />
*mecklenburg-vorpommern<br />
*schleswig-holstein<br />
*hamburg<br />
<br />
<br />
*oesterreich<br />
*burgenland<br />
*kaernten<br />
*niederoesterreich<br />
*oberoesterreich<br />
*salzburg<br />
*steiermark<br />
*tirol<br />
*vorarlberg<br />
*wien<br />
<br />
<br />
*schweiz<br />
*aargau<br />
*appenzell_ausserrhoden<br />
*appenzell_innerrhoden<br />
*basel_landschaft<br />
*basel_stadt<br />
*bern<br />
*fribourg<br />
*geneve<br />
*glarus<br />
*graubuenden<br />
*jura<br />
*luzern<br />
*neuchatel<br />
*nidwalden<br />
*obwalden<br />
*schaffhausen<br />
*schwyz<br />
*solothurn<br />
*stgallen<br />
*ticino<br />
*thurgau<br />
*uri<br />
*waadt<br />
*wallis<br />
*zug<br />
*zuerich<br />
<br />
<br />
*liechtenstein<br />
<br />
*belgique<br />
<br />
*denmark<br />
<br />
*finnland<br />
<br />
*france<br />
<br />
*letzebuerg<br />
<br />
*nederland<br />
<br />
*norwegen<br />
<br />
*portugal<br />
<br />
*sverige<br />
<br />
*espana<br />
<br />
<br />
*unitedkingdom<br />
*eastofengland<br />
*eastmidlands<br />
*london<br />
*northeastengland<br />
*northernireland<br />
*northwestengland<br />
*scotland<br />
*southeastengland<br />
*southwestengland<br />
*wales<br />
*westmidlands<br />
*yorkshireandthehumber<br />
<br />
<br />
*isobaren1<br />
*isobaren2<br />
*isobaren3<br />
<br />
==== Anzeige von Unwetterkarten ====<br />
Dies erfolgt ebenfalls durch einem weblink.<br />
:<code>define ''UnwetterKarteDeutschland'' weblink htmlCode {UWZAsHtmlKarteLand("''Unwetterzentrale''","''Deutschland''")}</code><br />
<br />
==== Download von Unwetterkarten ====<br />
Um die Karten herunterzuladen um sie beispielsweise mit dem RSS Modul zu nutzen, muss dies am UWZ Device via Attribute konfiguriert werden. <br />
Hierfür stehen folgende Attribute zur Verfügung:<br />
*download [0|1]<br />
*savepath (default:"/tmp/")<br />
*maps (leerzeichen separierte Liste der zu speichernden Unwetterkarten)<br />
<br />
:<code>attr ''Unwetterzentrale'' download 1</code><br />
:<code>attr ''Unwetterzentrale'' savepath /tmp/</code><br />
:<code>attr ''Unwetterzentrale'' maps deutschland europa bayern</code><br />
<br />
Die angegebenen Karten werden bei jedem Lauf erneut heruntergeladen und überschreiben das alte File.<br />
<br />
<br />
==== Wetteranimation ====<br />
Ab der Version 1.4.1 bietet das Modul auch die Möglichkeit diverse Wetteranimationen zu integrieren. Diese können ebenfalls mittels weblink genutzt werden.<br />
<br />
Beispiel:<br />
:<code>define ''UnwetterKarteMovie'' weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","stroemung")}</code><br />
<br />
<br />
<br />
Der erste Parameter definiert das zugehörige UWZ Device.<br />
<br />
Der zweite Parameter kann einer der folgenden sein:<br />
<br />
*niederschlag-wolken<br />
*stroemung<br />
*temperatur<br />
<br />
<br />
*niederschlag-wolken-de<br />
*stroemung-de<br />
<br />
<br />
*niederschlag-wolken-ch<br />
*stroemung-ch<br />
<br />
<br />
*niederschlag-wolken-at<br />
*stroemung-at<br />
<br />
<br />
*niederschlag-wolken-uk<br />
*stroemung-uk<br />
<br />
== Links ==<br />
* [http://www.unwetterzentrale.de Unwetterzentrale] (für Deutschland)<br />
* [http://unwetter.wetteralarm.at wetteralarm] (für Österreich)<br />
* Geoservice [http://alertspro.geoservice.meteogroup.de/] zur Bestimmung von Geokoordinaten und Areacode<br />
* Modulthread im Forum: {{Link2Forum|Topic=51233}}</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&diff=19504Wetter und Wettervorhersagen2017-02-07T15:44:58Z<p>Jostar: netatmo</p>
<hr />
<div>Wetterdaten und Wettervorhersagen können auf verschiedene Weise in FHEM eingebunden werden.<br />
<br />
== Yahoo-Wetter ==<br />
Für die einfache Einbindung des Yahoo-Wetters gibt es das spezielle Modul [[Weather]].<br />
<br />
== Unwetterzentrale ==<br />
Informationen der Seite(n) Unwetterzentrale.de können mit Hilfe des Moduls [[UWZ]] eingebunden werden.<br />
<br />
== Modul OPENWEATHER ==<br />
Das Modul [[OPENWEATHER]] extrahiert Wetterdaten über die "openweather"-Schnittstelle (API) von www.wetter.com. <br />
*Vorschau-Zeitraum: 3 Tage<br />
*Vorschau-Interval: 6:00, 11:00, 17:00, 23:00<br />
*Aktuelle Daten: keine<br />
<br />
== Modul PROPLANTA ==<br />
Das Modul [[PROPLANTA]] extrahiert Wetterdaten von der Website www.proplanta.de. (keine API)<br />
*Vorschau-Zeitraum: 12 Tage<br />
*Vorschau-Interval: 3 h<br />
*Aktuelle Daten: jede volle Stunde<br />
<br />
== Modul WWO ==<br />
Das Modul extrahiert Wetterdaten über die (alte) API von worldweatheronline.com<br />
*Vorschau-Zeitraum: ?? Tage<BR><br />
*Vorschau-Interval: ??<br><br />
*Aktuelle Daten: ??<br />
<br />
== Wetterwarnungen des DWD ==<br />
{{Randnotiz|RNTyp=y|RNText=Die Nutzung der Vorhersagedaten wurde vom DWD verändert und ist momentan nicht wie hier beschrieben möglich. Eine Alternative bietet das Modul [[UWZ]]!}}<br />
Der Deutsche Wetterdienst [http://www.dwd.de DWD] stellt neben diversen Wetterdaten auch Wetterwarnungen bereit. Diese können sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden - das ist zwar nicht die schönste Form, aber die schnellste.<br />
<br />
Dazu sucht man sich zuerst auf der [http://www.dwd.de/bvbw/appmanager/bvbw/dwdwwwDesktop?_nfpb=true&_pageLabel=_dwdwww_wetter_warnungen_warnungen&T92053gsbDocumentPath=BEA__Navigation%2FWetter__Warnungen%2FWarnungen.html%3F__nnn%3Dtrue&lastPageLabel=dwdwww_wetter_warnungen Warnungsseite des DWD] die eigene Region heraus (in der Karte durchklicken). Die gewünschte URL für Berlin Stadt ist z.B. <code>http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html#WS_ANCHOR_0</code>. Das Anhängsel <code>#WS_ANCHOR_0</code> kann man in der Konfiguration auch weglassen.<br />
<br />
Die Einbindung in FHEM sieht dann wie folgt aus:<br />
<pre><br />
define dwd_warnmeldung weblink iframe http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html<br />
attr dwd_warnmeldung group Wetterwarnungen (DWD)<br />
attr dwd_warnmeldung htmlattr width="100%" height="300" frameborder="0" marginheight="0" marginwidth="0"<br />
attr dwd_warnmeldung room Wettervorhersage,Startseite<br />
</pre><br />
<br />
== Vorhersage-Diagramm von YR ==<br />
[http://www.yr.no YR] ist die Seite des norwegischen Wetterdiensts. Er ist zwar nur in Teilen auf Englisch (und gar nicht auf Deutsch) verfügbar, bietet aber sehr gute Wettervorhersagen - auch mit eigenen Vorhersagen für kleine Dörfer. Neben etlichen Detailinfos bietet YR eine sehr schicke 48h-Vorhersage-Grafik. Diese kann sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden.<br />
<br />
Dazu geht man auf die [http://www.yr.no Startseite von YR] und gibt in das Suchfeld den Namen seines Dörfchens ein - die Ergebnissliste kann ziemlich lang werden, sodass man evtl. sehr genau schauen muss, welches das eigene Kaff ist - bei mir war es an 29. Stelle... ;-) Auf der gewünschten Seite gibt es einen Unterpunkt "Hour by hour", wo sich die besagte Grafik findet. Hier kopiert man sich einfach die URL der Grafik.<br />
<br />
Die Einbindung in FHEM sieht dann bspw. wie folgt aus:<br />
<pre><br />
define Wetter_yr_Vorhersage weblink iframe http://www.yr.no/place/Germany/Berlin/Berlin/meteogram.png<br />
attr Wetter_yr_Vorhersage group Wettervorhersage (yr)<br />
attr Wetter_yr_Vorhersage htmlattr width="100%" height="300" frameborder="0" marginheight="0" marginwidth="0"<br />
attr Wetter_yr_Vorhersage room Wettervorhersage,Start<br />
</pre><br />
<br />
== Wetter von Weather Underground ==<br />
{{Randnotiz|RNTyp=y|RNText=Neben dem hier vorgestellten Abruf der Weather Underground-Daten mit [[HTTPMOD]] kann auf Weather Underground-Daten auch mit dem darauf spezialisierten Modul [http://fhem.de/commandref#Wunderground Wunderground] zugegriffen werden.}}<br />
<br />
'''Hinweis:''' Dieses Vorgehen ist etwas anspruchsvoller und somit eher für erfahrene FHEM-User geeignet.<br />
<br />
[http://www.wunderground.com/ Weather Underground] ist bietet eine sehr umfassende Sammlung aller möglichen offiziellen und privaten (aber teils sehr professionellen) Wetterstationen weltweit. Es besteht eine recht hohe Wahrscheinlichkeit, dass es in der eigenen Umgebung schon eine Wetterstation gibt. Anstatt nun selbst eine komplette Wetterstation aufzubauen, kann man alternativ auf die Daten der Nachbarstation zugreifen.<br />
<br />
Dazu sind grundsätzlich die folgenden Schritte notwendig:<br />
* Finden der geeigneten Station<br />
* Auswerten der XML-Daten<br />
* Erstellen passender gplot-Dateien<br />
<br />
=== Finden der geeigneten Station ===<br />
Als erstes geht man auf die [http://www.wunderground.com Startseite von Weather Underground] und gibt in das Suchfeld den Namen seines Dörfchens oder der nächsten Stadt ein - für Berlin landet man bspw. auf Seite für "Berlin Alexanderplatz". Es gibt aber manchmal sehr viele Wetterstationen in der direkten Umgebung. Diese findet man indem am auf "Change Station" klickt und sich eine passende Station aussucht. Nähere Infos (zB. zur verwendeten Hard- und Software) zu der gewählten Wetterstation erhält man, wenn man auf den Namen der Station klickt und dann auf "About this PWS". <br />
<br />
Weather Underground stellt die Daten der Wetterstation auch über eine API als XML bereit, die wir auswerten können. Die entsprechende URL findet sich ebenfalls unter "About this PWS" unter "Download current conditions XML". Für Berlin Prenzlauer Berg wäre dies bspw. <br />
<code>http://api.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&format=XML</code>.<br />
<br />
Entscheidend für die jeweilige Station ist der Teil nach "?=ID", also in diesem Fall "IBERLIN15". Dieser Teil des Links lässt sich leicht durch die ID einer anderen Station ersetzen und die Suche nach dem entsprechenden Link auf der Seite der Station bleibt erspart.<br />
<br />
=== Auswerten der XML-Daten ===<br />
Die Auswertung der XML-Daten erfolgt via [[HTTPMOD]]. Da dies nicht ganz trivial ist, sind im Folgenden zuerst die wesentlichen Konfigurationsschritte exemplarisch beschrieben. Weiter unten findet sich dann die fertige vollständige Konfiguration.<br />
<br />
Es erstes wird das Device HTTPMOD definiert (die 600 am Schluss ist der Aktualisierungszyklus in Sekunden, also alle 10 min):<br />
:<code>define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600 </code><br />
<br />
Dann werden Attribute für alle Readings definiert:<br />
:<code>attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date ... </code><br />
<br />
Dann wird jedem Attribut ein Name zugewiesen (unter diesem Namen wird der Wert ins Log geschrieben):<br />
:<code>attr wetter_prenzelberg readingsName_cloudiness cloudiness </code><br />
<br />
Zum Schluss wird das Reading selbst definiert:<br />
:<code>attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id="NN" percent="([\d\.]+) </code><br />
<br />
Die gesamte Konfiguration für alle von der API angebotenen Wetterwerte sieht dann wie folgt aus:<br />
<pre><br />
define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600<br />
attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date readingsName_dewpointTemperature readingsName_fog readingsName_heatindex readingsName_humidity readingsName_pressure readingsName_solarRadiation readingsName_solarUV readingsName_temperature readingsName_time readingsName_windChill readingsName_windDegrees readingsName_windDirection readingsName_windGust readingsName_windSpeed readingsRegex_cloudiness readingsRegex_date readingsRegex_dewpointTemperature readingsRegex_fog readingsRegex_heatindex readingsRegex_humidity readingsRegex_pressure readingsRegex_solarRadiation readingsRegex_solarUV readingsRegex_temperature readingsRegex_time readingsRegex_windChill readingsRegex_windDegrees readingsRegex_windDirection readingsRegex_windGust readingsRegex_windSpeed<br />
attr wetter_prenzelberg readingsName_cloudiness cloudiness<br />
attr wetter_prenzelberg readingsName_date date<br />
attr wetter_prenzelberg readingsName_dewpointTemperature dewpointTemperature<br />
attr wetter_prenzelberg readingsName_fog fog<br />
attr wetter_prenzelberg readingsName_heatindex heatindex<br />
attr wetter_prenzelberg readingsName_humidity humidity<br />
attr wetter_prenzelberg readingsName_pressure pressure<br />
attr wetter_prenzelberg readingsName_solarRadiation solarRadiation<br />
attr wetter_prenzelberg readingsName_solarUV solarUV<br />
attr wetter_prenzelberg readingsName_temperature temperature<br />
attr wetter_prenzelberg readingsName_time time<br />
attr wetter_prenzelberg readingsName_windChill windChill<br />
attr wetter_prenzelberg readingsName_windDegrees windDegrees<br />
attr wetter_prenzelberg readingsName_windDirection windDirection<br />
attr wetter_prenzelberg readingsName_windGust windGust<br />
attr wetter_prenzelberg readingsName_windSpeed windSpeed<br />
attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id="NN" percent="([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_date date date" content="([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_dewpointTemperature <dewpoint_c>(\+|-?[\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_fog fog id="FOG" percent="([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_heatindex <heat_index_c>(\+|-?[\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_humidity <relative_humidity>([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_pressure <pressure_mb>([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_solarRadiation <solar_radiation>([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_solarUV <UV>([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_temperature <temp_c>(\+|-?[\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_time time Zeit([\d\:]+)<br />
attr wetter_prenzelberg readingsRegex_windChill <windchill_c>(\+|-?[\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_windDegrees <wind_degrees>([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_windDirection <wind_dir>([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_windGust <wind_gust_mph>([\d\.]+)<br />
attr wetter_prenzelberg readingsRegex_windSpeed <wind_mph>([\d\.]+)<br />
</pre><br />
Hinweis: Nicht immer werden alle Werte geliefert (wenn keine Sonne, dann kein UV-Wert...). Im System-Log kann das als Fehler auftauchen, ist aber kein Problem.<br />
<br />
=== Erstellen passender gplot-Dateien ===<br />
Um die ausgelesenen Werte als Graphen darstellen zu können müssen eigene gplot-Dateien erstellt werden. Eine grundsätzliche Anleitung dazu findet sich unter [[Creating Plots]]. Deshalb sollen hier nur Beispiele für die eigentlichen gplot-Dateien vorgestellt werden. Beispiele sollten sowohl für [[FileLog]] wie [[DbLog]] funktionieren.<br />
<br />
Temperatur und Luftfeuchte:<br />
<pre><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 '<L1>'<br />
set title ''<br />
set ytics <br />
set y2tics <br />
set grid ytics<br />
set ylabel "Temperature in C"<br />
set y2label "Humidity (%)"<br />
<br />
#FileLog 4:temperature\x3a::<br />
#FileLog 4:windChill\x3a::<br />
#FileLog 4:humidity\x3a::<br />
<br />
#DbLog <SPEC1>:temperature::<br />
#DbLog <SPEC1>:windChill::<br />
#DbLog <SPEC1>:humidity::<br />
<br />
plot "<IN>" using 1:2 axes x1y1 title 'Temperatur (C)' ls l0 lw 1.5 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Gefühlte Temperatur (C)' ls l1 lw 1.5 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'Luftfeuchtigkeit (%)' ls l2fill lw 0.2 with lines<br />
</pre><br />
<br />
Wind und Windrichtung:<br />
<pre><br />
set terminal png transparent size <SIZE> crop<br />
<br />
set output '<OUT>.png'<br />
set xdata time<br />
set timefmt "%Y-%m-%d_%H:%M:%S"<br />
set xlabel " "<br />
<br />
set ytics<br />
set y2tics ("Nord" 0, "Ost" 80, "S&#252;d" 180, "West" 270, "Nord" 360)<br />
<br />
#set title '<L1>'<br />
set title ''<br />
<br />
set grid xtics ytics<br />
<br />
set yrange [0:20]<br />
set y2range [0:360]<br />
<br />
set ylabel "Wind (mph)"<br />
set y2label "Richtung"<br />
<br />
#FileLog 4:windSpeed:0:<br />
#FileLog 4:windGust:0:<br />
#FileLog 4:windDegrees:0:<br />
<br />
#DbLog <SPEC1>:windSpeed::<br />
#DbLog <SPEC1>:windGust::<br />
#DbLog <SPEC1>:windDegrees::<br />
<br />
plot "<IN>" using 1:2 axes x1y1 title 'Wind (mph)' ls l0 lw 1.5 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'Böen (mph)' ls l1 lw 1.5 with lines,\<br />
"<IN>" using 1:2 axes x1y2 title 'Windrichtung (°)' ls l2fill lw 0.2 with points<br />
</pre><br />
<br />
Sonnenintensität und UV-Werte:<br />
<pre><br />
set terminal png transparent size <SIZE> crop<br />
<br />
set output '<OUT>.png'<br />
set xdata time<br />
set timefmt "%Y-%m-%d_%H:%M:%S"<br />
set xlabel " "<br />
<br />
set ytics<br />
set y2tics<br />
<br />
#set title '<L1>'<br />
set title ''<br />
<br />
set grid xtics ytics<br />
<br />
set ylabel "Sonnenstrahlung (W/qm)"<br />
set y2label "UV"<br />
<br />
#FileLog 4:solarRadiation:0:<br />
#FileLog 4:solarUV:0:<br />
<br />
#DbLog <SPEC1>:solarRadiation::<br />
#DbLog <SPEC1>:solarUV::<br />
<br />
plot "<IN>" using 1:2 axes x1y1 title 'Strahlung' ls l0 lw 1.5 with lines,\<br />
"<IN>" using 1:2 axes x1y1 title 'UV' ls l1 lw 1.5 with lines<br />
</pre><br />
<br />
'''Weitere TBD'''<br />
<br />
=== Vergangene Daten abfragen ===<br />
Ein konkretes vergangenes Datum der Wetterstation kann man übrigens auch abrufen - für den 28.11.2014 wäre dies bspw. <br />
<code>http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&day=28&month=11&year=2014&graphspan=day&format=1</code>.<br />
<br />
== Wetternetzwerk auf wetter.com ==<br />
Ein vollständiges Beispiel zur Nutzung der Informationen über die Regenmenge (Station 1445, Weinheim) von wetter.com ist in {{Link2Forum|Topic=39600|Message=332837|LinkText=diesem Forenbeitrag}} beschrieben.<br />
<br />
== Wetter von netatmo ==<br />
Das FHEM-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap]. Die meisten öffentlichen Stationen liefern Temperatur, Luftfeuchte und Luftdruck, einige auch Wind, Regen und Daten zur Luftqualität (CO<sub>2</sub>).<br />
<br />
== Links ==<br />
* {{Link2Forum|Topic=33610}} mit Sammlung und Beipielen von Internet-Links für die Anzeige von teilweise animierten Wetterbildern<br />
* [http://bloglich.de/art/rpi/wetterdaten-auf-dem-raspberry-pi-in-fhem/ Beispiel in Blog(de)]<br />
* [[HTTPMOD]]<br />
* [[GDS|Modul GDS]] zum Auslesen von DWD-Daten<br />
<br />
[[Kategorie:Code Snippets]]<br />
[[Kategorie:HOWTOS]]<br />
[[Kategorie:Wetterstationen]] <!-- eigentlich eine "Hardware-Kategorie", passt aber trotzdem --></div>Jostarhttp://wiki.fhem.de/w/index.php?title=ESA_2000_WZ&diff=19250ESA 2000 WZ2017-02-01T20:50:49Z<p>Jostar: Forum und ELV-Webseite</p>
<hr />
<div>Unter der Bezeichnung '''ESA 2000 WZ''' gibt es einen Zähler für die (analoge) Drehscheibe, in der Bedienungsanleitung als "Energiespar-Sensor WZ" zur Erfassung an Dreh-/Wechselstromzählern mit Ferraris-Scheibe beschrieben.{{DocLink|elv|/Assets/Produkte/9/904/90416/Downloads/90416_Wechselstrom_Sensor_UM.pdf}}<br />
<br />
Für digitale Stromzähler gibt es in der Baureihe den [[ESA2000WZ-LED Funk-Sensor für digitale Drehstromzähler mit LED]].<br />
<br />
== Features ==<br />
Eine Infrarot Sensoreinheit, die vor die Drehscheibe des Zählers geklebt wird (wieder ablösbar), sendet über einen "abgesetzten" (mit einen Kabel verbundenen) Sender Zählimpulse.<br />
<br />
* Sendeintervall: 120 bis 184 Sekunden (dynamisch)<br />
* Zählerkonstante: einstellbar, 10 bis 2500 U/kWh<br />
* Sendefrequenz: 868,35 MHz<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
Sollte laut [https://forum.fhem.de/index.php?topic=9770.0 dieser Diskussion] funktionieren.<br />
<br />
== Bekannte Probleme ==<br />
Keine<br />
<br />
== Links ==<br />
* [http://fhem.de/commandref.html#ESA2000 Beschreibung in der commandref] (64_ESA2000.pm)<br />
* [https://files.elv.com/Assets/Produkte/9/904/90416/Downloads/90416_Wechselstrom_Sensor_UM.pdf Bedienungsanleitung] (PDF)<br />
<br />
[[Kategorie:EMS Components]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=ESA2000WZ-LED_Funk-Sensor_f%C3%BCr_digitale_Drehstromz%C3%A4hler_mit_LED&diff=19249ESA2000WZ-LED Funk-Sensor für digitale Drehstromzähler mit LED2017-02-01T20:40:24Z<p>Jostar: /* ESA2000WZ-LED Funk-Sensor für digitale Drehstromzähler mit LED */</p>
<hr />
<div>= ESA2000WZ-LED Funk-Sensor für digitale Drehstromzähler mit LED =<br />
Funk-Sensor, der die Blinkimpulse eines digitalen Stromzählers erfasst.<br />
<br />
Achtung: das Gerät heißt bei ELV (zumindest derzeit noch) '''''LED-Sensor für ESA2000''''' (Artikel-Nr.: 68-090417), passt damit aber überhaupt nicht in das reguläre Namensschema.<br />
<br />
Unter der Bezeichnung [[ESA 2000 WZ]] gibt es einen Zähler für die (analoge) Drehscheibe.<br />
<br />
== Features ==<br />
Eine Infrarot Sensoreinheit, die vor die Impuls-LED des Zählers geklebt wird (wieder ablösbar), sendet über einen "abgesetzten" (mit einen Kabel verbundenen) Sender Zählimpulse.<br />
<br />
* Sendeintervall: 120 bis 184 Sekunden (dynamisch)<br />
* Zählerkonstante: einstellbar, 10 bis 10.000 Impulse/kWh<br />
<br />
== Hinweise zum Betrieb mit FHEM ==<br />
Sollte laut [http://groups.google.com/group/fhem-users/browse_thread/thread/a8541746c643ba9e dieser Diskussion] funktionieren<br />
<br />
== Bekannte Probleme ==<br />
Keine<br />
<br />
== Links ==<br />
* [http://fhem.de/commandref.html#ESA2000 Beschreibung in der commandref]<br />
* [http://groups.google.com/group/fhem-users/browse_thread/thread/4657018e850618e9/351c9ff5d6d79372 Diskussion] in der FHEM Google Group<br />
* Bedienungsanleitung (PDF {{DocLink|elv|/Assets/Produkte/9/904/90417/Downloads/90417_EM_Sen_LED_WM_B_R2_um.pdf}})<br />
<br />
[[Kategorie:EMS Components]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Diskussion:Neues_Charting_Frontend&diff=18764Diskussion:Neues Charting Frontend2017-01-23T21:41:53Z<p>Jostar: /* Reduzierung Redundanz mit Dblog-Artikel? */</p>
<hr />
<div>== Reduzierung Redundanz mit Dblog-Artikel? ==<br />
Speziell im Abschnitt "dblog" hohe inhaltliche Redundanz zum Wiki-Artikel [[DbLog]]. Wenn ok würde reduzieren auf das Erstellen der neuen Tabelle "frontend" und auf die Einrichtung von DbLog verweisen. --[[Benutzer:Sledge|Sledge]] ([[Benutzer Diskussion:Sledge|Diskussion]]) 10:08, 7. Aug. 2016 (CEST)<br />
<HR><br />
:Redundanzreduzierung unterstütze ich, da dadurch auch die Pflege des Wikis erleichtert wird. Also von mir: Dafür. Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 17:20, 7. Aug. 2016 (CEST)<br />
:: Auch dafür. --[[Benutzer:Jostar|Jostar]] ([[Benutzer Diskussion:Jostar|Diskussion]]) 22:41, 23. Jan. 2017 (CET)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Neues_Charting_Frontend&diff=18763Neues Charting Frontend2017-01-23T21:40:35Z<p>Jostar: /* Installation auf einem Raspberry Pi (Anleitung von "Puschel") */ typo</p>
<hr />
<div>{{Infobox Modul<br />
|ModPurpose=Chart Frontend<br />
|ModType=x<br />
|ModForumArea=Frontends<br />
|ModTechName=<br />
|ModOwner=[http://forum.fhem.de/index.php?action=profile;u=653 Johannes]<br />
}}<br />
Diese Anleitung beschreibt die Installation und Konfiguration des neuen ExtJS-Frontends, das u.a. eine auf Javascript basierende Chartingfunktion bietet.<br />
<br />
[[File:Frontend1.png|200px|right|thumb]]<br />
[[File:Frontend_current.jpg|200px|right|thumb]]<br />
[[File:Frontendtable.jpg|200px|right|thumb]]<br />
<br />
== Aktueller Funktionsumfang ==<br />
Folgende Liste ist nur ein Auszug:<br />
<br />
* Anzeige von Charts mit mehreren, frei wählbaren Y-Achsen (FHEM Geräte und Readings wählbar)<br />
* Als Datenquellen können sowhl FileLogs als auch eine Datenbank (DbLog) verwendet werden<br />
* Ein Chart aus verschiedenen Datenquellen ist problemlos möglich <br />
* Charts können dynamisch (z.B. heutiger Tag, letzte Stunde,...) oder über einen festen Zeitraum angezeigt werden<br />
* Achsen können generalisiert werden, um auch größere Datenmengen im Browser mit akzeptabler Geschwindigkeit darzustellen<br />
* Achsen können mit Statistikfunktionen versehen werden, z.B. mit Durchschnittswerten für einen gewissen Zeitraum (Average per Hour, Max per day, ...) (Achtung, nur per DbLog!)<br />
* es können Solllinien hinzugefügt werden mit wählbarem Start- und Endwert<br />
* Chartachsen können selektiv ein- und ausgeschaltet werden durch Klick auf die Legende<br />
* Achsen können individuell und bequem über die Oberfläche gestylt werden (Füllung, Form, Farbe, Strichbreite, Transparenz, etc)<br />
* Charts können gezoomt werden mit Hilfe der Maus durch Aufziehen einer Box direkt im Chart<br />
* Charts können im Frontend gespeichert, gelöscht, umbenannt und in Räume verschoben werden<br />
* Der Bereich "Database Tables" ermöglicht die Anzeige des gesamten Datenbankinhalts (wenn DbLog genutzt wird) in einer Tabelle im Browser, egal wie groß diese ist.<br />
* Anzeige der verfügbaren Geräte über den linken Bereich. Nach Auswahl eines Gerätes erhält man die Übersicht zu den aktuellen Readings.<br />
<br />
Die Werte in dieser Ansicht werden automatisch alle 5 Sekunden aktualisiert. Zudem ist die Steuerung von "sets" möglich (on / off Button, Dropdown, etc.)<br />
<br />
* FHEM Kommandozeile, die mit Enter-Taste und dem Execute Button bedient werden kann.<br />
* Save Button, der wie bisher bekannt die Änderungen in der fhem.cfg speichert.<br />
* Shutdown und Restart Buttons, über die sich FHEM herunterfahren oder neustarten lässt. Bei einem Restart wird die Seite, sobald FHEM wieder hochgefahren ist, automatisch neugeladen<br />
<br />
Das Frontend kann mit dem FileLog oder DbLog Modul (oder beiden) genutzt werden. Meine Empfehlung: Wer die Installation von DbLog nicht scheut, sollte auf jeden Fall in eine Datenbank loggen.<br />
<br />
Nach derzeitigem Stand ist die Installation von DbLog inzwischen sogar neben PCs, Synologys und Raspberrys auch auf Fritzboxen möglich. Dazu bitte auch die Anleitung [[Cpan auf Fritzbox]] beachten.<br />
<!-- Danke der Hilfe von Jurij ist jetzt auch die Installation von DbLog auf einer Fritzbox mit mips-Archtiketur möglich (z.B. 7390, 7330, ..)<br />
Eine Anleitung findet sich hier: [[Cpan auf Fritzbox]]<br />
.... --> <br />
<br />
== Installation ==<br />
=== Basisinstallation ===<br />
<br />
1. FHEM auf den neuesten Stand bringen mit dem Befehl "update".<br/><br />
2. In FHEM oder über telnet den folgenden Befehl aufrufen und ein paar Minuten warten:<br />
<pre>update all http://svn.code.sf.net/p/fhem/code/trunk/fhem/www/frontend/controls_frontend.txt</pre><br />
Treten bei dem Befehl Fehler auf mit der Meldung "empty answer received", wie auch hier beschrieben http://forum.fhem.de/index.php/topic,10439.msg219066.html#msg219066<br />
dann findet sich die Lösung hier: http://forum.fhem.de/index.php/topic,10439.msg219082.html#msg219082<br />
<br />
3. Soll das Frontend nur mit FileLog genutzt werden, ist die Installation jetzt schon fertig und das Frontend kann aufgerufen werden über:<br />
<nowiki>http://adressevonfhem:8083/fhem/frontend/index.html</nowiki><br />
4. Soll DbLog genutzt werden, müssen die folgenden Schritte durchgefürt werden:<br />
<br />
=== DbLog installieren und konfigurieren ===<br />
[http://fhem.de/commandref_DE.html#DbLog DbLog] muss, falls noch nicht geschehen, konfiguriert werden. Dazu wie folgt vorgehen:<br />
<br />
* Eine Datenbank sollte installiert sein. MySQL, Postgres, SQLite oder Oracle.<br />
* Unter Umständen müssen fehlende Perl Module nachinstalliert werden.<br />
<br />
Ob dies nötig ist fällt spätestens auf, wenn im übernächsten Schritt die fhem.cfg angepasst und fhem neu gestartet wurde.<br />
Dann sollten sich bei Problemen im Log von fhem entsprechnde Hinweise finden.<br />
<br />
==== MySQL-Datenbank ====<br />
'''Hinweis''': nicht für Einplatinencomputer (wie z.B. Raspberry Pi, ODROID, Beagle etc.) empfohlen.<br />
<br />
Installation der notwendigen Perl-Datenbank-Module:<br />
<br />
apt-get install libdbi-perl libdbd-sqlite3-perl<br />
<br />
Alternativ auch direkt über Perl möglich mit cpan ([http://fhem.de/commandref_DE.html#DbLog DbLog commandref]). Auf einer Synology kann der folgende Beitrag helfen: [http://forum.fhem.de/index.php/topic,11071.0.html DBLog auf Synology]<br />
<br />
Die Datenbank benötigt die notwendigen Tabellen und Indices. Im fhem-Tarball (siehe Download-Möglichkeiten) sind im Verzeichnis<br />
<br />
<Pfad/zu/>fhem/contrib/dblog<br />
<br />
sind entsprechende Scripte zu finden. Diese können auf der Kommandozeile direkt an die Datenbank übergeben werden. Dieses Beispiel führt dies für MySQL aus<br />
<br />
root@fhem:/opt/fhem/contrib/dblog# mysql -u root -p < db_create_mysql.sql <br />
Enter password: <br />
root@fhem:/opt/fhem/contrib/dblog#<br />
<br />
Möchte man den Datenbank-Nutzer und das Datenbank-Nutzerpaßwort anpassen, ist die db_create_-Datei vorher mit einem Editor anzupassen. <br />
<br />
Nach Eingabe kann die erfolgreiche Rückgabe geprüft werden:<br />
<br />
root@fhem:/opt/fhem/contrib/dblog# mysql -u root -p<br />
Enter password: <br />
<br />
mysql> show databases;<br />
+--------------------+<br />
| Database |<br />
+--------------------+<br />
| information_schema |<br />
| fhem |<br />
| mysql |<br />
| performance_schema |<br />
+--------------------+<br />
4 rows in set (0.00 sec)<br />
<br />
mysql> use fhem;<br />
Reading table information for completion of table and column names<br />
You can turn off this feature to get a quicker startup with -A<br />
<br />
Database changed<br />
<br />
mysql> show tables;<br />
+----------------+<br />
| Tables_in_fhem |<br />
+----------------+<br />
| current |<br />
| history |<br />
+----------------+<br />
2 rows in set (0.00 sec) <br />
<br />
mysql><br />
<br />
Dabei wird eine Tabelle '''history''' und eine Tabelle '''current''' erstellt werden, wie in den Beispiel SQLs zu sehen ist. <br />
Anschließend muss die Datei db.conf angepasst werden. Dort müssen der Datenbankname, der Benutzer und das Passwort für die Datenbank eingetragen werden, bei<br />
SQLite bleiben entsprechende Einträge entsprechend leer:<br />
<br />
## for MySQL<br />
################################################################<br />
%dbconfig= (<br />
connection => "mysql:database=fhem;host=127.0.0.1;port=3306",<br />
user => "fhemuser",<br />
password => "fhempassword"<br />
);<br />
################################################################<br />
<br />
Zuletzt muss in der Datenbank eine Tabelle für das Frontend erstellt werden. Bei MySQL erfolgt dies durch<br />
<br />
root@fhem:/opt/fhem# mysql -u root -p<br />
Enter password: <br />
Welcome to the MySQL monitor. Commands end with ; or \g.<br />
Your MySQL connection id is 42<br />
Server version: 5.5.35-1ubuntu1 (Ubuntu) <br />
<br />
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.<br />
<br />
Oracle is a registered trademark of Oracle Corporation and/or its<br />
affiliates. Other names may be trademarks of their respective<br />
owners. <br />
<br />
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. <br />
<br />
mysql> use fhem;<br />
Reading table information for completion of table and column names<br />
You can turn off this feature to get a quicker startup with -A<br />
<br />
Database changed<br />
mysql> CREATE TABLE frontend (ID int NOT NULL UNIQUE AUTO_INCREMENT, TIMESTAMP TIMESTAMP DEFAULT CURRENT_TIMESTAMP, TYPE varchar(64), NAME varchar(64), VALUE TEXT);<br />
<br />
==== PostgreSQL-Datenbank ====<br />
To be added<br />
<br />
Für Postgres kann folgendes SQL in der Datenbank abgesetzt werden: <br />
<br />
CREATE TABLE frontend (ID SERIAL, TIMESTAMP TIMESTAMP (0) DEFAULT LOCALTIMESTAMP, TYPE TEXT, NAME TEXT, VALUE TEXT);<br />
<br />
==== SQLite-Datenbank ====<br />
Installation der notwendigen Perl-Datenbank-Module:<br />
<br />
apt-get install libdbi-perl libdbd-sqlite3-perl<br />
<br />
Alternativ auch direkt über Perl möglich mit cpan ([http://fhem.de/commandref_DE.html#DbLog DbLog commandref]). Auf einer Synology kann der folgende Beitrag helfen: [http://forum.fhem.de/index.php/topic,11071.0.html DBLog auf Synology]<br />
<br />
Die Datenbank benötigt die notwendigen Tabellen und Indices. Im fhem-Tarball (siehe Download-Möglichkeiten) sind im Verzeichnis<br />
<br />
<Pfad/zu/>fhem/contrib/dblog<br />
<br />
sind entsprechende Scripte zu finden. Diese können auf der Kommandozeile direkt an die Datenbank übergeben werden. Dieses Beispiel führt dies für SQLite aus:<br />
<br />
root@fhem:/opt/fhem# sqlite3 fhem.db < contrib/dblog/db_create_sqlite.sql<br />
<br />
Dabei wird eine Tabelle '''history''' und eine Tabelle '''current''' erstellt werden, wie in den Beispiel SQLs zu sehen ist. <br />
Anschließend muss die Datei db.conf angepasst werden. Dort müssen der Datenbankname, der Benutzer und das Passwort für die Datenbank eingetragen werden, bei<br />
SQLite bleiben entsprechende Einträge entsprechend leer:<br />
<br />
## for SQLite (username and password stay empty for SQLite)<br />
################################################################<br />
%dbconfig= (<br />
connection => "SQLite:dbname=/opt/fhem/fhem.db",<br />
user => "",<br />
password => ""<br />
);<br />
################################################################<br />
<br />
Zuletzt muss in der Datenbank eine Tabelle für das Frontend erstellt werden. Für SQLite erfolgt dies durch:<br />
<br />
root@fhem:/opt/fhem# sqlite3 fhem.db<br />
SQLite version 3.8.2 2013-12-06 14:53:30<br />
Enter ".help" for instructions<br />
Enter SQL statements terminated with a ";"<br />
sqlite> CREATE TABLE frontend (ID INTEGER PRIMARY KEY, TIMESTAMP TIMESTAMP DEFAULT CURRENT_TIMESTAMP, TYPE TEXT, NAME TEXT, VALUE TEXT);<br />
<br />
==== fhem.cfg Einträge ====<br />
<br />
In die fhem.cfg muss eine Zeile eingefügt werden, die definiert, was alles über DbLog gespeichert werden soll.<br />
<br />
Diese Zeile kann z.B. so aussehen (loggt alles in die Datenbank):<br />
<br />
define myDbLog DbLog /etc/fhem/db.conf .*:.*<br />
<br />
oder, für ein konkretes Gerät (Groß/Kleinschreibung beachten!):<br />
<br />
define logdb DbLog db.conf ESA2000_LED_011e<br />
<br />
FHEM neu starten und ins FHEM-Log schauen. FHEM sollte hochfahren und auch loggen, dass es zur Datenbank verbunden ist. Tut es das nicht oder FHEM startet gar nicht, liegt eine Fehlkonfiguration vor. Dann nochmals die vorherigen Schritte prüfen und das Logfile nach dem Problem befragen.<br />
<br />
== Das Frontend Updaten ==<br />
In FHEM oder über telnet den folgenden Befehl aufrufen und ein paar Minuten warten:<br />
<br />
<pre>update all http://svn.code.sf.net/p/fhem/code/trunk/fhem/www/frontend/controls_frontend.txt</pre><br />
<br />
== Bedienung ==<br />
Ziel des Frontends ist eine möglichst selbsterklärende Bedienung. Fragen und Probleme können jederzeit im Forum, am besten in [http://forum.fhem.de/index.php/topic,10439.0.html diesem Beitrag] gestellt werden. Eine Anleitung folgt, sobald ich mehr Zeit dazu finde...<br />
<br />
== Installation auf einem Raspberry Pi (Anleitung von "Puschel") ==<br />
Diese Anleitung funktioniert auch auf einem BeagleBone Black mit Debian.<br />
<br />
===Hardwarevoraussetzungen===<br />
* RasPi Model B<br />
* Funktionierende Internetanbindung<br />
===Softwarevoraussetzungen===<br />
* Deutsches Tastaturlayout (j für Ja)<br />
* Funktionsfähige FHEM-Installation auf RPi Wheezy, die mittels update auf den letzten Stand gebracht wurde (siehe auch: [[:Kategorie:Raspberry_Pi|Raspberry Pi]])<br />
* Das Frontend wurde installiert mittels<br />
:<code><nowiki>update all http://svn.code.sf.net/p/fhem/code/trunk/fhem/www/frontend/controls_frontend.txt</nowiki></code><br />
* Zugriff auf den RPi mittels Putty ist gegeben.<br />
* Zugriffsberechtigungen der Ordner sind auch gegeben (Schreiben in /opt/fhem)<br />
<br />
:<code>&lt;Befehl&gt;</code> = diese Zeile wird am Putty-Prompt eingegeben (ohne &lt;&gt;)<br />
:<code>&lt;IP_des_RPi&gt;</code> = IP-Adresse über der der RPi erreichbar ist<br />
<br />
Was wird gemacht?<br />
<br />
Wir werden das neue Chart-Frontend mittels SQLite3 und allen benötigten Bibliotheken auf dem RPi einrichten.<br />
<br />
# Wir verbinden uns per Putty mit unserem RPi und loggen uns ein. <br />
# Um uns das ständige sudo zu ersparen geben wir als erstes ein &lt;sudo bash&gt; ein.<br />
# &lt;apt-get update&gt;<br />
# &lt;apt-get upgrade&gt; und die Nachfrage mit „j“ beantworten<br />
# &lt;apt-get install sqlite3&gt;<br />
# &lt;apt-get install libdbi-perl libdbd-sqlite3-perl&gt;<br />
# &lt;apt-get install –f&gt; (das "-" hier ggf. in der Putty-Sitzung überschreiben; unter Umständen stimmt der Hex-Code des Zeichens nach Copy/Paste nicht)<br />
<br />
Was haben wir bis hierher gemacht?<br />
<br />
* Wir haben die Pakete für unser RPi neu eingelesen.<br />
* Wir haben unsere RPi-Paketinstallation auf den neuesten Stand gebracht.<br />
* Wir haben sqlite3 installiert.<br />
* Wir haben die benötigten Bibliotheken installiert.<br />
* Wir haben alle Abhängigkeiten aufgelöst und fehlende Pakete nachinstallieren lassen.<br />
<br />
Nun bereiten wir unsere Datenbank vor.<br />
<br />
In Putty geben wir als erstes ein &lt;cd /opt/fhem&gt; ein.<br />
<br />
Nun werden alle Dateien in diesem Ordner erstellt – wer will kann das natürlich anpassen.<br />
<br />
Anschliessend geben wir am Putty-Promt &lt;sqlite3 fhem.db&gt; ein.<br />
<br />
Damit haben wir unsere Datenbank angelegt und diese fhem.db genannt. Nun zeigt unser Prompt in Putty sqlite3&gt; an. Wir befinden uns also in unserer Datenbank.<br />
<br />
In dieser Datenbank werden wir noch 2 TABLES anlegen – einmal current und einmal history. Dies könnt ihr einfach per copy&amp;paste übernehmen.<br />
<br />
:<code>CREATE TABLE `history` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32));</code><br />
<br />
:<code>CREATE TABLE `current` (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32));</code><br />
<br />
Und noch eine für das Frontend:<br />
:<code>CREATE TABLE frontend (ID INTEGER PRIMARY KEY, TIMESTAMP TIMESTAMP DEFAULT CURRENT_TIMESTAMP, TYPE TEXT, NAME TEXT, VALUE TEXT);</code><br />
<br />
Nun können wir<br />
* mit <code>&lt;.tables&gt;</code> schauen, ob 3 Einträge auftauchen (current, history, frontend)<br />
* mit <code>&lt;.exit&gt;</code> verlassen wir SQLite3 und kehren wieder auf unseren Putty-Prompt zurück.<br />
<br />
Bevor wir nun in fhem DBLog definieren, müssen wir erst unsere db.conf anlegen. Dies geschieht mittels <code>&lt;nano db.conf&gt;</code>.<br />
<br />
Gefüllt wird diese Konfigurationsdatei mit<br />
<br />
<nowiki>&#160;%dbconfig= (<br />
connection =&gt; "SQLite:dbname=/opt/fhem/fhem.db",<br />
user =&gt; "",<br />
password =&gt; ""<br />
);</nowiki><br />
Mit STRG+X und „j“ abspeichern und nano wieder verlassen.<br />
<br />
Im Ordner /opt/fhem sollten nun also zusätzlich die Dateien db.conf und fhem.db liegen.<br />
<br />
Ist das der Fall und die fhem.db hat die benötigten Rechte, können wir in fhem unser DBLog definieren. Ich habe der Einfachheit halber der Gruppe und jedem Benutzer Schreibzugriff gewährt.<br />
<br />
Dies geschieht mittels<br />
<br />
&lt;chmod -R g+w fhem.db&gt;<br />
&lt;chmod -R o+w fhem.db&gt;<br />
in der Putty-Eingabe, da fhem gemeckert hat, dass es nicht in die Datei schreiben kann ("-" ggf wieder überschreiben nach Copy/Paste).<br />
<br />
Nun also noch unser<br />
<br />
:<code>define myDbLog DbLog /opt/fhem/db.conf .*:.*</code><br />
in fhem eingetragen und ab hier wird nun ALLES in die Datenbank geschrieben.<br />
<br />
Nun können wir in unserem Browser (getestet mit Firefox 19.0.2) auf unser Frontend zugreifen:<br />
<br />
<nowiki>http://&lt;IP-des_RPi&gt;:8083/fhem/frontend/index.html</nowiki><br />
Achtung! Nicht erschrecken, wenn beim ersten Zugriff nur eine leere Seite erscheint. Einfach den Browser aktualisieren und am neuen Frontend erfreuen.<br />
<br />
Getestet: 26.03.2013<br />
<br />
==Links==<br />
* [http://forum.fhem.de/index.php/topic,10439.0.html Forumsdiskussion über dieses Frontend]; bei Problemen, Fragen oder Wünschen am besten dort eine Frage oder Nachricht hinterlassen.<br />
<br />
[[Kategorie:Glossary]]<br />
[[Kategorie:FHEM Frontends]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Benutzer_Diskussion:Jostar&diff=18762Benutzer Diskussion:Jostar2017-01-23T21:29:04Z<p>Jostar: /* Hinweis auf Diskussion:Temperatursensoren */</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 Jostar,''' 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]]-->[http://de.wikipedia.org/wiki/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]]-->[http://de.wikipedia.org/wiki/Hilfe:Zusammenfassung_und_Quellen 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]]) 23:17, 8. Mär. 2016 (CET)<br />
|}<br />
<br />
== Hinweis auf Diskussion:Temperatursensoren ==<br />
<br />
Hallo!<br />
<br />
Habe unter [[Diskussion:Temperatursensoren]] eine Frage zu einem Wiki-Artikel von Dir hinterlassen. Wäre schön, wenn Du Dir das bei Gelegenheit einmal ansehen könntest.<br />
Vielen Dank.<br />
<br />
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 17:50, 2. Jan. 2017 (CET)<br />
<br />
: Danke, hatte ich nicht bemerkt und E-Mail-Info mal aktiviert :-)<br />
<br />
Gruß --[[Benutzer:Jostar|Jostar]] ([[Benutzer Diskussion:Jostar|Diskussion]]) 22:29, 23. Jan. 2017 (CET)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Diskussion:Temperatursensoren&diff=18761Diskussion:Temperatursensoren2017-01-23T21:21:19Z<p>Jostar: /* Intention dieser Wiki-Seite? */</p>
<hr />
<div>== Intention dieser Wiki-Seite? ==<br />
Hallo!<br />
<br />
Mir ist die Intention dieser FHEMWiki-Seite nicht verstaendlich. Ich kann zwar lesen, welche technischen Daten einzelne Temperatursenoren mit abgesetztem Sensor haben. Das hilft aber nur sehr bedingt. Die wichtige Info für FHEM mit welchem Gateway/Interface diese angebunden werden könnnen fehlt. Auch wenn diese Info aufgenommen wird, ist mir die beabsichtigte Einordnung (Kategorisierung) in das Konzept von FHEMWiki nicht klar.<br />
<br />
Vielen Dank.<br />
<br />
Gruß, --[[Benutzer:Krikan|Christian]] ([[Benutzer Diskussion:Krikan|Diskussion]]) 18:56, 1. Jan. 2017 (CET)<br />
<br />
:Sehe ebenso keinen Sinn hinter der Seite. Wäre zwar nett, einen Überblick über alle verfügbaren Temperatursensoren zu haben, aber irgendwer muss das pflegen auch. Wenn man sowas haben wollte, wäre wohl die Verwendung von SemanticMediaWiki sinnvoller. [[Benutzer:Drhirn|Drhirn]] ([[Benutzer Diskussion:Drhirn|Diskussion]]) 10:15, 11. Jan. 2017 (CET)<br />
<br />
:: Hallo ihr beiden. Ich hatte gehofft eine Übersicht zu erstellen, die hilft einen passenden Sensor zu finden. Aktuell gibt es viele Seiten mit den Infos, aber eben keine Übersicht. Natürlich ließe sich das automatisch erstellen, wenn die Infos in Templates auf den Unterseiten vorliegen würden. Konkret:<br />
* Was sind die Messbereiche?<br />
* Muss das Gerät selber die Umgebung (z.B. in Flüssigkeiten) oder Temperatur (z.B. für Sauna) aushalten?<br />
<br />
Wir können die Seite gerne umbenennen, was haltet ihr von "Vergleich Temperatursensoren"?<br />
Gruß --[[Benutzer:Jostar|Jostar]] ([[Benutzer Diskussion:Jostar|Diskussion]]) 22:21, 23. Jan. 2017 (CET)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Temperatursensoren&diff=17686Temperatursensoren2016-12-06T13:27:43Z<p>Jostar: Die Seite wurde neu angelegt: „Von Fhem werden eine Vielzahl von Sensoren zur Erfassung der Temperatur unterstützt (siehe :Kategorie:Temperatursensoren). Bei der Auswahl geeigneter…“</p>
<hr />
<div>Von Fhem werden eine Vielzahl von [[Sensor]]en zur Erfassung der Temperatur unterstützt (siehe [[:Kategorie:Temperatursensoren]]).<br />
<br />
Bei der Auswahl geeigneter Sensoren soll die folgende Übersicht helfen. Augenmerk fürs erste auf Funksensoren mit separater, via Kabel abgesetzter, Temperatursonde (wichtig für das Messen in z.B. Flüssigkeiten oder heißer Sauna, da die Elektronik abgesetzt ist).<br />
<br />
Wichtig sind in jedem Fall die Art der Übertragung und der Messbereich (zur einfachen Sortierung sind die Spalten einzeln angegeben, Temperatur in °C und Luftfeuchtigkeit in % rF):<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! Hersteller !! Modell !! Übertragungsart !! Temperatur (min) !! Temperatur (max) !! Luftfeuchte (min) !! Luftfeuchte (max) !! Kabelsensor (min) !! Kabelsensor (max)<br />
|-<br />
| Technoline <sup>[1]</sup> || MA 10320 || Funk || -39,9 || 59,9 || 20 || 99 || -50,0 || 110<br />
|-<br />
| TFA <sup>[2]</sup> || 30.3302.02 || Funk || -39,9 || 59,9 || 0 || 99 || -50,0 || 110<br />
|}<br />
<br />
Zum Empfang dienen sogenannte Interfaces (siehe [[:Kategorie:Interfaces]]).<br />
<br />
== Einzelnachweise ==<br />
<br />
# http://www.elv.de/elv-mobile-alerts-temperatur-luftfeuchtigkeitssensor-ma-10320pro-und-kabeltemperatursensor.html<br />
# http://tfa-dostmann.de/fileadmin/-----Anleitungen-----/30.3302.02_g_e.pdf</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Benutzer:Jostar/Kindle&diff=14781Benutzer:Jostar/Kindle2016-03-22T23:58:45Z<p>Jostar: </p>
<hr />
<div>Kleine Übersicht um den aktuellen Kindle von Amazon als Display nutzen zu können. Siehe auch die [[Kindle_Display|Version in englisch]].<br />
# Kindle Version prüfen (5.6.5 ist Auslieferungszustand, Stand 20.03.2016)<br />
# Kindle vor automatischem Update schützen (z.B. Flugmodus, Tipp: im WLAN eine whiteliste in der Fritzbox für Gastnetz setzen und dort Kindle anmelden)<br />
# Kindle an USB anschließen und Jailbreak-Datei (jb) in das Hauptverzeichnis kopieren (nach automatischer Installation der Gerätetreiber)<br />
# Kindle vom USB trennen und die Webseite http://kindlefere.com/jb/ besuchen (alternativ kann man die Daten auf einem eigenen Server verfügbar machen. JavaScript läuft), Anmeisungen folgen bis "Jailbreak erfolgreich" siehe [http://allesebook.de/anleitung/anleitung-kindle-paperwhite-und-kindle-voyage-jailbreak-mit-firmware-5-6-5-68779/]<br />
# genauso für das Hotfix, ab jetzt können weitere Updates nur noch über KUAL installiert werden, alle anderen Installationsverzeichnis (auch offizielle Updates) werden direkt gelöscht<br />
# KUAL in den Dokumenten-Ordner (KUAL-KDK-2.0.azw2)<br />
<br />
<br />
in FHEM<br />
:<code>define kindledisplay FReplacer /opt/fhem/www/images/template1.svg /opt/fhem/www/images/status.svg 60</code><br />
:<code>attr kindledisplay PostCommand convert /opt/fhem/www/images/status.svg -type GrayScale -depth 8 /opt/fhem/www/images/status.png 2>/dev/null &</code><br />
:<code>attr kindledisplay ReplacementEncode UTF-8</code><br />
:<code>attr kindledisplay Rep01Regex TEMP1</code><br />
:<code>attr kindledisplay Rep01Reading Sensor1:Temp1</code><br />
:<code>attr kindledisplay Rep01Format %.1f</code><br />
<br />
:<code>attr kindledisplay Rep02Regex HUM1</code><br />
:<code>attr kindledisplay Rep02Reading Sensor1:Temp1</code><br />
:<code>attr kindledisplay Rep02Format %.1f</code><br />
<br />
:<code>attr kindledisplay Rep03Regex TEMP2</code><br />
:<code>attr kindledisplay Rep03Reading netatmo_In:temperature</code><br />
:<code>attr kindledisplay Rep03Format %.1f</code><br />
:<code>attr kindledisplay Rep04Regex HUM2</code><br />
:<code>attr kindledisplay Rep04Reading netatmo_In:humidity</code><br />
:<code>attr kindledisplay Rep04Format %.1f</code></div>Jostarhttp://wiki.fhem.de/w/index.php?title=Benutzer:Jostar/Kindle&diff=14780Benutzer:Jostar/Kindle2016-03-22T18:10:43Z<p>Jostar: </p>
<hr />
<div>Kleine Übersicht um den aktuellen Kindle von Amazon als Display nutzen zu können. Siehe auch die [[Kindle_Display|Version in englisch]].<br />
# Kindle Version prüfen (5.6.5 ist Auslieferungszustand, Stand 20.03.2016)<br />
# Kindle vor automatischem Update schützen (z.B. Flugmodus, Tipp: im WLAN eine whiteliste in der Fritzbox für Gastnetz setzen und dort Kindle anmelden)<br />
# Kindle an USB anschließen und Jailbreak-Datei (jb) in das Hauptverzeichnis kopieren (nach automatischer Installation der Gerätetreiber)<br />
# Kindle vom USB trennen und die Webseite http://kindlefere.com/jb/ besuchen (alternativ kann man die Daten auf einem eigenen Server verfügbar machen. JavaScript läuft), Anmeisungen folgen bis "Jailbreak erfolgreich" siehe [http://allesebook.de/anleitung/anleitung-kindle-paperwhite-und-kindle-voyage-jailbreak-mit-firmware-5-6-5-68779/]<br />
# genauso für das Hotfix, ab jetzt können weitere Updates nur noch über KUAL installiert werden, alle anderen Installationsverzeichnis (auch offizielle Updates) werden direkt gelöscht<br />
# KUAL in den Dokumenten-Ordner (KUAL-KDK-2.0.azw2)<br />
<br />
<br />
in FHEM<br />
:<code>define kindledisplay FReplacer /opt/fhem/www/images/template1.svg /opt/fhem/www/images/status.svg 60<br />
attr kindledisplay PostCommand convert /opt/fhem/www/images/status.svg -type GrayScale -depth 8 /opt/fhem/www/images/status.png 2>/dev/null &<br />
attr kindledisplay ReplacementEncode UTF-8<br />
attr kindledisplay Rep01Regex TEMP1<br />
attr kindledisplay Rep01Reading Sensor1:Temp1<br />
attr kindledisplay Rep01Format %.1f<br />
<br />
attr kindledisplay Rep02Regex HUM1<br />
attr kindledisplay Rep02Reading Sensor1:Temp1<br />
attr kindledisplay Rep02Format %.1f<br />
<br />
attr kindledisplay Rep03Regex TEMP2<br />
attr kindledisplay Rep03Reading netatmo_In:temperature<br />
attr kindledisplay Rep03Format %.1f<br />
attr kindledisplay Rep04Regex HUM2<br />
attr kindledisplay Rep04Reading netatmo_In:humidity<br />
attr kindledisplay Rep04Format %.1f<br />
</code></div>Jostarhttp://wiki.fhem.de/w/index.php?title=Benutzer:Jostar/Kindle&diff=14749Benutzer:Jostar/Kindle2016-03-20T13:29:42Z<p>Jostar: </p>
<hr />
<div>Kleine Übersicht um den aktuellen Kindle von Amazon als Display nutzen zu können. Siehe auch die [[Kindle_Display|Version in englisch]].<br />
# Kindle Version prüfen (5.6.5 ist Auslieferungszustand, Stand 20.03.2016)<br />
# Kindle vor automatischem Update schützen (z.B. Flugmodus, Tipp: im WLAN eine whiteliste in der Fritzbox für Gastnetz setzen und dort Kindle anmelden)<br />
# Kindle an USB anschließen und Jailbreak-Datei (jb) in das Hauptverzeichnis kopieren (nach automatischer Installation der Gerätetreiber)<br />
# Kindle vom USB trennen und die Webseite http://kindlefere.com/jb/ besuchen (alternativ kann man die Daten auf einem eigenen Server verfügbar machen. JavaScript läuft), Anmeisungen folgen bis "Jailbreak erfolgreich" siehe [http://allesebook.de/anleitung/anleitung-kindle-paperwhite-und-kindle-voyage-jailbreak-mit-firmware-5-6-5-68779/]<br />
# genauso für das Hotfix<br />
# genauso für KUAL (KUAL-KDK-2.0.azw2)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Benutzer:Jostar/Kindle&diff=14748Benutzer:Jostar/Kindle2016-03-20T13:10:18Z<p>Jostar: Die Seite wurde neu angelegt: „Kleine Übersicht um den aktuellen Kindle von Amazon als Display nutzen zu können. Siehe auch die Version in englisch. # Kindle Version pr…“</p>
<hr />
<div>Kleine Übersicht um den aktuellen Kindle von Amazon als Display nutzen zu können. Siehe auch die [[Kindle_Display|Version in englisch]].<br />
# Kindle Version prüfen (5.6.5 ist Auslieferungszustand, Stand 20.03.2016)<br />
# Kindle vor automatischem Update schützen (z.B. Flugmodus, Tipp: im WLAN eine whiteliste in der Fritzbox für Gastnetz setzen und dort Kindle anmelden)<br />
# Kindle an USB anschließen und Jailbreak-Datei (jb) in das Hauptverzeichnis kopieren (nach automatischer Installation der Gerätetreiber)<br />
# Kindle vom USB trennen und die Webseite http://kindlefere.com/jb/ besuchen (alternativ kann man die Daten auf einem eigenen Server verfügbar machen. JavaScript läuft), Anmeisungen folgen bis "Jailbreak erfolgreich"<br />
# genauso für das Hotfix<br />
# genauso für KUAL (KUAL-KDK-2.0.azw2)</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Netatmo&diff=14728Netatmo2016-03-18T17:00:50Z<p>Jostar: gestrichenen Erklärungspunkt in Versionsgeschichte verbannt</p>
<hr />
<div>{{SEITENTITEL:netatmo}}{{Infobox Modul<br />
|ModPurpose=Datenimport von privaten und öffentlichen netatmo Wetterstationen.<br />
|ModType=d<br />
<!-- |ModCategory= (noch?) nicht verwendet --><br />
|ModCmdRef=netatmo<br />
|ModForumArea=Codeschnipsel<br />
|ModTechName=38_netatmo.pm<br />
|ModOwner=Andre / justme1968 ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer_Diskussion:Justme|Wiki]])}}<br />
Das Fhem-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap].<br />
<br />
Auch für den Zugriff auf die öffentlichen Stationen ist ein netatmo Account nötig.<br />
<br />
== Vorgehensweise ==<br />
1. Man benötigt einen Netatmo Account (Email und Passwort). Diesen legt man an <br />
* in der [[netatmo]]-App (z.B. auf dem iPad) <br />
* auf der [http://www.netatmo.com Homepage] (den Login Dialog aufklappen und auf den Text "Anmelden" klicken)<br />
<br />
2. Man benötigt eine Client_ID und den Client_Secret. Diese Informationen muss man auf [http://dev.netatmo.com dieser Seite] generieren. Hierfür meldet man sich mit den zuvor erstellten Account-Daten an und erstellt dann eine "eigene App". Hier werden einige Daten abgefragt, man muss jedoch nichts eingeben. Es reicht der App-Titel (z.B. "Fhem-Netatmo") und eine kurze Beschreibung (z.B. "meine erste eigene app..."). Auf der dann folgenden Seite tauchen die Client_ID and der Client_Secret auf. Diese Daten braucht man wiederum in FHEM.<br />
<br />
3. In FHEM ein Device anlegen mit den o.g. Informationen: <br />
:<code>define Wetter netatmo ACCOUNT <Email> <Passwort> <Client_ID> <Client_Secret></code><br />
<br />
Hinweis: Das Wort "ACCOUNT" muss in diesem define angegeben werden. Also nicht durch die o.g. Account-Daten ersetzen!<br />
<br />
Ist das modul netatmo unbekannt, muß evtl. noch ein update von FHEM durchgeführt werden. Erscheint weiterhin eine Fehlermeldung, fehlen zum Betrieb des netatmo Moduls möglicherweise einzelne Komponenten, die auf Betriebssystemebene nachinstalliert werden müssen:<br />
<br />
:<code> sudo apt-get install libjson-perl libdigest-md5-file-perl liblwp-protocol-https-perl liblwp-protocol-http-socketunix-perl</code><br />
<br />
4. Am besten das neue Device noch schnell in einen Raum schieben, damit man es besser findet: <br />
:<code>attr Wetter room Aussen</code><br />
<br />
5. Jetzt taucht in FHEM in der GUI beim Wetter-Device die Option "public " auf. <br />
<br />
6. Sollte nach kurzer Zeit beim Wetter-Device der Status "Invalid Access Token" auftauchen, dann muss in der Fhem-Installation nach der Datei 38_netatmo.pm gesucht und darin "https" durch "http" ersetzt werden.<br />
<br />
[Edit] Inzwischen gibt es ein attribut nossl. Das auf 1 setzen und der https-Fehler wird umgangen: <br />
:<code>attr Wetter nossl 1</code><br />
<br />
[Edit2] Dieser SSL- und ein weiterer UTF-8-Fehler traten hauptsächlich auf [[AVM Fritz!Box|FritzBox]] auf. Die aktuelle Version prüft automatisch auf welcher Hardware Fhem läuft und setzt die korrekten Einstellungen.<br />
<br />
7. Mit dem Kommando:<br />
:<code>get Wetter public <longitude> <latitude> <radius></code> <br />
geeignete öffentliche Wetterstationen suchen. <longitude> und <latitude> vom Wunschort findet man recht schnell über Google.<br />
<br />
Alternativ kann man auch mit Hilfe der PLZ Stationen in der Umgebung finden:<br />
:<code>get Wetter public <PLZ></code><br />
<br />
Aus der angezeigten Liste kann man die gewünschte Station auswählen und die <ID_der_gewählten_Station> <longitude> <latitude> kopieren.<br />
Stationen in Österreich findet man, wenn der PLZ ein a: vorangestellt wird.<br />
<br />
8. Device mit define anlegen:<br />
Dazu aus der Liste der Suchergebnisse die untere "Define"-Zeile Copy&Paste ins fhem Feld. <br />
:Beispielsweise: <code>define Berlinwetter netatmo PUBLIC 70:ee:50:00:66:86 02:00:00:00:71:b2 temperature,humidity 70:ee:50:00:66:86 pressure</code> <br />
Das erzeugt ein neues Device (mit dem Namen "Berlinwetter" als freier Name der Wetterstation) das intern aus mehreren Modulen besteht und liest pro Modul die öffentlichen readings aus.<br />
<br />
9. Alle im netatmo-Account bekannten eigenen und freigegebenen Stationen werden automatisch per autocreate in Fhem angelegt.<br />
<br />
== Links ==<br />
* Ausführliche Erklärung vorerst in {{Link2Forum|Topic=14457|Message=184798|LinkText=Beitrag 184798}} im Fhem Forum.<br />
* Text zum Teil übernommen aus dem {{Link2Forum|Topic=14457|Message=83413l|LinkText=Forenbeitrag 183413}}.<br />
<br />
[[Kategorie:Wetterstationen]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Netatmo&diff=14727Netatmo2016-03-18T16:51:38Z<p>Jostar: Layout: führende Leerzeile entfernt</p>
<hr />
<div>{{SEITENTITEL:netatmo}}{{Infobox Modul<br />
|ModPurpose=Datenimport von privaten und öffentlichen netatmo Wetterstationen.<br />
|ModType=d<br />
<!-- |ModCategory= (noch?) nicht verwendet --><br />
|ModCmdRef=netatmo<br />
|ModForumArea=Codeschnipsel<br />
|ModTechName=38_netatmo.pm<br />
|ModOwner=Andre / justme1968 ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer_Diskussion:Justme|Wiki]])}}<br />
Das Fhem-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap].<br />
<br />
Auch für den Zugriff auf die öffentlichen Stationen ist ein netatmo Account nötig.<br />
<br />
Text zum Teil übernommen aus diesem [http://forum.fhem.de/index.php/topic,14457.msg183413.html#msg183413 Forenbeitrag].<br />
<br />
== Vorgehensweise ==<br />
1. Man benötigt einen Netatmo Account (Email und Passwort). Diesen legt man an <br />
* in der [[netatmo]]-App (z.B. auf dem iPad) <br />
* auf der [http://www.netatmo.com Homepage] (den Login Dialog aufklappen und auf den Text "Anmelden" klicken)<br />
<br />
2. Man benötigt eine Client_ID und den Client_Secret. Diese Informationen muss man auf [http://dev.netatmo.com dieser Seite] generieren. Hierfür meldet man sich mit den zuvor erstellten Account-Daten an und erstellt dann eine "eigene App". Hier werden einige Daten abgefragt, man muss jedoch nichts eingeben. Es reicht der App-Titel (z.B. "Fhem-Netatmo") und eine kurze Beschreibung (z.B. "meine erste eigene app..."). Auf der dann folgenden Seite tauchen die Client_ID and der Client_Secret auf. Diese Daten braucht man wiederum in FHEM.<br />
<br />
3. In FHEM ein Device anlegen mit den o.g. Informationen: <br />
:<code>define Wetter netatmo ACCOUNT <Email> <Passwort> <Client_ID> <Client_Secret></code><br />
<br />
Hinweis: Das Wort "ACCOUNT" muss in diesem define angegeben werden. Also nicht durch die o.g. Account-Daten ersetzen!<br />
<br />
Ist das modul netatmo unbekannt, muß evtl. noch ein update von FHEM durchgeführt werden. Erscheint weiterhin eine Fehlermeldung, fehlen zum Betrieb des netatmo Moduls möglicherweise einzelne Komponenten, die auf Betriebssystemebene nachinstalliert werden müssen:<br />
<br />
:<code> sudo apt-get install libjson-perl libdigest-md5-file-perl liblwp-protocol-https-perl liblwp-protocol-http-socketunix-perl</code><br />
<br />
4. Am besten das neue Device noch schnell in einen Raum schieben, damit man es besser findet: <br />
:<code>attr Wetter room Aussen</code><br />
<br />
5. Jetzt taucht in FHEM in der GUI beim Wetter-Device die Option "public " auf. <br />
<br />
6. Sollte nach kurzer Zeit beim Wetter-Device der Status "Invalid Access Token" auftauchen, dann muss in der Fhem-Installation nach der Datei 38_netatmo.pm gesucht und darin "https" durch "http" ersetzt werden.<br />
<br />
[Edit] Inzwischen gibt es ein attribut nossl. Das auf 1 setzen und der https-Fehler wird umgangen: <br />
:<code>attr Wetter nossl 1</code><br />
<br />
[Edit2] Dieser SSL- und ein weiterer UTF-8-Fehler traten hauptsächlich auf [[AVM Fritz!Box|FritzBox]] auf. Die aktuelle Version prüft automatisch auf welcher Hardware Fhem läuft und setzt die korrekten Einstellungen.<br />
<br />
7. Mit dem Kommando:<br />
:<code>get Wetter public <longitude> <latitude> <radius></code> <br />
geeignete öffentliche Wetterstationen suchen. <longitude> und <latitude> vom Wunschort findet man recht schnell über Google.<br />
<br />
Alternativ kann man auch mit Hilfe der PLZ Stationen in der Umgebung finden:<br />
:<code>get Wetter public <PLZ></code><br />
<br />
Aus der angezeigten Liste kann man die gewünschte Station auswählen und die <ID_der_gewählten_Station> <longitude> <latitude> kopieren.<br />
Stationen in Österreich findet man, wenn der PLZ ein a: vorangestellt wird.<br />
<br />
8. Device mit define anlegen:<br />
Dazu aus der Liste der Suchergebnisse die untere "Define"-Zeile Copy&Paste ins fhem Feld. Das erzeugt ein neues Device mit dem Namen <Freier Name der Wetterstation> das intern aus mehreren Modulen besteht und liest pro Modul die öffentlichen readings aus.<br />
<br />
:<code>define <Freier Name der Wetterstation> netatmo public <ID_der_gewählten_Station> <longitude> <latitude></code> <br />
(z.B. define Berlinwetter netatmo PUBLIC 70:ee:50:00:66:86 02:00:00:00:71:b2 temperature,humidity 70:ee:50:00:66:86 pressure)<br />
<br />
<strike>8. Das passende define mit<br />
:<code>get <na> public <id> <plz></code><br />
oder<br />
:<code>get <na> public <id> <longitude> <latitude></code><br />
erzeugen lassen und verwenden.</strike><br />
<br />
9. Alle im netatmo-Account bekannten eigenen und freigegebenen Stationen werden automatisch per autocreate in Fhem angelegt.<br />
<br />
== Links ==<br />
* Ausführliche Erklärung vorerst in {{Link2Forum|Topic=14457|Message=184798|LinkText=Beitrag 184798}} im Fhem Forum.<br />
<br />
[[Kategorie:Wetterstationen]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Netatmo&diff=14726Netatmo2016-03-18T16:50:12Z<p>Jostar: </p>
<hr />
<div>{{SEITENTITEL:netatmo}}<br />
{{Infobox Modul<br />
|ModPurpose=Datenimport von privaten und öffentlichen netatmo Wetterstationen.<br />
|ModType=d<br />
<!-- |ModCategory= (noch?) nicht verwendet --><br />
|ModCmdRef=netatmo<br />
|ModForumArea=Codeschnipsel<br />
|ModTechName=38_netatmo.pm<br />
|ModOwner=Andre / justme1968 ([http://forum.fhem.de/index.php?action=profile;u=430 Forum] / [[Benutzer_Diskussion:Justme|Wiki]])}}<br />
Das Fhem-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap].<br />
<br />
Auch für den Zugriff auf die öffentlichen Stationen ist ein netatmo Account nötig.<br />
<br />
Text zum Teil übernommen aus diesem [http://forum.fhem.de/index.php/topic,14457.msg183413.html#msg183413 Forenbeitrag].<br />
<br />
== Vorgehensweise ==<br />
1. Man benötigt einen Netatmo Account (Email und Passwort). Diesen legt man an <br />
* in der [[netatmo]]-App (z.B. auf dem iPad) <br />
* auf der [http://www.netatmo.com Homepage] (den Login Dialog aufklappen und auf den Text "Anmelden" klicken)<br />
<br />
2. Man benötigt eine Client_ID und den Client_Secret. Diese Informationen muss man auf [http://dev.netatmo.com dieser Seite] generieren. Hierfür meldet man sich mit den zuvor erstellten Account-Daten an und erstellt dann eine "eigene App". Hier werden einige Daten abgefragt, man muss jedoch nichts eingeben. Es reicht der App-Titel (z.B. "Fhem-Netatmo") und eine kurze Beschreibung (z.B. "meine erste eigene app..."). Auf der dann folgenden Seite tauchen die Client_ID and der Client_Secret auf. Diese Daten braucht man wiederum in FHEM.<br />
<br />
3. In FHEM ein Device anlegen mit den o.g. Informationen: <br />
:<code>define Wetter netatmo ACCOUNT <Email> <Passwort> <Client_ID> <Client_Secret></code><br />
<br />
Hinweis: Das Wort "ACCOUNT" muss in diesem define angegeben werden. Also nicht durch die o.g. Account-Daten ersetzen!<br />
<br />
Ist das modul netatmo unbekannt, muß evtl. noch ein update von FHEM durchgeführt werden. Erscheint weiterhin eine Fehlermeldung, fehlen zum Betrieb des netatmo Moduls möglicherweise einzelne Komponenten, die auf Betriebssystemebene nachinstalliert werden müssen:<br />
<br />
:<code> sudo apt-get install libjson-perl libdigest-md5-file-perl liblwp-protocol-https-perl liblwp-protocol-http-socketunix-perl</code><br />
<br />
4. Am besten das neue Device noch schnell in einen Raum schieben, damit man es besser findet: <br />
:<code>attr Wetter room Aussen</code><br />
<br />
5. Jetzt taucht in FHEM in der GUI beim Wetter-Device die Option "public " auf. <br />
<br />
6. Sollte nach kurzer Zeit beim Wetter-Device der Status "Invalid Access Token" auftauchen, dann muss in der Fhem-Installation nach der Datei 38_netatmo.pm gesucht und darin "https" durch "http" ersetzt werden.<br />
<br />
[Edit] Inzwischen gibt es ein attribut nossl. Das auf 1 setzen und der https-Fehler wird umgangen: <br />
:<code>attr Wetter nossl 1</code><br />
<br />
[Edit2] Dieser SSL- und ein weiterer UTF-8-Fehler traten hauptsächlich auf [[AVM Fritz!Box|FritzBox]] auf. Die aktuelle Version prüft automatisch auf welcher Hardware Fhem läuft und setzt die korrekten Einstellungen.<br />
<br />
7. Mit dem Kommando:<br />
:<code>get Wetter public <longitude> <latitude> <radius></code> <br />
geeignete öffentliche Wetterstationen suchen. <longitude> und <latitude> vom Wunschort findet man recht schnell über Google.<br />
<br />
Alternativ kann man auch mit Hilfe der PLZ Stationen in der Umgebung finden:<br />
:<code>get Wetter public <PLZ></code><br />
<br />
Aus der angezeigten Liste kann man die gewünschte Station auswählen und die <ID_der_gewählten_Station> <longitude> <latitude> kopieren.<br />
Stationen in Österreich findet man, wenn der PLZ ein a: vorangestellt wird.<br />
<br />
8. Device mit define anlegen:<br />
Dazu aus der Liste der Suchergebnisse die untere "Define"-Zeile Copy&Paste ins fhem Feld. Das erzeugt ein neues Device mit dem Namen <Freier Name der Wetterstation> das intern aus mehreren Modulen besteht und liest pro Modul die öffentlichen readings aus.<br />
<br />
:<code>define <Freier Name der Wetterstation> netatmo public <ID_der_gewählten_Station> <longitude> <latitude></code> <br />
(z.B. define Berlinwetter netatmo PUBLIC 70:ee:50:00:66:86 02:00:00:00:71:b2 temperature,humidity 70:ee:50:00:66:86 pressure)<br />
<br />
<strike>8. Das passende define mit<br />
:<code>get <na> public <id> <plz></code><br />
oder<br />
:<code>get <na> public <id> <longitude> <latitude></code><br />
erzeugen lassen und verwenden.</strike><br />
<br />
9. Alle im netatmo-Account bekannten eigenen und freigegebenen Stationen werden automatisch per autocreate in Fhem angelegt.<br />
<br />
== Links ==<br />
* Ausführliche Erklärung vorerst in {{Link2Forum|Topic=14457|Message=184798|LinkText=Beitrag 184798}} im Fhem Forum.<br />
<br />
[[Kategorie:Wetterstationen]]</div>Jostarhttp://wiki.fhem.de/w/index.php?title=Raspberry_Pi_und_1-Wire&diff=14701Raspberry Pi und 1-Wire2016-03-15T21:28:54Z<p>Jostar: /* vor 2015 bzw. Kernelversion 3.18.3 */</p>
<hr />
<div>Der [[:Kategorie:Raspberry Pi|Raspberry Pi]], abgekürzt RPi ist ein Einplatinencomputer der [http://www.raspberrypi.org/ Raspberry Pi Foundation], der unter Linux läuft und über eine Vielzahl von Anschlüssen verfügt.<br />
<br />
FHEM läuft auf allen Modell des Raspberry Pi. Während [[:Kategorie:Raspberry Pi|hier]] die Installation von FHEM beschrieben wird, soll sich diese Seite nur mit dem Anschluss von 1-Wire Devices an den RPi befassen.<br />
<br />
== Hardware ==<br />
Bereits von der Hardware her bietet der RPi verschiedene Möglichkeiten zum Anschluss von 1-Wire-Devices<br />
<br />
=== USB-Port ===<br />
Über einen der USB-Ports des RPi mit entsprechendem Adapter. Hierbei sollte, wenn es sich nicht nur um wenige 1-Wire-Devices handelt, ein USB-Hub mit eigener Stromversorgung zwischengeschaltet werden. Mit USB-Extendern lässt sich dies bequem auch bis zu 20m entfernt vom RPi bewerkstelligen.<br />
<br />
Alle bekannten USB/1-Wire Adapter arbeiten mit dem RPi. Allerdings ist es möglicherweise (nur, wenn Fehler auftreten&#160;!) nötig, dafür ein Kernel-Update durchzuführen, da in manchen älteren Versionen des Linux-Kernels für den RPi Fehler im USB-Stack enthalten sind.<br />
<br />
=== COC-Modul ===<br />
Anschluss über ein COC-Modul des Herstellers [http://busware.de busware.de]. Siehe hierzu im Detail [[COC und 1-wire]]].<br />
<br />
=== RPI2-Modul ===<br />
Anschluss über ein RPI2-Modul des Herstellers [http://www.sheepwalkelectronics.co.uk/RPI2.shtml Sheepwalk Electronics]. Dieses Modul wird direkt auf den internen I2C-Bus des RPi aufgesteckt. Im Kaufzustand bietet es für den 1-Wire-Bus sowohl eine RJ45-Buchse, als auch einen Schraubklemmenanschluss. Diese sind leider beide so hoch, dass das Modul nicht mehr in das RPi-Gehäuse passt. Hier kann aber leicht abgeholfen werden (to be continued).<br />
<br />
Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen<br />
<br />
<nowiki>modprobe i2c-bcm2708<br />
modprobe i2c-dev</nowiki><br />
Der automatische Start dieser beiden Module kann in der Datei /etc/modules eingetragen werden. <br />
<br />
Zudem muss beim aktuellen Raspian noch die Datei /boot/config.txt angepasst werden:<br />
<nowiki>dtparam=i2c_arm=on</nowiki><br />
<br />
Die oben genannten Schritte können auch über (sudo) raspi-config durchgeführt werden. Damit wird sichergestellt, dass die für die jeweilige Kernelversion notwendigen Schritte durchgeführt werden ('8 Advanced Options' -> 'A7 I2C').<br />
<br />
Bei Vorhandensein des Paketes i2c-tools wird dann die korrekte Erkennung des Adapters mit dem Befehl<br />
<br />
<nowiki>i2cdetect -y 1</nowiki><br />
überprüft, der 1-Wire-Busmaster DS2482-100 sollte als I2C-Device mit der ID 0x18 gefunden werden.<br />
<br />
=== GPIO4-Port ===<br />
1-wire-Komponenten können direkt an den GPIO-Port des RPi angeschlossen und in FHEM konfiguriert werden.<br />
<br />
==== Software-Installation ====<br />
Die Software-Installation des GPIO im RPi erfolgt je nach Kernelversion unterschiedlich:<br />
<br />
===== vor 2015 bzw. Kernelversion 3.18.3 =====<br />
Zur Ansteuerung ist auf dem RPi zunächst das Starten zweier Kernelmodule nötig, dazu als root ausführen<br />
<br />
<nowiki>modprobe w1-gpio pullup=1</nowiki><br />
<nowiki>modprobe w1-therm</nowiki><br />
<br />
Waren die Schritte erfolgreich, gibt es jetzt im Verzeichnis ''/sys/bus/w1/devices/'' für jeden Sensor ein Unterverzeichnis mit seiner Kennung, z.B. ''28-000004e147d6''. Die dort stehende Datei ''w1_slave'' enthält das Ergebnis der Datenübertragung vom Sensor. Um die Module dauerhaft zu laden, sind sie noch in die Datei ''/etc/modules'' einzutragen:<br />
<br />
<nowiki><br />
# /etc/modules<br />
w1-gpio pullup=1<br />
w1-therm </nowiki><br />
<br />
Um den 1-Wire Bus in FHEM einzubinden, muss noch das Modul 58_GPIO4.pm aus dem Verzeichnis ''/opt/fhem/contrib'' in das Hauptverzeichnis ''/opt/fhem/FHEM/'' kopiert werden und mit <br />
:<code>define RPi GPIO4 BUSMASTER</code><br />
bekannt gemacht werden. Nach einem Neustart von FHEM werden die Sensoren automatisch erkannt (FHEM-Forum-Beitrag [http://forum.fhem.de/index.php/topic,10431.0.html]).<br />
<br />
Das beschriebene Kernelmodul unterstützt momentan die IDs 10- (DS1820 u. DS18S20) sowie 28- (DS18B20). Im "Auslieferungszustand" können maximal 10 Sensoren angeschlossen werden. <br />
Unter [http://www.raspiprojekt.de/anleitungen/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html?showall=&start=4] ist beschrieben, wie man die Anzahl erhöhen kann. Anschließend ist nur noch ein Neustart des RPi nötig.<br />
<br />
===== ab 2015 bzw. Kernelversion 3.18.3 =====<br />
Da sich mit Kernelversion 3.18.3 die Handhabung der Module geändert hat (vgl. [[#1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate]] - die Datei <code>/etc/modules</code> wird im Prinzip garnicht mehr benötigt (Details s. [[#Links]]). Somit ist hier eine andere (einfachere) Konfiguration nötig:<br />
* Am besten erst einmal ein ordentliches System-Update durchführen:<br />
<pre><br />
sudo apt-get update<br />
sudo apt-get dist-upgrade -f<br />
sudo rpi-update<br />
sudo reboot<br />
</pre><br />
* Kernelversion kontrollieren (muss jetzt mind. v3.18.3 sein):<br />
<pre><br />
uname -r<br />
</pre><br />
* Dann fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:<br />
<pre><br />
# activating 1-wire with pullup<br />
dtoverlay=w1-gpio-pullup<br />
</pre><br />
* Und startet das System neu<br />
<pre><br />
sudo reboot<br />
</pre><br />
<br />
Zusätzlich kann man gleich eine '''Debugging-Funktion''' aktivieren:<br />
* Dazu fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:<br />
<pre><br />
# activating device tree debugging (use: sudo vcdbg log msg)<br />
dtdebug=on<br />
</pre><br />
* Abrufen kann man die Debug-Informationen dann mit:<br />
<pre><br />
sudo vcdbg log msg<br />
</pre><br />
<br />
==== Elektrische Installation ====<br />
Eine gute Einführung zum Thema geben die Links von RaspiProjekt.de (s. [[#Links]]).<br />
<br />
Dazu wird im ersten Schritt der 1-Wire Bus (bzw. zum Test nur ein einzelner Sensor) mit dem GPIO-Port des RPi verbunden, und zwar<br />
*1-Wire GND an GND vom Pi (Pin 6)<br />
*1-Wire Datenleitung an GPIO04 (Pin 7)<br />
*1-Wire VDD an +3,3V vom Pi (Pin 1)<br />
*Ausserdem ist noch ein Pullup-Widerstand von z.B. 4,7kOhm zwischen Pin1 und Pin7 zu schalten.<br />
<br />
Obwohl die nominale Spannung für 1-Wire Devices 5V beträgt, ist hier die verringerte Spannung nötig, weil die GPIO-Ports des RPi nur 3,3, V vertragen und durch höhere Spannungen zerstört werden. Als Alternative kann man den 1-Wire Bus auch 5V (Pin 2) anschließen, dann '''muss''' aber zwingend das Signal der 1-Wire Datenleitung durch einen Spannungsteiler (z.B. 10 kOhm und 6.8 kOhm) auf 3,3 V begrenzt werden. Besser man verwendet einen aktiven Pegelwandler der sich mit einem einfachen MOS-FET realisieren lässt : [[1-Wire Pegelwandler]]<br />
<br />
==== Konfiguration von 1-wire-Komponenten am GPIO ====<br />
Im Folgenden sind für verschiedene 1-wire-Komponenten die grundlegenden fhem-Konfigurationen beschrieben.<br />
<br />
===== Konfiguration des Busmasters =====<br />
Um 1-wire-Komponenten auslesen zu können muss zuerst der Busmaster im FHEM konfiguriert werden:<br />
<pre><br />
define RPi GPIO4 BUSMASTER<br />
</pre><br />
<br />
===== Temperatursensor DS18B20 =====<br />
Ist der Temperatursensor richtig elektrisch installiert (vgl. [[#Links]] von RaspiProjekt.de), so wird automatisch ein eigenes Verzeichnis mit der ID des Sensors im 1-wire-Pfad des RPi angelegt:<br />
<pre><br />
# 1-wire-Pfad des RPi:<br />
/sys/bus/w1/devices/<br />
<br />
# Bsp.:<br />
$ ls /sys/bus/w1/devices/<br />
28-001451df14ff # ID des Temperatursensors <br />
w1_bus_master1 # Standardeintrag des 1-wire-Bus<br />
</pre><br />
Am besten schliesst man mehrere Sensoren nacheinander an, damit man die ID dem richtigen Sensor zuordnen kann.<br />
<br />
Mit der ID wird der Sensor jetzt im FHEM konfiguriert:<br />
<pre><br />
define EG_Balkon GPIO4 28-001451df14ff<br />
attr EG_Balkon model DS18B20<br />
attr EG_Balkon room GPIO-Devices<br />
attr EG_Balkon group 1-wire<br />
<br />
define FileLog_EG_Balkon FileLog ./log/EG_Balkon-%Y-%W.log EG_Balkon<br />
attr FileLog_EG_Balkon logtype text<br />
</pre><br />
<br />
Den zugehörigen Plot erstellt man am einfachsten über die WebGUI des FHEM:<br />
* ggf. FHEM neu starten (falls die Komponente und der FileLog nicht auftauchen)<br />
* FileLog aufrufen<br />
* "Create SVG Plot" auswählen<br />
* ggf. Einstellungen anpassen (geht auch im Nachhinein)<br />
* "Write .gplot file" auswählen<br />
* weiter unten <code>attr SVG_FileLog_EG_Balkon room Balkon</code> eingeben<br />
<br />
=== UART-Schnittstelle ===<br />
Der RPi verfügt auch über eine UART-Schnittstelle, an diese kann direkt ein Serielles 1-Wire Interface angeschlossen werden (IN VORBEREITUNG)<br />
<br />
== Software ==<br />
Die Ansteuerung des 1-Wire Bus auf dem RPi kann durch unterschiedliche Software-Systeme erfolgen. Verbreitet mit FHEM sind<br />
<br />
* '''OWX''' sowie die zugehörigen Frontendmodule OWAD, [[OWCOUNT]], OWID, OWLCD, OWMULTI, OWSWITCH und OWTHERM. Das '''OWX'''-Modul operiert direkt auf der jeweiligen Hardware (USB bzw. Seriell) oder liest die Daten über Netzwerk (COC/CUNO/Arduino) und reicht sie an spezialisierte Frontendmodule weiter.<br />
* '''OWServer''', ein Modul, welches die vorhergehende Installation des Softwarepaketes [http://www.owfs.org OWFS] erfordert. OWFS startet einen speziellen Server, der die Kommunikation mit der Hardware übernimmt und die Daten dann an '''OWServer''' weiterleitet. Die Installtion bzw Kompilierung vom OWServer auf dem Rasperry ist unter [[OWServer & OWDevice#owfs Pakete installieren|owfs Pakete installieren]] beschrieben. Zu OWServer passt ein generisches Frontendmodul OWDevice, siehe [[OWServer & OWDevice]].<br />
<br />
Nachfolgend ist die Kompatibilität dieser Softwaresysteme mit den einzelnen Hardware-Möglichkeiten aufgeführt.<br />
<br />
{| class="wikitable" <br />
! Anschluss <br />
! Gerät <br />
! Unterstützte 1-Wire Devices <br />
! Besonderheit <br />
! Stromversorgung 1-Wire Bus<br />
|- <br />
| Direkt an USB <br />
| DS9490 Adapter <br />
| <br />
| <b>funktioniert nicht</b>, weil der enthaltene Chip DS2490 derzeit nur über <br /><i>libusb</i> ansteuerbar ist. Abhilfe ist in Arbeit. <br />
| &#160;??<br />
|- <br />
| Direkt an USB <br />
| USB9097 Adapter<br />
| rowspan="8" | Alle von OWX unterstützten Devices, d.h. <br /><p>DS18x20, DS1822 Temperatursensor <br /> DS2406, DS2408, DS2413 Schalter <br /> DS2423 Zähler <br />DS2438 Multisensor <br /> DS2450 4 Kanal ADC <br />LCD-Controller von [http://www.fuchs-shop.com/de/shop/6/1/13372316/ Louis Swart]<br />Alle anderen 1-Wire Devices: Nur ID<br />
</p><br />
| <b>funktioniert</b> auf der FB7390, das Kernelmodul <i>ch341.ko</i> findet man [https://sites.google.com/site/fhemarduino/file-cabinet/ch341.ko?attredirects=0&amp;d=1 hier]<br />
| Ja, 5V<br />
|- <br />
| Direkt an USB <br />
| Eigenbau, <br /> mit FT232RL und DS2480 Bus-Master <br />
| <b>funktioniert</b>, Fertiggeräte eventuell bei EBay erhältlich, <br />siehe auch [[Interfaces für 1-Wire]]<br />
| Ja, 5V<br />
|- <br />
| Direkt an USB <br />
| LinkUSBi Adapter <br />
| <b>funktioniert</b>, verwendet das FTDI Kernelmodul.<br />Achtung: Es kann zu Timing-Problemem kommen. <br /> Erhältlich z.B. [http://www.fuchs-shop.com/de/shop/17/1/13372210/ hier]<br />
| Ja, 5V an Pin2 (limited to 50mA)<br />
|- <br />
| Über USB-zu-Seriell-Konverter <br /> 9- oder 25-polig <br /> mit Winchiphead CH341-Chip<br />
| Konverter + DS9097U-(009/S09, E25) <br />
| <b>funktioniert</b> auf der FB7390, das Kernelmodul <i>ch341.ko</i> findet man [https://sites.google.com/site/fhemarduino/file-cabinet/ch341.ko?attredirects=0&amp;d=1 hier]<br />
| Nur bei den 25-poligen Modellen als Standard,<br /> bei den 9-poligen Modellen<br /> externe Versorgung oder Modifikation des DS9097 nötig<br />
|- <br />
| Über USB-zu-Seriell-Konverter <br /> 9- oder 25-polig <br /> mit Prolific PL2303-Chip<br />
| Konverter + DS9097U-(009/S09, E25) <br />
| <b>funktioniert</b> auf der FB7390, das Kernelmodul <i>pl2303.ko</i> findet man [https://groups.google.com/group/fhem-users/attach/1c0530caa5d8a864/pl2303.ko?part=2&amp;authuser=0 hier]<br />
| Nur bei den 25-poligen Modellen als Standard,<br /> bei den 9-poligen Modellen<br /> externe Versorgung oder Modifikation des DS9097 nötig<br />
|- <br />
| Über USB-zu-Seriell-Konverter <br /> 9- oder 25-polig <br /> mit FTDI RL232-Chip<br />
| Konverter + DS9097U-(009/S09, E25) <br />
| <b>funktioniert</b> auf der FB7390, das Kernelmodul <i>ftdi_sio.ko</i> ist auf der <br /> FritzBox vorhanden <br />
| Nur bei den 25-poligen Modellen als Standard,<br /> bei den 9-poligen Modellen<br /> externe Versorgung oder Modifikation des DS9097 nötig<br />
|- <br />
| Direct an USB<br />
| Arduino mit USB-Anschluss (UNO, Mega, Nano...)<br />
| rowspan="2"| 1-Wire Bus direkt am Arduino (reine Softwarelösung) oder (stabiler im Betrieb) in Verbindung mit DS2482-Busmaster (am I2C des Arduinos). Mit DS2482-100 ist 1 1-Wire-Bus (optional mit Strong-pullup über externen MosFET), mit DS2482-800 sind 8 busse (nur mit internem Strong-pullup) an 1 Arduino gleichzeitig möglich.<br />
| rowspan="2"| Ja, 3,3V oder 5V je nach Arduino-modell.<br />
|-<br />
| Über Netzwerk<br />
| Arduino mit Ethernetshield, Arduino mit ENC28J60-shield, Arduino Ethernet <br />
|-<br />
| Über Netzwerk und CUNO<br />
| CUNO <br />
| Mit OWX: Alle von OWX unterstützten Devices <br /> Ohne OWX: Nur DS18x20, DS1822 Temperatursensor <br />
| <b>funktioniert</b> mit gewissen Einschränkungen, siehe [[CUNO und 1-wire]]<br />
| Ja, aber nur 3,3 V. <br /> Kann allerdings zu 5V modifiziert werden<br />
|- <br />
| Über Netzwerk und <br /> Ethersex-Gerät<br />
| AVR-Net-IO oder ähnliches <br />
| DS18x20, DS1822 Temperatursensor <br /> DS2502 EEPROM <br />DS2450 4 Kanal ADC <br />
| <b>funktioniert</b>, siehe [[FHEM und 1-Wire]]und [[AVR-NET-IO]]<br /><br />
| &#160;??<br />
|}<br />
<br />
== Problembehebung ==<br />
=== 1-wire am GPIO4-Port funktioniert nicht mehr nach Systemupdate ===<br />
'''Problem'''<br />
<br />
Es kann passieren, dass nach einem Systemupdate (apt-get update oder apt-get dist-upgrade) die 1-wire-Geräte am GPIO4-Port plötzlich nicht mehr funktionieren. Dies hat dann aller Wahrscheinlichkeit die Ursache, dass ein Kernel-Upgrade von "vor 3.18.3" auf "danach" gemacht wurde. Mit Kernelversion 3.18.3 ist die Handhabung der Kernelmodule umgestellt worden (vgl. auch [[#GPIO4-Port]]):<br />
* vor v3.18.3: hier wurden Module in die /etc/modules eingetragen. Dieses Vorgehen ist fast überall beschrieben.<br />
* ab v3.18.3: jetzt wurde das sog. Device-Tree-Verfahren eingeführt, das anders arbeitet - und erst einmal die alte Konfiguration blockiert (!). (Details s. unter [[#Links]])<br />
Auch ein Aufruf von <code>sudo rpi-update</code> hilft allein nicht weiter (ist aber immer sinnvoll).<br />
<br />
'''Lösung'''<br />
<br />
Die "korrekte" Lösung wäre die Umstellung auf Device-Tree-Konfiguration: <br />
* Dazu fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:<br />
<pre><br />
# activating 1-wire with pullup<br />
dtoverlay=w1-gpio-pullup<br />
</pre><br />
* Entfernt die Module <code>w1-gpio</code> und <code>w1-therm</code> aus das <code>/etc/modules</code> (oder kommentiert sie aus)<br />
* Und startet das System neu<br />
<br />
Zusätzlich kann man gleich eine '''Debugging-Funktion''' aktivieren:<br />
* Dazu fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:<br />
<pre><br />
# activating device tree debugging (use: sudo vcdbg log msg)<br />
dtdebug=on<br />
</pre><br />
* Abrufen kann man die Debug-Informationen dann mit:<br />
<pre><br />
sudo vcdbg log msg<br />
</pre><br />
<br />
'''Alternativer Workaround'''<br />
<br />
Alternativ zur "korrekten" Lösung kann man die Device-Tree-Funktionalität auch einfach deaktivieren - dann bleibt alles wie bisher.<br />
<br />
* Dazu fügt man den folgende Zeile in <code>/boot/config.txt</code> ein:<br />
<pre><br />
# disabling device tree functionality:<br />
device_tree=<br />
</pre><br />
* Und startet das System neu.<br />
<br />
== Links ==<br />
Zu GPIO:<br />
* [http://neubert-volmar.de/Hausautomation/RaspberryPi/index.html Beispiel zur Nutzung von 1-wire am GPIO-Port & eines Eigenbau-Adapters]<br />
* [https://raspiprojekt.de/anleitungen/hardware/147-gpio-grundlagen.html RaspiProjekt.de - GPIO-Grundlagen]<br />
* [http://www.raspberrypi.org/documentation/usage/gpio/ RaspberryPi.org - GPIO-Grundlagen]<br />
* [http://pi.gadgetoid.com/pinout/pin7_gpio4 Pin-Belegungen des Raspi]<br />
* [https://www.raspiprojekt.de/anleitungen/schaltungen/9-1wire-mit-temperatursensor-ds18b20.html RaspiProjekt.de - Anbindung von Temperatursensoren]<br />
<br />
Zu Device-Tree:<br />
* [https://www.raspiprojekt.de/21-blog/153-neuer-kernel-neues-glueck.html RaspiProjekt.de - Neuer Kernel neues Glück]<br />
* [http://www.raspberrypi.org/documentation/configuration/device-tree.md RaspberryPi.org - Device Trees, Overlays and Parameters]<br />
* [https://raspiprojekt.de/anleitungen/hardware/154-geraetetreiber-und-device-tree.html RaspiProjekt.de - Gerätetreiber und Device Tree]<br />
* [https://github.com/raspberrypi/linux/tree/rpi-3.18.y/arch/arm/boot/dts Liste aller verfügbaren Device-Tree Module]<br />
<br />
[[Kategorie:Raspberry Pi]]<br />
[[Kategorie:1-Wire]]<br />
[[Kategorie:Interfaces]]</div>Jostar