Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

  • Alloc
    antwortet
    Oh, auf die Idee die "Quell-XML" zu bearbeiten kam ich gar nicht, dachte das wäre was eigenes von deinem Tool
    Hatte nur in das knxprod-Archiv geschaut bei einem der Beispiele von dir und meiner eigenen. Dann werde ich das mal dort anpassen.

    Vielleicht finde ich ja auch die Zeit, am CreateKnxProd selber etwas zu basteln, kann da aber nichts versprechen. Zur Zeit komme ich zu wenig (daher ja auch noch nicht sooo weit hier), Arbeit und Frau geht vor

    Für die eigentliche Bibliothek werde ich aber definitv ein paar Codeänderungen als Vorschläge einreichen. Auch nur eine Zeitfrage, wann das passiert.


    Aber hier nochmals: Super Bibliothek, einfacher geht es da ja kaum noch, um KNX in seine eigenen Projekte zu bekommen. Im Prinzip reicht ja im einfachsten Fall wirklich ein SAMD21 Board + CC1101 Modul, paar Drähte und das wars

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Die Dpt habe ich von einem knxd branch übernommen. Das kann gern überarbeitet werden. Das CreateKnxProd-Tool kann nur das nötigste. Ich hatte keine Lust das ganze Knx-Manufacturer-Tool nachzubauen. Pull-Requests für Erweiterungen werden gern angenommen.

    Man sollte die xml-Datei aber von Hand modifizieren können, dann in CreateKnxProd öffnen und dann einfach exportieren können.

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    So, mal wieder ein kurzes Update: Erste "Applikation" steht (bin ja immer noch am evaluieren der ganzen Komponenten, ob sie für mein Projekt taugen, dann kommt erstmal das Platinendesign dran). Kann per RF meine LED-Pulsieren-Ansteuerung an/ausschalten und die RTC wird auch per KNX eingestellt. Läuft grundsätzlich soweit alles prima

    Gibt es einen Grund, warum DPT_TimeOfDay als Dpt(10, 1) und nicht Dpt(10, 1, 1) definiert ist? Wenn ich den Code für die Konvertierung richtig lese bringt einem Index 0 doch gar nichts? Das hat mich jedenfalls erstmal stolpern lassen

    Ansonsten ist mir das CreateKnxProd-Tool noch ein Rätsel. Ich hab zwar jetzt erstmal einen simplen Aufbau, zwei KOs und zwei Parameter, aber ich hab noch nicht raus, wie ich bei den Parametern irgendwas einstelle außer den Typ. Sprich bei "Ganze Zahl" zum Beispiel den gültigen Bereich oder bei "Aufzählung" die Elemente. Oder gar eine Checkbox / Radiobuttons? Muss ich für all diese Dinge wirklich die generierte KnxProd-Datei manuell anpassen? Wenn ja, wird dadurch nicht deren Signatur ungültig?

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    Jetzt ist es da

    Dann kann man dort Dokumentieren, ohne jedes mal einen Pull-Request erstellen zu müssen für einzelne Textdateien

    PS: Bei mir läuft jetzt das Setup SAMD21 (SparkFun SAMD21 Mini Breakout) und CC1101 (Laqiya CC1101 868 MHz Modul) soweit, sprich ich konnte die PA vergeben. Denke damit ist das gröbste schon geschafft

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Das wiki sollte eigentlich da sein: https://github.com/thelsing/knx/wiki
    Ich seh es zumindest. Und es ist auch auf public gesetzt.

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    Ja, muss ich mir mal anschauen. Die Arduino IDE ist letztlich ja auch nur ein besserer Texteditor (noch nicht mal Code-Completion, von weiteren Fähigkeiten ganz zu schweigen ). Aber zumindest für den Anfang reicht es, nachdem man die grundlegendsten Dinge mit den Libraries am Laufen hat

    Musste aber jetzt erstmal noch auf die harte Tour feststellen, dass es für den SAMD21 auch nicht reicht, die Libraries drin zu haben. Die EEPROM-Emulation fliegt einem nämlich dann um die Ohren, weil die standardmäßig nur 1 kiB emuliert, die KNX-Lib aber mindestens 8 kiB erwartet. Das könnte schon mal mit in die config.h


    Ich schreib aber fleißig mit und werd das später dann als PR für eine neue Datei im doc-Ordner bereitstellen. Wobei ich ein GitHub-Wiki ja angenehmer fände, aber das ist ja aktuell noch aus, thesing ? Du hattest zwar glaub mal erwähnt es aktiviert zu haben, ich kann aber keins sehen. Eventuell gibts da noch Rechte die eingestellt werden müssen?

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Chris,

    wenn Du jemand bist, der sich mit make und gcc auskennt, wäre für Dich vielleicht PlatformIO besser (statt der Arduino IDE). Ich finde es transparenter, was da abgeht... ist nur ein Vorschlag.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    Ok, heute nochmal mit frischem Hirn draufgeschaut. Es ist natürlich der Linker der meckert, die Header-Files während des Kompilierens werden ja alle gefunden.

    Nochmal etwas recherchiert um festzustellen, dass man einfach das ganze KNX-Repo als Library in der Arduino IDE hinzufügen muss, nicht nur den src-Unterordner. Dann klappt das auch

    Mal schaun wann ich dann den ersten KNX-Test laufen hab

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    Hm, also irgendwas mach ich falsch ... Dieses Arduino-Zeug ist für mich aber auch komisch, bin klassische Entwicklung mit make + gcc etc gewohnt

    Also ich habe bisher folgendes gemacht:
    • Vom Hauptrepo ( https://github.com/thelsing/knx ) den Master-Branch geklont
    • Dazu dein FlashStorage-Repo ( https://github.com/thelsing/FlashStorage ), da ich ja einen SAMD21 nutze
    • Dann mal in der Arduino-IDE die examples/knx-demo/knx-demo.ino geöffnet, unter Sketch -> Include Library -> Add .ZIP Library den src-Ordner vom Hauptrepo hinzugefügt damit das gefunden wird (gibt sicher noch einen besseren Weg, konnte aber in der Arduino-IDE nichts finden, um den Include-Path anzupassen)
    • Unter Tools -> Board das "SparkFun SAMD21 Mini Breakout" gewählt
    • Klick auf Verify bringt eine Menge Fehler, los gehts schon mit:
      Code:
      sketch\knx-demo.ino.cpp.o: In function `resetCallback(GroupObject&)':
      	C:\Users\ci\Documents\Arduino\Sketches\knx-demo/knx-demo.ino:48: undefined reference to `GroupObject::value()'
      	C:\Users\ci\Documents\Arduino\Sketches\knx-demo/knx-demo.ino:48: undefined reference to `KNXValue::operator bool() const'

    Und halt noch ne Menge mehr in der Richtung. Die Header findet er aber scheinbar, sonst wird ja gemeckert, dass die eben nicht gefunden werden (hatte ich bevor ich die Library in der IDE hinzugefügt hatte).

    Muss ich sonst noch etwas ändern/machen, damit das richtig baut?

    Grüße,
    Chris

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Ich habe übrigens gerade einen Pull-Request von Nanosonde gemergt. Durch diesen kann der Stack knx data secure. Ausprobiert habe ich selbe leider noch nicht. Aber schon mal vielen Dank an Nanosonde .

    VG
    Thomas

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    Danke Thomas. Werd das dann einfach mal probieren, wenn ich die Bestellliste zusammen habe

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Das Medium kann man einfach über ein #define in der config.h wechseln. Allerdings gibt es aktuell einen Fehler bei samd im master-branch. Siehe https://github.com/thelsing/knx/issues/58.
    Die Hardware sollte recht einfach wie in der Dokumentation beschrieben verbunden werden. Als Beispiel kannst du normal das knx-demo Projekt nehmen. Es kommt nur darauf an welche knxprod-Datei in ETS importiert wird, und welches Medium gesetzt wurde. Dem "Anwendungscode" ist es total egal welches Medium genutzt wird.

    Einen Kommentar schreiben:


  • Alloc
    antwortet
    Hi,

    erstmal vielen Dank an Thomas für dieses Projekt, finde das super was hier so entwickelt wird!

    Nanosonde und hotze oder gerne auch jeder andere: Hat schon jemand aktiv ein KNX-RF-Gerät mit dem Stack in Betrieb? Funktioniert das ohne Probleme mit dem aktuellen Code aus dem Git? Welche HW habt ihr dazu verwendet?

    Im Git finde ich kein Beispiel der die RF-Implementierung nutzt und die Textdatei im docu-Ordner ist da auch etwas knapp gehalten An sich will ich auch sowieso letztlich ein KNX-TP-Gerät bauen, aber da wir aktuell nur einen Testaufbau im Arbeitszimmer haben (richtige Installation erst in gut zwei Jahren in der neuen Wohnung) wäre es natürlich super praktisch, wenn ich erstmal einfach den Aufbau mit RF machen könnte und wenn dann alles wie gewünscht läuft die RF-HW durch eine BCU ersetzen. In der Software sollte dazu ja eigentlich lediglich von RF auf TP umgestellt werden müssen?

    Grüße,
    ​​​​​​​Chris

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    HI Thomas,

    danke für die ausführliche Antwort.
    Zitat von thesing Beitrag anzeigen
    so langsam merkst du warum bei vielen kommerziellen Geräten bei 255 KOs Schluß ist
    Deswegen verwende ich ja Deinen Stack - weil er mir wesentlich mehr Möglichkeiten bietet .

    Zitat von thesing Beitrag anzeigen
    Dazu müsste man GroupObjectTable::_groupObjects zum Typ GroupObject*[] machen,
    Das traue ich mir nicht wirklich zu, würde da erst dran gehen, wenn ich wirklich in Speicherprobleme laufe.

    Zitat von thesing Beitrag anzeigen
    Du musst dann natürlich schauen GroupObject::get dann auch auf GroupObject* umgestellt werden muss, und die Nutzer der Methode gegen nullptr prüfen müssen.
    Ich würde allerdings dann vom GroupObject::get ein statisches "leeres" KO liefern lassen, anstatt alle Nutzer der Methode umzustellen (was ja auch mein Coding und alle anderen User massiv betreffen würde...)

    Zitat von thesing Beitrag anzeigen
    Das KnxValue braucht dich nicht interessieren,
    Dann hab ich das richtig verstanden... vielleicht kann ich doch langsam C++ lesen UND verstehen .

    Zitat von thesing Beitrag anzeigen
    Nicht vergessen, mal einen Pull-Request für deine Änderungen zu machen.
    Ja, das steht noch aus - auf für die aktuellen Änderungen (kleineres KO). Ich muss nur meine Baustellen mal auf die Reihe bekommen, bevor ich neue aufmache...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Hallo Waldemar,

    so langsam merkst du warum bei vielen kommerziellen Geräten bei 255 KOs Schluß ist . (Hängt auch von der Maskenversion ab.)

    zu 1) und 3)
    Ich weiß nicht genau was ETS and Daten schickt, wenn ein GroupObject nicht benutzt wird. Wenn man an den Daten erkennen kann, as man es nicht braucht, könnte man auch einfach kein GroupObject anlegen.
    Schau dazu mal in GroupObjectTable:initGroupObjects (oder so.) Dazu müsste man GroupObjectTable::_groupObjects zum Typ GroupObject*[] machen, und in der Schleife danach nur dann das GroupObject im Array ablegen, wenn man es braucht. Falls man das am GroupObject nicht erkenn, und die AssociationTable davor programmiert wird, könnte man auch dort schauen, ob das GroupObject benötigt wird.

    Du musst dann natürlich schauen GroupObject::get dann auch auf GroupObject* umgestellt werden muss, und die Nutzer der Methode gegen nullptr prüfen müssen.

    zu 2)
    Das KnxValue braucht dich nicht interessieren, das es nicht gespeichert/gelesen wird. Beim Aufruf der Methode wird es ggf. (auf dem Stack) erzeugt, und danach wieder frei gegeben. Die eigentlichen Daten liegen in GroupObject::_data. Zur Union: Die ist so groß wie die größte Komponente, das sollte in dem Fall struct tm sein.

    Nicht vergessen, mal einen Pull-Request für deine Änderungen zu machen.

    VG
    Thomas
    Zuletzt geändert von thesing; 06.05.2020, 20:19.

    Einen Kommentar schreiben:

Lädt...
X