{"id":1469,"date":"2018-11-09T10:16:44","date_gmt":"2018-11-09T09:16:44","guid":{"rendered":"http:\/\/schueler.ws\/?p=1469"},"modified":"2026-02-18T01:07:47","modified_gmt":"2026-02-18T00:07:47","slug":"arrinew-wlan-steckdose-in-eigene-homeautomatisierung-integrieren","status":"publish","type":"post","link":"https:\/\/schueler.ws\/en\/arrinew-wlan-steckdose-in-eigene-homeautomatisierung-integrieren\/","title":{"rendered":"Arrinew \/ SWA1 WiFi power switch"},"content":{"rendered":"<p>Wer seine Wohnung automatisiert, kommt ja fr\u00fcher oder sp\u00e4ter nicht an den preiswerten WLAN-Steckdosen vorbei mit denen man ferngesteuert Verbraucher ein- und ausschalten kann. F\u00fcr mein (momentan) auf HomeAssistant basierendes System habe ich zum Schalten der Pflanzenlampen geeignete Steckdosen gesucht, die sich mit einer selbstgeschriebenen Firmware bespielen lassen (oder einem der freien &#8220;Betriebssysteme&#8221; daf\u00fcr). Alle kaufbaren WLAN-Steckdosen verbinden sich normalerweise mit der Cloud (also einem Server) ihres Herstellers. Wenn man z.B. eine Lampe mit dieser Steckdose \u00fcbers Handy einschalten m\u00f6chte, kontaktiert die Handy-App den Hersteller-Server und \u00fcbermittelt diesen den Schaltbefehl. die WLAN-Steckdose ist st\u00e4ndig mit ihrem Hersteller -Server verbunden und bekommt dann von diesem den neuen Schaltzustand mitgeteilt. Das ist in der Einrichtung sehr einfach, weil man nichts weiter konfigurieren muss, aber dennoch eine \u00e4u\u00dferst dumme Idee. Zum einen geht nun wirklich niemanden etwas an, was ich gerade ein- und ausschalten will, zum anderen muss damit die Sache funktioniert, meine Internetverbindung stehen und der Herstellerserver verf\u00fcgbar sein. Bei beidem hat man erfahrungsgem\u00e4\u00df so seine H\u00e4nger. Gl\u00fccklicherweise basieren die meisten WLAN-Steckdosen auf den gleichen Chip und man kann diesen selbst programmieren, so dass diese nie ihren Herstellerserver kontaktieren (brauchen). Bei Amazon bin ich auf ein preiswertes Zweierset (unter 20,-) in guter mechanischer Qualit\u00e4t gesto\u00dfen, dass unter dem Namen Arrinew vertrieben wird. Die gleiche Dosen sind vermutlich unter mehreren Handelsnamen verf\u00fcgbar. Eindeutiger ist die Beschriftung auf der internen Leiterplatte: Model: SWA1, 101-SWA1351-361<\/p>\n<p>  <a href=\"https:\/\/corinnakopfonlyfans.blog\/\" target=\"_blank\">corinnakopf leaked<\/a><a href=\"http:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/arrinew_dose.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/arrinew_dose-1024x699.jpg\" alt=\"\" width=\"640\" height=\"437\" class=\"alignleft size-large wp-image-1475\" srcset=\"https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/arrinew_dose-1024x699.jpg 1024w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/arrinew_dose-150x102.jpg 150w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/arrinew_dose-300x205.jpg 300w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/arrinew_dose-768x524.jpg 768w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/arrinew_dose.jpg 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Die Dosen haben wirkliche eine sehr gute mechanische Qualit\u00e4t, auch die beiden Elektronikboards im Inneren machen den Eindruck eines wertigen Ger\u00e4tes. Unglaublich, was f\u00fcr 10,- verkauft wird. <\/p>\n<p>Wer jetzt hier weiterliest, sollte wissen was ein ESP8266 ist und schon mal was von MQTT geh\u00f6rt haben. (oder ansonsten nur wissen wollen, was der Ralf so treibt \ud83d\ude09 ) <\/p>\n<p>Ziel der ganzen Aktion ist es, die Firmware der Dose mit einer eigenen zu ersetzen und damit die Cloud des Herstellers loszuwerden. Betreibt man seinen eigenen Heimautomation Server (z.B. auf einem sehr billigen und stromsparenden Raspi), ist man auch ohne eine Fremdcloudanbindung f\u00fcr alles ger\u00fcstet. F\u00fcr jegliche selbstprogrammierte Firmware in diesem Bereich bietet sich eine Anbindung  \u00fcber das universelle MQTT-Protokoll an, dass man in alle (freie) Heimautomation-Systeme einbinden kann. Man muss dazu also die Firmware der Steckdose durch eine andere ersetzen. Es gibt hierf\u00fcr eine Reihe fertige universelle Systeme (Takoma, EasyESP &#8230;) man kann aber mit der Arduino-Entwicklungsumgebung auch eine eigene Firmware erstellen, was schwieriger klingt, als es wirklich ist. Um nicht mit den fertigen universellen Systemen k\u00e4mpfen zu m\u00fcssen und die Interna besser zu verstehen, habe ich mich f\u00fcr den zweiten Weg entschieden, zumal <a href=\"https:\/\/majenko.co.uk\/blog\/hacking-swa1-smart-wifi-power-switch\" rel=\"noopener\" target=\"_blank\">hier<\/a> bereits alles soweit vorbereitet ist.<\/p>\n<p><a href=\"http:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/dose_offen.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/dose_offen-1024x817.jpg\" alt=\"\" width=\"640\" height=\"511\" class=\"alignleft size-large wp-image-1476\" srcset=\"https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/dose_offen-1024x817.jpg 1024w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/dose_offen-150x120.jpg 150w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/dose_offen-300x240.jpg 300w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/dose_offen-768x613.jpg 768w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/dose_offen.jpg 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Die Arrinew-Dosen sind f\u00fcr die Programmierung insoweit vorger\u00fcstet, dass die Programmierkontakte gut herausgef\u00fchrt sind. Aber leider sind sie nicht beschriftet. Da fangen die Probleme an, der ESP-Chip ist mit einem Blechdeckelchen gekapselt und man kann so die Pins nicht nachverfolgen. Ich bin aber \u00fcber den Leiterplattenaufdruck<a href=\"https:\/\/majenko.co.uk\/blog\/hacking-swa1-smart-wifi-power-switch\" rel=\"noopener\" target=\"_blank\"> hier<\/a> f\u00fcndig geworden, da hat jemand sich schon einmal die M\u00fche gemacht und alles herausbekommen. <\/p>\n<p><a href=\"http:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/pins.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/pins-822x1024.jpg\" alt=\"\" width=\"640\" height=\"797\" class=\"alignleft size-large wp-image-1477\" srcset=\"https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/pins-822x1024.jpg 822w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/pins-120x150.jpg 120w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/pins-241x300.jpg 241w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/pins-768x957.jpg 768w, https:\/\/schueler.ws\/wp-content\/uploads\/2018\/10\/pins.jpg 1560w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Interessant ist zudem, dass an einem unbest\u00fcckten Pin von CON1 ein freier GPIO anliegt (GPIO-14). Das schreit gerade zu danach, verwendet zu werden. Da man nie genug Temperatursensoren im Haus verteilt haben kann, habe ich also hier einen digitalen One-Wire Temperatursensor DS18B20 angeschlossen. Damit besch\u00e4ftigen wir uns aber im zweiten Teil.<\/p>\n<p>Das Programm ist auch von <a href=\"https:\/\/majenko.co.uk\/blog\/hacking-swa1-smart-wifi-power-switch\" rel=\"noopener\" target=\"_blank\">Matt<\/a> geklaut und etwas erweitert worden und sieht dann so aus:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ Flash mode: DOUT\r\n\/\/ Flash Frequency: 40MHz\r\n\/\/ Flash Size: 1MB (512kB SPIFFS)\r\n\/\/ Reset method: None\r\n\/\/ Crystal Frequency: 26MHz\r\n\/\/ CPU frequency: 160MHz\r\n\/\/ Upload speed: 921600\r\n\r\n\/\/ Button: GPIO13\r\n\/\/ Blue LED: GPIO4\r\n\/\/ Red LED + Relay: GPIO5\r\n\/\/ Extra Pin: GPIO14, used foor one-wire temperaure sensor\r\n\r\n#include &lt;ESP8266WiFiMulti.h&gt;\r\n#include &lt;ArduinoOTA.h&gt;\r\n#include &lt;PubSubClient.h&gt;\r\n#include &lt;DebouncedInput.h&gt;\r\n#include &lt;OneWire.h&gt;\r\n#include &lt;DallasTemperature.h&gt;\r\n\r\n\r\nESP8266WiFiMulti wifiMulti;\r\nWiFiClient espClient;\r\nPubSubClient client(espClient);\r\n\r\n#define ONE_WIRE_BUS 14  \/\/ DS18B20 pin\r\nOneWire oneWire(ONE_WIRE_BUS);\r\nDallasTemperature DS18B20(&amp;oneWire);\r\n\r\n\r\nbool powerState = false;\r\nunsigned long previousMillis=0;\r\n\r\n#define NAME &quot;name for OTA&quot;\r\n#define OTAPW &quot;password for OTA updates&quot;\r\n#define BROKERUSER &quot;MQTT broker user&quot;\r\n#define BROKERPASS &quot;MQTT broker password&quot;\r\n\r\n\/\/ define here your MQTT topics\r\n#define SUBTOPIC &quot;\/powerplugs\/switch02\/command&quot;\r\n#define PUBTOPIC &quot;\/powerplugs\/switch02\/status&quot;\r\n#define TEMPTOPIC &quot;\/powerplugs\/switch02\/temp&quot;\r\n\r\n#define POWERPIN 5\r\n#define BUTTONPIN 13\r\n#define LEDPIN 4\r\n#define TEMP_INTERVALL 10000  \/\/ temperature is measured every 10s\r\n\r\nDebouncedInput button(BUTTONPIN, 10, true);\r\n\r\nvoid callback(char *topic, byte *payload, unsigned int length) {\r\n    if (!strcmp(topic, SUBTOPIC)) {\r\n        if (!strncmp((char *)payload, &quot;on&quot;, length)) {\r\n            digitalWrite(POWERPIN, HIGH);\r\n            powerState = true;\r\n            client.publish(PUBTOPIC, &quot;on&quot;, true);\r\n        } else if (!strncmp((char *)payload, &quot;off&quot;, length)) {\r\n            digitalWrite(POWERPIN, LOW);\r\n            powerState = false;\r\n            client.publish(PUBTOPIC, &quot;off&quot;, true);\r\n        }\r\n    }\r\n}\r\n\r\nvoid setup() {\r\n    button.begin();\r\n\r\n    WiFi.mode(WIFI_STA);\r\n\r\n    pinMode(POWERPIN, OUTPUT);\r\n    pinMode(LEDPIN, OUTPUT);\r\n    digitalWrite(POWERPIN, LOW);\r\n    digitalWrite(LEDPIN, LOW);\r\n\r\n    client.setServer(&quot;IP of your MQTT broker&quot;, 1883);\r\n    client.setCallback(callback);\r\n\r\n    \/\/ Add more of these for access to more APs.\r\n    wifiMulti.addAP(&quot;WiFi name&quot;, &quot;WiFi password&quot;);\r\n\r\n    ArduinoOTA.setHostname(NAME);\r\n    ArduinoOTA.setPassword(OTAPW);\r\n    ArduinoOTA.begin();\r\n\r\n    DS18B20.begin();\r\n}\r\n\r\nvoid loop() \r\n{\r\n    static uint32_t ts = millis();\r\n    ArduinoOTA.handle();\r\n    client.loop();\r\n\r\n    if (wifiMulti.run() != WL_CONNECTED) {\r\n        delay(100);\r\n    } else {\r\n        if (!client.connected()) {\r\n            delay(100);\r\n            if (client.connect(NAME, BROKERUSER, BROKERPASS)) {\r\n                client.subscribe(SUBTOPIC);\r\n            }\r\n        } else {\r\n            if (millis() - ts &gt;= 5000) {\r\n                ts = millis();\r\n                client.publish(PUBTOPIC, powerState ? &quot;on&quot; : &quot;off&quot;, true);\r\n            }\r\n        }\r\n    }\r\n\r\n    if (button.changedTo(LOW)) {\r\n        powerState = !powerState;\r\n        digitalWrite(POWERPIN, powerState);\r\n        if (client.connected()) {\r\n            client.publish(PUBTOPIC, powerState ? &quot;on&quot; : &quot;off&quot;, true);\r\n        }\r\n    }\r\n\r\n    digitalWrite(LEDPIN, !client.connected());\r\n\r\n  unsigned long currentMillis = millis();\r\n \r\n  \/\/ if you don't use the temperature sensor, comment out the following block\r\n  if(client.connected() &amp;&amp; (currentMillis - previousMillis) &gt; TEMP_INTERVALL){\r\n    char h&#x5B;20];\r\n    float temp;\r\n    DS18B20.requestTemperatures(); \r\n    temp = DS18B20.getTempCByIndex(0);\r\n    sprintf(h,&quot;%.1f&quot;,temp);\r\n    client.publish(TEMPTOPIC,h,true);\r\n    previousMillis=currentMillis;\r\n  }\r\n\r\n}\r\n\r\n<\/pre>\n<p>Compilieren und programmieren kann man das mit der Arduino-IDE. Im Netz gibt es dazu viele Anleitungen. Dank der verwendeten Bibliotheken ist das Ganze recht kurz und \u00fcbersichtlich.<\/p>\n<p>Man muss nat\u00fcrlich vorher den Code noch individualisieren (WiFi Zugangsdaten, MQTT-Server und -topics).<\/p>\n<p>Folgende Sachen sind mir aufgefallen:<\/p>\n<ul>\n<li> Es gibt eine blaue und eine rote LED, die man durch den transparenten Taster sieht. Die blaue leuchtet, wenn die Verbindung zum MQTT-Broker steht (WLAN funktionier und der MQTT-Broker l\u00e4uft und ist erreichbar). Das ist nebenbei auch ein guter Indikator, dass die eigene Homeautomation l\u00e4uft. Die andere LED ist rot und leuchtet, wenn die Dose eingeschaltet ist.\n<li> Die Arduino-Netzwerkbibliothek hat offensichtlich Probleme, lokale IP-Namen aus der Fritzbox aufzul\u00f6sen. Ich musste die IP-Adresse des MQTT-Brokers eintragen.<\/li>\n<li> Der WiFi-Name ist case sensitiv<\/li>\n<li> Die Dose braucht als payload zum Schalten &#8220;on&#8221; und &#8220;off&#8221;, Das kann man aber auch im Quellcode \u00e4ndern.\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Wer seine Wohnung automatisiert, kommt ja fr\u00fcher oder sp\u00e4ter nicht an den preiswerten WLAN-Steckdosen vorbei mit denen man ferngesteuert Verbraucher ein- und ausschalten kann. F\u00fcr mein (momentan) auf HomeAssistant basierendes System habe ich zum Schalten der Pflanzenlampen geeignete Steckdosen gesucht, &hellip; <a href=\"https:\/\/schueler.ws\/en\/arrinew-wlan-steckdose-in-eigene-homeautomatisierung-integrieren\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":1475,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","ngg_post_thumbnail":0,"footnotes":""},"categories":[85],"tags":[86,88,87],"class_list":["post-1469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-home-automation","tag-arrinew","tag-wifi-powerplug","tag-wlan-steckdose"],"_links":{"self":[{"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/posts\/1469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/comments?post=1469"}],"version-history":[{"count":0,"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/posts\/1469\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/media\/1475"}],"wp:attachment":[{"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/media?parent=1469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/categories?post=1469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/schueler.ws\/en\/wp-json\/wp\/v2\/tags?post=1469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}