Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

  • henfri
    antwortet
    Hallo,

    oh, das wäre ja Klasse!

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • thesing
    antwortet
    @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:


  • henfri
    antwortet
    Hallo,

    henfri Du kannst beim BME also das erste mal programmieren, und danach nicht mehr, oder geht schon das erste mal nicht?
    Nein, schon das erste Mal geht 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.
    Bei mir nicht :-( Flashen und Programmieren geht, aber keine Reaktion auf Schaltbefehle.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Zitat von thesing Beitrag anzeigen
    Warum VS Code und nicht Visual Studio?
    Hi Thomas,

    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.
    Ich weiß, dass Visual Studio der mächtigere Editor ist, ich habe selber über 15 Jahre in der .NET-Entwicklung verbracht (auch wenn das schon wieder 8 Jahre her ist). Ich hatte auch bei Deinem Projekt erstmal mit Visual Studio und VisualGDB angefangen. Nachdem ich dann aber einigermaßen verstanden habe, was bei Dir abgeht (ich meine Build-Technisch, was Du funktional da mit C++ machst, ist weit jenseits meiner Fähigkeiter bzw. ich bräuchte sicherlich lange, mich da einzulesen), hatte ich es testweise mit VS Code und GDB versucht und recht schnell hin bekommen. Bei der Einbindung vom Arduino kam meine OP dazwischen, aber da gehe ich demnächst dran. Und dann habe ich (hoffentlich) die einheitliche Testumgebung, die ich mir Wünsche, um das Ganze durchzuziehen, aber eben mit VS Code und nicht VS.

    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:


  • thesing
    antwortet
    Mal eine blöde Frage: Warum VS Code und nicht Visual Studio?

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    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.

    Zitat von thesing Beitrag anzeigen
    Das WSL von Windows 10 sollte es aber auch schon tun.
    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...

    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:


  • thesing
    antwortet
    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:


  • thesing
    antwortet
    @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:


  • mumpf
    antwortet
    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:
    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
    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.

    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:


  • mumpf
    antwortet
    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

    Code:
    go1.dataPointType(DPT(9,1));
    go2.dataPointType(DPT(5,10);
    go2.value(go1.value())
    mache, dann implizit von double nach int konvertiert wird? Das ist cool...

    Zitat von thesing Beitrag anzeigen
    Die Änderungen sind wie immer noch nicht getestet.
    Nach aktuellem Stand meiner Genesung werde ich in 2-3 Wochen testen können...

    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:


  • thesing
    antwortet
    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:


  • thesing
    antwortet
    Ich habe nun auch die GroupObject-Klasse dokumentiert. Ich hoffe das hilft.

    Einen Kommentar schreiben:


  • thesing
    antwortet
    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-Verzeichnis
    Zuletzt geändert von thesing; 10.06.2019, 21:08.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    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:


  • mumpf
    antwortet
    Zitat von henfri Beitrag anzeigen
    aber ich denke, dass der Arduino Compiler die Größe der Objekte zum Zeitpunkt des Kompilieren wissen muss, oder?
    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.

    Gruß, Waldemar

    Einen Kommentar schreiben:

Lädt...
X