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 Thomas,

    kein Problem, ich wollte nur wissen, ob ich irgendwas nicht gefunden oder anders verstanden hatte. Immerhin hast Du zum schreiben einige Methoden spendiert, deswegen dachte ich, dass ich beim Lesen vielleicht was nicht verstanden habe. Wenn ich mal so weit bin, kann ich gerne einen Pull-Request machen, derzeit erforsche ich immer noch, was alles geht.

    Deswegen wollte ich mal über meine Fortschritte berichten und gleich noch Feedback/Fragen los werden:

    Ich habe jetzt mal ein simples Echo-Szenario realisiert. Also man schickt einen Wert auf eine GA und bekommt den gleiche Wert, aber mit einem frei wählbaren anderen DPT zurück (derzeit nur DPT 1, 5 und 9). Ist natürlich sinnlos, erlaubt mir aber, den Stack zu testen und schon mal durchzuspielen, wie das Ganze mit KO läuft, die verschiedene DPT können.

    Neben meinen Fragen von gestern ist mir noch folgendes aufgefallen (ich arbeite derzeit mit der Linux-Version auf einem Raspi und somit mit KNX-IP):
    • Ich kann den Raspi nur über IP parametrieren (also ETS->Netzwerkschnittstelle->Raspi), wenn ich stattdessen meinen eibd als Router laufen lasse, dann kann ich zwar mit einem parametrierten Raspi über GA kommunizieren, aber keine Programmierung vornehmen.
    • Die PA kann ich nur über IP vergeben, da streikt die ETS schon, wenn der eibd als Router parametriert ist -> das liegt wahrscheinlich am eibd, ich muss mal mit dem knxd testen.
    • Nach einem erneuten parametrieren (dann eben über IP) ist das Gerät tot und antwortet auf keine GA. Ich muss den knx-linux-Prozess killen und neu starten, dann funktioniert das Gerät gemäß der neuen parametrierung. Mach ich da was falsch? Nach einer Parametrierung sollte sich das Gerät doch wie neu gestartet verhalten, oder?
    • Ebenso hätte ich erwartet, dass sich das Gerät neu startet, wenn die ETS ein "Gerät zurücksetzen" schickt, Scheint aber nicht zu passieren (ich hatte einen Breakpoint beim lesen der flash.bin, ich hatte gedacht, das wird beim zurücksetzen sicherlich neu gelesen).
    • Ich habe noch einen busware-TUL zu Hause, könnte ich den am Raspi dazu nutzen, Deinen Stack auch über TP auf dem RasPi zu nutzen? Ich habe leider keine Idee, wie ich das selber rausfinden kann.
    Ich habe ja vor, das Ganze am Ende auf einem ESP8266 laufen zu lassen und sehe (unter anderem) einen Vorteil in Deinem Stack: Man kann unter Linux debuggen, alles schon testen und dann das Ganze auf einen Microcontroller bringen. Aber verhalten die sich gleich? Kann ich wirklich eine getestete Funktion ohne weitere Seiteneffekte einfach für den ESP kompilieren und dann geht es? Hast Du da Erfahrungen? Ich muss mir mal demnächst die Hardware bestellen...

    Bisher bin ich echt begeistert, es geht vieles einfach so, sorry für meine Fragen, aber das sind Sachen, die mir "unterwegs" auffallen...

    Gruß, Waldemar


    Einen Kommentar schreiben:


  • thesing
    antwortet
    Hallo Waldemar,
    ich war an der Stelle einfach zu faul Konvertierungen für alle möglichen Datenpunkte zu definieren. Scheinbar hat es noch nicht einmal für ein readFloatDpt9() gereicht.
    Letzlich muss man ja nur die Werte aus _data parsen oder dort reinschreiben. (Längenprüfung nicht vergessen. ) Ich nehme gern Pull-Requests für alle möglichen Datenpunkte an. Ursprünglich wollte ich für jeden Datenpunkt eine eigene Klasse von GroupObject ableiten, aber da die Datenpunkte nicht von ETS mitgeliefert werden (nur die Größe), sollte man wohl besser einfach pro Datenpunkt eine read und eine write Methode hinzufügen.

    Bei den Parametern gibt es noch eine ähnliche Baustelle. Man könnte sich auch im CreateKnxProd eine Headerdatei mit einfacheren Zugriff auf die Parameter und KOs generieren. Dazu bin ich aber nie gekommen.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    ich fürchte, ich habe auch dumme Fragen... Im CreateKnxProd kann ich ja Parameter mit dem Typ Fließkommazahl definieren. Aber wie hole ich mir die im Coding ab? Ich habe bei bau.parameters() nur getByte(), getInt() und getWord() gefunden und kein getFloat() o.Ä., auch keine Funktion, die einen float zurück gibt.
    Ist das noch nicht implementiert oder habe ich es einfach nur nicht gefunden?

    Und welche DPT sollten denn bei den GroupObjects gehen? Ich habe irgendwie nur objectReadBool und objectReadFloatDpt9 (also DPT1 und DPT9) gefunden. Sehe ich das richtig, dass man sich derzeit alle anderen aus _data "rausparsen" muss (also über valueRef() den pointer auf _data holen und passend umwandeln)?

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Weil ein #include "knx/bits.h" fehlt. Dort sind die print-Funktionen deklariert. Definiert sind die Funktionen in den *_platform.cpp-Dateien.

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo Hendrik,
    eventuell ist




    Code:
       [LEFT][COLOR=#000000][FONT=Arial][SIZE=15px]SerialDBG.println("progmode on");[/SIZE][/FONT][/COLOR][/LEFT]
    wohl besser.

    Aber ich würde diese Meldung in die Funktion




    Code:
       [LEFT][COLOR=#000000][FONT=Arial][SIZE=15px]void buttonUp()[/SIZE][/FONT][/COLOR][/LEFT]
    integrieren. Aber die Entscheidung überlasse ich Thomas. Er kennt seine Library besser.


    Gruß
    René
    Zuletzt geändert von Mag Gyver; 18.05.2019, 17:01.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Danke!

    Es fehlte also nur das serial.

    Aber warum funktioniert in
    Code:
    void printHex(const char* suffix, const uint8_t *data, size_t length)
    {
        print(suffix);
        for (int i = 0; i < length; i++) {
            if (data[i] < 0x10) { print("0"); }
            print(data[i], HEX);
            print(" ");
        }
        println();
    }
    ein einfaches print, während es an dieser Stelle nicht funktioniert?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo Hendrik,

    habe dazu einen Pull Request auf GitHub erzeugt. Das Kannst du dir ja mal anschauen. Daran habe ich auch die Abfrage für das Byte vorgesehen.
    Sobald Thomas das verifiziert und in seinen Code übernimmt. Du musst natürlich die Ausgabe am ESP den Debug port auf Serial stellen.

    Gruß

    René

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Sorry, ich fühle mich doof, das zu fragen, aber ich bei Python wüsste ich mir zu helfen...
    Das Schreiben auf die serielle Konsole ist scheinbar an der Stelle nicht vorgesehen.
    Ich versuche:
    Code:
    void KnxFacade::progMode(bool value)
    {
        _bau.deviceObject().progMode(value);
        if (value) {
            println("ProgMode On")
        }
        else {
            println("ProgMode Off")
        }
    }
    Das ergibt:
    error: 'println' was not declared in this scope

    In python würde ich ein import serial und dann ein serial.println benötigen...
    Was muss ich hier machen? Ich darf ja keinen neuen seriellen Port öffnen.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Nein das ist mit dem ganzen WPS-Kram rausgeflogen. Bei Bedarf kannst du hier: https://github.com/thelsing/knx/blob...facade.cpp#L47 eine Meldung hinzufügen.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Prüfe ich.
    Aber sollte er an der seriellen Konsole den Programmiermodus (Programmiertaste gedrückt) nicht melden?

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Wenn die Led auf den Button reagiert brauchst du die Pins nicht zu setzen. Wenn ETS den Esp nicht findet verschluckt irgendwas die Multicast-Pakete. Hast du Routing als Interface in ETS gewählt? Sind der Rechner mit ETS und der ESP im gleichen Netz? (Manche Switche leiten Multicast nicht standartmäßig weiter.) Hast du nach der Konfiguration vom WLAN des ESP den mal neu gestartet? (Das muss man nach dem Flashen ja eh machen, damit er später nicht hängt)

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    ja, das ist/war komisch.
    Tatsächlich war Wifi auch konfiguriert, ohne dass ich den WiFi Manager auführen musste. Erase-Flash hat jetzt dazu geführt, dass ich den Wifi Manager zu Gesicht bekam. Jetzt sehe ich:
    Code:
    *WM:
    *WM: AutoConnect
    *WM: Connecting as wifi client...
    *WM: Already connected. Bailing out.
    *WM: IP Address:
    *WM: 192.168.177.21
    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!
    Und ich versuche per ETS die PA zu setzen. Leider schaffe ich es scheinbar nicht, in den Programmiermodus zu kommen. Du nutzt doch auch die NodeMCU, so dass ich kein
    Code:
    knx.ledPin(LED_PROG);
    knx.buttonPin(BUTTONPIN);
    benötige, da die Defaults funktionieren, oder?

    Tatsächlich leuchtet die LED am GPIO16
    NodeMCU-ESP8266-LEDs.jpg
    Wenn ich den Flash-Taster kurz betätige.
    Nur am seriellen Monitor tut sich nix...
    Die ETS schafft es auch nicht, die PA zu setzen ("Programmierknopf drücken"). Hast du eine Idee?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Mag Gyver Danke. Hab ich gemergt.
    henfri Kommen bei dir schon nach dem flashen die Daten vom BME? Die sollten doch eigentlich erst nach der Konfiguration durch ETS kommen. Kannst du mal "Erase Flash" "All Flash Contents" einstellen? Dann sollte der ESP wieder sauber sein. Ich verstehe auch nicht, warum die Zeilenumbrüche im Debug output kaputt sind.
    Ich muss das nochmal auf realer Hardware nachtesten.

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo Thomas,

    habe deine Library mit Arduino 1.8.8 versucht zu kompilieren. Gleiches Ergebnis wie beim Waldemar. Habe einen "Pull Request" auf "GitHub" erzeugt. Damit klappt das Kompilieren. Weitere Tests stehen noch aus.


    Gruß, René

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Thomas,

    ich musste für ein erfolgreiches compilieren auf dem RasPi in AddressTableObject.h folgendes hinzufügen:
    Code:
    void [URL="https://knx.readthedocs.io/en/latest/class_address_table_object.html#ab5c9b4470e8e17ee17a7da617706df10"]readProperty[/URL]([URL="https://knx.readthedocs.io/en/latest/property__types_8h.html#a4d213d3f61040d0dc0ba90578e1cbe92"]PropertyID[/URL] id, uint32_t start, uint32_t[COLOR=#00FF00]&[/COLOR] count, uint8_t *data);
    Ansonsten läuft erstmal alles und ich werde morgen mit Tests beginnen.

    Gruß, Waldemar

    Einen Kommentar schreiben:

Lädt...
X