Archiv der Kategorie: Allgemein

ESP-12, ESP8266-12 / 12E programmieren und mit der Arduino IDE nutzen

Über den ESP8266 Mikrocontroller hatte ich schon hier berichtet. Mittlerweile gibt es weitere Boards und Varianten auf dem Markt. Besonders interessant ist die Variante ESP8266-12 oder 12E oder auch ESP-12 genannt. Die Boards sind für unter 3€ auf ebay zu bekommen, wenn man direkt aus China bestellt.
1_esp8266_12
Der Vorteil der ESP-12 Variante ist, dass alle Pins herausgeführt werden. Man hat dann bis zu 11 GPIOs und den ADC Pin zur Verfügung. Zu diesem Board gibt es auch schon einige Tipps im Netz. In diesem Beitrag hier möchte ich zeigen, wie man ein Breakout Board für den ESP-12 selbst bauen kann, einen Programmieradapter anfertigt, die Arduino IDE nutzt und die Flashgröße ausliest.

Das Foto des ESP-12 sieht allerdings schöner aus als die Realität. Der Pinabstand der ESP-12 Platine beträgt nämlich nur 2mm. Der normale Rasterabstand ist jedoch 2.54mm. Man kann sogenannte ESP Breakout Boards kaufen oder sich ein solches Breakout Board aus Lochplatine selbst bauen, um den Pinabstand auf das Normalmaß umzusetzen. Die kommerziellen Breakout Boards adaptieren auf eine Breite von 10 „Normpunkten“. Meine Variante kommt mit 9 Punkten aus. Man kann natürlich auch einfach ein Reihe Lötpunkte mehr nehmen.

Zunächst muss die Rückseite es ESP-12 mit etwas Isolierband abgedeckt werden. Diese Seite des Boards wird mit der Seite mit den Lötpunkten unseres Breakout Boards in Kontakt kommen.
2_esp12_backiso
Danach baut man mit Pinleisten die Basisplatine auf. Die hinteren 6 Pins sollte man 90 Grad abwinkeln (oder weglassen), wenn man das Board auf einem Breadboard verwenden will.
3_esp12_breakout
Danach verbindet man die Pins der Pinleisten mit den Anschlüssen des ESP-12. Man kann dazu verzinnten Draht nehmen oder auch die abgeschnittete Drähte von Widerständen etc.
5_esp12_breakout
Fertig ist das Breakout Board – jetzt passt es auf ein Breadboard oder in andere Schaltungen mit Normpinabstand. Die Pinbelegung entspricht dem Aufdruck auf der Rückseite (siehe oben).

Zwei Punkte sind bei dem Board zu beachten:
1. Wenn man den ESP-12 verwenden will, muss man GPIO15 beim Start auf GND legen. GPIO15 auf Vcc (bzw offen) konfiguriert eine andere Bootoption, die normalerweise nicht benutzt wird. Wer mag und den GPIO15 nicht braucht kann den Pin direkt auf dem Breakout Board auf GND legen. Die Pins liegen nebeneinander.
2. Die Anschlussbelegung der hinteren Reihe des ESP-12 variiert je nach gelieferter Variante. Dort solltet Ihr also besser zweimal hinschauen, wenn Ihr Schaltungsvorschläge im Netz findet.

Nun muss das Board noch programmiert werden. Eine Anleitung und ein Programmierboard für den ESP8266-01 hatte ich hier beschrieben. Ich habe mit eine Adapterplatine gebaut, die es mir erlaubt, den ESP-12 in diesem Programmierboard zu betreiben. Das fertige Ergebnis ist ein nettes kleines Türmchen. Damit kann der ESP-12 wie der normale ESP8266-01 mit der Arduino IDE genutzt werden.
6_esp12_fulltower
Ich habe auf dem Adapter eine Reihe doppelt ausgeführt, so dass sowohl die 9er als auch die 10er Breite passen. Die Pins sind bei dem Adapterboard einfach 1:1 durchverbunden. Der Adapter legt allerdings GPIO15 auf GND, da dies bei dem ESP8266-01 schon auf dem Board selbst auf GND gelegt ist. So sieht mein Adapter aus – ich habe es nicht auf Schönheit angelegt. Aufgrund von Materialknappheit habe ich nicht für alle Pins einen Sockel montiert 🙂
7_esp12_proadapt
Hier der Schaltplan des Adapters, der auch nochmal das Pinout des ESP-12 zeigt. Dazu ist ein ESP8266-01 im Vergleich dargestellt. Das Pinout des adaptierten ESP-12 passt in dieser Orientierung zum ESP8266-01:
ESP-12_Progadapter
Auf dem Board ist die Lage der Antenne auf einem ESP-12 markiert, um eine Verpolung zu verhindern. Auf dem Foto ist auf Vorder- und Rückseite ein identischer Pin markiert. Da man den Adapter auch falsch herum auf die Programmierplatine setzen kann, habe ich hier nochmal die Ausrichtung im Vergleich zum normalen ESP8266-01 fotografiert.
8_esp12_orient
Damit die Steckerei in der Praxis nicht schief geht, habe ich mir die Lage der Antenne des ESP-12 auf der Adapterplatine markiert. Weiterhin habe ich auf dem Adapter als auch auf der Programmierplatine einen Punkt markiert, so dass sich die richtige Lage leicht erkennen kann.

Last but not least hier ein kurzes Codebeispiel, wie man bei dem ESP die Größe des Flash Speichers ausliest:

// we need to include these to be able to use the spi_flash_get_id() function
extern "C" {
#include "c_types.h"
#include "ets_sys.h"
#include "os_type.h"
#include "osapi.h"
#include "spi_flash.h"
}

size_t fs_size()
{
// returns the flash chip's size, in BYTES
uint32_t id = spi_flash_get_id();
uint8_t mfgr_id = id & 0xff;
uint8_t type_id = (id >> 8) & 0xff; // not relevant for size calculation
uint8_t size_id = (id >> 16) & 0xff; // lucky for us, WinBond ID's their chips as a form that lets us calculate the size
return 1 << size_id; } void setup() { Serial.begin(9600); Serial.print("Flash Size = "); Serial.println(fs_size()); } void loop() { }

Der ESP-12 kommt mit 4MB Flash Speicher (der -01 mit 512kB). Stellt man die Flashgröße in den Arduino IDE Boardoptionen auf 512kB ein, läuft offenbar jeder ESP problemlos. Die Größe des Flash Speichers kann man aber passend erhöhen, wenn mehr zur Verfügung steht.

