Dual-Schaltaktor mit ESP01 für Hutschienenmontage

Begonnen von Papa Romeo, 30 Juli 2018, 22:43:37

Vorheriges Thema - Nächstes Thema

andies

Zitat von: Katzechrisu am 19 Januar 2019, 20:53:41
@andies
Wie sieht es aus mit deiner Schaltung? Läuft jetzt alles?
Ich habe es am Wochenende endlich geschafft, dass alles neu zu machen. Ich habe einen brandneuen ESP mit ESPEasy geflasht, das Wifi eingerichtet und so, wie das Frank oben geschrieben hat, vorbereitet (alles auf der Werkbank, also nicht in der Hutschiene). Danach habe ich das Haus vom Strom genommen und den neuen ESP eingesetzt. Und leider klappt das nicht - ich komme an den ESP nicht mehr heran. Daher muss ich annehmen, dass der nicht richtig startet. Das könnte an den GPIOs liegen.

Am ESP wird es nicht liegen. Also werde ich die Hutschiene wohl ausbauen, komplett. Ich weiß nicht, ob ich mir dann nochmal die Mühe mache, das wieder zusammenzusetzen. Ich könnte einfach einen shelly daneben einbauen, das ergibt dieselbe Lösung.

Schade, ich habe keine Ahnung, woran das liegen kann.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Frank_Huber

Eventuell kein WLAN Empfang wenn er auf der Hutschiene sitzt?

Wenn er auf der Werkbank macht was er soll und dann auf der Schiene nicht ist das merkwürdig.

Hast eines versucht:
Auf der Hutschiene OHNE die Eingänge montieren und aus FHEM schalten.

andies

WLAN ist da, weil nebenan ein RPi sendet und empfängt. Am WLAN liegt es definitiv nicht.

Es ist eher so, dass intern die GPIOs das irgendwie nicht starten lassen. Mein Problem ist: ich will nicht direkt an der Hutschiene experimentieren. Ich muss jedes Mal das Haus vom Strom nehmen, die RPi runterfahren etc. Von daher gebe ich einfach auf und stelle den Ursprungszustand wieder her. Auf der Werkbank hat (mit einer Phase) alles geklappt, zwei Meter weiter (mit zwei Phasen) geht nichts mehr und ich habe keine Idee mehr, die sich ohne Umstände umsetzen lässt. Ich baue da einen Shelly hinein, das sollte gehen, wenn ich die Phase zu den Lampen umschalte.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Mea culpa oder wie das heißt.

Einen letzten Versuch wollte ich noch unternehmen und da habe ich papa romeos ursprünglichen sketch genommen. Jetzt klappt es. Weiß der Teufel, was da los war oder ist.

Ich habe halt jetzt ein anderes Problem: Mein MQTT-Server (RPi) hängt am WLAN und ist manchmal nach Stromausfällen unzuverlässig. Den muss ich jetzt wohl ans LAN hängen und das heißt, ich muss einen Bluetooth-Empfänger und einen Signalduino umstöpseln. Irgendwie wird man mit dem Zeug nie fertig, oder?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Katzechrisu

Dann hattest du wohl was falsch konfiguriert. Bei mir läuft es mit Tasmota tipptopp. (Allerdings bis jetzt nur mit einer Phase auf der Werkbank).

Katzechrisu

Fertig wird man damit nie! Gibt immer was neues zum probieren und verbessern🤣
Warum muss du das umstöpseln? Was hat das mit dem LAN zu tun? Und was ist ein Signalduino?

Aber Glückwunsch das dein Eltako jetzt läuft.

andies

Ich hatte vor zwei Jahren FHEM installiert und dachte ,,den Quatsch löschst du doch gleich wieder". Also habe ich das auf einem RPi3, der selbst in einem Rolladenkasten steckt (!), gepackt, weil ich da den Signalduino in der Nähe der somfy-Rolläden hatte und außerdem der Bluetooth-Empfänger für den Flic-button verstecken werden konnte. War ja sowieso nur für kurze Zeit usw usf.

So ist das heute noch. Und wenn es nicht ein kleines Problem gäbe, würde ich das auch nicht anfassen - bei kompletten Stromausfall wird nur ein WLAN wieder hergestellt (ich hatte damals ,,aus Sicherheitsgründen" einen extra WLAN-Stick dran) und die IP ändert sich dadurch anscheinend manchmal. Da muss ich dann händisch eingreifen und die Geräte auf die richtige FHEM-MQTT-IP weisen. Jedenfalls denke ich, bei einem LAN-Anschluss wäre das um einiges stabiler und ich sollte mal aus dem Rolladenkasten raus. Aber da muss ich wieder bauen.


Gesendet von iPad mit Tapatalk Pro
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Papa Romeo

...hier dann auch das Update für den großen Bruder....eben halt doppelt...

siehe Beschreibung hier: https://forum.fhem.de/index.php/topic,90282.msg898035.html#msg898035
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

andies

#218
Ich musste den Sketch auf dem ESP neu einspielen, weil das Gerät sich auf einmal nicht mehr bewegte (vermutlich war aber die FB 7490 das Problem). Jedenfalls habe ich mit papa romeos Sketch jetzt wieder das Problem, das ich am Anfang mit dem ESPEasy hatte: schalte ich den zweiten Schalter, der an einer anderen Phase hängt, geht die sofort aus. Da ist irgendwo der Wurm drin. Sowohl bei papa romeos Sketch als auch dem ESPEasy passiert das - also kann es nicht am Sketch liegen, sondern es muss irgendwas anderes sein.

Hat denn jemand den dualen Aktor an zwei verschiedenen Phasen angeschlossen? Und da keine Probleme?

<edit> Die WLAN-Probleme, von denen oben die Rede war, habe ich inzwischen behoben. Ich habe mir eine komplette Unifi-Anlage besorgt (drei Stück plus Controller), das läuft nun intern um einiges flüssiger. Es wäre ohne gegangen, aber mir waren die ganze Ausfälle ein Dorn im Auge. Daran kann es also nicht liegen.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Papa Romeo

Hallo andies,

kannst du mal ne Zeichnung machen wie du das Modul verdrahtet hast. Ich bin zwar im Moment zeitlich ziemlich eingespannt, werde aber trotzdem bei Gelegenheit mal mein Referenz-Modul an 2 Phasen hängen und versuchen ob ich diesem Verhalten etwas auf die Pelle rücken kann.
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

andies

Vielen Dank für die Hilfe, papa romeo. Das ist ja alles freiwillig und keiner muss hier was tun und wenn Du viel um die Ohren hast, geht es eben nicht.

Mir hat auch das Zusammenlöten dieses Aktors eine Menge Spaß gemacht (danke allein dafür), aber ich bin mit meinem Latein leider am Ende. Ich bin im Gegensatz zu Dir, wenn ich das richtig lese, nicht vom Fach und meine Familie hat nun immer weniger Geduld, meine Smarthome-Lösungen erfordern manchmal das ganze Wochenende und  ich riskiere einen schiefen Haussegen. Kann sein, dass ich den Schaltaktor am Ende durch zwei Shellys im Schrank ersetze, was jetzt auch nicht soo schlimm ist. Ich gehe nur manchmal gern den Dingen auf den Grund...

Hier auch mal der Code, den ich jetzt im ESP habe:

// ESP01_Eltako_D_Switch.ino
// by Papa Romeo 30.07.18

// ... einmalig erforderliche User-Einstellungen

String      NAME          = "eltako";                   // Name des Device --> erster Teil des MQTT-Topics
int         WIP           =  0;                         // Wunsch-IP bei statischer IP-Zuweisung --> 0 fuer DHCP
String      ID            = "";                   // bei mir Wunsch-IP bei statischer IP-Zuweisung --> wahlweise zweiter Teil des MQTT-Topics z.B. auch fuer DHCP
const char* mqtt_server   = "raspfhem.fritz.box";              // IP auf der FHEM und Mosquitto laeuft
const char* ssid          = "XXXXXXXXX";             // Eigene SSID
const char* password      = "XXXXXXXXXX";             // WLAN-Passwort
const char* start         = "Eltako starting, OTA-Port 8266";                // Name frei waehlbar
int         Time_VOLTAGE  =  240;                       // ALife-Intervall für Abfrage der Betriebsspannung in Sekunden
                                                       
// ... eventuell weitere erforderliche User-Einstellungen

// Werte fuer statische IP-Adresse                         
//Gateway
int IP1    = 192;    // 1. Stelle IP - Adresse
int IP2    = 168;    // 2. Stelle IP - Adresse
int IP3    = 2;      // 3. Stelle IP - Adresse
int GWY    = 1;    // 4. Stelle IP - Adresse

// DNS
int DN1    = 255;    // 1. Stelle DNS
int DN2    = 255;    // 2. Stelle DNS
int DN3    = 255;    // 3. Stelle DNS
int DN4    = 0;      // 4. Stelle DNS

// ... ENDE der individuellen User-Einstellungen !!!!!

// Zuweisung der GPIO´s muss nur für andere Board´s (Wemos, ESP12 usw.) geaendert werden
#define VOLTAGE 14   
#define SENSOR1  3   // Taster 1 mit Pullup        ; Aktive-Low  (TxD)
#define SENSOR2  0   // Taster 2 mit Pullup        ; Aktive-Low 
#define AKTOR1   1   // REL_1                      ; Aktive-High (RxD)
#define AKTOR2   2   // REL_2                      ; Aktive-High

// ... ENDE der eventuell zusaetzlich erforderlichen Einstellungen !!!!!

// ... folgende Zeilen muessen in der Regel nicht geaendert werden !!!!!

String ClientID      = NAME + ID;                    // ClientID
const char* CLIENTID = (ClientID.c_str());
String Ziel1         = (ClientID + "/switch_1");     // sendet an MQTT Switch_1 on / off
const char* ZIEL1    = (Ziel1.c_str());
String Ziel2         = (ClientID + "/switch_2");     // sendet an MQTT Switch_2 on / off
const char* ZIEL2    = (Ziel2.c_str());
String Quelle1       = (ClientID + "/cmnd_1");     // empfaengt von MQTT Befehl on / off für Switch_1
const char* QUELLE1  = (Quelle1.c_str());
String Quelle2       = (ClientID + "/cmnd_2");     // empfaengt von MQTT Befehl on / off für Switch_2
const char* QUELLE2  = (Quelle2.c_str());
String Batt_Out      = (ClientID + "/voltage");     // sendet Betriebsspannung
const char* BATT_OUT = (Batt_Out.c_str());

#include <Ticker.h>
#include <OneButton.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include <ArduinoOTA.h>  // https://forum.fhem.de/index.php/topic,89015.msg898505.html#msg898505

WiFiClient ESPClient;             
PubSubClient client(ESPClient); 
Ticker tickerVOLTAGE;


int doVOLTAGE     = 1;                                  // gesetzt wenn Betriebsspannung übermittelt werden soll
int set_Switch1   = 0;                                  // gesetzt wenn Rollladen oeffnen soll
int set_Switch2   = 0;                                  // gesetzt wenn Rollladen schliessen soll
int preset_1      = 0;                                  // vorheriger Wert von Set_Down
int preset_2      = 0;                                  // vorheriger Wert von set_Up
float Spannung;
char msg[5];
OneButton button1 (SENSOR1, true);
OneButton button2 (SENSOR2, true);

//  Begin UP_heartBeat
void heartBeat(int doPin)
     {switch (doPin)
      {case VOLTAGE: 
        doVOLTAGE = 1; 
        break;
       }
      }
//  End UP_heartBeat

//   Begin UP_setup
void setup()
     {ArduinoOTA.setPort(8266);                         
      ArduinoOTA.begin();
      pinMode(SENSOR1,INPUT_PULLUP);                  // Eingang Taster / Schalter Switch_1
      pinMode(SENSOR2,INPUT_PULLUP);                  // Eingang Taster / Schalter Switch_2
      pinMode(AKTOR1,  OUTPUT);                       // Ausgang Rel_1
      pinMode(AKTOR2,  OUTPUT);                       // Ausgang Rel_2
      digitalWrite(AKTOR1, LOW);                      // REL_1 auf Off
      digitalWrite(AKTOR2, LOW);                      // REL_2 auf Off
      setup_wifi();                                   // Call UP_setup_wifi
      client.setServer(mqtt_server, 1883);
      client.setCallback(callback);
      tickerVOLTAGE.attach(Time_VOLTAGE, heartBeat, VOLTAGE);
      button1.attachClick(Switch1);       
      button2.attachClick(Switch2);
      button1.attachPress(Switch1);
      button2.attachPress(Switch2);
      relais();}
//   End UP_setup

//   Begin UP_setup_wifi
void setup_wifi()
     {WiFi.mode(WIFI_STA); WiFi.begin(ssid, password);
      if (WIP >0 ) WiFi.config(IPAddress(IP1,IP2,IP3,WIP), IPAddress(IP1,IP2,IP3,GWY), IPAddress(DN1,DN2,DN3,DN4), IPAddress(IP1,IP2,IP3,GWY)); //Feste IP-Vergabe
      while (WiFi.status() != WL_CONNECTED){delay(500);}}
//   End UP_setup_wifi

//   Begin UP_Switch1
void Switch1()
     {set_Switch1 = 1;
      if (preset_1 == 1){set_Switch1 = 0;}                      // preset_Switch1 gleich 1 set_Switch1 auf 0 wenn Taster genutzt wird
      preset_1 = set_Switch1;
      relais();}                                                    // preset_1 auf set_Switch1
//   End UP_Switch1

//   Begin UP_Switch2
void Switch2()
     {set_Switch2 = 1;
      if (preset_2 == 1){set_Switch2 = 0;}                      // preset_Switch2 gleich 1 set_Switch2 auf 0 wenn Taster genutzt wird
      preset_2 = set_Switch2;
      relais();}                                                    // preset_2 auf set_Switch2
//   End UP_Switch2

//   Begin UP_relais
void relais()
     {if (set_Switch1 == 1){digitalWrite(AKTOR1, HIGH); const char *state  = "on"; client.publish(ZIEL1, state);}
      if (set_Switch1 == 0){digitalWrite(AKTOR1, LOW); const char *state  = "off"; client.publish(ZIEL1, state);}
      if (set_Switch2 == 1){digitalWrite(AKTOR2, HIGH); const char *state  = "on"; client.publish(ZIEL2, state);}
      if (set_Switch2 == 0){digitalWrite(AKTOR2, LOW); const char *state  = "off"; client.publish(ZIEL2, state);}}
//   End_relais

//   Begin UP_callback
void callback(char* kanal, byte* nachrichtInBytes, unsigned int length)
     {String nachricht1 = "";
             {for (int i = 0; i < length; i++)
                  {nachricht1 += (char)nachrichtInBytes[i];}
                  String  stringKanal         = kanal;
                  String  stringAnmeldeKanal1 = QUELLE1;
                  if (stringKanal == stringAnmeldeKanal1)
                     {if (nachricht1 == "on")
                         {set_Switch1 = 1;}
                      if (nachricht1 == "off")   
                          {set_Switch1 = 0;}}}
      String nachricht2 = "";
             {for (int i = 0; i < length; i++)
                  {nachricht2 += (char)nachrichtInBytes[i];}
                  String  stringKanal         = kanal;
                  String  stringAnmeldeKanal2 = QUELLE2;
                  if (stringKanal == stringAnmeldeKanal2)
                     {if (nachricht2 == "on")
                         {set_Switch2 = 1;}
                      if (nachricht2 == "off")   
                          {set_Switch2 = 0;}}
                      relais();}}                   
//   End UP_callback

//   Begin UP_reconnect
void reconnect()
     {while (!client.connected())
      {if (client.connect(CLIENTID))
       {client.publish(start, CLIENTID); client.subscribe(QUELLE1); client.subscribe(QUELLE2);}
        else
        {delay(5000);}}}
//   End UP_reconnect
       
//   Begin loop
void loop()
     {if (!client.connected())                                                     // wenn nicht verbunden - Reconnect
      {reconnect();}
      client.loop();                                                               // MQTT Client abhorchen
      ArduinoOTA.handle();
      button1.tick();
      button2.tick();                                                              // Abfrage Eingang 1 + 2 bei Tasterbetrieb                 
      if (doVOLTAGE)                                                               // wenn doVOLTAGE 1 dann Spannung per MQTT senden
       {Spannung = ESP.getVcc() / 20000.0;                                         // Spannung ermitteln
        dtostrf(Spannung ,2,2, msg);
        client.publish(BATT_OUT,msg);                                              // Nachricht an MQTT übergeben
        doVOLTAGE = 0;}                                                            // do VOLTAGE auf 0 setzen
      delay(10);
      }                               
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Papa Romeo

Hallo andies,

da haben wir was gemein.....wenn etwas nicht so geht wie es soll, will ich auch wissen warum es so ist. Schon deswegen werde ich mir die Zeit mal nehmen.
In Bezug Familie, ist es bei mir nicht anders und wenn ich jetzt sage, dass ich nur einen kleinen Bruchteil von den Modulen, die ich gemacht habe bei mir bisher selber verbaut habe, weil ich das still und heimlich und so nach und nach machen muss, da meine Frau denkt sie würde damit nicht klar kommen, glaubt mir das wahrscheinlich keiner.
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

andies

FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Papa Romeo

Hallo andies,

bin jetzt dazugekommen, mir dein Modul mal vorzunehmen. Zu meinem Erstaunen zeigte mein Referenz-Modul das gleich Verhalten. D.h. der externe Schalter von Kanal 2 reagierte sehr, sehr träge. Obwohl der Aufbau identisch zu Kanal 1 ist, kann ich mir das im ersten Hinblick auch nicht erklären.
Dabei war es egal ob das Modul mit nur einer Phase oder 2 Phasen betrieben wurde.

Ich hab nun die beiden Vorwiderstände des Opto-Kopplers von Kanal 2 halbiert (jeweils 100 kOhm parallel)
Das angehängte Video zeigt das Ergebnis.

Gruß

Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Gisbert

Hallo Papa Romeo,

ich würde mir das Video gerne anschauen, aber die zip-Datei ist passwortgeschützt.
Kannst du mich erhellen?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome