Hallo,
oh, das wäre ja Klasse!
Gruß,
Hendrik
Ankündigung
Einklappen
Keine Ankündigung bisher.
ESP8266 KNX mit ETS
Einklappen
X
-
@henfri: ich hab mir mal einen neuen S20 bestellt. Der alte reagiert nicht mehr auf Kontaktversuche. Hab ich wahrscheinlich mal VCC mit GND vertauscht. Den BME werde ich mir mal als nächstes nochmal im Detail anschauen und dabei gleich eine KO für Lüftung mit Schwellwerten einbauen. Dann kann ich das auch mal für mehr als zur Visualisierung nutzen.
Einen Kommentar schreiben:
-
Hallo,
Nein, schon das erste Mal geht nicht.henfri Du kannst beim BME also das erste mal programmieren, und danach nicht mehr, oder geht schon das erste mal nicht?
Bei mir nicht :-( Flashen und Programmieren geht, aber keine Reaktion auf Schaltbefehle.Zum Sonoff: hab ich bei mir nicht nochmal getestet. Da aber jemand ein Issue dazu auf Github eröffnet und wieder geschlossen hat, vermute ich, dass es geht.
Gruß,
Hendrik
Einen Kommentar schreiben:
-
Hi Thomas,Zitat von thesing Beitrag anzeigenWarum VS Code und nicht Visual Studio?
dafür gibt es keinen wirklich "harten" Grund, aber viele kleinere "weiche":- Gewöhnung: Ich mache fast alles, was zu editieren ist, mit VS Code (JSON, XML, C#, jeztzt C/C++, YAML, normale Textdateien, etc...)
- Lightweight: Der Editor ist schnell da und mir gefällt das Extension-Konzept
- Remote: Das neu verfügbare Remote-Editing finde ich richtig gelungen! Der Editor läuft unter Windows, das Projekt ist auf der WSL unter Debian und man hat exakt die selbe "Experience" wie beim lokalen editieren
- Gute und einfache Git Anbindung.
- Ich habe VisualGDB nicht wirklich verstanden (hatte die Testlizenz) und dann ist meine Testzeit wegen des Unfalls zu 50% verfallen.
- Ich wollte wissen, ob ich es auch kostenfrei mit debugging unter Linux hin bekomme. Dass es geklappt hat, liegt sicherlich auch an Deinem erstklassigen Projektaufbau mit cmake, sauberer Verzeichnisstruktur usw. Hier wirklich

- Mit VS Code kann ich dann auch die Arduino IDE ersetzen
- Bei Visual Studio passiert vieles "unter der Hand", häufig verstehe ich nicht (bzw. erst viel später), was wo wie parametriert/generiert wurde. Bei VS Code muss man zwar mehr manuell machen, aber dadurch blicke ich eher, was passiert. Gibt mir dann das Gefühl, dass ich besser analysieren kann, wenn mal was nicht läuft.
Das mit den VS Code Files (Push-Request) mache ich erst, wenn alles funktioniert, auch Arduino, also realistisch gesehen erst, wenn ich wieder zu Hause bin.
Gruß, Waldemar
Einen Kommentar schreiben:
-
Mal eine blöde Frage: Warum VS Code und nicht Visual Studio?
Einen Kommentar schreiben:
-
Hi Thomas,
ich weiß (stand heute) nicht, wie man Hex-Dateien flasht, aber ich weiß, wie ich mit der Arduino-IDE Deine Lib nutze... Ich bin sicherlich nicht repräsentativ, aber mir würden fertige Hex-Dateien nicht so viel helfen.
Ja, genau das ist meine Notlösung für's Krankenhaus. Ich hab mir nur zwischendurch in den Kopf gesetzt, mein Projekt so zu strukturieren, dass ich exakt das selbe coding für Linux und für den SAMD nutzen kann. Außerdem will ich das mit VS Code debugbar haben (nur den Linux-Teil). Deswegen probiere ich auch immer wieder die SAMD-Kompilierung. Aber nur, weil ich da ein Problem melde, heißt das nicht, dass Du da sofort ran musst...Zitat von thesing Beitrag anzeigenDas WSL von Windows 10 sollte es aber auch schon tun.
Meine Testumgebung reicht aber nicht für echte KNX-Tests, denn mein VPN nach Hause ist nicht so konfiguriert, dass es mit Multicast läuft. Und mein Laptop hat ne Firewall installiert, an die ich nicht ran komme (Dienstlaptop). Deswegen sage ich immer, dass es noch 2-3 Wochen dauert, dann komme ich erst nach Hause...
Vielen Dank für Deine Hilfe und Deinen Support.
Gruß, Waldemar
Einen Kommentar schreiben:
-
Würde es eigentlich etwas bringen fertig generierte hex-Dateien in github hochzuladen? Oder ist jemand der weiß wie man hex-Dateien flasht auch in der Lage sich mit der arduino-ide eine zu erstellen?
Einen Kommentar schreiben:
-
@mumpf: Ja das ist aktuell kaputt. Das sagt der Travis mir auch schon. Der Compiler unter Linux ist klug genug um zu erkennen, dass int32_t und int das gleiche sind. Der von Arduino SAMD nicht. Ich mach das heute noch ganz.
Zur Zuweisung: Das sollte so funktionieren.
Zu dem Dpt: Du musst immer einen gültigen Subtyp mit angeben. Es gibt halt keinen Typ 9.* sondern nur die konkreten Subtypen. Der index ist dazu da um bei komplexeren Datenpunkttypen auf die einzelnen Komponenten zuzugreifen.
Beispiel:
Dpt 18.001 ist Bit-Kodiert: CRUUUUUU . Das Flag C hat index 0, index 1 fehlt, da die zweite Komponente ein reserviertes Bit ist, und index 2 ist die Szenennummer (6 Bit).
Wahrscheinlich ist es besser statt der Dpt-Klasse einfach ein Enum mit allen implementieren Datenpunkttypen zu erstellen. Dann ist auch klar welche Datenpunkttypen implementiert wurden.
Übrigens. Wenn du eh schon eine VM auf dem Laptop hast, kannst du doch mit ETS-Demo schon weiter arbeiten. Oder übersehe ich was? Ich mach das auch direkt auf dem Laptop mit einer Debian-Virtualbox. (Das WSL von Windows 10 sollte es aber auch schon tun.)
Einen Kommentar schreiben:
-
Hi Thomas,
ist jetzt kein wirklicher Test, aber ich habe mal versucht, Deine neuste Version mit der Arduino IDE zu compilieren. Bei den vorherigen Versionen ging das immer, ich gehe davon aus, dass das auch gewollt ist.
Auf jeden Fall bekomme ich folgende Fehler:
Da ich, wie schon erwähnt, bisher noch nicht so viel mit der Arduino-Umgebung gemacht habe, könnte es auch an mir liegen, da wäre ich für einen Tipp dankbar, woran das liegen könnte.Code:C:\Users\User\Documents\Arduino\libraries\knx\src\knx\dptconvert.cpp: In function 'int busValueToAccess(const uint8_t*, int, const Dpt&, KNXValue&)': C:\Users\User\Documents\Arduino\libraries\knx\src\knx\dptconvert.cpp:601:19: error: ambiguous overload for 'operator=' (operand types are 'KNXValue' and 'int') value = digits; ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\dptconvert.cpp:601:19: note: candidates are: In file included from C:\Users\User\Documents\Arduino\libraries\knx\src\knx\dptconvert.h:34:0, from C:\Users\User\Documents\Arduino\libraries\knx\src\knx\dptconvert.cpp:1: C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:35:15: note: KNXValue& KNXValue::operator=(bool) KNXValue& operator=(const bool value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:36:15: note: KNXValue& KNXValue::operator=(uint8_t) KNXValue& operator=(const uint8_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:37:15: note: KNXValue& KNXValue::operator=(uint16_t) KNXValue& operator=(const uint16_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:38:15: note: KNXValue& KNXValue::operator=(uint32_t) KNXValue& operator=(const uint32_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:39:15: note: KNXValue& KNXValue::operator=(uint64_t) KNXValue& operator=(const uint64_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:40:15: note: KNXValue& KNXValue::operator=(int8_t) KNXValue& operator=(const int8_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:41:15: note: KNXValue& KNXValue::operator=(int16_t) KNXValue& operator=(const int16_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:42:15: note: KNXValue& KNXValue::operator=(int32_t) KNXValue& operator=(const int32_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:43:15: note: KNXValue& KNXValue::operator=(int64_t) KNXValue& operator=(const int64_t value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:44:15: note: KNXValue& KNXValue::operator=(double) KNXValue& operator=(const double value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:45:15: note: KNXValue& KNXValue::operator=(const char*) <near match> KNXValue& operator=(const char* value); ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:45:15: note: no known conversion for argument 1 from 'int' to 'const char*' C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:6:7: note: KNXValue& KNXValue::operator=(const KNXValue&) class KNXValue ^ C:\Users\User\Documents\Arduino\libraries\knx\src\knx\knx_value.h:6:7: note: KNXValue& KNXValue::operator=(KNXValue&&) exit status 1 [Error] Exit with code=1
Vorgehen zur Reproduktion: Ich habe Deine Files ins Arduino/library-Verzeichnis kopiert und beim knx-demo Sketch auf verify gedrückt. Ich arbeite unter Windows...
Gruß, Waldemar
Einen Kommentar schreiben:
-
Hi Thomas,
das ist klasse, das kann ich gut gebrauchen, ich will an mehreren Stellen von einem DPT in einen anderen wandeln. Sehe ich richtig, dass wenn ich
mache, dann implizit von double nach int konvertiert wird? Das ist cool...Code:go1.dataPointType(DPT(9,1)); go2.dataPointType(DPT(5,10); go2.value(go1.value())
Nach aktuellem Stand meiner Genesung werde ich in 2-3 Wochen testen können...Zitat von thesing Beitrag anzeigenDie Änderungen sind wie immer noch nicht getestet.
Appropos: Was ist den das 3. Argument beim DPT-Konstruktor? Kenne ich gar nicht... Und kann ich auch ein DPT(9) machen (ohne Subtype), oder muss ich mich immer für einen bestimmten entscheiden?
Gruß, Waldemar
Einen Kommentar schreiben:
-
Und schon wieder ein leichte Änderung der Api. Die Klasse KnxValue verhält sich nun in etwa wie ein Typ in Skriptsprachen. D.h. es wird sich gemerkt, was man zu weist und es wird bei der Benutzung (hoffentlich) richtig konvertiert.
go.value(4.9) erzeugt also implizit ein KnxValue-Objekt vom Typ double.
double foo = go.value(); erhält den Wert als KnxValue-Objekt und wandelt ihn in ein double um. Wenn man einen bestimten Typ will, muss man casten:
double foo = (int)go.value(); Wert als KnxValue-Objekt wirt in ein int gewandelt und von dort in ein double.
Bei Strings erhält man immer "" es sei denn das KO ist auch vom Typ String. Das liegt daran, dass ich sonst den Speicher für den String im KnxValue managen müsste. (Speicher reservieren und auch wieder frei geben.) Vielleicht kommt das noch später.
Die Änderungen sind wie immer noch nicht getestet.
Einen Kommentar schreiben:
-
Ich habe nun auch die GroupObject-Klasse dokumentiert. Ich hoffe das hilft.
Einen Kommentar schreiben:
-
henfri Du kannst beim BME also das erste mal programmieren, und danach nicht mehr, oder geht schon das erste mal nicht? Zum Sonoff: hab ich bei mir nicht nochmal getestet. Da aber jemand ein Issue dazu auf Github eröffnet und wieder geschlossen hat, vermute ich, dass es geht.
@mumpf: zur value() Problematik: Die Methode gibt es im wesentlichen in zwei Versionen: bei der einen gibt man den Dpt mit an:
go.value(1.4, Dpt(9, 1));
bei der anderen gibt man nur den Wert rein:
go.value(1.4);
dafür muss man den Dpt dann aber vorher mit
go.datapointType(Dpt(9,1));
setzen. Von ETS kommt nur die Größe des KO und nicht der Datenpunkttyp.
Die Nummer von einem KO kriegst du mit go.asap() (für Application Service Access Point was letztlich die KO-Nummer ist).
Die VS-Code Dateien brauch ist selber nicht. Vielleicht helfen die aber anderen. Du kannst gern einen Pull-Request dafür stellen. Pack die einfach mit ins visualstudio-VerzeichnisZuletzt geändert von thesing; 10.06.2019, 21:08.
Einen Kommentar schreiben:
-
Hi Thomas,
ich hab wirklich gesucht... sorry, wenn das eine blöde Frage ist:
Finde ich zu einem gegebenen GroupObject irgendwie dessen Nummer raus? Also die Umkehrung der Funktion knxFacade::getGroupObject(uint16_t goNr) ?
Hintergrund: Ich konnte mein komplettes Coding abhängig von einen Channel-Parameter schreiben, so dass ich dynamisch die Anzahl Kanäle wählen kann (zum Testen reichen 3, produktiv sollen es 80 werden). Die einzige Stelle, wo das nicht hinhaut, sind die callbacks für die Eingänge. Ich müsste für 80 Kanäle a 2 Eingänge 160 callback-Funktionen anlegen, die alle ein go als Argument bekommen. Wenn ich aus dem go aber seine Nummer rausfinden könnte, komme ich mit 1 callback-Funktion aus und kann anhand der Nummer dynamisch dispatchen.
Ich hoffe, es ist klar geworden, was ich suche, sonst erkläre ich das gerne anhand vom Beispielcoding...
Gruß, Waldemar
Einen Kommentar schreiben:
-
Ich hoffe nicht! Wäre auch ein Rückschritt. Denn bei mir ist der DPT abhängig von Parametern, die man in der ETS setzt. Ich kann somit den DPT zur Laufzeit setzen, aber zur Compile-Time kenne ich den nicht (könnte aber den größten nehmen). Da es aber mit dem alten API mit unterschiedlichen DPT funktioniert hat, denke ich nicht, dass es jetzt anders sein wird.Zitat von henfri Beitrag anzeigenaber ich denke, dass der Arduino Compiler die Größe der Objekte zum Zeitpunkt des Kompilieren wissen muss, oder?
Gruß, Waldemar
Einen Kommentar schreiben:


Einen Kommentar schreiben: