Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

  • dreamy1
    antwortet
    Mit einem Stack alle Plattformen abzudecken, macht natürlich Sinn. Mal schauen, ich bin gerade auch am Testen neuer Hardware und Beschaltungen und ich bin mir recht sicher, dass ich einen halbwegs potenten Prozessor mitsamt Wifi an den TP bekomme - ohne zusätzliche Stromversorgung. Das eröffnet dann ganz neue Möglichkeiten. Vielleicht gibt es da auch Synergien, die wir nutzen können.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Stefan,

    die Frage ist nicht blöd... und ich bin wahrscheinlich auch der falsche, sie zu beantworten, aber meine Sicht der Dinge ist:
    • Die meisten Sachen werde ich wohl mit der SAMD-Platform machen (da geht die Versorgung über TP prima)
    • Da ich u.A. derzeit eine Logikengine haben will (auf Mikrocontroller-Basis, ohne Bootzeit), brauche ich viel RAM. Da wäre der ESP32 interessant, dann eben mit TP und Stromversorgung. An sich braucht der ohne Wifi angeblich < 10mA, aber beim "poweron" ist Wifi immer an, dann startet der nicht nur mit Busversorgung. Aber ich bin nicht so der Hardware-Mensch...
    • Die Alternative wäre Wifi + Stromversorgung an irgendeiner Stelle, wo man keinen Bus hat. Könnte ja mal in der Zukunft interessant werden, wenn doch die Busleitung vergessen wurde.
    Der Vorteil, mit einem Stack alle Platformen abzudecken und dann auch noch die ETS-Parametrisierbarkeit zu haben, ist für mich ausschlaggebend. Dann kann man sich ja die Zielplattform aussuchen...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    Sorry für die blöde Frage, aber sind ESP&Co nicht zu hungrig, um diese direkt am KNX zu betreiben? Dann braucht man Bus+Strom am Einsatzort, also macht Wifi dann eigentlich keinen Sinn mehr bzw. der Einsatz eines ESP...oder übersehe ich da was?

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hallo Fabian,

    bitte nicht falsch verstehen, ich freue mich, dass es hier so dynamisch weiter geht. Ich musste gestern nur grinsen, weil ich mit "restartDevice" das erste mal eine Änderung mache, die durch mehrere Schichten im Stack geht und immer, wenn ich das Gefühl habe, jetzt bin ich in den letzten Zügen mit den Tests ist wieder eine neue Version da, die dann eben wieder sorgfältiges Merge und einige Tests erfordert. Ich will ja keinen Unsinn in den Pull-Request packen.

    Aber wie gesagt, weiter so, ich bin ja sehr an ESP32 mit TP interessiert, wenn auch eher aus Neugier und perspektivisch auch am Raspi (also Linux) mit TP als Test-Engine. Insofern nur weiter so, lass Dich nicht von meiner "Langsamkeit" ausbremsen .

    Ich schau mal, dass ich heute mal wieder auf den neusten Stand komme...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • metaneutrons
    antwortet
    Moin Waldemar, sorry...ich wollte nicht so ungestüm sein.

    Meine Vorschläge hätten jedenfalls keine Auswirkungen auf die aktuelle API. Die größte (mögliche) Änderung die ich im Moment sehe, wäre der Wegfall der Auto-Instanziierung des knx-Objekts. Da geht ja aber die Tendenz dazu, es einfach wie gehabt zu belassen.

    Herzliche Grüße, Fabian

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    ihr seid mir zu schnell... ich hatte den Restart auf Linux fertig (Stand von gestern), SAMD klappt noch nicht (suche noch, warum)... Jetzt ist wieder alles anders - ich freue mich ja drüber, ich komme nur nicht hinterher. Folgender Vorschlag: Ich warte jetzt erstmal, bis sich das etwas "eingerüttelt" hat, dann mache ich meine Anpassungen und den push...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • metaneutrons
    antwortet
    Sieht sehr gut aus! Danke thesing! Der Plattform im Konstruktor direkt die Schnittstelle mitzugeben wollte ich auch vorschlagen; hatte den Text schon fertig! Auf dem ESP32 bietet sich natürlich Serial1 für TP an, damit man über Serial bequem debuggen kann. Das würde ich als Option auch für den Konstruktor der verschiedenen Plattformen vorsehen. Ich probiere mal aus, ob ich das hinbekomme. Der ESP32 hat nach meiner Erinnerung drei UART, die großen Teensys drei und mehr...

    Ich würde auch mal versuchen, ein Stream-Objekt im Konstruktor entgegen zu nehmen, dann könnte man ihm sogar (z.B. auf dem ESP8266) ein SoftwareSerial übergeben. Was denkst Du?

    So ist es jedenfalls schon wunderbar flexibel.

    Ad Button: Den Punkte sehe ich. Das geht wegen des Aufrufs der Methode durch einen Interrupt nicht anders, oder? Dann bin ich bei Dir, das es besser ist das anders zu lösen. Vermutlich sind die Anwendungsfälle für ein Gerät, welches sowohl IP als auch TP beherrscht ohnehin überschaubar.

    Wenn die ArduinoPlatform aus Deiner Sicht stabil ist, würde ich wohl alsbald noch den Teensy als Platform hinzufügen, da ich den in anderen Projekten gerne verwende und von dem hier noch einige liegen.

    Vielen Dank nochmal für das tolle Projekt. Etwas Derartiges hat in dieser Qualität wirklich gefehlt!

    Herzliche Grüße, Fabian
    Zuletzt geändert von metaneutrons; 27.08.2019, 06:47.

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Ich habe gerade angefangen die globale knx-Instanz zu entfernen. Dann muss man leider auch die buttonUp()-Funktion für den Programmierbutton in jeden Sketch packen. Momentan denke ich, dass es besser ist diese Instanz auch bei Linux hinzuzufügen und über einen Modus o.ä. zu steuern ob man IP oder TP will. Was denkt ihr?

    VG Thomas

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Hallo allerseits,

    Ich habe nun eine ArudinoPlatform Klasse eingeführt. Damit muss man für einen neue Platform für TP nur noch restart, getEepromBuffer und commitToEeprom implementieren.

    Ich muss bei Gelegenheit mal ESP32 mit in dem Travis-Build aufnehmen.

    VG Thomas

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Thomas,

    Zitat von thesing Beitrag anzeigen
    ielleicht sollte man die globale vordefinierte Instanz "knx" lieber weglassen?
    Kein Problem, kann man so machen. Ist ja schon bei Linux so. Bin sehr für "gleichartiges" verhalten zwischen den Plattformen. Ich sehe mich schon demnächst beim Portieren von meinem Logikmodul auf den ESP32. Mal schauen, wie "smooth" das geht. Aber ich werde primär wohl beim SAMD bleiben, der kann über dem Bus versorgt werden...

    thesing: Ich muss jetzt mal alles bei mir auf den neuesten Stand bringen, dann kommt noch ein Pull-Request mit den Änderungen zu "resetDevice" - so wie Du es haben wolltest.

    metaneutrons: Vielen Dank für Dein Coding-Beispiel oben, gib mir noch ne Woche, aber ich teste das gerne aus, dann wie gesagt gleich mit dem ESP32, ist ja schon gemerged.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • metaneutrons
    antwortet
    Moin! Vielen Dank!

    Eine Arduino-Basisklasse ist eine gute Idee; ich würde alsbald gerne noch den Teensy als Platform hinzufügen. Dann stelle ich das einstweilen zurück.

    Die vordefinierte Instanz würde ich tatsächlich ebenfalls weglassen. Dann hat man maximale Flexibilität und kann auf einem Controller theoretisch sogar beide Medien betreiben.

    Herzliche Grüße, Fabian
    Zuletzt geändert von metaneutrons; 26.08.2019, 14:17.

    Einen Kommentar schreiben:


  • thesing
    antwortet
    metaneutrons : Danke habe ich gemergt. Ich sollte wohl mal noch eine ArduinoPlatform als Basisklasse für SAMD21, ESP8266 und ESP32 einführen um Codeduplizierung zu reduzieren.

    Vielleicht sollte man die globale vordefinierte Instanz "knx" lieber weglassen? Dann kann die sich jeder im Sketch so definieren wie er es benötigt. Was meint ihr?

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    ich komme gerne darauf zurück und freue mich auch über Deine Tipps, aber ich kämpfe gerade noch mich den Umstellungen für den "resetDevice" Befehl (stelle das so um, wie Thomas es letztens skizziert hat). Das wird sicherlich noch diese Woche dauern, deswegen komme ich nicht vor nächster/übernächster Woche dazu, mich wieder mal um die ESP32 zu kümmern. Aber ich fände es gut, wenn man Deinen fork mit der Arbeit von Thomas zusammen bringen könnte.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • metaneutrons
    antwortet
    Moin!

    Momentan wird in der knx_facade.h bzw. knx_facade.cpp für die Mikrokontroller eine knx Instanz automatisch erzeugt und zwar mit der jeweils vorgegebenen Transportschicht (Bau57B0 für IP und Bau07B0 für TP) (siehe etwa KnxFacade<Esp32Platform, Baut57B0> knx;). Ich denke es müsste ausreichen, wenn Du das einfach mal von Hand änderst (das entsprechende #include in knx_facade.h nicht vergessen) Dafür findet man bei Bedarf aber auch einen eleganteren Weg. Probier's doch mal aus und dann schauen wir weiter.

    Update: Vermutlich ist es zum Testen einfacher eine eigenes Objekt (zu dem automatisch angelegten knx-Objekt) zu instanziieren:

    Code:
    #include <Arduino.h>
    #include <knx.h>
    #include "knx/bau07B0.h"
    #define PIN_KNXLED 17
    #define PIN_BUTTON 16
    
    // create named references for easy access to group objects
    #define goCurrent knx_tp.getGroupObject(1)
    #define goMax knx_tp.getGroupObject(2)
    #define goMin knx_tp.getGroupObject(3)
    #define goReset knx_tp.getGroupObject(4)
    
    // für ESP8266
    KnxFacade<EspPlatform, Bau07B0> knx_tp;
    
    // für ESP32, wobei aktuell noch Serial genutzt wird und Serial1 wohl günstiger wäre
    // KnxFacade<Esp32Platform, Bau07B0> knx_tp;
    
    float currentValue = 0;
    float maxValue = 0;
    float minValue = RAND_MAX;
    long lastsend = 0;
    
    void setup() {
        knx_tp.readMemory();
        knx_tp.ledPin(PIN_KNXLED);
        knx_tp.buttonPin(PIN_BUTTON);
        knx_tp.start();
    }
    
    void measureTemp() {
        long now = millis();
        if ((now - lastsend) < 2000)
            return;
        lastsend = now;
        int r = rand();
        currentValue = (r * 1.0) / (RAND_MAX * 1.0);
        currentValue *= 100 * 100;
        // write new value to groupobject
        goCurrent.value(currentValue);
        if (currentValue > maxValue) {
            maxValue = currentValue;
            goMax.value(maxValue);
        }
        if (currentValue < minValue) {
            minValue = currentValue;
            goMin.value(minValue);
        }
    }
    
    void loop() {
        knx_tp.loop();
        if (!knx_tp.configured()) return;
        measureTemp();
    }
    Ich muss mal meine Siemens BCU suchen...

    Update: Der Programmierbutton funktioniert auf diesem Weg leider nicht...siehe dazu weiter unten!

    Herzliche Grüße, Fabian
    Zuletzt geändert von metaneutrons; 26.08.2019, 23:08.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Fabian,

    ich habe noch 3 ESP32 "rumliegen", aber sind noch ungenutzt. Ich würde die gerne über TP anbinden, aber wie gesagt, da bin ich nicht der Richtige...

    Gruß, Waldemar

    Einen Kommentar schreiben:

Lädt...
X