Somfy Markisen-Steuerung via ESP32

ACHTUNG: Nicht wie beschrieben die PINS 0, 2, 4 nutzen.

Hallo ich wollte meine Markise mit dem Apple HomeKit steuern und bin so hier im Forum bei diesem Beitrag: Somfy Funkrollo-Steuerung per Arduino-Fernbedienung gelandet, da ich nun eine eigene Lösung habe, dachte ich mir; sharing is caring.

Funkfernbedienung


Bei meiner Funkfernbedienung handelt es sich um die Somfy TELIS 1 RTS PURE, da ich keine Lust auf die Fummelei mit dem Protokoll und Sender hatte, habe ich mich auch dazu entschieden die Fernbedienung zu nutzen. Ich benutze hier auf dem Bild ein ESP32 Dev Kit V4 aber jeder x-beliebige ESP sollte es tun solange dieser auf 3.3V schaltet.

Die Fernbedienung wird über den 3.3V Pin vom ESP mit Spannung versorgt, ich habe die Taster auf der Platine mit einer kleinen Zange abgetrennt und danach die Lötpads gereinigt. Die Taster schalten auf LOW an den GPIO Pins, HIGH = nicht gedrückt.
Verkabelung
Die GPIO pins 0, 2, 4 hängen jeweils an den Tastern für Up, Down und My.

Code
Startet einen HTTP-Listener und steuert mittels der GET Routen /btnUp, /btnDown und /btnMy die jeweiligen Taster der Funkfernbedienung.

#include <Arduino_JSON.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>

// Daten des WiFi-Netzwerks
#ifndef STASSID
  #define HOSTNAME            "Markisen ESP"
  #define STASSID             "your-ssid"
  #define STAPSK              "your-password"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;

WebServer server(80);

// Pins
  // Somfy buttons
    const int btnUp = 0;
    const int btnDown = 2;
    const int btnMy = 4;
  const int btnTimeout = 1;

void handleNotFound() {
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; }
  server.send(404, "text/plain", message);
}

void handleRoot() {
  server.send(200, "text/plain", "ONLINE");
}

void handleBtnUp() {
  digitalWrite(btnUp, LOW);
  sleep(btnTimeout);
  digitalWrite(btnUp, HIGH);
  server.send(200);
}


void handleBtnDown() {
  digitalWrite(btnDown, LOW);
  sleep(btnTimeout);
  digitalWrite(btnDown, HIGH);
  server.send(200);
}


void handleBtnMy() {
  digitalWrite(btnMy, LOW);
  sleep(btnTimeout);
  digitalWrite(btnMy, HIGH);
  server.send(200);
}

void setup() {
  pinMode(btnUp, OUTPUT);
  pinMode(btnDown, OUTPUT);
  pinMode(btnMy, OUTPUT);
  digitalWrite(btnUp, HIGH);
  digitalWrite(btnDown, HIGH);
  digitalWrite(btnMy, HIGH);
  
  Serial.begin(115200);
  WiFi.hostname(HOSTNAME);
  WiFi.begin(ssid, password);
  Serial.println("");
  Serial.print("Wait WiFi");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  // AutoReconnect
  WiFi.setAutoReconnect(true);
  WiFi.persistent(true);

  server.on("/", handleRoot);
  server.on("/btnUp", handleBtnUp);
  server.on("/btnDown", handleBtnDown);
  server.on("/btnMy", handleBtnMy);
  server.onNotFound(handleNotFound);
  server.begin();

  Serial.println("HTTP server started");
}

void loop() {  
  // handle client requests
  server.handleClient();
}

Die Verbindung zu Siri und HomeKit wird durch https://homebridge.io/ erreicht. Ich gehe hier jetzt nicht näher darauf ein, ich kann nur soviel sagen: es läuft bei mir seit über einem Jahr ohne Ausfälle oder dergleichen und ich steuere selbst meinen Tesla mit homebridge.

1 Like

danke für das Teilen!

Ja, irgendwie zu früh gefreut. Wenn die Fernbedienung an die Pins 0, 2, 4 angeschlossen ist, lässt sich der Sketch nicht mehr uploaden:

WARNING: Failed to communicate with the flash chip, read/write operations will fail. Try checking the chip connections or removing any other hardware connected to IOs.
...
A fatal error occurred: Serial data stream stopped: Possible serial noise or corruption.

Und der ESP schmiert scheinbar nach einigen Stunden ab, habe das gestern nicht bemerkt weils anfangs halt lief. Probiere es gerade mit einem neuem Dev Kit V4 aber da auch schon direkt upload Probleme also gehe ich auch davon aus das er abstürzt, ich denke die Fernbedienung erzeugt irgend eine Störung die den IC durcheinander bringt. Ich werde mich wohl mal mit einem Levelshifter vor der Fernbedienung versuchen in der Hoffnung das die Entkopplung ausreicht.

Ich würde Pin 0/2 nicht verwenden

ESP32 Pinout Reference: Which GPIO pins should you use? | Random Nerd Tutorials

GPIO Input Output Notes
0 pulled up OK outputs PWM signal at boot, must be LOW to enter flashing mode
2 OK OK connected to on-board LED,must be left floating or LOW to enter flashing mode
4 OK OK

Es gibt viele andere pins, die sicher sind

GPIO Input Output Notes
4 OK OK
13 OK OK
16 OK OK
17 OK OK
18 OK OK
19 OK OK
21 OK OK
22 OK OK
23 OK OK
25 OK OK
26 OK OK
27 OK OK
32 OK OK
33 OK OK

Ja, schau mal hier: Das ist ein Auszug aus dem mitgeliefertem Dokument zu dem ESP:

Ist das einfach falsch Beschrieben oder bin ich gerade blöd?

Hier das Pinout:

Habe jetzt die Pins trotzdem einfach verlegt, Upload funktioniert wieder mit angeschlossener Fernbedienung.

  // Somfy buttons
    const int btnUp = 21;
    const int btnDown = 32;
    const int btnMy = 33;

:+1:

Ich melde mich morgen noch einmal, nach längeren Testläufen und update dann die Beschreibung entsprechend. Danke nochmal für den Hinweis, ich hätte Garantiert erstmal einen Levelshifter verlötet bis ich gemerkt hätte woran es liegt :roll_eyes:

Danke !

Läuft immer noch ich denke wohl das es das gewesen ist, normalerweise müsste der sich schon aufgehangen haben. Warte aber nochmal bis morgen ab.

1 Like

Wo ist was falsch?


Du hast noch den ESP mit 36 Pins, der hat gegenüber den 32Pin ESP32 Modul noch GPIO 0.

Ja genau, da war die Fernbedienung ja auch nicht angeschlossen, sondern an 0, 2 und 4

Nur zur Erinnerung:
Ein Pin mit der Bezeichnung 0 ist GPIO 0.

Das größte Problem bei fast allen Modulen (ESP32) ist jeder beschreibt die wie ihm passt, habe drei Sorten ESP32 wo die Beschreibung für die Katz ist dadurch habe gelernt nur GPIO Bezeichnung nutzen, dafür sind die Pinout's da.
Dazu noch eine Tabelle

1	TX pin	OK	debug output at boot
2	OK	OK	connected to on-board LED, must be left floating or LOW to enter flashing mode
3	OK	RX pin	HIGH at boot
4	OK	OK	
5	OK	OK	outputs PWM signal at boot, strapping pin
6	x	x	connected to the integrated SPI flash
7	x	x	connected to the integrated SPI flash
8	x	x	connected to the integrated SPI flash
9	x	x	connected to the integrated SPI flash
10	x	x	connected to the integrated SPI flash
11	x	x	connected to the integrated SPI flash
12	OK	OK	boot fails if pulled high, **strapping pin**
13	OK	OK	
14	OK	OK	outputs PWM signal at boot
15	OK	OK	outputs PWM signal at boot, **strapping pin**
16	OK	OK	
17	OK	OK	
18	OK	OK	
19	OK	OK	
21	OK	OK	
22	OK	OK	
23	OK	OK	
25	OK	OK	
26	OK	OK	
27	OK	OK	
32	OK	OK	
33	OK	OK	
34	OK		input only
35	OK		input only
36	OK		input only
39	OK		input only

1 Like

Ich hatte noch keine Zeit die Beschreibung zu aktualisieren, habe aber auch immer noch das Problem, dass sich der ESP einfach aufhängt, kann es daran liegen das die verbundene Fernbedienung diesen auf irgendeine Art und Weise beeinflusst?

Das ist durchaus möglich.
Ich würde auch immer einen Transistor oder einen Optokoppler zwischen den beiden Geräten einfügen. Dann entkoppelt man die Schaltungen und damit treten weniger Probleme auf.
Hast du die Taster Eingänge der Fernbedienung mal mit einem Oszilloskop gemessen ?

Wie gerne ich eines hätte :frowning: leider reicht mein budget nicht dafür. Funktioniert auch ein Levelshifter? Optokoppler hab ich leider keine rumfliegen, muss ich mir dann wohl mal ordern, den letzten hab ich in meiner Garage verbaut :smiley:

Ok, ohne zu messen, weißt du nicht genau, wie die Spannungswerte da aussehen.
Optimal ist da tatsächlich der Optokoppler. Kann ich da nur empfehlen.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.