Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

  • mumpf
    antwortet
    Hi,

    Zitat von SirSydom Beitrag anzeigen
    Ein KO hole ich mir über die Fassade mit knx.getGroupObject(int KO-Nummer)
    Kann ich von einem vorhanden GroupObject die KO-Nummer geben lassen?
    Genau das hab ich vor 2 Jahren auch gefragt . Über
    Code:
    asap()
    bekommst Du vom GroupObject die KO-Nummer. MultiplyChannels generiert die KO-Nummern ja auch als Konstanten ins Headerfile, man kann dann recht komfortabel vergleichen.

    Zitat von SirSydom Beitrag anzeigen
    Noch eine allgemeine Frage. Wird eigentlich irgendwie (vom Stack) verhindert dass eine nicht passende knxprod geladen wird?
    Ich meine hier mal was drüber gelesen zu haben, habe es aber noch nicht selber genutzt und kann deswegen nicht qualifiziert antworten. Vielleicht kann Thomas nochmal den passenden Hinweis geben.

    Zitat von SirSydom Beitrag anzeigen
    Es könnte am Sketch liegen (task nicht schnell genug gerufen)
    Beim programmieren sollte Dein Coding abgeschaltet sein. Mein loop() sieht so aus:
    Code:
    void loop()
    {
        // don't delay here to much. Otherwise you might lose packages or mess up the timing with ETS
        knx.loop();
        // only run the application code if the device was configured with ETS
        if (knx.configured())
            appLoop();
    }
    knx.configured() wird false beim programmieren. Mit dem Pattern kannst Du einfach Dein Coding abschalten, wenn programmiert wird. Ansonsten hab ich noch nicht wieder programmiert, deswegen noch keine Ergebnisse meinerseits.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Ich seh schon, ich muss das weiter untersuchen.

    - Es könnte am RP2040 liegen (uA hat der keine rx/tx serial buffer im ram, weil 32 in HW)
    - Es könnte an der Serial liegen
    - Es könnte am Sketch liegen (task nicht schnell genug gerufen)

    Mach ich dann mal.


    Noch eine allgemeine Frage. Wird eigentlich irgendwie (vom Stack) verhindert dass eine nicht passende knxprod geladen wird?
    Ich wüsste gerade nicht wie und wo, irgendwo müsste man ja in der Applikation (Sktech/Stack) etwas definieren was auch in der knxprod definiert wird. Application ID oder sowas.
    Gibts diese Möglichkeit?

    Und noch eine Frage:
    Ein KO hole ich mir über die Fassade mit knx.getGroupObject(int KO-Nummer)
    Kann ich von einem vorhanden GroupObject die KO-Nummer geben lassen?

    Mir gehts um die callbacks. Da meine Kanäle durch Instanzen repäsentiert werden kann ich ja keine member-funktion als callback nehmen.
    D.h. statische funktion als callback und dann dort die richtige instanz finden. In dem Moment hab ich nur das GroupObject und muss dazu die "Kanalnummer" rausfinden. Über die KO-Nummer wäre das trivial.
    Zuletzt geändert von Ing-Dom; 20.09.2021, 18:04.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    ich hatte bisher beim Programmieren fast nie den SerialMonitor an, muss ich mal ausprobieren, wie es beim SAMD ist. Aber eigentlich müsste man auch im Gruppenmonitor viele Wiederholungen sehen, oder? Ich schau mal, wenn ich heute mal wieder was programmiere und dann berichte ich mal.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Vermutlich gibt es z.T. Synchronisationsprobleme. Da Frames im Fehlerfall neu gesendet werden, funktioniert es trotzdem. Man müsste die gesamte Kommunikation als Hex ausgeben und mit der TPUART Doku schauen woran das genau liegt.

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    sagt mal irgendwie gefällt mir nicht so ganz wie das beim proggen aussieht:

    Code:
    xpected L_DATA_CON not received
    got UNEXPECTED: 0x60
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xDC
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xF1
    got UNEXPECTED: 0x28
    got UNEXPECTED: 0x66
    got U_CONFIGURE_IND: 0x65
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x59
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    Invalid broadcast detected: destination address is 0, but address type is "individual"
    frame with invalid crc ignored
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x9
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got L_ACKN_IND
    got U_STATE_IND: 0x17
    got unexpected L_DATA_CON
    L_DATA_CON not received within expected time
    expected L_DATA_CON not received
    got UNEXPECTED: 0x60
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xDC
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xF1
    got U_FRAME_STATE_IND: 0x13
    got UNEXPECTED: 0x6A
    got UNEXPECTED: 0x50
    got L_ACKN_IND
    got UNEXPECTED: 0x7E
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x9
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x9
    got U_CONFIGURE_IND: 0x1
    got U_CONFIGURE_IND: 0x41
    got L_POLL_DATA_IND
    got UNEXPECTED: 0xC1
    got L_POLL_DATA_IND
    got U_CONFIGURE_IND: 0x5
    got UNEXPECTED: 0x70
    got U_STATE_IND: 0x17
    got unexpected L_DATA_CON
    L_DATA_CON not received within expected time
    expected L_DATA_CON not received
    got UNEXPECTED: 0x60
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xDC
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xF1
    got UNEXPECTED: 0x28
    got UNEXPECTED: 0x72
    got U_CONFIGURE_IND: 0x65
    got L_ACKN_IND
    frame with invalid crc ignored
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x0
    got U_SYSTEM_STAT_IND: 0x20
    got U_STATE_IND: 0x17
    got unexpected L_DATA_CON
    L_DATA_CON not received within expected time
    expected L_DATA_CON not received
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xF1
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xDC
    got UNEXPECTED: 0x60
    got UNEXPECTED: 0xF6
    got UNEXPECTED: 0xF4
    got U_STATE_IND: 0x17
    got unexpected L_DATA_CON
    L_DATA_CON not received within expected time
    expected L_DATA_CON not received
    got UNEXPECTED: 0x60
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xDC
    got U_CONFIGURE_IND: 0x11
    got UNEXPECTED: 0xF1
    got UNEXPECTED: 0x28
    got UNEXPECTED: 0x42
    got U_CONFIGURE_IND: 0x65
    got L_ACKN_IND
    got L_POLL_DATA_IND
    got L_ACKN_IND
    got UNEXPECTED: 0xA
    got L_ACKN_IND
    got U_RESET_IND
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got UNEXPECTED: 0x16
    got L_ACKN_IND
    got UNEXPECTED: 0x2
    got L_ACKN_IND
    got U_STATE_IND: 0x17
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x5
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x19
    got L_ACKN_IND
    got U_CONFIGURE_IND: 0x1
    got L_ACKN_IND
    got U_FRAME_STATE_IND: 0x1B
    got L_ACKN_IND
    got UNEXPECTED: 0x2
    got L_ACKN_IND
    frame with invalid crc ignored
    got L_ACKN_IND
    got L_ACKN_IND
    got U_STATE_IND: 0x17
    got unexpected L_DATA_CON
    L_DATA_CON not received within expected time
    Basic restart requested
    das sind ein Haufen "unexpected" aber am Ende funzt es...

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Zitat von proggerKA Beitrag anzeigen
    Beim Allocator steig ich noch nicht ganz durch. Zählt der quasi immer hoch, wenn er abgefragt wird?
    Wobei argCH nur 1 hoch zählt, argObj hingegen 10 und argPar 16?
    Ja, so verstehe ich das auch. Macht ja auch so Sinn. argCH ist ja die Kanalnummer, die wird immer um 1 hoch gezählt. argObj ist der KO-Offest, jeder Kanal braucht 6, die zählen aber um 10 weiter und argPar ist der Parameter-Offset, die Parameter brauchen 16 Byte pro Kanal. Bleibt also alles in Sync und man weiß genau, wie man auf die Paramter bzw. KO zugreifen kann (wieder mal aus Sicht des Firmware-Schreibers).

    Zitat von proggerKA Beitrag anzeigen
    dann ist nur die Frage wer es zuerst erfunden hat
    Na ich natürlich ...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • thewhobox
    antwortet
    Hey,

    Repeater und Allocator kannte ich auch noch nicht.
    Reapeater ist klar, was er macht.
    Beim Allocator steig ich noch nicht ganz durch. Zählt der quasi immer hoch, wenn er abgefragt wird?
    Wobei argCH nur 1 hoch zählt, argObj hingegen 10 und argPar 16?

    Zitat von mumpf Beitrag anzeigen
    ich schon immer nur einmal und nicht 80 mal anpassen
    dann ist nur die Frage wer es zuerst erfunden hat :P

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Julius,

    danke für die Beispiele, das mit Repeat und Allocator kannte ich auch noch nicht. Man kann somit bereits in der Applikation Kanäle gut vervielfachen. Es ist auch schön zu sehen, wie die Zeilenanzahl der knxprod-xml immer weiter sinkt (447 Zeilen beim klassischen Ansatz mit 8 Kanälen, dann 172 wenn man nur Modules nutzt und abschließend 144 mit Modules und Repeat).

    Weiß jemand, ob die Moduldefinitionen geschachtelt sein können (also Module in ModuleDef genutzt werden können)?

    thewhobox: Rein von der funktionalen Seite hab ich diese Features (Modularisierung und Vervielfachung) mit meinem multiply-channels erfüllt (und noch ein paar mehr), aber die resultierenden xml-Files wurden riesig. Aber Parameter bzw. KO musste ich schon immer nur einmal und nicht 80 mal anpassen .

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • OutOfSync
    antwortet
    Moin zusammen,

    das ModuleDef gehört zu den "Modular Application Programs". Da gibt es in der Hilfe vom Manufacturer Tool ein paar (wenige) Informationen: https://support.knx.org/hc/en-us/art...ation-Programs. Weiter unten auf der Seite ist ein Download für eine MAP Demo, das ist auch ganz interessant. Da kann man reingucken ohne das Manufacturer Tool zu haben, ist ja XML 😉

    Viele Grüße, Julius

    Einen Kommentar schreiben:


  • thewhobox
    antwortet
    mumpf es erleichtert bestimmt auch wesentlich Anpassungen bei KOs/Parameter und der dynamischen Ansicht, da man sie nur einmal ändern muss und nicht 80 mal^^

    Wollte das schon lange implementieren, aber meine aktuelle Importroutine lässt es nicht zu.
    Sieht vom Aufbau her aber leicht verständlich aus.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Ing-Dom et all,

    Mike (thewhobox) hat mich auf ModuleDef der Applikationen mit Schema-Version 20 (ETS 5.7) hingewiesen (Siehe https://knx-user-forum.de/forum/öffentlicher-bereich/knx-eib-forum/diy-do-it-yourself/1672351-kaenx-open-source-inbetriebnahme-software?p=1680458#post1680458). Da wird bereits in der Applikation ein Wiederholteil mit ModulDef EINMAL definiert und mit Module beliebig häufig aufgerufen. Das sieht mir vielversprechend aus.

    Ansehen kann man sich das in einer Applikation der KNX Association, die direkt im Online-Kalatog verfügbar ist und zum KNX Virtual Projekt gehört:
    0204 - PB, Applikationsprogramm KliX, Version 2.4
    An das xml kommt man, wenn man das Produkt normal als knxprod exportiert, dann die Endung in .zip ändert und anschließend entpackt.

    Ich will noch damit etwas rumspielen, würde dann mein multipy-channels noch passend erweitern, damit es auch damit umgehen kann. Ich will ja die Headerfile-Generierung und die Berechnung der Parameteradressen und der KO-Nummern nicht missen, aber es würde die knxprod-xml wesentlich kleiner machen.

    Das nur mal zur Info, mir was das Thema neu...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    HI,

    Zitat von SirSydom Beitrag anzeigen
    gefunden hab ich das Feature nicht
    hab ich ja auch gut versteckt :-)

    Um den Thread hier nicht mit der Beschreibung und Deinen Rückfragen vollzumüllen (und um mich nicht vollkommen zu blamieren, wie amateurhaft ich das realisiert habe), lagern wir das man in den Thread zu multiply-channels aus: https://knx-user-forum.de/forum/%C3%...it-ets-projekt

    Bitte beachte auch das, was ich im Thread vorne geschrieben habe: Ist nur als ein Tool zur Vereinfachung der eigentlichen Aufgabe (xml zu erstellen) entstanden, und echt "gewachsene" Software! Mein Kenntnisstand zum xml ist ja auch erst über Zeit gewachsen. Ich bin nicht super stolz drauf, da kaum strukturiert, aber ich hab auch keine Zeit/Lust, es neu zu machen.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Zitat von mumpf Beitrag anzeigen
    Mein Tool hab ich im wesentlichen dafür geschrieben, damit man Kanäle vervielfachen kann, also z.B. einen Schaltkanal in xml definiert und dann daraus 20 Schaltkanäle macht.
    Ja, das impliziert ja auch der Titel, aber gefunden hab ich das Feature nicht
    Wenn du das mal grob beschreibst wäre super, das könnte ich auch brauchen.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    Zitat von SirSydom Beitrag anzeigen
    Verstehe ich das richtig das mittlerweile https://github.com/mumpf/multiply-channels das Tool der Wahl zum Erstellen der knxprods ist ?
    nicht unbedingt. Hängt davon ab, was Du machen willst. Mein Tool kann nur Projekte erzeugen, die Features bis incl. ETS 5.6 unterstützen (xml Schema Version 14). Die ETS 5.7 verwendet Schema Version 20, das kann mein Tool nicht. Natürlich kann 5.7 auch die früheren Schemata lesen. Aber falls man superneue Features der 5.7 nutzen will, könnte es sein, dass man das nicht kann.

    Soviel ich weiß, kann das Tool von thesing auch mit Version 20 umgehen. Hab aber schon lange nicht mehr reingeschaut .

    Mein Tool hab ich im wesentlichen dafür geschrieben, damit man Kanäle vervielfachen kann, also z.B. einen Schaltkanal in xml definiert und dann daraus 20 Schaltkanäle macht. Beschrieben hab ich die Funktion noch nicht, da ich immer wieder (inkompatible) Änderungen an der Kanalgenerierung gemacht habe. Den einfachen Fall (einfach ein knxprod zu erzeugen) hat das aber nie beeinflusst.

    Ansonsten gehe ich wirklich so vor:
    Zitat von SirSydom Beitrag anzeigen
    anschauenn bestehender xmls und ausprobieren
    Gruß, Waldemar

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Zitat von thesing Beitrag anzeigen
    Aktuell kann der Stack mit Flash nur über EEPROM-Emulation zugreifen. Das müsste also zuerst fertig gemacht werden.
    hab ich mir angeschaut, das ist mir aktuell ne Nummer zu komplex. Ich werde erstmal den Stack anwenden und lernen, bevor ich an die Innereien gehe.

    Zum Testen werde ich wohl mal den ExtMemoryWrite umbiegen mit einer Magic Address um das einfach mal auszuprobieren.


    Verstehe ich das richtig das mittlerweile https://github.com/mumpf/multiply-channels das Tool der Wahl zum Erstellen der knxprods ist ?

    Hab ich die angedachte Verwendung des Tool korrekt verstanden:
    1) Gerüst-xml vom Tool erzeugen lassen
    2) händisch die Paramter/Objekte etc... in die xml einbauen
    3) ggf. xml prüfen
    4) knxprod erzeugen

    Gibt es einen guten Einstieg in die Struktur der xmls oder führt hier der einzige Weg über anschauenn bestehender xmls und ausprobieren?

    Einen Kommentar schreiben:

Lädt...
X