Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

  • thesing
    antwortet
    Ing-Dom Aktuell kann der Stack mit Flash nur über EEPROM-Emulation zugreifen. Das müsste also zuerst fertig gemacht werden. Dann würde ich einfache in Firmware-Interface-Objekt erstellen und dort "ganz normal" Speicher reservieren, Adresse holen und dann schreiben. Genau wie es bei den anderen Interface-Objekten wie Adresstabelle, Assoziationstabelle usw. auch beim parametriesieren gemacht wird.

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Zitat von thesing Beitrag anzeigen
    thewhobox Ich würde das auch so sehen. Bei UserMemoryWrite hat man sogar noch ein Bit weniger. Dafür aber mehr Platz für die Adresse.
    Es sind 2 Bit weniger. Also nur 15 statt 63 Byte.

    Im Stack gibt es schon einen ExtMemoryWrite. Teilweise aber auskommentiert.
    Wie ist denn da der Stand?

    Ich gehe davon aus, du kennst die AN177. Gibt es eine Entsprechung für UserMemoryWrite mit Long Frame?
    Oder ersetzt der beide?

    in 03_05_03 findet man ja auch diese Aussage:

    "The maximum memory address of 1 Mbyte is addressed via a 20 bit address value. Thus the value of PID_TABLE_REFERENCE shall be limited to 20 bit values only; the higher 12 bits shall be marked as reserved and set to 0.
    These bits may later on be specified by the KNX Association to indicate usage of A_Memory_Write and A_UserMemory_Write on different or the same memory.
    If these bits are set to 0 A_UserMemory_Write and A_Memory_Write shall address the same memory."

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Zitat von thesing Beitrag anzeigen
    Ich gehe mal von nicht IP-Geräten aus
    genau, TP Geräte.

    Ich hab gestern etwas im Stack gewühlt um die Umsetzbarkeit meiner Idee mit "magic" memory adressen zu prüfen.
    Ich hatte die Hoffnung ich könnte dann memorywrites je nach adresse im memory-backend der plattform unterschiedlich behandeln.
    die memory Klasse arbeitet aber mit direktem Zugriff über einen datapointer und memcpy, daher ist das mal nix wenn man nicht in den stack eingreifen will. Da bräuchte man einen RAM-Buffer in der Größe der binary.

    Der MemoryWrite ist mit 64k adressbereich eigentlich auch schon zu klein.
    UserMemoryWrite wäre angezeigt.


    Gerade rausgefunden - Siemens arbeitet mit einem separatem Tool:
    https://www.hqs.sbt.siemens.com/cps_...w_tools_de.htm

    Leider hab ich kein passendes Gerät um mal ein Update mitzutracen.

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Ich gehe mal von nicht IP-Geräten aus. (Da wäre am Stack vorbei am einfachsten.)
    Ich würde sonst ein "properitäres" Interface-Objekt erstellen. Das kann man dann nach einer Adresse fragen, darüber memoryWrite direkt auf Flash umbiegen usw.
    Das ist aber nicht wenig Aufwand. Da ist ein USB-Kabel sehr viel einfacher.

    So richtig hab ich mich mit dem Thema noch nicht beschäftigt.
    Ich würde in jedem Fall mal in die knxprods von Geräten schauen, die das über ETS machen. Dort sollten Kommandos/Telegramme drinstehen. Dann würde ich das ähnlich nachbauen.

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Mal ne Frage Richtung Firmware-Update.

    Ich würde gern ein Binary über KNX an den Controller schicken, der soll das irgendwo in einem freien Flashbereich ablegen.

    Hier wurde ja schonmal andiskutiert das über ETS / knxprod abzufahren, irgendwie widerstrebt mir hier aber die Komplexität, ich hätte es gerne etwas flexibler, gerade auch im Entwicklungsprozess.

    Ich denke an ein PC-Tool das das Binary einliest und dann über KNX an das Gerät schickt.

    Welche Mechanismen sind da im Stack schon vorhanden die man nutzen kann? als Telegramtyp würde sich ja memoryWrite anbieten.



    Einen Kommentar schreiben:


  • JSchlucker
    antwortet
    Hallo chost,
    vielen Dank für den Hinweis.
    Ich habe inzwischen meine knxprod mit dem Tool vom mumpf hinbekommen.
    MfG JSchlucker


    Einen Kommentar schreiben:


  • chost
    antwortet
    Zitat von JSchlucker Beitrag anzeigen
    Hallo,
    ich bin neu im Forum und im KNX und brauche etwas Hilfe bei der Installation bzw. Verwendung der CreateKnxProd von thesing.
    Ich habe das Beispiel knx-demo-diy.ino der knx.lib von thesing mit einen ESP32 (D1 R32) über TP mittels Siemens 5WG1 117-2AB12 soweit zum laufen gebracht.
    Ich habe die mitgelieferte knxprod in der ETS5 eingelesen und ich kann es mit der ETS5 "programmieren" und es kommen die Werte an.
    Da mein Projekt jedoch ein Ultraschall-Füllstandsensor für die Zisterne werden soll, wollte ich nun die knx-demo-diy-tp.xml als Vorlage nehmen und
    entsprechende Änderungen in der CreateKnxProd vornehmen. Also habe ich das fertige Release der CreateKnxProd heruntergeladen und entpackt.
    Es geht auch zu starten, aber wenn ich die knx-demo-diy-tp.xml damit einlese kommt sofort eine Fehlermeldung:
    "System.InvalidOperationException: Fehler im XML-Dokument....<KNX xmins='http://knx.org/xml/project/11'> wurde nicht erwartet bei Microsoft.Xml.Serialization..."
    siehe auch angehangene Bild.
    Was braucht CreateKnxProd noch um zu funktionieren oder was geht bei mir schief?
    Ich hoffe auf eure Hilfe.
    Vielen Dank im Voraus.

    die knx-demo-diy-tp.xml geht nur mit dem Release 22 die Demo ist noch auf dem ETS4 Schema.

    ich würde dir empfehlen das Tool vom mumpf anzuschauen.
    https://github.com/mumpf/multiply-channels

    Einen Kommentar schreiben:


  • JSchlucker
    antwortet
    Hallo,
    ich bin neu im Forum und im KNX und brauche etwas Hilfe bei der Installation bzw. Verwendung der CreateKnxProd von thesing.
    Ich habe das Beispiel knx-demo-diy.ino der knx.lib von thesing mit einen ESP32 (D1 R32) über TP mittels Siemens 5WG1 117-2AB12 soweit zum laufen gebracht.
    Ich habe die mitgelieferte knxprod in der ETS5 eingelesen und ich kann es mit der ETS5 "programmieren" und es kommen die Werte an.
    Da mein Projekt jedoch ein Ultraschall-Füllstandsensor für die Zisterne werden soll, wollte ich nun die knx-demo-diy-tp.xml als Vorlage nehmen und
    entsprechende Änderungen in der CreateKnxProd vornehmen. Also habe ich das fertige Release der CreateKnxProd heruntergeladen und entpackt.
    Es geht auch zu starten, aber wenn ich die knx-demo-diy-tp.xml damit einlese kommt sofort eine Fehlermeldung:
    "System.InvalidOperationException: Fehler im XML-Dokument....<KNX xmins='http://knx.org/xml/project/11'> wurde nicht erwartet bei Microsoft.Xml.Serialization..."
    siehe auch angehangene Bild.
    Was braucht CreateKnxProd noch um zu funktionieren oder was geht bei mir schief?
    Ich hoffe auf eure Hilfe.
    Vielen Dank im Voraus.
    You do not have permission to view this gallery.
    This gallery has 1 photos.

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Grundlegender Support für Raspberry Pi Pico (RP2040) ist fertig.

    Das demo sketch läuft, lässte sich mit ETS programmieren und sendet.
    Die plattform läuft mit dem arduino-pico Arduino Core (https://github.com/earlephilhower/arduino-pico)

    pull request ist gestellt: https://github.com/thelsing/knx/pull/145

    Viel Spaß beim ausprobieren.


    Man kann hier noch viel optimieren / erweitern. z.B. multicore-support, fw-update über knx, mehr (viel mehr) flash / eeprom emulation (aktuell nur 4k, 1 block).

    keil

    Nanosonde
    Zuletzt geändert von Ing-Dom; 08.07.2021, 17:56.

    Einen Kommentar schreiben:


  • thesing
    antwortet
    2x korrekt. Mit den Platzhaltern habe ich im flash branch irgendwann mal angefangen.

    Einen Kommentar schreiben:


  • Ing-Dom
    antwortet
    Ich hätte mal eine Frage zum Thema Memory / Flash. Ich beziehe mich auf den master branch !

    SAMD21 plattform nutzt je die EEPROM emulation, da reichen anscheinend zwei Methoden:
    uint8_t* getEepromBuffer(uint16_t size);
    void commitToEeprom();
    aus ?
    Mehr brauchts nicht, oder?
    Gelesen und Geschrieben wird aus dem Buffer, und commit schreibt es dann dauerhaft.

    in der plattform.h finde ich

    Code:
     #if 0
    // Flash memory
    virtual size_t flashEraseBlockSize(); // in pages
    virtual size_t flashPageSize(); // in bytes
    virtual uint8_t* userFlashStart(); // start of user flash aligned to start of an erase block
    virtual size_t userFlashSizeEraseBlocks(); // in eraseBlocks
    virtual void flashErase(uint16_t eraseBlockNum); //relativ to userFlashStart
    virtual void flashWritePage(uint16_t pageNumber, uint8_t* data); //write a single page to flash (pageNumber relative to userFashStart
    #endif
    diese methoden werden aber nirgends definiert noch gerufen - reiner Platzhalter momentan?

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Ihr habt das richtig herausgefunden. Analog funktioniert es bei anderen zusammgesetzten Dpt.

    Einen Kommentar schreiben:


  • Masifi
    antwortet
    Nach etwas rumspielen habe ich wohl die richtige Implementierung gefunden:

    Das ist der Code zum Dimmen heller
    Code:
    dpt3value = 1;
    knx.getGroupObject(firstComObj).valueNoSend(dpt3va lue, Dpt(3,7,1)); // schreibt die Schrittweite, ohne zu senden
    dpt3value = 8;
    knx.getGroupObject(firstComObj).value(dpt3value, Dpt(3,7,0));  // schreibt die Richtung und sendet alles (auch die Schrittweite)
    Das ist der Code zum Dimmen dunkler
    Code:
    dpt3value = 1;
    knx.getGroupObject(firstComObj).valueNoSend(dpt3va lue, Dpt(3,7,1)); // schreibt die Schrittweite, ohne zu senden
    dpt3value = 0;
    knx.getGroupObject(firstComObj).value(dpt3value, Dpt(3,7,0));  // schreibt die Richtung und sendet alles (auch die Schrittweite)
    wichtig ist hier wohl das man die uint8_t Variable dpt3value für den jeweiligen Schritt setzt.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Mat,

    ich hab Dir noch was geschickt, was Du ausprobieren kannst. Komme wie gesagt derzeit selber nicht zum testen. Generelle Idee (vielleicht kann Thomas das ja bestätigen):
    Pseudocode...
    Code:
    value = 9; // wäre hochdimmen, 100%
    ko.writeNoSend(value, DPT(3,7,1)); // schreibt die Schrittweite, ohne zu senden
    ko.write(value, DPT(3,7,0); // schreibt die Richtung und sendet alles (auch die Schrittweite).
    Analog beim runterdimmen...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • Masifi
    antwortet
    thesing Den Punkt müsstest du dir vielleicht mal anschauen. Ich habe etwas mit den beiden DPTs 3.007 und 3.008 gespielt. Irgendwie hat es nie funktioniert wie ich es erwartet habe.
    Egal welchen Wert ich einsetze (oben bei den ???) es wird immer nur eine 0x08 oder 0x00 auf den Bus geschickt. Beide Werte sind Stopp-Werte.

    Darauf habe ich mit Waldemar gesprochen. Er hat sich deine Implementierung mal schnell angeschaut und denkt, dass du hier entweder nur das data filed "c" für Decrease oder Increase sendest oder nur den "StepCode".
    Das würde zu meinen Verhalten passen was ich bei mir sehe. Für eine richtige Implementieren muss doch immer "c" und "StepCode" gleichzeitig gesendet werden, oder?

    Gruß Mat

    Einen Kommentar schreiben:

Lädt...
X