Telnet2Serial – Telnet zu RS232/Seriell Brücke (Remote Console) mit dem ESP8266 Microcontroller

Wie bringt man eigentlich ein Arduino Projekt oder irgendein Gerät mit seriellem Interface möglicht einfach ins WLAN? – Diese Frage ging mit durch den Kopf, als ich über eine Verbesserung meines Codeschlossprojekts nachdachte. Dabei bin ich auf die Idee gekommen eine Telnet zu Seriell Brücke mit dem ESP8266 zu bauen.

Im Netz habe ich einige Hinweise und Codes gefunden, die einen Ansatz bildeten, aber eine komplette Lösung. Die hier vorgestellte Lösung ist für die Arduino IDE geeignet, wenn man sie für den ESP8266 Mikrocontroller erweitert.

Als Adapterplatine kann man diese Programmierplatine für den ESP8266 verwenden (klick – die Taster kann man natürlich weglassen).
esp8266 progboard
Der Anschluss ist hier analog zu den typischen USB/Seriell Adaptern gestaltet: Pin2 an RX, Pin3 an TX, Pin4 an eine Spannungsversorgung (5-12V), Pin5 an Masse.

Man muss mit den Pegeln an seriellen Schnittstellen vorsichtig sein. Der ESP8266 läuft mit 3,3V. Die Programmierplatine ist für den Anschluss an einen Arduino geeignet und wandelt den Pegel per Spannungsteiler von 5V auf 3,3V. Die Schaltung passt auch auf die meisten Logikboards. Generell können serielle Schnittstellen das Signal mit bis zu +-12V darstellen. In diesem Fall muss man zu einem aufwändigeren Pegelwandler greifen.

Der Code erlaubt bis zu 5 parallele Klienten. Diese Klienten können alle parallel lesend und schreibend zugreifen. Der Adapter trägt allerdings keine Sorge, dass die Klienten nicht parallel schreiben und dann sinnlose Eingaben entstehen. Dafür müßt ihr in der jeweiligen Anwendung selbst sorgen (oder die Anzahl die Klienten auf 1 runtersetzen).

Im Code können am Anfang einige Einstellungen konfiguiert werden; u.a. welche Geschwindigkeit der seriellen Schnittstelle oder ob der Adapter als Accesspoint laufen soll oder sich in ein bestehendes WLAN verbinden soll.
// max number of clients that can connect
#define MAX_NO_CLIENTS 5
const WiFiMode wifi_mode = WIFI_AP; // set WIFI_AP for access-point or WIFI_STA for WIFI client
const char* ssid = "T2S-Accesspoint"; // Name of AP (for WIFI_AP) or name of Wifi to connect to (for WIFI_STA)
const char* password = "12345678"; // set to "" for open access point w/o password
const int iSerialSpeed = 9600; // speed of the serial connection
const bool bSuppressLocalEcho = true; // shall local echo in telnet be suppressed (usually yes)

Die Einstellungen sollten weitestgehend selbsterklärend sein. Falls nicht, dann fragt gerne. Der Code versucht den Telnet Client so zu konfigurieren, dass Telnet keine lokalen Echos (Kopien) der Eingaben anzeigt. Das führt typischerweise dazu, dass jede Taste doppelt angezeigt wird. Dies erscheint aber nur so. Die Unterdrückung funktioniert nicht mit jedem Telnet Programm. Beim Windows Telnet Programm klappt es. Bei putty nicht; da kann man es aber in den Einstellungen konfigurieren.

Hier gibt es den Code: ESP_Telnet2Serial

Hier nun ein Beispiel bei der ich den ESP8266 als Telnet2Serial Brücke an einen Arduino angeschlossen habe (TX und RX); in diesem Beispiel habe ich auf dem Arduino das Codeschlossprogramm genommen.
Telnet2Serial

HTTP 1.1 Webserver für ESP8266 als Accesspoint

Ich hatte vor einiger Zeit ein Codebeispiel für einen stabilen HTTP 1.1 Webserver für den ESP8266 gepostet (klick). Dieser Code ist in der Arduino IDE verwendbar, wenn man diese mit dem Boardmanager für den ESP8266 erweitert (klick). Mit dem bestehenden Codebeispiel loggt sich der ESP8266 in ein bestehendes WLAN ein und bezieht von dort per DHCP eine IP Adresse.

In einigen Fragen/Kommentaren haben Leser ein Codebeispiel für einen Accesspoint gewünscht. Dabei loggt sich der ESP8266 nicht in ein bestehendes WLAN ein, sondern erzeugt einen eigenen Accesspoint. Nicht ganz sauber aber allgemeinverständlicher formuliert: Der ESP8266 macht sein eigenes WLAN mit eigenem Namen und man kann sich per PC, Tablet oder Mobiltelefon damit verbinden.

Der Code ist an dem bereits geposteten Beispiel orientiert. Die Codeänderungen sind:
1. Am Anfang wird nun nicht mehr die SSID und das Passwort des Ziel WLANs eingetragen, sondern die Werte für das vom ESP zu erzeugende WLAN.
2. Der Reconnect Counter entfällt – macht keinen Sinn.
3. Das WLAN wird mit dem Modus WIFI_AP erzeugt. ssid und Passwort werden per API übergeben.
4. Die Wifi Startroutine entfällt. Ebenso der Check, ob noch eine Verbindung zum WLAN besteht. Brauchen wir nicht mehr. Wir machen jetzt unser eigenes WLAN.
Geprüft habe ich den Code mit der ESP8266 Erweiterung mit SDK Version 1.20 auf einer Arduino IDE 1.6.5.

In dem Beispiel wird ein WLAN namens ESP-Accesspoint erzeugt. Das WLAN Passwort ist auf 12345678 eingestellt. Wenn man einen Windows PC oder ein Android Gerät verbindet, kann das einen Augenblick dauern. Dies liegt nicht am ESP oder am Beispielcode. Beide Betriebssysteme prüfen zunächst für einige Sekunden, ob das WLAN auf das Internet zugreifen kann. Das geht natürlich nicht, da der ESP in diesem Beispiel sein eigenes WLAN erzeugt und keinerlei Verbindung zum Internet hat.
Android reagiert darauf mit der Meldung „Internet event. nicht verfügbar“. Diese bitte mit OK bestätigen. Windows 10 zeigt in der Netzwerkanzeige an, dass es sich um eine eingeschränkte Netzwerkverbindung handelt.
WebServerAP_Networks
Wenn man dann in einem Browser http://192.168.4.1 eingibt, sollte die vom ESP erzeugte Webseite erscheinen.
WebServerAP
Im seriellen Monitor kann man die Ausgaben überprüfen, wenn man die Knöpfe auf der Seite klickt. GPIO2 kann auch geschaltet werden.
WebServerAP_Serial

