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
Ankündigung
Einklappen
Keine Ankündigung bisher.
ESP8266 über WLAN an KNX
Einklappen
X
-
Zitat von OleDeluxe Beitrag anzeigenBrick
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"
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);
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; } }
Update: Jetzt geht es. Ich habe ein delay(50) in den loop gebautZuletzt 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; } }
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ß MartinDie Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.
Kommentar
-
Die geht bei mir mit Callback und 1Bit
Gruß
WolfgangAngehängte Dateien
Kommentar
-
SirUli
Zitat von SirUli Beitrag anzeigenUnd Optional:- 100 BSS84 -> 1,19$ (hier)
- Ich würde noch ne Adapter-Platte dazubestellen, hab ich aber grad nicht parat.
Kommentar
-
Zitat von Sisamiwe Beitrag anzeigenNoch 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
-
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.
- Likes 1
Kommentar
-
Zitat von Brick Beitrag anzeigenSo.. kurzes Feedback...
Läääuuft....
Zitat von Brick Beitrag anzeigennoch 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 ?
Zitat von Brick Beitrag anzeigenOder 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...
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 anzeigenWelche AdapterPlatte meinst Du? Einfach Lochraster, um alles darauf zu bringen?
Kommentar
Kommentar