Umbau Superrollo GW60 mit ESP8266

Für den folgenden Umbau übernehme ich keine Haftung. Durch das Öffnen des Superrollos erlöscht die Gewährleistung des Herstellers.

Die folgende Beschreibung stammt von Uwe Pöringer, welcher der Veröffentlichung auf diesen Seiten zugestimmt hat. Vielen Dank.

Das GW60-ESP8266-Projekt wurde weiterentwickelt und beinhaltet nun alles, bis auf das Sensormodul und eine eventuell abgesetzte Spannungsversorgung (wenn der R-78E05-0.5 gerade nicht zur Hand ist, aber eventuell ein anderer) auf einer Platine außerhalb des GW60 untergebracht und somit den Verkabelungsaufwand erheblich reduziert. Alles ist kompatibel zu meinem vorherigen Projekt und die beiden Sketche, die ich erstellt habe funktionieren somit auf beiden Varianten.

Nähere Informationen zu den Unterschieden der Sketche und der Notwendigkeit des Sensormoduls usw. sind hier (Nachtrag GW60.pdf) zu finden.

Wie gesagt ist die Platine für einen R-78E05-0.5 ausgelegt(…hatte ich noch übrig). Es kann aber auch jeder andere Mini-Step-Down-Regler wie z.B. Pololu D24V6F5 o. Mini MP1584 o.ä., der einer Eingangsspannung von mind. 28 Volt stand hält, verwendet werden. Ist Dieser für die Platinen-Montage zu groß oder nicht PIN-Kompatibel, kann er ohne Probleme dort untergebracht werden, wo normalerweise die ZB40 gesteckt wird. In diesem Fall wird die Platine nicht mit dem R-78E05-0.5  bestückt, sondern mit den drei Stiften für JP1/JP2. Je nachdem welche Spannung nun euer Step-Down-Wandler liefert und entsprechenden Jumper ihr dann setzt, kann die Schaltung mit 5 Volt (JP2 gesetzt) oder mit 3,3 Volt (JP1 gesetzt) betrieben werden. Die 5 Volt des GW60 solltet ihr nicht verwenden, da die Leistung für den Sendebetrieb nicht ausreichend ist.

Die Sketche liefern per MQTT z.B. an FHEM folgende Informationen:

  • die maximale Position des Rollladens (Position wenn komplett geöffnet)
  • die momentane Position des Rollladens
  • die Position des Rollladens in “zu Prozent geöffnet
  • Rollladen schließt gerade
  • Rollladen öffnet gerade oder steht

Gesendet wird „Rollladen schließen“ sowie „Rollladen öffnen“ und „Stopp“.

Der GW60 behält weiterhin, unabhängig von der „Modifikation“, alle seine Funktionen. Auch bei einer Handbedienung am GW60 bzw. eingeschaltetem Automatikbetrieb oder Steuerung über den Sonnensensor, weiß FHEM immer wo der Rollladen gerade steht. Des Weiteren werden die Werte der maximalen Position und der aktuellen Position im EEprom gespeichert, so dass auch nach einem Stromausfall  der Zustand des Rollladens bekannt ist.

 

Programmbeschreibung

Das Programm

Auszug der ersten Zeilen der GW_60_Rollladen.ino, in der die Einstellungen vom Anwender im Programm vor dem kompilieren individuell angepasst, geändert bzw. zugewiesen werden müssen.

int IP1    =  192;                1. Stelle IP – Adresse
int IP2    =  178;                2. Stelle IP – Adresse
int IP3    =    0;                3. Stelle IP – Adresse
int GWY    =    1;                4. Stelle IP – Adresse Gateway
int MQT    =  100;                4. Stelle IP – Adresse MQTT-Server
int WIP    =  111;                4. Stelle IP – Adresse  Wunsch-IP …  à…  wird Wert auf 0 gesetzt,  ist DHCP aktiv
int DN1    =  255;                1. Stelle DNS
int DN2    =  255;                2. Stelle DNS
int DN3    =  255;                3. Stelle DNS
int DN4    =    0;                4. Stelle DNS                                       
.
.
.
const char* ssid                 = "Deine_SSID";
const char* password             = "Dein_WLAN_Passwort";
const char* clientName           = "EG_Büro";
const char* start                = "Pi";
const char* QUELLE1              = " EG_Büro /Down";            à Rollladen schließen (Funktion wie Taste Down am GW60)                
const char* QUELLE2              = " EG_Büro/Up";                    à Rollladen öffnen (Funktion wie Taste Up am GW60)
const char* ZIEL1                = " EG_Büro/Schliessen";       à Rückmeldung  Rollladen schließt gerade
const char* ZIEL2                = " EG_Büro/Oeffnen";           à Rückmeldung  Rollladen öffnet gerade
const char* ZIEL3                = " EG_Büro/Position";          à Rückmeldung  Rollladenposition absolut
const char* ZIEL4                = " EG_Büro/Position_%";     à Rückmeldung  Rollladenposition in %
const char* ZIEL5                = " EG_Büro/maxPosition";  à Rückmeldung  maximale Rollladenposition
.
.
.
int Time_SENSOR      = 60;    