Hier gibt es den Code: ESP_WebServerAP

Viel Erfolg!

P.S.: password = "" –> WLAN ist offen und ohne Passwort.

Windows 10 Update Erfahrungen – was tun wenn’s klemmt oder ewig dauert

Ich habe mittlerweile drei Rechner auf Windows 10 upgedated (2x von Win 7, 1x von Win 8.1). Die Erfahrungen und Problemchen habe ich hier kurz notiert.

Bei zwei Rechnern (Win 7 und 8.1) kam ganz normal das Windows 10 Updaten Icon mit dem man das Update reservieren konnte. Der Download hat auch automatisch gestartet und irgendwann meldete sich dann der Rechner und bot das Update an.

Wenn das Update nicht will:
Bei einem Win 7 Rechner kam jedoch weder das Icon noch sonst irgend ein Hinweis. Ich habe dann Anleitungen gefunden, wie man das Icon „erzwingen“ kann usw. Gebracht hat das alles aber nichts. Das Update sei reserviert, aber der Download hat nicht gestartet. Und auch die Anleitungen wie man dies angeblich erzwingen kann haben nichts gebracht.

Der entscheidende Tipp ist dann das Windows Media Creation Tool. Einfach danach googlen oder hier klicken:
http://www.microsoft.com/de-de/software-download/windows10

Ich habe die 64 Bit Version heruntergeladen, gestartet und los ging es. Das Tool bietet an, einen Datenträger zu erzeugen oder den Rechner upzudaten. Ich habe das Update des Rechners gewählt. Es werden nun ca. 2GB aus dem Internet heruntergeladen, was je nach Anschluss länger dauern kann. Genügend freier Plattenplatz muss natürlich verfügbar sein.

Das Update selbst – es dauert:
Man muss einige rechtliche Hinweise bestätigen und das Update startet.

Und hier direkt die Warnung: Das kann dauern! – Der modernste Rechner (i7 5500, 8GB RAM, SSHD) war nach ca. 6 Stunden wieder betriebsbereit. Ein älterer Rechner (i3 M370, 4GB RAM) brauchte ca. 9 Stunden.

Bevor Ihr das Update startet, empfehle ich den Virenscanner zu deaktivieren / deinstallieren. Während des Updates braucht der Rechner keine Netzwerkverbindung, so dass kein Risiko besteht. Offenbar gibt es aber einige Virenscanner, die das Update extrem in die Länge ziehen (Avira scheint dafür ein Kandidat).

Während des Update Vorgangs kam es bei allen Rechnern zu einem oder mehrern scheinbaren Stillständen des Updates. Microsoft hat die Fortschrittsanzeige nicht sehr gut gelöst:
– mehrfach war der Bildschirm mehrere Minuten schwarz
– das Update stand bei mit bei 83% und 91% teilweise bis zu 30 Minuten ohne Fortschritt (und mit marginaler Plattenaktivität).
Win10-Update91
–> Einfach warten.

Beim Ersten Start war alles lahm:
Irgendwann sind dann die 100% erreicht und der Rechner startet zum ersten mal mit Windows 10. Auf allen drei Rechnern aber nicht so, wie man sich das vorstellt. Jedes Mal war der Rechner nach dem Update extrem langsam. Die Startleiste funktionierte nicht. Es kamen teilweise Meldungen von nicht geladenen Audiotreibern. Ich habe bei allen Rechnern ca. 30 Minuten gewartet.

Neustart erzwingen – und alles wird gut:
und dann Alt+F4 gedrückt, bis mir der Dialog zum Herunterfahren angeboten wurde. Also Neustart …

Einer der Rechner stand beim ersten Herunterfahren noch einige Minuten bei dieser Meldung:
Win10_Final

Und nach dem Neustart fuhren alle 3 Rechner problemlos hoch. Performance o.k.
So ganz ideal ist das Update bei allen drei Rechnern nicht gelaufen – aber am Ende war dann doch alles gut.

Defekter Luftdrucksensor in einer Fineoffset WH3080 Wetterstation

Bei meiner Fineoffset WH3080 Wetterstation hat vor kurzem der Luftdrucksensor den Geist aufgegeben. Im Netz konnte ich einige Berichte über defekte Luftdrucksensoren bei Fineoffset Wetterstationen finden. Es gibt aber keine Informationen über Reparaturmöglichkeiten. Ich konnte meine Station noch auf Garantie tauschen; an dieser Stelle geht ein Danke an den ebay Händler new-mobile-media.

Wegen des Garantietauschs habe ich die Reparatur nicht ausgeführt. Ich denke aber, dass eine Reparatur mit den zusammengetragenen Infos für 10€ machbar ist. Über einen entsprechenden Kommentar würde ich mich freuen, falls jemand erfolgreich ist.

Das Symptom:
Der Luftdruck steht festgenagelt auf 1013,2hPa (also Normdruck) bei relativer Druckanzeige und bei 0.0hPa bei absoluter Druckanzeige. Batteriewechsel und ein Zurücksetzen auf Werkseinstellungen bringen nichts.
wh3080_pressure_defective

Reparaturvorschlag:
Der Luftdrucksensor sitzt in der Hauptkonsole der Wetterstation. Um diese zu demontieren, muss man zunächst den Fuß entfernen und die Batterien entnehmen. Dann sind die 8 Schrauben auf der Rückseite zu entfernen.
wh3080_unmount
Danach kann man die Rückseite der Wetterstation entfernen. Die Lage des Drucksensors auf der Platine ist hier markiert:
wh3080_location_pressure
Die Platine kann man entfernen, wenn man die 10 silbernen Schrauben entfernt. Danach muss man vorsichtig das LCD Display abnehmen. Die stegartigen Gummikontakte, welche die Platine und das Display verbinden, bleiben dabei mit dem Display verbunden. Der Kontakt wird beim Zusammenbau wieder hergestellt; die silbernen Schrauben sorgen für ausreichenden Druck.

Die Lage des Drucksensors von der anderen Seite ist in den folgenden Fotos erkennbar.
wh3080_location_pressure2
wh3080_location_pressure3
Nun stellt sich die Frage, welcher Drucksensor hier verbaut ist. Wie schon geschrieben, ist dazu keine Information im Internet zu finden. Im Vergleich mit vielen Produktdatenblättern, Anschlussbelegungen und Fotos von Drucksensoren, konnte ich den passenden Sensor aber finden. Es handelt sich um einen Hoperf HP03S (siehe hier).
Im Vergleich des Produktfotos mit den Platinenfotos erkennt man, dass es sich um den gleichen Sensor und um die identische Adapterplatine handelt.
HP03S
Der HP03S ist für ca. 10€ im Netz verfügbar. Ein Austausch erfordert einen Lötkolben; es sollte aber nicht sehr schwierig sein. Da der Sensor seine Kalibierfaktoren ab Werk „kennt“ und per I2C übermittelt, sollte ein Sensortausch ohne weitere Kalibrierung der Wetterstation möglich sein.

Ich hoffe, dass die Information weiterhilft und jemand den Reparaturansatz bestätigen kann.

Fehlerhafte Einträge in der weewx Datenbank beheben

Ich betreibe eine kleine Wetterstation, die mittels weewx Webseiten für meine Internetseite erzeugt (siehe https://thesen.eu/wetter; Näheres zum Aufbau hier). Aufgrund eines Garantiefalles musste ich die Basisstation austauschen. Als ich die neue Basisstation angeschlossen habe, sind plötzlich einige sinnlose Einträge in der weewx Datenbank aufgetaucht. Als Resultat waren dann alle Grafiken völlig sinnlos skaliert. Da weewx auch Wochen, Monats und Jahresübersichten erzeugt, ist das ärgerlich. Die fehlerhaften Einträge machen diese Grafiken dauerhaft kaputt:
weewx-error
Im folgenden habe ich zusammengeschrieben, wie man diese Einträge lokalisieren und löschen kann.

weewx nutzt eine SQL Dankenbank, um die Daten in einer Datenbank abzulegen. Die Datenbankdateien haben die Endung sdb und liegen im Unterverzeichnis archive. Dabei ist weewx.sdb die Datenbank der Meßwerte. Die Datei stats.sdb wird daraus erzeugt und enthält die Statistiken.

Um die Datenbankeinträge sehen und manipulieren zu können braucht man ein Tool. Ich habe sqlite3 genommen. Wenn ihr das noch nicht auf dem Pi installiert habt, dann geht das sehr einfach und für wenige hundert kB mittels folgender Kommandos:
sudo apt-get update
sudo apt-get install sqlite3

Danach geht man mit dem Tool auf die weewx Datenbank
sudo sqlite3 ./archive/weewx.sdb
Man kann dann nun auf die Datenbank zugreifen (und sie auch kaputt machen!). Je nach dem ist es sicherer ein Backup der Datenbankdateien weewx.sdb und stats.sdb anzulegen. Ohne „sudo“ kann man auch read-only auf die Datenbank zugreifen und sich so erst einmal umsehen.

Mit dem Kommando .schema kann man sich erst einmal die Struktur der Datenbank ansehen. Bei weewx enthält die Datenbank eine Tabelle namens archive. Die Namen der Spalten sind mit .schema erkennbar. Bei mir erscheint:
sqlite> .schema
CREATE TABLE archive (`dateTime` INTEGER NOT NULL UNIQUE PRIMARY KEY, `usUnits` INTEGER NOT NULL, `interval` INTEGER NOT NULL, `barometer` REAL, `pressure` REAL, `altimeter` REAL, `inTemp` REAL, `outTemp` REAL, `inHumidity` REAL, `outHumidity` REAL, `windSpeed` REAL, `windDir` REAL, `windGust` REAL, `windGustDir` REAL, `rainRate` REAL, `rain` REAL, `dewpoint` REAL, `windchill` REAL, `heatindex` REAL, `ET` REAL, `radiation` REAL, `UV` REAL, `extraTemp1` REAL, `extraTemp2` REAL, `extraTemp3` REAL, `soilTemp1` REAL, `soilTemp2` REAL, `soilTemp3` REAL, `soilTemp4` REAL, `leafTemp1` REAL, `leafTemp2` REAL, `extraHumid1` REAL, `extraHumid2` REAL, `soilMoist1` REAL, `soilMoist2` REAL, `soilMoist3` REAL, `soilMoist4` REAL, `leafWet1` REAL, `leafWet2` REAL, `rxCheckPercent` REAL, `txBatteryStatus` REAL, `consBatteryVoltage` REAL, `hail` REAL, `hailRate` REAL, `heatingTemp` REAL, `heatingVoltage` REAL, `supplyVoltage` REAL, `referenceVoltage` REAL, `windBatteryStatus` REAL, `rainBatteryStatus` REAL, `outTempBatteryStatus` REAL, `inTempBatteryStatus` REAL);

An erster Stelle steht also Zeit/Datum in Unix Konvention. Eintrag 4 in jeder Datenzeile ist z.B. der Druck (in inHg; die Einheiten sind immer amerikanisch/imperial).

Jetzt muss man die defekten Einträge finden. Das kann man z.B. tun, in dem man nach sinnlosen Werten sucht. Hat man beispielsweise sinnlos hohe Windböen, so kann man mit folgendem Kommando nach Böengeschwindigkeiten über 100 Meilen/h suchen:
SELECT * FROM archive WHERE windGust>100;

Kann man die Uhrzeit der fehlerhaften Einträge einschätzen, so kann man die Einträge aus dem Zeitraum anzeigen lassen. Dazu muss man zunächst Datum und Uhrzeit in Unix Epochen umrechnen. Das geht beispielsweise hier: http://www.epochconverter.com/

Danach kann man mit folgendem Kommando die Einträge aus einem entsprechend eingeschränkten Zeitraum anzeigen (man muss natürlich die Zeiten auf die eigenen Werte anpassen):
SELECT * FROM archive WHERE dateTime>1437177600 AND dateTime<1437224400;

Bei mir kam dabei folgendes heraus:
1437209238|1|0||59.7282929710573|61.6972020568766|32.0||0.0|5.0|2.2369362912|877.5|715.819613184|877.5|||-206451.55032121|-2833.24|-2833.24|||||||||||||||||||||||||||||||||
1437209958|1|12||3.78027170702894|4.04987302083283|32.0|32.0||0.0|10.28990693952|1800.0|42.5017895328|1800.0||||23.5809421233387|32.0||||32.0|19.0040000022138||||||||||||||||||||||||||||
1437219877|1|5|30.2070907698466|29.1966922622564|30.257313925167|79.16|88.16|60.0|39.0|4.4738725824|225.0|6.93450250272|225.0|||60.040369125152|88.16|88.16||397.95382|0.0|88.16|88.9300974826728||||||||||||||||||||||||||||
<<...snip...>>

Laut dieser Tabelle hatten wir als 32 Fahrenheit (0 Grad Celsius) am 18.07. in unserer Wohnung. EBenso falsch ist der folgende Eintrag. Diese beiden Einträge können wir folgt gelöscht werden:
DELETE FROM archive WHERE dateTime=1437209238;
DELETE FROM archive WHERE dateTime=1437209958;

Das sqlite3 Tool kann man mit dem Kommando .quit verlassen. Ich habe nun noch das mitgelieferte Script zum check der Datenbank laufen lassen. Vorher habe ich weewx gestoppt:
sudo /etc/init.d/weewx stop
./bin/wee_config_database --string-check --fix ./weewx.conf

Nun muss man noch die stats.sbd löschen; ich habe die Datei umbenannt, um ein Backup zu haben:
cd archive
sudo mv stats.sdb stats.sdb.backup

Danach habe ich die Pi mit weewx neu gestartet.
sudo reboot

Nach dem Neustart erzeugt weewx die stats.sdb neu. Das hat bei mir bei fast 1 Jahr Daten ca. 10 Minuten gedauert. Weitere 5 Minuten später waren Pi und Wetterstation wieder in Sync. Die Tabellen mit den min/max Werten stimmen nun wieder. Die Wochen, Monats und Jahres-Übersichtsbilder werden in den nächsten 24h neu erzeugt.

Sommerspaß: Elektrische Fliegenklatschen tunen :-)

Es ist Sommer und warm. Die Mücken sind zurück. Was hat das mit einem Elektronik Bastelblog zu tun? – Ich habe ein wenig an meiner elektischen Fliegenklatsche herumgetunt.
Statt mit 3V läuft sie jetzt mit einem 9V Block und es knallt und blitzt, wenn man eine Mücke erwischt. Und mit einem Transistor-Upgrade ist das jetzt auch stabil.
Fliegenklatsche

Vorneweg eine Warnung:
Durch die Manipulation wird die Ausgangsspannung und Leistung deutlich erhöht. Das kann gefährlich sein. Ich rate deshalb vom Nachbau ab, wenn nicht die notwendige Sachkenntnis vorliegt. Es wird auch keine Haftung übernommen, wenn ihr diese Warnung ignoriert.

Es gibt so einige Hinweise im Netz, dass man in diese Art von Fliegenklatschen statt 2x 1,5V Mignon (AA) Batterien einen 9V Block einsetzen kann. Ich habe das mit einer Fliegenklatsche der Marke Dinomark probiert. Diese Fliegenklatsche wird offenbar auch unter dem Namen FloraSun verkauft.

Der Umbau auf 9 Volt geht auch relativ einfach. Im Batteriefach werden dazu die Batteriekontakte am hinteren Ende entfernt. Diese einfach mit einer Zange herausziehen. Bei den vorderen Kontakten den Kontakt des Pluspols so wie im Foto gezeigt verbiegen.
Batteriefach_Umbau
Und schon passt ein 9V Block perfekt.
9V-Block_eingebaut
Dieser Umbau funktioniert – aber nur ein paar wenige Male und dann geht nichts mehr. Auch das leichte Pfeifen der Fliegenklatsche ist nicht mehr zu hören. Also habe ich die Fliegenklatsche auseinandergebaut. Und siehe da: Der Kleinsignaltransistor war durch – da musste ich auch nicht mehr groß messen:
Transistor_tot
Also brauchen wir einen Transistor mit mehr Leistung. Da die Bezeichnung am Transistor nicht mehr erkennbar war, habe ich anhand der Schaltung auf NPN getippt. In der Grabbelkiste fand sich ein BD243C mit einer maximalen Kollektor/Emitter Spannung von 100V und einem maximalen Strom von 6A. Die typischen Kleinsignaltransistoren haben meistens eine maximale Spannung von ca. 20-30V. Für den Faktor 3 in der Batteriespannung sollte es also langen.

Nun haben die Kleinsignaltransistoren meistens die Pinbelegung Kollektor, Basis, Emitter. Der BD243C hat allerdings Basis, Kollektor, Emitter. Netterweise gibt es bei der von mir verwendeten Fliegenklatsche 4 Lötpads für den Transistor. Wie ich anhand des Layouts nachvollziehen konnte, muss man den BD243C um ein Lötpad verschoben einbauen (Basispin des BD243C also dahin wo vorher der mittlere Pin des Kleinsignaltransistors war).

Transistor_eingebaut
Kurzer Test: Fliegenklatsche hat wieder den leichten Pfeifton, wenn man die Taste drückt.

Wieder zusammenbauen, probieren: knallt & blitzt heftig.
Bisher läuft das Ding stabil  – hier im Test mit einer Pflanze. Ein Mücke habe ich nicht auf  ein Video bekommen, es klingt aber genauso 😉

WLAN Lufttemperatur und -feuchte Logger mit grafischer Darstellung für ESP8266

Im folgenden Projekt habe ich einen Sensor für Luftfeuchtigkeit und Temperatur mit einem ESP8266 zusammengebaut. Herausgekommen ist ein WLAN-basierter Temperatur und Feuchtesensor, der ein Logfunktion für 24 Stunden mitbringt und eine grafische Darstellung realisiert. Für die aktuelle Zeit ist eine Abfrage des NIST Zeitservers per NTP integriert. Es werden keine Cloud-Dienste verwendet. Alle Daten bleiben lokal.
TH_log_Screenshot_Main

Das Ziel des Projekts war weiterhin, eine grafische Darstellung zu realisieren ohne einen cloudbasierten Dienst wie thingspeak o.ä. zu nutzen. Die Daten bleiben komplett im lokalen Netz. Es muss auch nicht jeder Nutzer einen eignen Accounts o.ä. anlegen. Für die grafische Darstellung werden die Google Chart APIs verwendet. Damit lassen sich sehr effizient ansprechende Grafiken und Graphen erzeugen – obwohl man eine vergleichsweise kurze html Seite verwendet. Dieses Vorgehen habe ich bisher noch nicht für den ESP8266 gesehen – deshalb der explizite Hinweis darauf.
TH_Log_Screenshot_Chart

Selbst Nachbauen:
Ihr braucht nur einen ESP8266 und einen Temperatur und Luftfeuchtesensor AM2301 (auch als DHT21 bekannt). Beides gibt es für jeweils unter 3€ bei ebay aus China. Die Schaltung ist so trivial, dass ich sie erst gar nicht aufmale. Der GPIO2 des ESP8266 wird mit dem gelben Datenkabel des AM2301 verbunden. Rot geht an 3,3V, schwarz an Masse.
AM2301_Front AM2301_Back
Für die Programmierung des ESP8266 und die entsprechende Erweiterung der Arduino Entwicklungsumgebung für den ESP findet Ihr hier Hinweise (klick).

Den Sourcecode für den Temperatur und Feuchter Logger habe ich hier hinterlegt; inkl. verbesserter NTP Abfrage (11/2015): ESP_TH_Logger_V2
(erste Version hier, falls sie jemand sucht: ESP_TH_Logger)

In der ESP_TH_Logger.ino müsst Ihr noch den Namen Eures WIFIs und das Passwort eintragen. Das war es auch schon. Danach solltet Ihr nach ca. 20-30 Sekunden auf per Browser auf den ESP zugreifen können. Nach ca. 1. Minute sollte auch die erste Messung vorliegen. Einfach per Browser auf http://IP-DIE-DER-ESP-IM-NETZ-HAT (also z.B. http://192.168.178.41) zugreifen.

In der ESP_TH_Logger.ino kann man auch noch den Zeitraum einstellen, der geloggt werden soll. Der Code ist auf 24h eingestellt. Das RAM des ESP8266 erlaubt uns ca. 1800 Logeinträge zu halten. Es wird also alle ca. 50 Sekunden eine Messung durchgeführt und gespeichert. Wer den Zeitraum ändern möchte, muss den #define MEAS_SPAN_H suchen. Der Speicher wird rolierend adressiert, so dass immer die letzten 24h (oder was auch immer definiert ist) vorliegen.

Von der Hautpseite kommt man per Link auf die Unterseiten mit einer grafischen Darstellung des Temperatur- und Feuchteverklaufs (Bilder s.o.). Weiterhin ist eine tabellarischen Darstellung verfügbar.
TH_log_Screenshot_Table
Diese Unterseiten haben eine längere Ladezeit von ca. 10 Sekunden. Das liegt daran, dass bis zu 100kB übertragen werden müssen und der ESP8266 mit 10-20kB pro Sekunde nicht der schnellste Renner ist.

Ihr bekommt Fehlermeldungen beim Übersetzen oder die Zeit wird über NTP nicht erfasst? – Macht gegebenenfalls ein Update Eurer ESP/Arduino Erweiterung.

Ergänzung (09.06.2015):
Aufgrund eines Hinweises von Nick (siehe Kommentare) konnten wir Meßfehler nachweisen, wenn DHT11 oder DH21 (vermutlich auch DHT21) zu nahe am ESP8266 liegen. Vermutlich koppeln HF Felder des ESP8266 in den analogen Meßteil des DHT ein. Bei einem DHT21 konnte ich eine systematische Abweichtung von +1,5 Grad Celsius und -3% rel. Feuchte nachweisen. Eine Distanz von ca. 10cm scheint auszureichen, um das Problem zu vermeiden. Die Messwerte meines DHT21 stimmen dann mit den Werten meiner Wetterstation (WH3080) überein.

Der Code:
Der Code ist zwar lang aber an sich nicht kompliziert. Der AM2301 läuft über die Standard DHT Bibliothek, die man auch über die IDE herunterladen und einbinden kann (Adafruit DHT sensor library Version 1.0.0). Man muss nur einen Timingparameter (Parameter 3) passend einstellen. Die Routinen für NTP und die Erzeugung eines lesbaren Strings aus dem NTP Timestamp sind in den Dateien time_ntp.cpp/.h zu finden.
Wie schon erwähnt wird für die Darstellung der Grafiken die Google Chart API genutzt. Die Dokumentation von Google dazu ist sehr gut. Ich habe die Google Beispiele etwas angepasst und dann in den C++ Code eingebaut.

Dazu noch ein kleiner Tipp. Man muss längere html Code-Fragmente in C++ kompatible Strings verwandeln. Das kann man manuell machen; das ist aber fehleranfällig und nervig. Hier gibt es einen kleinen, aber feinen Online Konvertierungsdienst (Haken bei „split output into multiple lines“ wegnehmen):
http://tomeko.net/online_tools/cpp_text_escape.php?lang=en
Es gibt weiterhin eigentlich nur zu beachten, dass der cpp-Präprozessor bei zu langen Zeilen irgendwann streikt und Fehler wirft. Dann muss man die Zeile eben etwas kürzen und auf mehrere Zeilen verteilen.

Weiterhin ist bei der Programmierung zu beachten, dass man nicht beliebig lange Strings zusammenbauen kann. Das RAM des ESP8266 im im Vergleich zu einem Arduino zwar groß (ca. 30kB frei), aber für eine größere Website viel zu klein. Deshalb werden die langen Tabellen für die Unterseiten in 1kB Blöcken übertragen. Auf diese Weise muss die Website nie vollständig im RAM des ESP8266 liegen.
Dieser Streaming-„Trick“ hat aber einen Nachteil. Es soll ein gültiger HTTP 1.1 Header erzeugt werden. Dieser Header muss die Länge der folgenden Website exakt enthalten. Deshalb erzeugt der Code die langen Tabellen zweimal. Beim ersten Mal wird die Länge ausgerechnet und der String verworfen. Nachdem der Header übertragen wurde, wird die Tabelle dann ein zweites Mal erzeugt und gestreamt. Da der ESP8266 mit 80MHz läuft, ist das aber kein Problem.

Erwähnenswert ist sonst noch, dass man nicht den kompletten Speicher mit Arrays belegen darf. Man muss ca. 8-10kB frei lassen, damit für Stack und die Low-Level Wifi Funktionen noch genügend Speicher frei ist. Der Wert von 10kB im Code ist experimentell ermittelt.

Ansonsten hoffe ich, dass der Code selbsterklärend ist. Falls Ihr Fragen habt, hinterlasst einfach einen Kommentar.

Ergänzung 10.08.2017:
Auf vielfache Nachfrage hier ein Demoprogramm für die lokale Uhrzeit auf Basis einer NTP Abfrage mit automatischer Sommer- & Winterzeitumstellung: https://blog.thesen.eu/lokale-uhrzeit-mit-dem-esp8266-und-einem-ntp-zeitserver-inklusive-sommerwinterzeit/

Störgeräusche im NUK Babyphone Easy Control 200 bekämpfen

Wir haben uns aufgrund von guten Erfahrungen mit einem älteren NUK Babyphone Modell ein zweites NUK Babyphone gekauft. Die Wahl fiel auf NUK Babyphone Easy Control 200. Die praktische Erfahrungen mit dem als störungsfrei beworbenen Gerät sind ernüchternd: Das Ding summt und surrt permanent und deutlich wahrnehmbar.
NUK_Babyphone
Es klingt nach einer HF Einkopplung und da dieses Babyphone keine Rauschunterdrückung hat (d.h. der Lautsprecher ist permanent an) kann das ziemlich nerven.

