{"id":1450,"date":"2023-12-09T14:06:07","date_gmt":"2023-12-09T13:06:07","guid":{"rendered":"https:\/\/caipirinha.spdns.org\/wp\/?p=1450"},"modified":"2023-12-09T15:11:46","modified_gmt":"2023-12-09T14:11:46","slug":"smarthome-avm-steckdosen-per-skript-auslesen","status":"publish","type":"post","link":"https:\/\/caipirinha.spdns.org\/wp\/?p=1450","title":{"rendered":"Smarthome: AVM-Steckdosen per Skript auslesen"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>In diesem Artikel stelle ich ein bash-Skript vor, mit welchem man Smart-Home-Daten der Steckdosen <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-200\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!DECT 200<\/a> oder <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">FRITZ<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">!<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">DECT 210<\/a> aus einer <a href=\"https:\/\/avm.de\/produkte\/fritzbox\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!Box<\/a> der Firma <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a> auslesen kann. Ein weiteres Skript bedient sich des ersten Skripts und speichert Daten in einer einfachen MySQL-Datenbank.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Voraussetzungen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Es wird eine der neueren <a href=\"https:\/\/avm.de\/produkte\/fritzbox\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!Boxen<\/a> der Firma <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a> mit aktueller Firmware eingesetzt. Eine 7490 ist z\u00e4hlt bereits als eine der &#8220;neueren&#8221; Boxen; insofern stehen die Chancen gut, dass viele Interessenten dieses Skript einsetzen k\u00f6nnen.<\/li>\n\n\n\n<li>Es werden eine oder mehrere der <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a>-Steckdosen <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-200\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!DECT 200<\/a> oder <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">FRITZ<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">!DECT 210<\/a> eingesetzt. Mit diesen ist das Skript erfolgreich getestet worden.<\/li>\n\n\n\n<li>Getestet wurde mit einer schon \u00e4lteren FRITZ!Box 7490 und der Firmware 7.57.<\/li>\n\n\n\n<li>Idealerweise hat man einen dauerhaft laufenden kleinen Linux-Server, auf dem die hier gezeigten Skripte und die MySQL-Datenbank laufen k\u00f6nnen.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Beschreibung und Nutzung<\/h2>\n\n\n\n<p>Die beiden <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a>-Steckdosen <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-200\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!DECT 200<\/a> oder <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">FRITZ<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">!DECT 210<\/a> sind, in Verbindung mit einer der neueren <a href=\"https:\/\/avm.de\/produkte\/fritzbox\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!-Boxen<\/a>, eine sehr gute M\u00f6glichkeit zur Steuerung von Strom-Verbrauchen und -Erzeugern und zur Leistungs-, Energie- und Temperaturmessung. Die Steckdosen messen dabei die durchflie\u00dfende Leistung unabh\u00e4ngig von der Richtung und k\u00f6nnen daher auch sehr gut zur Erfassung der Stromerzeugung bei Balkon-Kraftwerken benutzt werden.<\/p>\n\n\n\n<p>Wenn die FRITZ!Box konfiguriert wird, legt sie einen Standardbenutzer <em><a href=\"https:\/\/fritzhelp.avm.de\/help\/de\/FRITZ-Box-Fon-WLAN-7490\/avm\/021\/hilfe_default_user\" target=\"_blank\" rel=\"noreferrer noopener\">fritzxxxx<\/a><\/em> an, sofern man den Login mit lediglich einem Passwort aus dem Heimnetzwerk erlaubt hat. In der FRITZ!Box findet man diesen Benutzer auf der Seite <strong>System<\/strong> \u2192 <strong>FRITZ!Box-Benutzer<\/strong>. Dieser Benutzer sollte f\u00fcr unsere Zwecke die Rechte <strong>Smart Home<\/strong> haben. Bei mir sieht das so aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"110\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-1024x110.png\" alt=\"\" class=\"wp-image-1451\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-1024x110.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-300x32.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-768x83.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image.png 1087w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Rechte des Standard FRITZ!-Benutzers in meiner FRITZ!-Box<\/figcaption><\/figure>\n\n\n\n<p>Die \u00fcder das Protokoll <a href=\"https:\/\/en.wikipedia.org\/wiki\/Digital_enhanced_cordless_telecommunications\" target=\"_blank\" rel=\"noreferrer noopener\">DECT<\/a> verbundenen Smarthome-Ger\u00e4te findet man in der FRITZ!-Box auf der Seite <strong>Smart Home \u2192 Ger\u00e4te und Gruppen<\/strong>. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"668\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-1.png\" alt=\"\" class=\"wp-image-1452\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-1.png 852w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-1-300x235.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-1-768x602.png 768w\" sizes=\"auto, (max-width: 852px) 100vw, 852px\" \/><figcaption class=\"wp-element-caption\">\u00dcbersicht der Smart-Home-Ger\u00e4te und -Gruppen<\/figcaption><\/figure>\n\n\n\n<p>Klickt man auf ein Ger\u00e4t, so findet man in den Konfigurationseinstellungen, dann findet man die <strong>Aktor Identifikationsnummer (AIN)<\/strong> des entsprechenden Ger\u00e4ts. Diese wird f\u00fcr das Skript ben\u00f6tigt. Man beachte, dass es sich um zwei Zahlenbl\u00f6cke handelt, die durch genau ein Leerzeichen getrennt sind.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"452\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-3.png\" alt=\"\" class=\"wp-image-1453\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-3.png 703w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-3-300x193.png 300w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><figcaption class=\"wp-element-caption\">Aktor Identifikationsnummer (AIN) eines Smart-Home-Ger\u00e4ts<\/figcaption><\/figure>\n\n\n\n<p>Im folgenden Skript sind die AINs meiner vier Steckdosen mit den bei diesen Modellen m\u00f6glichen Abfragen f\u00fcr Leistung, Energie, Temperatur und Spannung eingetragen. Das Skript basiert auf einer Vorlage aus [<a href=\"https:\/\/raspberrypiandstuff.wordpress.com\/2017\/08\/03\/reading-the-temperature-from-fritzdect-devices\/\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a>], die aber nach einem Firmware-Update nicht mehr richtig funktionierte, weswegen ich \u00c4nderungen durchgef\u00fchrt habe. Dabei habe ich mich an der technischen Dokumentation aus [<a href=\"https:\/\/avm.de\/fileadmin\/user_upload\/Global\/Service\/Schnittstellen\/AVM_Technical_Note_-_Session_ID.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">2<\/a>], [<a href=\"https:\/\/avm.de\/fileadmin\/user_upload\/Global\/Service\/Schnittstellen\/AHA-HTTP-Interface.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">3<\/a>] orientiert. Man muss nat\u00fcrlich noch die IP-Adresse seiner FRITZ!-Box (hier mit 192.168.2.8 angenommen), den Benutzernamen (<strong>USER<\/strong>) und das Passwort (<strong>PASS<\/strong>) anpassen.<\/p>\n\n\n\n<p>Der erste Teil des Skripts erzeugt eine g\u00fcltige <strong>Session ID<\/strong>, die man im Verlauf der eigentlichen Abfrage ben\u00f6tigt. Das Vorgehen dazu ist in [<a href=\"https:\/\/avm.de\/fileadmin\/user_upload\/Global\/Service\/Schnittstellen\/AVM_Technical_Note_-_Session_ID.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">2<\/a>] beschrieben; im Wesentlichen m\u00fcssen Zeichenfolgen ausgewertet werden, zwischendrin muss mal auf UTF-16LE-Codierung gewechselt werden, und es m\u00fcssen auch noch der Benutzername und das Passwort \u00fcbermittelt werden.<\/p>\n\n\n\n<p>Im zweiten Teil nutzen wir die Session ID und fragen eines der vier Ger\u00e4te und eines der vier m\u00f6glichen Argumente ab. Aufgerufen wird das Skript (es hei\u00dft bei mir &#8220;avm_smartsocket.sh&#8221;) mit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/avm_smartsocket.sh Fernseher|Solaranlage|W\u00e4rmepumpe|Entfeuchter energy|power|temperature|voltage<\/code><\/pre>\n\n\n\n<p>Ich denk, durch die klare Struktur l\u00e4sst sich das Skript auch sehr leicht f\u00fcr eigene Zwecke anpassen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n#\n# https:\/\/raspberrypiandstuff.wordpress.com\/2017\/08\/03\/reading-the-temperature-from-fritzdect-devices\/\n# modified by Gabriel R\u00fceck, 2023-12-06\n#\n# -----------\n# definitions\n# -----------\nreadonly TERM_LRED='\\e&#91;91m'\nreadonly TERM_RESET='\\e&#91;0m'\nreadonly FBF=\"http:\/\/192.168.2.8\"\nreadonly USER=\"fritz1234\"\nreadonly PASS=\"geheimes_fritzbox_passwort\"\n# -------------------\n# check for arguments\n# -------------------\nif &#91; $# -lt 2 ]; then\n   echo -e \"${TERM_LRED}Call the function with ${0} Fernseher|Solaranlage|W\u00e4rmepumpe|Entfeuchter energy|power|temperature|voltage.${TERM_RESET}\\n\"\n   exit 1\nfi\n# ---------------\n# fetch challenge\n# ---------------\nCHALLENGE=$(curl -s \"${FBF}\/login_sid.lua\" | grep -Po '(?&lt;=&lt;Challenge&gt;).*(?=&lt;\/Challenge&gt;)')\n# -----\n# login\n# -----\nMD5=$(echo -n ${CHALLENGE}\"-\"${PASS} | iconv -f UTF-8 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}')\nRESPONSE=\"${CHALLENGE}-${MD5}\"\nSID=$(curl -i -s -k -d \"response=${RESPONSE}&amp;username=${USER}\" \"${FBF}\/login_sid.lua\" | sed -n 's\/.*&lt;SID&gt;\\(&#91;&#91;:xdigit:]]\\+\\)&lt;\\\/SID&gt;.*\/\\1\/p')\n# ----------\n# define AIN\n# ----------\ncase \"${1}\" in\n  Fernseher)        AIN=\"11630%200239598\";;\n  Solaranlage)      AIN=\"11657%200732166\";;\n  W\u00e4rmepumpe)       AIN=\"11630%200325768\";;\n  Entfeuchter)      AIN=\"11630%200325773\";;\n  *)                exit 1;;\nesac\n# ------------\n# fetch values\n# ------------\ncase \"${2}\" in\n  energy)       RESULT=$(curl -s ${FBF}'\/webservices\/homeautoswitch.lua?ain='${AIN}'&amp;sid='${SID}'&amp;switchcmd=getswitchenergy');;\n  power)        RESULT=$(curl -s ${FBF}'\/webservices\/homeautoswitch.lua?ain='${AIN}'&amp;sid='${SID}'&amp;switchcmd=getswitchpower');;\n  temperature)  RESULT=$(curl -s ${FBF}'\/webservices\/homeautoswitch.lua?ain='${AIN}'&amp;sid='${SID}'&amp;switchcmd=gettemperature')\n                &#91;&#91; ${RESULT} -lt 0 ]] &amp;&amp; RESULT=0;;\n  voltage)      RESULT=$((curl -s ${FBF}'\/webservices\/homeautoswitch.lua?ain='${AIN}'&amp;sid='${SID}'&amp;switchcmd=getdevicelistinfos') |  sed -n 's\/.*&lt;voltage&gt;\\(.*\\)&lt;\\\/voltage&gt;.*\/\\1\/p');;\n  *)            exit 1;;\nesac\n# -------------\n# output values\n# -------------\necho ${RESULT}<\/code><\/pre>\n\n\n\n<p>Wichtig ist noch wissen, welche Werte wir jeweils erhalten, und das sind bei den <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a>-Steckdosen <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-200\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!DECT 200<\/a> oder <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">FRITZ<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">!DECT 210<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Argument<\/strong><\/td><td><strong>Angezeigtes Resultat<\/strong><\/td><\/tr><tr><td>power<\/td><td>Momentane Leistung in <em>mW<\/em><\/td><\/tr><tr><td>energy<\/td><td>Akkumulierte Energiemenge in <em>Wh<\/em><\/td><\/tr><tr><td>temperature<\/td><td>Momentane Temperatur in <em>0,1 \u00b0C<\/em> (Beispiel: 65 \u2259 6,5 \u00b0C)<\/td><\/tr><tr><td>voltage<\/td><td>Momentane Netzspannung in <em>mV<\/em><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Argumente und deren Resultate bei der Abfrage der Steckdosen <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-200\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!DECT 200<\/a> oder <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">FRITZ<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">!DECT 210<\/a><\/figcaption><\/figure>\n\n\n\n<p>Nun wollen wir mit dem oben gelisteten Skript Daten der Steckdose Solaranlage auslesen und in einer MySQL-Datenbank speichern. Dazu setzen wir eine kleine und sehr einfache Datenbank auf:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Datenbank f\u00fcr Analysen der Solaranlage\n# V1.0; 2023-05-01, Gabriel R\u00fceck &lt;gabriel@rueeck.de&gt;, &lt;gabriel@caipirinha.spdns.org&gt;\n# Create a new database\nCREATE DATABASE solaranlage DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;\nGRANT ALL ON solaranlage.* TO 'gabriel';\nUSE solaranlage;\nSET default_storage_engine=Aria;\n\nCREATE TABLE anlage          (zeitstempel    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\\\n                              leistung       INT UNSIGNED DEFAULT NULL,\\\n                              energie        INT UNSIGNED DEFAULT NULL);<\/code><\/pre>\n\n\n\n<p>Zugegebenerma\u00dfen ist das CHARSET der Datenbank ziemlich egal; man h\u00e4tte nicht unbedingt noch <strong>utf8mb4<\/strong> vorsehen m\u00fcssen. Ich setze das aber generell f\u00fcr meine Datenbanken, nachdem ich mal l\u00e4ngere Zeit nach einem Fehler in einer komplexeren Datenbank gesucht hatte und dann lernen musste, dass UTF-8 bei MySQL nicht automatisch alle UTF-8-Zeichen beinhaltet [<a href=\"https:\/\/stackoverflow.com\/questions\/30074492\/what-is-the-difference-between-utf8mb4-and-utf8-charsets-in-mysql\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a>].<\/p>\n\n\n\n<p>Der Zeitstempel muss beim Beschreiben der Datenbank nicht explizit gesetzt werden; per Default wird der momentane Zeitstempel des Datenbank-Servers benutzt.<\/p>\n\n\n\n<p>Das nun folgende Skript nutzt unser erstes Skript, liest Daten f\u00fcr Leistung und Energie aus und speichert sie in der MySQL-Datenbank:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n#\n# Dieses Skript liest die Leistung und die erzeugte Energiemenge der Solaranlage und speichert das Ergebnis in einer MySQL-Datenbank ab.\n#\n# V1.0; 2023-05-01, Gabriel R\u00fceck &lt;gabriel@rueeck.de&gt;, &lt;gabriel@caipirinha.spdns.org&gt;\n#\n# CONSTANTS\ndeclare -r    MYSQL_DATABASE='solaranlage'\ndeclare -r    MYSQL_SERVER='localhost'\ndeclare -r    MYSQL_USER='gabriel'\ndeclare -r    MYSQL_PASS='geheimes_mysql_passwort'\ndeclare -r    READ_SCRIPT='~\/avm_smartsocket.sh'\n\n# VARIABLES\ndeclare -i power energy\n\n# PROGRAM\npower=$(${READ_SCRIPT} Solaranlage power)\nenergy=$(${READ_SCRIPT} Solaranlage energy)\nmysql --default-character-set=utf8mb4 -B -N -r -D \"${MYSQL_DATABASE}\" -h ${MYSQL_SERVER} -u ${MYSQL_USER} -p ${MYSQL_PASS} -e \"INSERT INTO anlage (leistung,energie) VALUES (${power},${energy});\"<\/code><\/pre>\n\n\n\n<p>Abh\u00e4ngig davon, wie oft man dieses Skript laufen l\u00e4sst und Daten abspeichern l\u00e4sst, ergeben sich dann im folgenden Beispiel genannten Eintr\u00e4ge in der Datenbank:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"877\" height=\"578\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-4.png\" alt=\"\" class=\"wp-image-1454\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-4.png 877w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-4-300x198.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/image-4-768x506.png 768w\" sizes=\"auto, (max-width: 877px) 100vw, 877px\" \/><figcaption class=\"wp-element-caption\">Auszug aus den Datenbank-Daten (Ansicht in der <a href=\"https:\/\/www.mysql.com\/products\/workbench\/\" target=\"_blank\" rel=\"noreferrer noopener\">MySQL Workbench<\/a>)<\/figcaption><\/figure>\n\n\n\n<p>Diese Daten k\u00f6nnen dann in anderen Systemen ausgewertet und visualisiert werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>In diesem einfachen Beispiel sieht man, wie man Smart-Home-Daten der Steckdosen <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-200\/\" target=\"_blank\" rel=\"noreferrer noopener\">Fritz!DECT 200<\/a> oder <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">Frit<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">z!<\/a><a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\">DECT 210<\/a> aus einer FRITZ!-Box der Firma <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a> abfragen und sich die Daten in einer MySQL-Datenbank zur weiteren Verwendung speichern kann. Sicherlich l\u00e4sst sich dieses Prinzip auch auf Smart-Home-Ger\u00e4te anderer Hersteller anwenden, sofern deren Schnittstellen hinreichend offen und beschrieben sind.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quellenangaben<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[<a href=\"https:\/\/raspberrypiandstuff.wordpress.com\/2017\/08\/03\/reading-the-temperature-from-fritzdect-devices\/\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a>] = <a href=\"https:\/\/raspberrypiandstuff.wordpress.com\/2017\/08\/03\/reading-the-temperature-from-fritzdect-devices\/\" target=\"_blank\" rel=\"noreferrer noopener\">Reading the temperature from FRITZ!DECT devices \u2013 Raspberry Pi and Stuff (wordpress.com)<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/avm.de\/fileadmin\/user_upload\/Global\/Service\/Schnittstellen\/AVM_Technical_Note_-_Session_ID.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">2<\/a>] = <a href=\"https:\/\/avm.de\/fileadmin\/user_upload\/Global\/Service\/Schnittstellen\/AVM_Technical_Note_-_Session_ID.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Session-IDs im FRITZ!Box Webinterface<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/avm.de\/fileadmin\/user_upload\/Global\/Service\/Schnittstellen\/AHA-HTTP-Interface.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">3<\/a>] = <a href=\"https:\/\/avm.de\/fileadmin\/user_upload\/Global\/Service\/Schnittstellen\/AHA-HTTP-Interface.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">AHA-HTTP-Interface<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/stackoverflow.com\/questions\/30074492\/what-is-the-difference-between-utf8mb4-and-utf8-charsets-in-mysql\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a>] = <a href=\"https:\/\/stackoverflow.com\/questions\/30074492\/what-is-the-difference-between-utf8mb4-and-utf8-charsets-in-mysql\" target=\"_blank\" rel=\"noreferrer noopener\">encoding &#8211; What is the difference between utf8mb4 and utf8 charsets in MySQL? &#8211; Stack Overflow<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Disclaimer<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der Programmcode und die Beispiele sind lediglich zu Demonstrationszwecken gedacht.<\/li>\n\n\n\n<li>Der Programmcode wurde nicht auf Geschwindigkeit optimiert (Es ist sowieso ein Bash-Skript, da darf man keine Wunder erwarten.).<\/li>\n\n\n\n<li>Der Programmcode wurde nicht unter dem Gesichtspunkt der Cybersicherheit geschrieben. F\u00fcr den Einsatz in Produktivumgebungen m\u00fcssen m\u00f6glicherweise Anpassungen vorgenommen werden.<\/li>\n\n\n\n<li>Der Programmcode wurde zwar getestet, kann aber dennoch Fehler enthalten.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel stelle ich ein bash-Skript vor, mit welchem man Smart-Home-Daten der Steckdosen FRITZ!DECT 200 oder FRITZ!DECT 210 aus einer FRITZ!Box der Firma AVM auslesen kann. Ein weiteres Skript bedient sich des ersten Skripts und speichert Daten in einer einfachen MySQL-Datenbank.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[103,105,106],"class_list":["post-1450","post","type-post","status-publish","format-standard","hentry","category-it","tag-avm","tag-fritzbox","tag-smart-home"],"_links":{"self":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1450"}],"version-history":[{"count":5,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1450\/revisions"}],"predecessor-version":[{"id":1463,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1450\/revisions\/1463"}],"wp:attachment":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}