ENDE der individuellen Einstellungen !!!!!

 

Funktion:

Ich steuere den GW60 über FHEM, das ich auf einem Raspberry PI installiert habe. Über „EG_Büro/Down“ und „EG_Büro /Up“ kann ich den Rollladen schließen und öffnen. „EG_Büro /Schliessen“ und „EG_Büro /Oeffnen“ gibt mir dann Rückmeldung was der Rollladen im Moment macht. Über „EG_Büro /Position“ erhalte ich einen Wert von 0 (Rollladen vollständig geschlossen) bis „maxPosition“ (Rollladen vollständig geöffnet). Mit „EG_Büro /Position_%“  wird dieser Wert umgerechnet und ich bekomme die  Ausgabe in 0 bis 100 %. Der Minimalwert (0) und er Maximalwert des Positionszählers kann zum Einen über den optionalen Taster  (wenn z.B. keine Steuerung und nur eine Rückmeldung erwünscht ist) direkt am GW60 gespeichert werden und zum Anderen wird der 0-Wert und der Maximalwert  jedes Mal neu übernommen wenn der GW60 über z.B. FHEM gesteuert wird und nicht durch FHEM wieder angehalten wird, bevor der Rollladen sein, bei der Erstinstallation, programmierten unteren oder oberen Endabschaltpunkt erreicht.

Ist das Netzwerk geschützt, muss natürlich die entsprechende SSID und das Passwort eingegeben werden.

Da die sich der Gateway, der Server und der ESP8266 im gleichen Netzwerkbereich befinden sollten, erhalten wir, bezogen auf die obigen Daten, also folgende IP-Adressen:

Gateway          :        IP1,IP2,IP3,GWY     ->     192.178.1.254
MQTT-Server      :        IP1,IP2,IP3,MQT     ->     192.178.1.100
ESP8266          :        IP1,IP2,IP3,WIP     ->    192.178.1.111
und für die DNS  :        DN1,DN2,DN3,DN4     ->     255.255.255.0

wird der Variablen WIP der Wert „0“ zugewiesen, erhält der ESP8266 seine IP-Adresse über DHCP.

In dieser  ersten Variante kann also die Netzwerkadresse vom Router über DHCP zugewiesen, aber auch fest im Sketch angegeben werden. Hier sind die MQTT-Topics z.B. für Fhem, „EG_Buero/Up“ oder „EG_Buero/Down“ usw. und die ClientID durch die Software fest zugewiesen und müssen daher im Sketch für jeden Wemos individuell angepasst werden. Ist daher relativ ortsgebunden, da es wenig Sinn macht einen GW60 der z.B im Schlafzimmer verbaut ist, mit „EG_Buero/xxx“ anzusprechen. Vorteil ist allerdings, dass der Wemos über jede ihm zugewiesenen IP unter diesen Topics erreichbar ist.

Bei der zweiten Variante werden dem Wemos über den Sketch feste Werte für die Variablen NAME und WIP zugewiesen. Aus diesen werden dann die ClientID und die entsprechenden MQTT-Topics generiert. Aus z.B. „String NAME = WEMOS_“ und „int WIP = 145“ (hier: 145 = letzte Dreiergruppen der IP-Adresse) wird die ClientID „WEMOS_145“ generiert. Die MQTT-Topics heißen dann entsprechend „WEMOS_145/Up“ oder „WEMOS_145/Down“ usw. .
Es muss also nur die IP-Adresse des WEMOS bekannt sein um die MQTT-Topics in z.B. Fhem zuordnen zu können und somit ist der Einsatz auch relativ ortsungebunden, da die örtliche Zuordnung allein von Fhem festgelegt wird. Es reicht daher im Allgemeinen auch aus, dem Sketch einmal mitzuteilen, wie denn sein Wemos D1 mini heißt, auf dem er seinen Dienst verrichten soll.

Mit der Variablen  Time_SENSOR kann die Zeit (in Sekunden) angegeben werden, in welchem Intervall die Zustände abgefragt werden, wenn keine Aktionen stattfinden. (Dead-ALife Funktion)

Beim Kompilieren ist darauf zu achten, dass  für die PubSubClient.h zwingend die Version 2.6 erforderlich ist.

Programmcode

Kommentare

Kommentar von Uwe Pöringer |

Hallo Mario,

da braucht man kein Strommessgerät zwischen stecken.
Der Stromverbrauch liegt in etwa um die 80 mA höher.
Dies entspricht dem Durchnittsstromverbrauch des Wemos.

Kommentar von Mario Radke |

Hallo zusammen,
Wie verhält es sich denn mit dem Stromverbrauch im idle?
Hat jemand mal ein Stromverbrauchszähler zwischengesteckt um einen Vergleich mit einem unmodifizierten GW zu haben?
Grüße
Mario Radke

Kommentar von Uwe Pöringer |

Hallo Lukas,

die Dioden schützen die internen LED´s des Optokopplers vor zu hoher Sperrspannung.
1N4007 oder 1N4148 würden genau so funktionieren.
Schottky haben ein schnelleres Schaltverhalten und eine geringere Restspannung.
Weitere Info´s zu diesem Projekt findest du auch hier:

https://forum.fhem.de/index.php/topic,60575.msg723047.html#msg723047

Gruß

Uwe

Kommentar von Lukas |

Guten Abend zusammen,

erst einmal vielen Dank, dass du die Informationen frei für alle bereit stellst!

Ich würde gerne die Steuerung nachbauen und habe eine Frage zur Diode am Optokoppler:
Warum braucht man hier eine Schottky-Diode bzw. warum z.B. die BAT41? Welche Kriterien brauche ich hier zur Auswahl? Kann man ich z.B. auch eine 1N4007 nehmen?
Ich verstehe, ich brauche die Freilaufdiode, um den Optokoppler zu schützen, oder?

Viele Grüße

Lukas

Kommentar von Uwe |

Hallo Leon,

hier mal die Definitionen in FHEM für einen meiner Rollladen.

define DEVICE_212 MQTT_DEVICE;
attr DEVICE_212 alias OG Schlafen Balkon Rollladen;
attr DEVICE_212 IODev myBroker;
attr DEVICE_212 icon temperature_humidity;
attr DEVICE_212 room OG Schlafen;
attr DEVICE_212 stateFormat {sprintf("maximale Position: %.f - - - aktuelle Position: %.f - - - zu %.f Prozent geöffnet", ReadingsVal($name,"MAXPOS",0), ReadingsVal($name,"POS",0), ReadingsVal($name,"POS%",0))};
attr DEVICE_212 subscribeReading_UP WEMOS_212/Up;
attr DEVICE_212 subscribeReading_MAXPOS WEMOS_212/maxPosition;
attr DEVICE_212 subscribeReading_OPEN WEMOS_212/Oeffnen;
attr DEVICE_212 subscribeReading_POS WEMOS_212/Position;
attr DEVICE_212 subscribeReading_POS% WEMOS_212/Position_%;
attr DEVICE_212 subscribeReading_CLOSE WEMOS_212/Schliessen;
attr DEVICE_212 subscribeReading_DOWN WEMOS_212/Down

define MQTT_DEVICE_212_Aktor1 MQTT_BRIDGE DEVICE_212_Aktor1;
attr MQTT_DEVICE_212_Aktor1 IODev myBroker;
attr MQTT_DEVICE_212_Aktor1 event-on-change-reading .*;
attr MQTT_DEVICE_212_Aktor1 publishState WEMOS_212/Down;
attr MQTT_DEVICE_212_Aktor1 room OG Schlafen