Eigentlich hätten wir es umgetauscht, wenn es zeitlich alles nicht so schlecht gepasst hätte. Somit kam der Griff zum Schraubenzieher. Und siehe da. Die Störgeräusche lassen sich mit einer trivialen Abschirmmaßnahme fast vollständig beheben. Eigentlich sollte sowas die Firma NUK am meisten selbst ärgern. Hier wurde für bestenfalls 1 Cent Material gespart.

Öffnen des Elternteils:
Gürtelclip an der Rückseite entfernen, Batteriefach öffnen und die Akkus herausnehmen. Im Batteriefach sind zwei Kreuzschrauben zu erkennen. Diese herausdrehen. Das Gehäuse ist jetzt schon einen Spalt offen, wird aber noch durch Plastikzungen zusammenhalten. Hier muss man mit dem Einsatz von Fingernägeln oder einem Plektrum die Plastikzungen vorsichtig aushaken.

Das Problem:
Wie man auf den Fotos erkennen kann, liegt der Audio Verstärker direkt unterhalb der Antenne und sehr nahe am Hochfrequenzteil.
NUK_Platine_gesamt

Und hier noch einmal im Detail – der Verstärker ist ein EMA1001. Direkt darüber ist die Antenne. Am rechten Bildrand ist der HF Teil.
NUK_Platine_nahe
Und mit ein paar Experimenten war schnell klar, dass die Störungen tatsächlich HF Einkopplungen sind.

Die Lösung:
Die Lösung ist nun relativ simpel. Einfach ein zur Platine hin isoliertes Abschirmblech montieren und mit der Masse der HF-Abschirmung des HF Teils verbinden. Ich habe ein Stück Lochstreifenplatine genommen und die Streifen durchverbunden. Es geht sicherlich auch ein kleines Blech, das man mit Klebeband isoliert.
NUK_Babyphone_Umbau
Das Abschirmblech darf keinen Kontakt zur Antenne haben. Durch die Verlötung mit der HF-Schirmung im oberen Teil der Platine hält es ausreichend. Zur Hauptplatine hin ist das Platinenstück nichtleitend.

Umbau in umgekehrter Reihenfolge. Fertig 🙂
Die Störgeräusche sind massiv reduziert. Das Babyphone rauscht noch leicht. Die Einkopplungen sind fast nicht mehr zu hören. Ideal ist das noch nicht, aber im Gegensatz zum Originalzustand akzeptabel.

Funk & WLAN Markisensteuerung mit ESP8266 und Arduino

Wir haben an unserem Haus zwei elektrische Markisen angebaut. Dabei handelt es sich um eine klassische Markise auf einer Terassenüberdachung. Dazu kommt eine zweite, senkrechte Markise, um Nachmittags und Abends die Sonne wegzuhalten. Für diese beiden Markisen habe ich mit einer ESP8266 & Arduino Kombination eine Steuerung gebaut, die per WLAN und 433MHz Funkfernbedienung ansprechbar ist. Das Konzept ist auch für elektrische Rolladen verwendbar.

Für die Ansteuerung der nötigen Relais kommt ein Arduino Nano zum Einsatz. Dieser bietet genügend Ausgänge. Weiterhin habe ich einen Empfänger für den 433MHz an den Arduino angeschlossen. Ein ESP8266 dient als WLAN Interface und stellt einen Webserver bereit. Der ESP8266 könnte im Prinzip auch die gesamte Steuerung vornehmen. Die üblichen, günstigen ESP8266 Boards bieten aber nur 2 Ein/Ausgangspins. Durch die Kombination des Arduinos mit dem ESP8266 bekommen wir genügend Pins. Beide Mikrocontroller sind bei ebay für jeweils unter 3 Euro zu bekommen.

Steuerung der Markisen mit einem Relaisboard & Arduino
Markisen wie auch Rolladen werden typischerweise durch zwei Anschlüsse für die Phase angesteuert. Ganz trivial: einmal einfahren, einmal ausfahren. Meistens sind die Kabel dafür schwarz und braun (dazu blau für die Erde und grün/gelb für die Schutzerde).
Die beiden Phasen darf man nicht gleichzeitig anschließen. Da es sich häufig um Konsensatormotoren handelt, darf man mehrere Motoren auch nicht parallel an einen Schalter anschließen. Die Gründe dazu findet man leicht per Suchmaschine. Ich erwähne es hier nur kurz als Randbedingung des Designs.

Wir wollen als 3 Zustände schalten können:
1. Beide Phasen stromlos.
2. Braune Phase angeschlossen.
3. Schwarze Phase angeschlossen.
Das bestromen beider Phasen soll ausgeschlossen sein. Weiterhin muss im Code vermieden werden, dass die Motorrichtung direkt gewechselt wird. In diesem Fall liegt auf dem Motorkondensator noch Spannung an. Eine Umpolung kann dann die Relais überlasten.

Die einfachste Variante zur Lösung ist die Steuerung eines Motors mit Hilfe von zwei Relais. Dabei schaltet Relais 1 die Phase und Relais 2 die Richtung. Relais 2 muss als ein Umschalter sein. Die Relais werden wie folgt verschaltet:
Markisensteuerung_Relaisboard
Man kann ein passendes Relaisboard selbst bauen. Über ebay kann man ein passendes Board mit 8 Relais für ca. 7 Euro inkl. Versand bekommen. Dafür lohnt sich ein Selbstbau nicht. 4 Relais bleiben frei und können für künftige Erweiterungen genutzt werden (z.B. Licht).
Die entsprechenden Relaisboards sind mit Treibertransistoren, Freilaufdioden und Optokopplern ausgerüstet und können direkt an einen Arduino angeschlossen werden. Zu beachten ist eigentlich nur, dass die Relais typischerweise auf 0V/low am Eingang schalten.
Markise_Relaisboard
Im konkreten Fall habe ich die 8 Eingänge des Relaisboards an die Arduino Pins A0..A7 angeschlossen.

433 MHz Empfänger für die Funkfernbedienung
Für die Ansteuerung mit einem 433 MHz Sender habe ich den zuvor in einem anderen Beitrag beschriebenen Funkwandschalter verwendet (klick). Es sollten die meisten 433MHz Funkwandschalter funktionieren. Ebenso die meisten Fernbedienungen von Funksteckdosen.
1_Multi Comfort FSS-2

Update 20.09.2015:
Als Empfänger hatte ich zunächste einen der vielen 433MHz Empfänger verwendet, die unter der Bezeichnung „433 MHz Empfänger für Arduino“ angeboten werden. Solche Empfänger findet man ab 1 Euro bei ebay. Ich musste lernen, dass der ESP8266 auf kurze Distanz zuviel Störungen in den 433MHz Empfänger einstreut. Deshalb habe ich den Empfänger gegen einen Empfänger des Typs RXB12 (basierend auf einem SYN470R Chip) ersetzt. Dieser Emfänger ist ein Superhet und kann die Störungen des naheliegenden ESP sehr gut herausfiltern. Entsprechende Empfänger gibt es für ca. 1.50€ bei ebay. Die Pinbelegung beider Empfänger ist gleich.

Für diese Art von Empfängern gibt es die Arduino Library RCSwitch. Der Datenpin des Empfängers muss an einen interrupt-fähigen Pin angeschlossen werden. Deshalb habe ich Pin D2 gewählt. Die Stromversorgung erfolgt über den Arduino mit 5V.

ESP8266 für WLAN & Webserver
In diesem Projekt habe ich den ESP8266 als kleinen Webserver analog zu diesem Beispiel programmiert (klick). Die Webseite des ESP8266 ist unter http://markise/ erreichbar oder alternativ unter der IP, die der ESP im Netzwerk bekommt. Für die beiden Markisen werden die Knöpfe „einfahren“, „stop“ und „ausfahren“ angeboten.
Markise_Webinterface
Ein Druck auf den jeweiligen Knopf erzeugt eine Ausgabe auf der seriellen Schnittstelle, z.B. „MOTOR1STOP“. Diese seriellen Ausgaben werden auf dem Arduino eingelesen und damit die Ausgänge entsprechend geschaltet.
Beim elektrischen Anschluss ist zu beachten, dass der ESP8266 nur mit 3.3V läuft. Deshalb wird zunächst eine Versordungsspannung von 3.3V mit Hilfe eines LM1117 3.3V hergestellt. Da der ESP8266 über sehr kurze Zeiträume bis zu 200mA ziehen kann, habe ich noch einen Elko verbaut.
Für die serielle Schnittstelle habe ich die Softserial Library auf dem Arduino verwendet. Diese funktioniert bei 9600 Baud zuverlässig. Auf diese Weise bleibt die Möglichkeit erhalten, auf der USB Schnittstelle (verwendet die Hardware basierte serielle Schnittstelle) für Debug Zwecke weiter zu verwenden. Die Arduino Pins D3 und D4 werden für die Verwendung mit Softserial konfiguriert. Weiterhin kann über den Arduino Pin D5 ein Reset des ESP8266 ausgelöst werden.
Um die Signale zwischen Arduino (5V) und ESP8266 (3.3V) zu konvertieren, kann man einen Levelshifter nehmen. Es geht aber auch ganz trivial per Spannungsteiler (siehe Schaltplan). Der TX Pin des ESP8266 geht direkt an den Arduino; 3.3V langen für ein high aus. Der RX Pin wird ebenso wie der Reset-Pin über einen Spannungsteiler an den Arduino angeschlossen.

Schaltplan
Der gesamte Schaltplan ergibt sich somit wie folgt. Das Relaisboard wird über ein 10-poliges Kabel angeschlossen.
Markisensteuerung
Auf dem Relaisboard steuern Relais 1 (an/aus) & Relais 2 (Richtung) den Motor der ersten Markise. Relais 3&4 steuern die zweite Markise (Verkabelung siehe oben).

Software
Die Softwarelösung besteht aus zwei Teilen: 1x Arduino, 1x ESP8266
Wie schon beschrieben orientiert sich die Lösung für den ESP8266 stark an dem Beispiel, das ich vor einigen Wochen gepostet habe (klick). Sie wird mit Hilfe einer erweiterten Arduino IDE auf den ESP8266 programmiert. Das entsprechende Vorgehen habe ich hier beschrieben (klick). Wer den Code verwenden möchte, muss vor der Benutzung noch SSID und Passwort des WLANs eintragen, in das sich die Markisensteuerung verbinden soll.

Die Arduino Software besteht im wesentlichen aus 3 Teilen:
1. Einlesen von Kommandos von der Softserial Schnittstelle
2. Einlesen von Kommandos von dem 433MHz Empfänger.
3. Steuern der Relais/Motoren in die richtige Richtung schalten und nach 2 Minuten wieder abschalten. Dann sollte die Markise am jeweiligen Endschalter angekommen sein.

Die Codes für die 433 MHz Fernbedienung müssen im Arduino Sourcecode eingetragen werden. Am einfachsten ist es, die gesendeten Codes mit dem seriellen Monitor in der Arduino IDE mitzuloggen und dann in den Sourcecode einzutragen. Wer den 433MHz Teil nicht einbauen will, kann diesen Sourcecodeteil einfach ignorieren.

Die Sourcecodes stehen hier zum Download bereit: Sourcecode Markisensteuerung

Stromversorgung
Die Stromversorgung erfolgt einfach über den USB Port des Arduino. Alternativ kann man auch 5V direkt auf den Vin Pin geben. Ich habe ein altes Handy Ladegerät verwendet. Um dem Stromverbrauch der Relais Rechnung zu tragen, sollte ein Relais mit einer Belastbarkeit von 1000mA zum Einsatz kommen.

Einbau in einen Gehäuse
Für die nötige Außenmontage habe ich im Baumarkt einen großen IP54 Schaltkasten gekauft (ca. 8€). In diesen Schaltkasten habe ich mittels zwei Sperrholzbrettchen 3 Ebenen erzeugt. Der gesamte Aufbau sieht dann wie folgt aus.

Hauptplatine ohne Arduino/ESP8266 (der LM1117 sitzt auf der Rückseite). Der zusätzliche Platinenstreifen hat keine elektrische Funktion. Er dient nur als Distanzhalter für den Einbau.
Markise_Platine_leer

Hauptplatine mit Arduino/ESP8266 und 433MHz Empfänger:
Markise_Platine_gesamt

Das Gehäuse:
Markise_Gehaeuse_BM

Bestücktes Gehäuse vor der Montage:
Markise_Gehaeuse

P.S.: Eine Integration in fhem ist problemlos möglich. Falls das Probleme bereitet, hinterlasst einen Kommentar. Die Ansteuerung klappt dann auch mit der passenden Android App andFHEM.