Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 über WLAN an KNX

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #76
    Sind 38€
    https://m.reichelt.de/?ARTICLE=18492...SABEgLP9_D_BwE

    Gruß, Sven

    Kommentar


      #77
      https://www.reichelt.de/?ARTICLE=184...SABEgKGovD_BwE
      Viele Grüße,
      Stefan

      DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

      Kommentar


        #78
        Oh...da war einer schneller :-)
        Viele Grüße,
        Stefan

        DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

        Kommentar


          #79
          Zitat von ulistermclane Beitrag anzeigen
          den Sonnenstand kann man berechnen - also Globalstrahlungssensor sollte reichen?
          Eigentlich hast du Recht...manchmal denke ich zu kompliziert :-)

          Kommentar


            #80
            Hat die Ventus jemand? Mir geht's eigentlich nur um die Windmessungen und Regen.

            Taugt das was? Friert der Wind Sensor bei Frost nicht fest?

            Kommentar


              #81
              Hab gestern nach dem Tipp mit stall.biz noch ein wenig gelesen....

              Dieser Bausatz basiert vollständig auf dem ESP8266:
              https://www.stall.biz/project/weathe...hausautomation

              Entweder nutzt man die Software gleich mit (mir würde JSON schon reichen) oder man macht einen neuen Sketch mit KNX-Adressierung...

              Kommentar


                #82
                Moin moin,

                da der ursprüngliche Beitrag ja mehr über die Anbindung eines ESP8266 an KNX ging, sich aber die Diskussion in Richtung Eigenbau-Wetterstation entwickelt hat, dachte ich mir, wir sollten das in einem eigenen Thread weiterführen:

                Eigenbau Wetterstation mit Bus-Anbindung

                Ich habe dort versucht schon das gröbste aus den letzten Beiträgen zusammenzufassen inkl. der zugehörigen Links.

                Ich würde mich freuen, wenn wir da ein wenig die Daten zusammentragen könnten und vll. sogar am Ende was vorzeigbares bei rum kommt :-)

                Gruß, Sven

                Kommentar


                  #83
                  Hi,

                  Mein Sonoff 4ch pro ist die Woche gekommen. Hier mal ein erster lauffähiger Sketch. Ist zwar nicht schön, sollte aber funktionieren :-)

                  Code:
                  /*
                  * Sonoff 4ch Pro mit KNX Anbindung
                  */
                  
                  #include <esp-knx-ip.h>
                  
                  // WiFi config
                  const char* ssid = "SSID";    //change to your SSID
                  const char* pass = "PW";      //change to your PSK
                  
                  //GPIOs
                  int Ch1_Pin = 12;
                  int Ch2_Pin = 5;
                  int Ch3_Pin = 4;
                  int Ch4_Pin = 15;
                  int Button1_Pin = 0;
                  int Button2_Pin = 9;
                  int Button3_Pin = 10;
                  int Button4_Pin = 14;
                  int LED_Pin = 13;
                  
                  //States
                  int Button1State = 0;
                  int Button2State = 0;
                  int Button3State = 0;
                  int Button4State = 0;
                  int lastButton1State = 1;
                  int lastButton2State = 1;
                  int lastButton3State = 1;
                  int lastButton4State = 1;
                  int Ch1State = 0;
                  int Ch2State = 0;
                  int Ch3State = 0;
                  int Ch4State = 0;
                  
                  //Groupadresses
                  config_id_t Ch1Ack_GA;
                  config_id_t Ch2Ack_GA;
                  config_id_t Ch3Ack_GA;
                  config_id_t Ch4Ack_GA;
                  config_id_t Watchdog_GA;
                  
                  config_id_t hostname_id;
                  
                  void Ch1_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_WRITE:
                          digitalWrite(Ch1_Pin, *data);
                          knx.write1Bit(knx.config_get_ga(Ch1Ack_GA), *data);
                          break;
                      }
                  }
                  
                  void Ch1State_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_READ:
                          Ch1State = digitalRead(Ch1_Pin);
                          knx.answer1Bit(knx.config_get_ga(Ch1Ack_GA), Ch1State);
                          break;
                      }
                  }
                  
                  void Ch2_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_WRITE:
                          digitalWrite(Ch2_Pin, *data);
                          knx.write1Bit(knx.config_get_ga(Ch2Ack_GA), *data);
                          break;
                      }
                  }
                  
                  void Ch2State_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_READ:
                          Ch2State = digitalRead(Ch2_Pin);
                          knx.answer1Bit(knx.config_get_ga(Ch2Ack_GA), Ch2State);
                          break;
                      }
                  }
                  
                  void Ch3_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_WRITE:
                          digitalWrite(Ch3_Pin, *data);
                          knx.write1Bit(knx.config_get_ga(Ch3Ack_GA), *data);
                          break;
                      }
                  }
                  
                  void Ch3State_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_READ:
                          Ch3State = digitalRead(Ch3_Pin);
                          knx.answer1Bit(knx.config_get_ga(Ch3Ack_GA), Ch3State);
                          break;
                      }
                  }
                  
                  void Ch4_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_WRITE:
                          digitalWrite(Ch4_Pin, *data);
                          knx.write1Bit(knx.config_get_ga(Ch4Ack_GA), *data);
                          break;
                      }
                  }
                  
                  void Ch4State_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_READ:
                          Ch4State = digitalRead(Ch4_Pin);
                          knx.answer1Bit(knx.config_get_ga(Ch4Ack_GA), Ch4State);
                          break;
                      }
                  }
                  
                  void Watchdog_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                  {
                      switch (ct)
                      {
                        case KNX_CT_READ:
                          knx.answer1Bit(knx.config_get_ga(Watchdog_GA), 1);
                          break;
                      }
                  }
                  
                  void setup() {
                      pinMode(LED_Pin, OUTPUT);
                  
                      pinMode(Ch1_Pin, OUTPUT);
                      pinMode(Ch2_Pin, OUTPUT);
                      pinMode(Ch3_Pin, OUTPUT);
                      pinMode(Ch4_Pin, OUTPUT);
                      pinMode(Button1_Pin, INPUT_PULLUP);
                      pinMode(Button2_Pin, INPUT_PULLUP);
                      pinMode(Button3_Pin, INPUT_PULLUP);
                      pinMode(Button4_Pin, INPUT_PULLUP);
                      Serial.begin(9600);
                  
                      // Register the callbacks
                      knx.register_callback("Kanal 1 Schalten", Ch1_callback);
                      knx.register_callback("Kanal 1 Rückmeldung", Ch1State_callback);
                      knx.register_callback("Kanal 2 Schalten", Ch2_callback);
                      knx.register_callback("Kanal 2 Rückmeldung", Ch2State_callback);
                      knx.register_callback("Kanal 3 Schalten", Ch3_callback);
                      knx.register_callback("Kanal 3 Rückmeldung", Ch3State_callback);
                      knx.register_callback("Kanal 4 Schalten", Ch4_callback);
                      knx.register_callback("Kanal 4 Rückmeldung", Ch4State_callback);
                      knx.register_callback("Watchdog", Watchdog_callback);
                  
                      // Register the group addresses
                      Ch1Ack_GA = knx.config_register_ga("Kanal 1 Rückmeldung");
                      Ch2Ack_GA = knx.config_register_ga("Kanal 2 Rückmeldung");
                      Ch3Ack_GA = knx.config_register_ga("Kanal 3 Rückmeldung");
                      Ch4Ack_GA = knx.config_register_ga("Kanal 4 Rückmeldung");
                      Watchdog_GA = knx.config_register_ga("Watchdog");
                  
                      // And the config options
                      hostname_id = knx.config_register_string("Hostname", 20, String("4CH_PRO"));
                  
                      // Load previous values from EEPROM
                      knx.load();
                  
                      // Init WiFi
                      WiFi.hostname(knx.config_get_string(hostname_id));
                      WiFi.mode(WIFI_STA);
                      WiFi.begin(ssid, pass);
                  
                      Serial.println("");
                      Serial.print("[Connecting]");
                      Serial.print(ssid);
                  
                      digitalWrite(LED_Pin, LOW);
                      while (WiFi.status() != WL_CONNECTED) {
                          digitalWrite(LED_Pin, HIGH);
                          delay(500);
                          Serial.print(".");
                          digitalWrite(LED_Pin, LOW);
                      }
                      digitalWrite(LED_Pin, HIGH);
                  
                      // Start knx
                      knx.start();
                  
                      Serial.println();
                      Serial.println("Connected to wifi");
                      Serial.println(WiFi.localIP());
                      Serial.println(" ");
                  }
                  
                  void loop() {
                      // Process knx events, e.g. webserver
                      knx.loop();
                  
                  //Toggeln der Kanäle bei Positiver Flanke der Buttons
                      Button1State = digitalRead(Button1_Pin);
                      Ch1State = digitalRead(Ch1_Pin);
                      if (Button1State != lastButton1State) {
                        if (Button1State == LOW) {
                          if (Ch1State == 1) {
                            digitalWrite(Ch1_Pin, LOW);
                            knx.write1Bit(knx.config_get_ga(Ch1Ack_GA), 0);
                            }
                            else if (Ch1State == 0){
                            digitalWrite(Ch1_Pin, HIGH);
                            knx.write1Bit(knx.config_get_ga(Ch1Ack_GA), 1);
                            }
                        }  
                      }
                      lastButton1State = Button1State;
                  
                      Button2State = digitalRead(Button2_Pin);
                      Ch2State = digitalRead(Ch2_Pin);
                      if (Button2State != lastButton2State) {
                        if (Button2State == LOW) {
                          if (Ch2State == 1) {
                            digitalWrite(Ch2_Pin, LOW);
                            knx.write1Bit(knx.config_get_ga(Ch2Ack_GA), 0);
                            }
                            else if (Ch2State == 0){
                            digitalWrite(Ch2_Pin, HIGH);
                            knx.write1Bit(knx.config_get_ga(Ch2Ack_GA), 1);
                            }
                        }  
                      }
                      lastButton2State = Button2State;
                  
                      Button3State = digitalRead(Button3_Pin);
                      Ch3State = digitalRead(Ch3_Pin);
                      if (Button3State != lastButton3State) {
                        if (Button3State == LOW) {
                          if (Ch3State == 1) {
                            digitalWrite(Ch3_Pin, LOW);
                            knx.write1Bit(knx.config_get_ga(Ch3Ack_GA), 0);
                            }
                            else if (Ch3State == 0){
                            digitalWrite(Ch3_Pin, HIGH);
                            knx.write1Bit(knx.config_get_ga(Ch3Ack_GA), 1);
                            }
                        }  
                      }
                      lastButton3State = Button3State;
                  
                      Button4State = digitalRead(Button4_Pin);
                      Ch4State = digitalRead(Ch4_Pin);
                      if (Button4State != lastButton4State) {
                        if (Button4State == LOW) {
                          if (Ch4State == 1) {
                            digitalWrite(Ch4_Pin, LOW);
                            knx.write1Bit(knx.config_get_ga(Ch4Ack_GA), 0);
                            }
                            else if (Ch4State == 0){
                            digitalWrite(Ch4_Pin, HIGH);
                            knx.write1Bit(knx.config_get_ga(Ch4Ack_GA), 1);
                            }
                        }  
                      }
                      lastButton4State = Button4State;
                  
                    delay(50);  
                  }
                  hab den Kram eben mal kurz am Bus der Ets getestet und scheint zu laufen.
                  Gruß, Sven
                  Zuletzt geändert von OleDeluxe; 26.01.2018, 07:21.

                  Kommentar


                    #84
                    Klasse zu lesen, wie einfach es nun für dich war.

                    Wenn ich mir die Sonoff's anschaue, dann sind diese Produkte wirklich top zu gebrauchen und auch weit ab von Bastelprodukten.

                    Mit der knx-libary schafft man in Verbindung mit dem Sonoff's eine kostengünstige Lösung zum Nachrüsten, welche auch noch eine halbwegs brauchbare Sicherheit (Verschlüsselung) bietet. Habe mir gerade einfach Mal einen S20 bestellt, um damit für meine Frau eine schaltbare Steckdose zu schaffen, die einfach Plug'n'Play bedeutet.

                    Schöne Sache!

                    Kannst du kurz noch schreiben welches "Zubehör" zum Sonoff dazu benötigtest, um diesen zu flashen?!

                    Kommentar


                      #85
                      Moin,

                      ja, ich denke für so kleinere Sachen sind die Sonoff gut zu gebrauchen. Eine S20 und ein Basic sind auch im Zulauf, werde den Code dann posten.
                      Will das 4ch pro für die Steuerung einer Gartenbewässerung mit 24v Ventilen nutzen, dazu ist das ideal.

                      Das Flashen ist im Tasmota Wiki recht gut beschrieben. Wobei das 4CH Pro scheint hier aber ein wenig "speziell" zu sein. Ich habe es zwar auf Anhieb in den Flashmode bekommen mittels Jumperkabeln direkt am ESP, allerdings hat das Flashen selbst dann eine Zeitlang erst mal nicht funktioniert. Ich flashe die ESP direkt aus der Arduino IDE.
                      Auf dem 4CH Pro habe ich eine Stiftleiste aufgelötet. Als Adapter habe ich einen billigen USB-TTL-Adapter von ebay verwendet, der in anderen Projekten schon funktioniert hat; beim 4CH allerdings nicht. Nach einigem hin und her habe ich dann einen Arduino Uno in den Resetmode gesetzt und in damit als Seriell-Adapter verwendet, damit hat es auch noch nicht direkt geklappt. Erst ein vertauschen der TX-RX Verbindung hat dann letztlich funktioniert. Scheinbar ist das nicht ganz sauber bei den Sonoff Modulen, da man hier öfters von vertauschten Leitungen liest. Danach lief es aber ohne Probleme durch. Das Hauptproblem war schätzungsweise, dass der USB-TTL-Adapter nicht genug Strom für das 4CH-Pro geliefert hat, der Uno hingegen schon. Ich habe noch ein paar Bilder angehangen.

                      Zum Sketch selber:

                      1) Das Sonoff steht direkt ohne Passwortschutz im WLAN. Das ist bei mir unkritisch, da die iOT Dinger alle in einem eigenen Wlan laufen. Vll. setzte ich da aber wenn ich Zeit habe noch einen Zugang drauf.
                      2) Es gibt eine GA, die man als Watchdog nutzen kann. Liest man diese GA aus, so liefert sie eine 1 als Antwort zurück, sofern das Sonoff erreichbar ist. Ich könnte hier wenn gewünscht noch einen Timer einbauen der dann eben alle X Sekunden auf die GA sendet, falls gewünscht. Ich selbst Frage über einen Timer in Edomi hierbei die GA ab.
                      3) Nach einem Schaltbefehl auf die Schalten-GA wird über die RM-GA der entsprechende Status gesendet.
                      4) Die Onboard-Tasten Toggeln jeweils den zugehörigen Kanal und senden dann auf die RM-GA den Status.
                      5) Der Status eines jeden Kanals ist über die RM-GA abfragbar.
                      6) Ein Sperr-Objekt gibt es derzeit nicht, könnte man aber realisieren.
                      7) Der Sketch geht sicher schlanker, aber da hier aktuell kein Speicherplatz-Problem herrscht langt das wohl auch so.
                      8) Das 4CH-Pro hat neben der Wlan Verbindung noch eine 433Mhz Funkverbindung. Diese nutze ich nicht und habe mich damit auch gar nicht beschäftigt. Das 4CH hatte diese Verbindung noch nicht, doch ist das 4CH-PRO von den Anschlüssen her einfach besser und daher zu bevorzugen. ( Hier am besten mal nachlesen... )

                      Gruß, Sven
                      Angehängte Dateien
                      Zuletzt geändert von OleDeluxe; 26.01.2018, 08:50.

                      Kommentar


                        #86
                        Von der Funktion her genau richtig! Sperre wäre noch das Optimum.

                        Wenn ich mir deinen Sketch anschaue, dann müsste ich füt einen S20 ja nur auf 1Kanal alles reduzieren, richtig?!

                        Kommentar


                          #87
                          Ja, prinzipiell sollte es das sein. Noch eben gegenchecken, ob die GPIOs gleich sind, und ob die LED für den Kanal auch parallel zum Relais sitzt.

                          //Edit: Grad nachgeschaut, sollte so funktionieren, die GPIOs sind für den ersten Kanal gleich belegt. Anbei noch ein Bild mit der Pinbelegung.

                          Gruß, Sven
                          Angehängte Dateien
                          Zuletzt geändert von OleDeluxe; 26.01.2018, 09:29.

                          Kommentar


                            #88
                            Sketch für Sonoff Basic und S20:

                            Code:
                            /*
                            * Sonoff Basic + S20 Socket mit KNX Anbindung
                            */
                            
                            #include <esp-knx-ip.h>
                            
                            // WiFi config
                            const char* ssid = "SSID";    //change to your SSID
                            const char* pass = "PW";      //change to your PSK
                            
                            //GPIOs
                            int Ch1_Pin = 12;
                            int Button1_Pin = 0;
                            int LED_Pin = 13;
                            
                            //States
                            int Button1State = 0;
                            int lastButton1State = 1;
                            int Ch1State = 0;
                            
                            //Groupadresses
                            config_id_t Ch1Ack_GA;
                            config_id_t Watchdog_GA;
                            
                            config_id_t hostname_id;
                            
                            void Ch1_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                            {
                                switch (ct)
                                {
                                  case KNX_CT_WRITE:
                                    digitalWrite(Ch1_Pin, *data);
                                    knx.write1Bit(knx.config_get_ga(Ch1Ack_GA), *data);
                                    break;
                                }
                            }
                            
                            void Ch1State_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                            {
                                switch (ct)
                                {
                                  case KNX_CT_READ:
                                    Ch1State = digitalRead(Ch1_Pin);
                                    knx.answer1Bit(knx.config_get_ga(Ch1Ack_GA), Ch1State);
                                    break;
                                }
                            }
                            
                            void Watchdog_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
                            {
                                switch (ct)
                                {
                                  case KNX_CT_READ:
                                    knx.answer1Bit(knx.config_get_ga(Watchdog_GA), 1);
                                    break;
                                }
                            }
                            
                            void setup() {
                                pinMode(LED_Pin, OUTPUT);
                            
                                pinMode(Ch1_Pin, OUTPUT);
                                pinMode(Button1_Pin, INPUT_PULLUP);
                                Serial.begin(9600);
                            
                                // Register the callbacks
                                knx.register_callback("Kanal 1 Schalten", Ch1_callback);
                                knx.register_callback("Kanal 1 Rückmeldung", Ch1State_callback);
                                knx.register_callback("Watchdog", Watchdog_callback);
                            
                                // Register the group addresses
                                Ch1Ack_GA = knx.config_register_ga("Kanal 1 Rückmeldung");
                                Watchdog_GA = knx.config_register_ga("Watchdog");
                            
                                // And the config options
                                hostname_id = knx.config_register_string("Hostname", 20, String("4CH_PRO"));
                            
                                // Load previous values from EEPROM
                                knx.load();
                            
                                // Init WiFi
                                WiFi.hostname(knx.config_get_string(hostname_id));
                                WiFi.mode(WIFI_STA);
                                WiFi.begin(ssid, pass);
                            
                                Serial.println("");
                                Serial.print("[Connecting]");
                                Serial.print(ssid);
                            
                                digitalWrite(LED_Pin, LOW);
                                while (WiFi.status() != WL_CONNECTED) {
                                    digitalWrite(LED_Pin, HIGH);
                                    delay(500);
                                    Serial.print(".");
                                    digitalWrite(LED_Pin, LOW);
                                }
                                digitalWrite(LED_Pin, HIGH);
                            
                                // Start knx
                                knx.start();
                            
                                Serial.println();
                                Serial.println("Connected to wifi");
                                Serial.println(WiFi.localIP());
                                Serial.println(" ");
                            }
                            
                            void loop() {
                                // Process knx events, e.g. webserver
                                knx.loop();
                            
                            //Toggeln der Kanäle bei Positiver Flanke der Buttons
                                Button1State = digitalRead(Button1_Pin);
                                Ch1State = digitalRead(Ch1_Pin);
                                if (Button1State != lastButton1State) {
                                  if (Button1State == LOW) {
                                    if (Ch1State == 1) {
                                      digitalWrite(Ch1_Pin, LOW);
                                      knx.write1Bit(knx.config_get_ga(Ch1Ack_GA), 0);
                                      }
                                      else if (Ch1State == 0){
                                      digitalWrite(Ch1_Pin, HIGH);
                                      knx.write1Bit(knx.config_get_ga(Ch1Ack_GA), 1);
                                      }
                                  }
                                }
                                lastButton1State = Button1State;
                            
                              delay(50);
                            }
                            Zuletzt geändert von OleDeluxe; 28.01.2018, 10:24.

                            Kommentar


                              #89
                              Einen Sonoff POW - also die Variante mit Strommessung - hat noch niemand in KNX eingebunden?


                              Ich habe schon öfter - auch in deutschen Foren, in denen ich unterwegs bin - von explodierenden Sonoffs gelesen. Anscheinend hat Sonoff da aber mittlerweile nachgerüstet. Problem war, dass die Geräte von vor ca. 1 Jahr keine 16A auf Dauer ausgehalten haben. Zu gering dimensionierte bzw schlecht nachgelötete Leiterbahnen...

                              Jedenfalls hab ich genau so einen Sonoff POW zuhausem, den ich ursprünglich für die Stromerfassung des Trockners oder der Waschmaschine verwenden wollte. Aber aufgrund der dort auftretenden hohen Ströme bin ich davon abgekommen. Vielleicht häng ich den vor den Kühlschrank, der zieht nur so um die 500 Watt. Das sollte dann kein Problem sein.

                              Aber inwieweit und ob das in den aktuellen Geräten geändert wurde, entzieht sich meiner Kenntnis.
                              Zuletzt geändert von halloween; 26.01.2018, 09:55.

                              Kommentar


                                #90
                                Ich würde die Dinger auch nur für kleinere Sachen wie etwa die Bewässerungsgeschichte oder mal ne LED Lichterkette einsetzten.

                                Bezüglich POW:

                                Hier findet man ein paar Infos zum verwendeten HLW8012 Chip und wie man den in einem Arduino ausliest.
                                Die zusätzlichen GPIOs für den POW sind:
                                GPIO05 - SEL
                                GPIO13 - CF1
                                GPIO14 - CF

                                Die LED liegt dann auf GPIO15 statt 13.

                                Gruß, Sven

                                Kommentar

                                Lädt...
                                X