define MQTT_DEVICE_212_Aktor2 MQTT_BRIDGE DEVICE_212_Aktor2;
attr MQTT_DEVICE_212_Aktor2 IODev myBroker;
attr MQTT_DEVICE_212_Aktor2 event-on-change-reading .*;
attr MQTT_DEVICE_212_Aktor2 publishState WEMOS_212/Up;
attr MQTT_DEVICE_212_Aktor2 room OG Schlafen

define MQTT_DEVICE_212_ASensor MQTT_BRIDGE DEVICE_212_ASensor;
attr MQTT_DEVICE_212_ASensor IODev myBroker;
attr MQTT_DEVICE_212_ASensor event-on-change-reading .*;
attr MQTT_DEVICE_212_ASensor subscribeSet WEMOS_212/Schliessen;
attr MQTT_DEVICE_212_ASensor room OG Schlafen

define MQTT_DEVICE_212_BSensor MQTT_BRIDGE DEVICE_212_BSensor;
attr MQTT_DEVICE_212_BSensor IODev myBroker;
attr MQTT_DEVICE_212_BSensor event-on-change-reading .*;
attr MQTT_DEVICE_212_BSensor subscribeSet WEMOS_212/Oeffnen;
attr MQTT_DEVICE_212_BSensor room OG Schlafen

define MQTT_DEVICE_212_CSensor MQTT_BRIDGE DEVICE_212_CSensor;
attr MQTT_DEVICE_212_CSensor IODev myBroker;
attr MQTT_DEVICE_212_CSensor event-on-change-reading .*;
attr MQTT_DEVICE_212_CSensor subscribeSet WEMOS_212/Position;
attr MQTT_DEVICE_212_CSensor room OG Schlafen

define MQTT_DEVICE_212_DSensor MQTT_BRIDGE DEVICE_212_DSensor;
attr MQTT_DEVICE_212_DSensor IODev myBroker;
attr MQTT_DEVICE_212_DSensor event-on-change-reading .*;
attr MQTT_DEVICE_212_DSensor subscribeSet WEMOS_212/Position_%;
attr MQTT_DEVICE_212_DSensor room OG Schlafen

define MQTT_DEVICE_212_ESensor MQTT_BRIDGE DEVICE_212_ESensor;
attr MQTT_DEVICE_212_ESensor IODev myBroker;
attr MQTT_DEVICE_212_ESensor event-on-change-reading .*;
attr MQTT_DEVICE_212_ESensor subscribeSet WEMOS_212/maxPosition;
attr MQTT_DEVICE_212_ESensor room OG Schlafen

define DEVICE_212_Aktor1 dummy;
attr DEVICE_212_Aktor1 alias OG_Schlafen Balkon Zu;
attr DEVICE_212_Aktor1 event-on-change-reading .*;
attr DEVICE_212_Aktor1 icon black_down;
attr DEVICE_212_Aktor1 room OG Schlafen;
attr DEVICE_212_Aktor1 webCmd on

define DEVICE_212_Aktor2 dummy;
attr DEVICE_212_Aktor2 alias OG_Schlafen Balkon Auf;
attr DEVICE_212_Aktor2 event-on-change-reading .*;
attr DEVICE_212_Aktor2 icon black_up;
attr DEVICE_212_Aktor2 room OG Schlafen;
attr DEVICE_212_Aktor2 webCmd on

define DEVICE_212_ASensor dummy;
attr DEVICE_212_ASensor alias OG Schlafen Balkon Rollo schließt;
attr DEVICE_212_ASensor devStateIcon Close:rc_DOWN Stop:rc_STOP;
attr DEVICE_212_ASensor event-on-change-reading .*;
attr DEVICE_212_ASensor icon edit_settings;
attr DEVICE_212_ASensor room OG Schlafen

define DEVICE_212_BSensor dummy;
attr DEVICE_212_BSensor alias OG Schlafen Balkon Rollo öffnet;
attr DEVICE_212_BSensor devStateIcon Open:rc_UP Stop:rc_STOP;
attr DEVICE_212_BSensor event-on-change-reading .*;
attr DEVICE_212_BSensor icon edit_settings;
attr DEVICE_212_BSensor room OG Schlafen

define DEVICE_212_CSensor dummy;
attr DEVICE_212_CSensor alias OG Schlafen Balkon Position Absolut;
attr DEVICE_212_CSensor devStateIcon on:FS20.on Off:FS20.off;
attr DEVICE_212_CSensor event-on-change-reading .*;
attr DEVICE_212_CSensor icon edit_settings;
attr DEVICE_212_CSensor room OG Schlafen

define DEVICE_212_DSensor dummy;
attr DEVICE_212_DSensor alias OG Schlafen Balkon Position in %;
attr DEVICE_212_DSensor devStateIcon on:FS20.on Off:FS20.off;
attr DEVICE_212_DSensor event-on-change-reading .*;
attr DEVICE_212_DSensor icon edit_settings;
attr DEVICE_212_DSensor room OG Schlafen

define DEVICE_212_ESensor dummy;
attr DEVICE_212_ESensor alias OG Schlafen Balkon Position maximum;
attr DEVICE_212_ESensor devStateIcon on:FS20.on Off:FS20.off;
attr DEVICE_212_ESensor event-on-change-reading .*;
attr DEVICE_212_ESensor icon edit_settings;
attr DEVICE_212_ESensor room OG Schlafen

define DEVICE_212_Aktor11 doif ([DEVICE_212_Aktor1] eq "on") (set DEVICE_212_Aktor1 on, sleep 1 set DEVICE_212_Aktor1 off set Icon1 off);
attr DEVICE_212_Aktor11 do always;
attr DEVICE_212_Aktor11 icon recycling;
attr DEVICE_212_Aktor11 room OG Schlafen

define DEVICE_212_Aktor22 doif ([DEVICE_212_Aktor2] eq "on") (set DEVICE_212_Aktor2 on, sleep 1 set DEVICE_212_Aktor2 off set Icon1 off);
attr DEVICE_212_Aktor22 do always;
attr DEVICE_212_Aktor22 icon recycling;
attr DEVICE_212_Aktor22 room OG Schlafen

...nachdem die beiden letzen Devices angelegt sind, jeweils nach "sleep 1" einen Strichpunkt setzen.
Mach ich das schon beim Anlegen, meldet FHEM eine Fehler !

Kommentar von Leon |

Hallo,
vielen Dank für die super Anleitung zum Umbau des Gurtwicklers.
Habe das Teil schon nachgebaut und bekomme auch die Readings für Öffnen, Schliessen und die Positionen angezeigt.
Es fehlt mir nur die Ansteuerung der Up/Down Funktion. Bekomme das irgendwie nicht recht hin. Bin jetzt auch nicht gerade so fit mit mqtt. Könnte ihr da mal ein Screenshot posten, wie das genau bei euch in fhem ausschaut?
Vielen Dank!!!!

lg

Kommentar von Uwe Pöringer |

...dann solltest du aber schon eine Quelle nennen, wo die Gerber-Dateien gepostet werden können, bzw. guckst Du hier: https://forum.fhem.de/index.php/topic,60575.msg826391.html#msg826391

Kommentar von Gast_ |

Hallo Björn und Uwe,

wäre jemand von euch so nett und würde mir die SPrint Dateien in Gerber Dateien umwandeln? Möchte euer Board bei jlcpcb.com bestellen.

Ich hab das noch nie gemacht und weiß leider nicht was ich bei der Exportfunktion in SPrint einstellen muss.

Ihr könnte mir auch einfach erklären wie es geht, das würde vielleicht auch anderen helfen :)

lg

Kommentar von Thomas Burkhart |

Hallo Björn,

gibt es eventuell die Möglichkeit die modifizierte Hardware fertig zu erwerben?

Von der Reichweite her bräunte ich wohl auch mehrere PIs für ein 3-geschossiges Haus?

Beste Grüße

Thomas Burkhart

Antwort von Björn Hempel

Hallo Thomas, 

fertig gibt es nichts.

Für was meinst du brauchst du mehrere PIs? Das Homematic geht bei mir sogar durch die Betondecke in den Keller.

Ich würde es erst mal mit einem zentralen probieren. Ansonsten kannst du auch Culs mit einem wifi Chip versehen und diese dann von einer Zentrale aus steuern. 

Auch so, sorry... Es ging ja um dem ESP Umbau. Der verwendet ja schon einen wifi, da brauchst du ja keinen Cul. Ein zentraler Accesspoint sollte dann reichen. 

Viele Grüße 

Björn 

 

Sie müssen sich anmelden, um Kommentare hinzuzufügen.