Hallo,
die Abstürze habe ich jetzt nicht mehr. Programmieren klappt aber weiterhin leider nicht. Siehe Anhang.
Gruß,
Hendrik
Ankündigung
Einklappen
Keine Ankündigung bisher.
ESP8266 KNX mit ETS
Einklappen
X
-
Auch von mir Danke.
Ich werde erstmal testen, ob ich das einfach Demo-Projekt so weit hin bekomme, dass ich einerseits die Parameter überlagere und andererseits die Temperatur (parametrisierbar) über verschiedene DPT's verschicken kann (aber gleiches KO). Wenn das klappt, hätte ich alle Voraussetzungen, um weiter zu machen...
Werde weiter über den Fortschritt berichten.
Gruß, Waldemar
Einen Kommentar schreiben:
-
Inzwischen habe ich mal Api-Dokumentation erzeugen lassen:
https://knx.readthedocs.io/en/latest/
Es fehlt noch Beschreibungstext, aber hilft denke ich schon.
Einen Kommentar schreiben:
-
Ich habe den Stack eigentlich ziemlich genau nach KNX-Spezifikation gebaut. Vielleicht komme ich mal dazu ein Diagramm o.ä. zu machen.
Es gibt Kommunkationsobjekte (GroupObject). Eine Tabelle mit diesen (GroupObjectTable). Ein Tabelle mit zugewiesenen Gruppenadressen (AddressTable), eine MappingTabelle zwischen den GroupObjectTable und der AddressTable (AssociationTable). Die sagt welches GroupObject welche Adressen hat. Siehe dazu auch Kapitel 3.1.1 in 03_03_07 in der Spezi. Wie mit den GroupObjects gearbeitet wird kann man in 03_04_01 Kapitel 3 nachlesen.
Neben diesen Objekten gibt es noch ein DeviceObject (Geräteinformationen wie PA, Seriennummer usw.) ein ApplikationObjekt (Parameter) und ggf. ein IpParameterObject (IP-Konfiguration).
Alles Platform-Spezifische habe ich in einer Platform-Klasse gekapselt. Davon gibt es bisher eine für Linux, ESP8266 und SAMD.
Dazu gibt es die Diversen Schichten: BAU (BusAccessUnit in der Ausprägung SystemB), Anwendungsschicht (ApplicationLayer), Transportschicht (TransportLayer), Netzwerkschicht (NetworkLayer) und Datenzugriffsschicht( DataLinkLayer). Den DataLinkLayer gibt es in zwei Varianten: TPUART und IP.
Über die BAU bekommt man Zugriff auf die ganzen Interface-Objekte (GroupObjectTable, AddressTable, usw. ). Für Arduino habe davor noch eine Facade gebaut, damit man einfacher mit klar kommt.
Die Schichten haben alle noch Protocol-Data-Units und ServiceAccessPoints.
Der Datenfluss ist bei Gruppenkommunikation dann wie folgt:
am Beispiel Empfang:
Telegramm -> Datalinklayer -> NetworkLayer -> TransportLayer (Suchen von GruppenAddresse in Adresstabelle. Der Index ist der TSAP (TransportLayerServiceAccesPoint). Suche von allen Einträgen in der Assoziationstabelle zu diesen TSAP. Das sind die ASAPs (Nummer des Kommunikationsobjekts). -> ApplicationLayer (suche entsprechendes Kommunikationsobjekt in GroupObjectTable und ändere es)
Senden funktioniert genau andersherum
Beim Konfigurieren durch ETS werden im wesentlichen die Interfaceobjekte entladen, Speicher erzeugt, Daten geschrieben, Der Status der Interfaceobjekte wieder auf "geladen" gesetzt und das Gerät neu gestartet.
Ich hoffe das hilft erstmal beim Verständnis. Bei Fragen fragen.
Grüße,
ThomasZuletzt geändert von thesing; 13.05.2019, 21:15.
Einen Kommentar schreiben:
-
Hi,
ich wollte nur mal sagen, dass Du Dir keinen Stress machen sollst. Für meine ersten Tests kann ich auch ohne weiteres mit Deiner vorherigen Version arbeiten (also ohne dem letzten commit). Zumindest wollte ich das jetzt mal probieren. Und wenn das klappt (wovon ich ausgehe), kann ich erstmal mein Coding auf den Stand bringen und ausprobieren und so auch Deinen Stack besser kennen lernen. Die Mehrfachbelegung von KO und Parameter brauche ich erst, wenn ich viele Logikkanäle realisieren will.
Gruß, Waldemar
Einen Kommentar schreiben:
-
Das passiert wenn man dann doch nicht mehr testet.. Ich schau mal nach wenn die Kinder Mittagsschlaf machen.
Einen Kommentar schreiben:
-
Hallo,
ich wollte mich jetzt mal wieder an die Arbeit machen.
Hattest du dir die Sonoff nochmal angesehen?
Ich hatte deinen Post übersehen, dass du einen Bug gefixt hast, der für meine Übertragungsprobleme verantwortlich sein kann. Ich habe gerade auf die aktuelle Lib aktualisiert. Danke dafür!
Erstmal hatte ich jetzt leider eine Exception:
Die wiederholt sich auch immer wieder.62334, 25.73, 103096.77, 33.80, 583040.62, 25.00, 0, 25.62, 33.99, 0.00, 0
65334, 25.71, 103093.02, 33.43, 591281.44, 25.00, 0, 25.60, 33.66, 0.00, 0
Exception (29):
epc1=0x40211302 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
ctx: cont
sp: 3fff1680 end: 3fff18a0 offset: 01a0
>>>stack>>>
3fff1820: 3fff0118 3ffe9070 3fff07b8 4020fee0
3fff1830: 3fff2be4 3ffe9070 3fff2be4 40207a98
3fff1840: 3fff0118 3ffe9070 3ffeffd8 40203f5e
3fff1850: 00000000 00000000 00000000 00000000
3fff1860: 00000000 00000000 3fff2d1c 0000004f
3fff1870: 0000004a 00000000 00000001 40210de5
3fff1880: 3fffdad0 00000000 3fff0870 40210e10
3fff1890: feefeffe feefeffe 3fff0880 40100710
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode
3,6)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v614f7c32
~ld
start
*WM:
*WM: AutoConnect
*WM: Connecting as wifi client...
*WM: Already connected. Bailing out.
*WM: IP Address:
*WM: 192.168.177.21
Zykl. send:20
setup multicast addr: 224.0.23.12 port: 3671 ip: 192.168.177.21
result 1
Timestamp [ms], raw temperature [°C], pressure [hPa], raw relative humidity [%], gas [Ohm], IAQ, IAQ accuracy, temperature [°C], relative humidity [%], CO2
*WM: freeing allocated params!
Ich habe dennoch mal probiert zu programmieren. Das hat nicht geklappt. Anbei die Logs. Magst du dir das nochmal ansehen?
Gruß,
HendrikAngehängte Dateien
Einen Kommentar schreiben:
-
Hi, hier noch die versprochenen Fehlerdetails:
Callstack:
Bei pushWord bricht er an der Stelle mit "Received a SIGSEGV: Segmentation fault occurred" ab, wobei "data: 0x000000b1 <error: Cannot access memory at address 0xb1> {???}" angibt.Code:pushWord C++ (gdb) GroupObject::objectWriteFloatDpt9 C++ (gdb) GroupObject::objectWrite C++ (gdb) measureTemp C++ (gdb) appLoop C++ (gdb) main C++ (gdb)
Hilft das was? Ich versuch mich mal durchzudebuggen, aber ich kann nicht behaupten, dass ich Dein coding schon hinreichend durchdrungen habe... Wenn ich noch was konkretes testen soll, sag Bescheid.Code:uint8_t* pushWord(uint16_t w, uint8_t* data) { data[0] = ((w >> 8) & 0xff); -> data[1] = (w & 0xff); data += 2; return data; }
Gruß, Waldemar
Einen Kommentar schreiben:
-
Hi,
meine VMs wollen kein multicast, da muss ich noch forschen, warum...
Ich habe jetzt alles auf physikalische Geräte gebracht, knx-linux auf einen RasPi, ETS5 auf einen Desktop-Rechner. Damit konnte ich dann knx-linux erfolgreich programmieren. Die Demo sendet ja zufällige Temperaturwerte als DPT9. Beim Senden von DPT9 gibt es jetzt einen Speicherverletzungsfehler. Ich bin gerade nicht zu Hause, deswegen kommt das Fehlerprotokoll nachgeliefert. Ich dachte nur, dass die Demo vielleicht jetzt nicht mehr funktioniert, weil Du ja die dynamischen Größen für die KO eingeführt hast. Könnte das ein Grund sein?
Ich versuche erst die Demo zum laufen zu bringen, bevor ich dann mit meinem Coding weiter mache...
Gruß, Waldemar
Einen Kommentar schreiben:
-
Mist - eigentlich weiß ich das, war gestern wohl zu spät. Ich werde es heute Abend nach der Arbeit gleich versuchen.Zitat von thesing Beitrag anzeigenDa musst du einfach nur in der ETS dein Netzwerkinterface als (Mulitcast-)Verbindung auswählen.
Gruß, Waldemar
Einen Kommentar schreiben:
-
Wenn du ein knx-Linux programmieren willst, brauchst du keinen Router. Da musst du einfach nur in der ETS dein Netzwerkinterface als (Mulitcast-)Verbindung auswählen. ETS redet dann direkt mit knx-linux. knx-linux geht direkt in den Programmiermodus, wenn keine PA konfiguriert wurde (Siehe https://github.com/thelsing/knx/blob...c/main.cpp#L75).
Die Settings werden in einer Datei flash.bin abgelegt. Du kannst aber auch einen anderen Pfad mit platform.flashFilePath("my_file.bin") in der main.cpp festlegen.
Einen Kommentar schreiben:
-
Ok, ich sehe gerade, dass die ETS den Router auch nicht unter "Gefundene Verbindungen" anzeigt. Ich muss mal mein Setup vereinfachen... ETS in ein einer VM, knx-linux läuft in einer anderen VM und der Router (eibd) nochmal woanders... wahrscheinlich liegt es daran.
Aber die eine Frage bleibt: knx-linux geht in den Programmiermodus, wenn ich es ohne vergebene PA starte, oder? Und falls nicht: Wie starte ich den Programmiermodus dann? Und überhaupt: Wo speichert denn die Linux-Implementation die ETS-Parametrisierung? In einem File? Wäre cool, denn dann könnte man gleich sehen, wie viel Speicher das Parameterset dann braucht...
Gruß, Waldemar
Einen Kommentar schreiben:


Einen Kommentar schreiben: