Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 über WLAN an KNX

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

    Ja kann ich zuhause mal machen, allerdings ist die Seite genauso wie im ersten Post. Sind halt 12 GA's zu setzen, Intervall und phys. Adresse

    Kommentar


      Ah, ok. Das hatte ich schon vergessen.
      Reicht mir. Danke!

      Kommentar


        Zitat von OleDeluxe Beitrag anzeigen
        Brick

        Moin Martin,
        eine Leseanfrage verarbeitest du in einem Callback mit dem Aufruft als "KNX_CT_READ". Innerhalb der Callback-Funktion kannst du dann den Code ausführen. Im Beispiel antwortet eben diese GA auf die Anfrage. Analog zum beim "KNX_CT_WRITE"
        Hi,
        Schreibend kann ich auf meinen ESP zugreifen und LEDs schalten. Nur das Auslesen klappt nicht. Es wird nicht in den Callback gesprungen. Ich habe Serial.print() Ausgaben drin, die beim Schreiben aufgerufen werden. Nicht jedoch beim Lesen.
        Hat jemand spontan einen Tipp?
        Im setup
        Code:
        knx.register_callback("Switch Led", switch_callback);
        Und dann
        Code:
        void switch_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
        {
          Serial.print("switch callback - ");
          switch (ct)
          {
          case KNX_CT_WRITE:
            Serial.print("write: ");
            Serial.println(*data);
            // Save received data
            status = *data;
            setLed();
            break;
          case KNX_CT_READ:
            Serial.print("read. ");
            // Answer with saved data
            Serial.print("Sending status...");
            knx.answer1Bit(received_on, status);
            Serial.println(" done.");
            break;
          default:
            Serial.println("unknown");
            break;
          }
        }
        Wenn ich per ETS Lese/Schreibe, ändert sich die Darstellung in der SmartVisu. D.h. die Telegramme sind unterwegs.
        Update: Jetzt geht es. Ich habe ein delay(50) in den loop gebaut
        Zuletzt geändert von Echo; 07.02.2018, 21:32.

        Kommentar


          Hallo benji,

          vielen Dank für Deine Arbeit!.

          Hast Du den Anschluss der DS18B20 schon mal parasitär probiert? Hier gibt es dazu einige Infos:
          https://github.com/PaulStoffregen/OneWire/issues/14
          https://github.com/dersimn/ArduinoOneWirePullup

          vG
          Wolfgang

          Kommentar


            Hey Jungs,

            ich bekomms einfach nicht hin... Hab jetzt die neueste Version der Lib geladen (0.2.0)

            Kompilieren geht... Upload auch, aber der Webserver wird nicht gestartet.. wenn ich ne Lib von vor
            2 Monaten nehm geht zwar der Webserver wieder, aber damals war wohl das Callback noch nicht
            implementiert... vielleicht sieht ja einer von euch das Problem.

            Das Ding soll einfach nur periodisch den Entfernungsmesser (HC-SR04) auslesen und die Daten senden.
            das hat eigentlich auch mit der alten Lib funktioniert. Jetzt will ich aber auch per Lesenanforderung den
            Wert gesendet bekommen. Das geht wie gesagt nicht..

            Code:
            #include <esp-knx-ip.h>
            
            // WiFi config
            const char* ssid = "WLAN";
            const char* pass = "WLAN Key";
            
            //Define
            #define LED_PIN LED_BUILTIN
            #define UPDATE_INTERVAL 10000 // Default send and debug interval
            #define echoPin D7 // Echo Pin
            #define trigPin D6 // Trigger Pin
            #define MinDist 5
            #define MaxDist 700
            
            //Variablendeklaration
            unsigned long next_data_change = 0;
            unsigned long next_debug_change = 0;
            
            // Duration used to calculate distance
            long duration, distance;  
            int diverence, percentage;
            
            //Gruppenadressen
            config_id_t dist_ga;
            config_id_t distproz_ga;
            
            //Konfigurationselemente
            config_id_t hostname_id;
            config_id_t send_rate_id;
            config_id_t debug_rate_id;
            config_id_t distmin_id;
            config_id_t distmax_id;
            
            
            
            void setup() {
                Serial.begin(9600);
                //Serial.begin(115200);
                pinMode(LED_PIN, OUTPUT);
                pinMode(trigPin, OUTPUT);
                pinMode(echoPin, INPUT);
            
                //Register der Callbacks
                knx.register_callback("Distanz", dist_callback);
                knx.register_callback("Distanz Status", distState_callback);
            
                //Register der Gruppenadressen
                dist_ga = knx.config_register_ga("Entfernung");
                distproz_ga = knx.config_register_ga("Entfernung Prozent");
            
                // And the config options
                hostname_id = knx.config_register_string("Hostname", 20, String("env"));
                send_rate_id = knx.config_register_int("Senderate (ms)", UPDATE_INTERVAL);
                debug_rate_id = knx.config_register_int("Serial debug rate (ms)", UPDATE_INTERVAL);
                distmin_id = knx.config_register_int("Entfernung Minimum", MinDist);
                distmax_id = knx.config_register_int("Entfernung Maximum", MaxDist);
            
                // Load previous values from EEPROM
                knx.load();
            
            
                // Init WiFi
                WiFi.hostname(knx.config_get_string(hostname_id));
                WiFi.begin(ssid, pass);
            
                Serial.println("");
                Serial.print("[Connecting]");
                Serial.print(ssid);
            
                digitalWrite(LED_PIN, HIGH);
                while (WiFi.status() != WL_CONNECTED) {
                    digitalWrite(LED_PIN, LOW);
                    delay(500);
                    Serial.print(".");
                    digitalWrite(LED_PIN, HIGH);
                }
                digitalWrite(LED_PIN, LOW);
            
            
                // 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();
            
               unsigned long now = millis();
            
                // Debug Loop
                if (next_debug_change < now)
                {
                    next_debug_change = now + knx.config_get_int(debug_rate_id); // Read debug rate setting
            
                    if (WiFi.status() != WL_CONNECTED)
                    {
                        digitalWrite(LED_PIN, HIGH);
                        Serial.println("WIFI ERROR");
                    }else
                    {
                        digitalWrite(LED_PIN, LOW);
                        Serial.println("WIFI OK");
                    }
                }
            
                // Data Loop
                if (next_data_change < now)
                {
                    next_data_change = now + knx.config_get_int(send_rate_id);
                      digitalWrite(trigPin, LOW);
                      delayMicroseconds(2);
                      digitalWrite(trigPin, HIGH);
                      delayMicroseconds(10);
                      digitalWrite(trigPin, LOW);
                      duration = pulseIn(echoPin, HIGH);
                      //Calculate the distance (in cm) based on the speed of sound.
                      distance = duration/58.2;
                      Serial.print("Entfernung: ");
                      Serial.println(distance);
                      Serial.print("Min: ");
                      Serial.println(knx.config_get_int(distmin_id));
                      Serial.print("Max: ");
                      Serial.println(knx.config_get_int(distmax_id));
                      diverence = knx.config_get_int(distmax_id)-knx.config_get_int(distmin_id);
                      Serial.print("Differenz: ");
                      Serial.println(diverence);
                      percentage = map(distance,knx.config_get_int(distmin_id),knx.config_get_int(distmax_id),0,100);
                      Serial.print("%: ");
                      Serial.println(percentage);
                      knx.write2ByteInt(knx.config_get_ga(distproz_ga), percentage);
                      knx.write2ByteInt(knx.config_get_ga(dist_ga), distance);
                }
                delay(50);
             }
            
             void dist_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
            {
                switch (ct)
                {
                  case KNX_CT_WRITE:
                    knx.write2ByteInt(knx.config_get_ga(dist_ga), *data);
                    //knx.write1Bit(knx.config_get_ga(Ch1Ack_GA), *data);
                    break;
                }
            }
            
            void distState_callback(knx_command_type_t ct, address_t const &received_on, uint8_t data_len, uint8_t *data)
            {
                switch (ct)
                {
                  case KNX_CT_READ:
                    digitalWrite(trigPin, LOW);
                    delayMicroseconds(2);
                    digitalWrite(trigPin, HIGH);
                    delayMicroseconds(10);
                    digitalWrite(trigPin, LOW);
                    duration = pulseIn(echoPin, HIGH);
                    distance = duration/58.2;
                    knx.answer1Bit(knx.config_get_ga(dist_ga), distance);
                    break;
                }
            }
            Gruß Martin
            Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

            Kommentar


              hab jetzt mal geschaut.. mit meiner alten Lib kompiliert er und funktioniert auch.. nur mit der aktuellen nicht..
              Leider ist in der alten Lib das knx.answer1Bit noch nicht dabei..

              Hat zufällig wer ne mittelalte Lib ?

              Gruß Martin
              Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

              Kommentar


                Die geht bei mir mit Callback und 1Bit

                Gruß
                Wolfgang
                Angehängte Dateien

                Kommentar


                  SirUli
                  Zitat von SirUli Beitrag anzeigen
                  Und Optional:
                  • 100 BSS84 -> 1,19$ (hier)
                  • Ich würde noch ne Adapter-Platte dazubestellen, hab ich aber grad nicht parat.
                  Man braucht nur einen DS2482 pro Bus-Strang. Also kann man mit dem obigen Set schon 5 Bus-Stränge aufbauen.
                  Welche AdapterPlatte meinst Du? Einfach Lochraster, um alles darauf zu bringen?

                  Kommentar


                    Noch mal so als Inspiration....
                    Hat schon mal jemand darüber nachgedacht, auch einen H801 RGBW-Controller direkt mit KNX zu verbinden, denn auch dieser H801 basiert auf dem ESP8266.
                    Wer kennt sich damit aus?

                    Kommentar


                      Zitat von Sisamiwe Beitrag anzeigen
                      Noch mal so als Inspiration....
                      Hat schon mal jemand darüber nachgedacht, auch einen H801 RGBW-Controller direkt mit KNX zu verbinden, denn auch dieser H801 basiert auf dem ESP8266.
                      Wer kennt sich damit aus?
                      Jep, habe ich. Und werde ich. Ich kann keinen Zeitraum nennen, aber wenn ich es fertig habe, werde ich den Code zur Verfügung stellen.

                      Kommentar


                        Bin dabei! Hab grad so ein Ding bestellt.

                        Kommentar


                          So.. kurzes Feedback...

                          Läääuuft....

                          noch ne kleine Frage zum Verständnis...
                          Bei den Callbacks trage ich die gleiche GA ein, wie die SendeGAs haben,
                          damit ich auf eine Leseanforderung auf der gleichen GA eine Antwort bekomme, oder ?

                          Oder sollte man lieber eine normale GA machen und eine Status GA (wie es bei den
                          meisten KNX Geräten ja auch ist) und die Leseanforderung dann auf die StatusGA machen ?
                          Ich seh davon aktuell keinen Vorteil...

                          Bereichcb.png
                          Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                          Kommentar


                            Zitat von Brick Beitrag anzeigen
                            So.. kurzes Feedback...

                            Läääuuft....
                            Und wodran lag es?
                            Zitat von Brick Beitrag anzeigen
                            noch ne kleine Frage zum Verständnis...
                            Bei den Callbacks trage ich die gleiche GA ein, wie die SendeGAs haben,
                            damit ich auf eine Leseanforderung auf der gleichen GA eine Antwort bekomme, oder ?
                            Ja
                            Zitat von Brick Beitrag anzeigen
                            Oder sollte man lieber eine normale GA machen und eine Status GA (wie es bei den
                            meisten KNX Geräten ja auch ist) und die Leseanforderung dann auf die StatusGA machen ?
                            Ich seh davon aktuell keinen Vorteil...
                            Ich mache es mit eigener Melde-GA, so bekomme ich nach einem Write auch eine gewisse Rückmeldung ob es geklappt hat. Ich versuche hier möglichst das ganze wie bei KNX-Geräten aufzubauen.

                            Gruß, Sven

                            Kommentar


                              OleDeluxe ... es lag an der Lib.. meine war scheinbar zu alt.. da waren ein paar Funktionen noch nicht vorhanden...
                              jetzt mit der von dir (Ende Dezember) läuft alles wie es soll...

                              OK.. bei dem Sketch mit der Entfernungsmessung brauch ich die Rückmeldung eigentlich eh nicht,
                              da es ja zyklisch senden soll.. aber für zukünftige Sachen werd ich dann das wohl auch getrennt machen..
                              wie du sagst, um es wie bei KNX Geräten aufgebaut zu haben...

                              ​​​​​​
                              Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                              Kommentar


                                Zitat von Sisamiwe Beitrag anzeigen
                                Welche AdapterPlatte meinst Du? Einfach Lochraster, um alles darauf zu bringen?
                                Einen "SOT-23-3 Adapter" - darunter findet man die Platine bei Reichelt, ebay etc. Bringt dann diesen Chip auch auf Lochraster für den einfachen Aufbau auf einem Breadboard.

                                Kommentar

                                Lädt...
                                X