Neue Firmware für HM_LC_Sw1PBU_FM mit getrenntem Aktor, Taster + Wechselschalter

Begonnen von jab, 29 Dezember 2013, 22:04:10

Vorheriges Thema - Nächstes Thema

chipmunk

Ich dachte eigentlich, dass sich die Devices mittels des HM-USB-Sticks sowieso OTA updaten lassen?
Stimmt das nicht?
Wenn ich einen Aktor erfolgreich upgedatet habe schreibe ich gerne eine Ergänzung zum Vorgang.
Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

nephdrasil

Hallo Leute,

versuche mich schon seid stunden die HMID und die Serial für die Firmware aus dem Bootloader zu holen. Leider sind meine Kenntnisse in der Programmierung, das lassen wir mal.

Dirk hat es ja bereit mit seinem Wettersensor vor gemacht wie es geht. Ich denke ich habe die relevanten Funtkionen richtig kopiert.

Ich habe mir das git heute gezogen.

Angepasst (kopiert) habe ich im Orginal Asksin_HM_LC_Sw1PBU_FM.ino die Zeile 80 durch (bei mir Zeile 81 - 88)

  #if USE_ADRESS_SECTION == 1
                getDataFromAddressSection(devParam, 1,  ADDRESS_SECTION_START +$
                getDataFromAddressSection(devParam, 17, ADDRESS_SECTION_START +$

                //Serial << F("Device type from Bootloader: "); pHex(&devParam[$
                //Serial << F("Serial from Bootloader: ")     ; pHex(&devParam[$
                //Serial << F("Addresse from Bootloader: ")   ; pHex(&devParam[$
        #endif


die Zeile 124 durch 134 - 138:

void getDataFromAddressSection(uint8_t *buffer, uint8_t bufferStartAddress, uin$
        for (unsigned char i = 0; i < dataLen; i++) {
                buffer[(i + bufferStartAddress)] = pgm_read_byte(sectionAddress$
        }
}


in der Register.h Zeile die Zeilen 13 - 21 durch 13 - 50:

#define USE_ADRESS_SECTION     1
#define ADDRESS_SECTION_START  0x7FF0  // Start address of data in adress section at and of bootloader
#define FIRMWARE_VERSION     0x15  // 0.15
#define DEVICE_TYPE          0xF0, 0xA9 // model ID, describes HM hardware. we should use high values due to HM starts from 0
#define FRAME_TYPE           0x10    // not needed for FHEM, it's something like a group ID
#define DEVICE_INFO          0x41, 0x01, 0x00  // Device Info, 3 byte, describes device, not completely clear yet. includes amount of channels


/*
* Address data if we don't read them from bootloader section
*/
#if USE_ADRESS_SECTION == 0
        #define DEVICE_SERIAL        'P','S','0','0','0','0','0','0','0','2'  // The serial 10 bytes, needed for pairing   (Default for serial flash tool)
        #define DEVICE_ADDRESS       0x20, 0x85, 0x57    // The HM-ID 3 bytes, needed for pairing     (Default for flash tool)
#endif

#if USE_ADRESS_SECTION == 1
                uint8_t devParam[] = {
                        FIRMWARE_VERSION,
                        0xFF, 0xFF,                                                                                                             // space for device type, assigned later
                        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,             // space for device serial, assigned later
                        FRAME_TYPE,
                        DEVICE_INFO,
                        0xFF, 0xFF, 0xFF                                                                                                // space for device address, assigned later
                };
        #else
                uint8_t devParam[] = {
                        FIRMWARE_VERSION,
                        DEVICE_TYPE,
                        DEVICE_SERIAL,
                        FRAME_TYPE,
                        DEVICE_INFO,
                        DEVICE_ADDRESS
                };
        #endif


const uint8_t  HMID[3]     = DEVICE_ADDRESS


Das Problem ist das die Kompilierung fehl schlägt da ich die Zeile 50 wie oben beschrieben habe.
Wie übergebe ich die Platzhalter aus devPARAM an const uint8_t  HMID[3] so das die HMID des Bootloaders verwendet wird.

Ich hänge meine Datei mal an zum besseren Verständnis.

FHEM 5.5 + Fritz Box 7390 + HM-CFG-USB + HM-CC-RT-DN

chipmunk

Hallo nepphdrasil
Soweit ich sehe ist bei use_address_section=1 DEVICE_ADDRESS nicht definiert, kann daher vom Preprozesser beim Compilieren nicht ausgewertet werden.
Das Ganze wird aber meiner Meinung nach so überhaupt nicht gehen, da du HMID als const definierst, zu Laufzeit aber die aus dem Bootloader gelesene ID eintragen willst.
HMID müsste eigentlich als Variable definiert werden, der du dann die korrekte ID übergibst.

Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

nephdrasil

Ok danke dann muss ich erstmal die Funktion verstehen wie Dirk die aus dem bootloader ausliest die übergabe an die hmid sollte dann kein Problem sein bzw. die Konstante über eine Funktion zu befüllen. Ich dachte mir schon das es komplizierter wird so mit Laienhaftem verständnis
FHEM 5.5 + Fritz Box 7390 + HM-CFG-USB + HM-CC-RT-DN

chipmunk

Leicht OT, aber ich benötige Hilfe
Ich habe Arduino IDE installiert.
Nun versuche ich die neue FW zu compilieren, geht offenbar auch fehlerfrei, nur bekomme ich kein Outputfile.
Was mache ich da falsch?

Danke
Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

Mr. P

Greetz,
   Mr. P

Fritz!Maxi

Zitat von: chipmunk am 14 April 2015, 08:43:05
...
Nun versuche ich die neue FW zu compilieren, geht offenbar auch fehlerfrei, nur bekomme ich kein Outputfile.
...

Auf arduino.cc findet man folgende Erklärung:
ZitatThe .hex file is the final output of the compilation which is then uploaded to the board.  During a "Verify" the .hex file is written to /tmp (on Mac and Linux) or \Documents and Settings\<USER>\Local Settings\Temp (on Windows).  During upload, it's written to the applet sub-directory of the sketch directory (which you can open with the "Show Sketch Folder" item in the Sketch menu).
Quelle

Wenn man nicht immer nach den Temp Verzeichnissen suchen möchte kann man sich auch in den Einstellungen der Arduino Software (preferences.txt) einen anderen Pfad einstellen. Der Parameter dafür ist glaube ich
Zitatbuild.path=<Pfadangabe>

Viele Grüße,
Christoph
FHEM im Debian Container uaf QNAP, diverse Homematic Komponenten

chipmunk

Danke für die Hilfe, wo ich das Output file finde, aber ich gebe es wohl auf, eine FW zu erstellen:
- zuerst die Suche, wie ich zur Arduino-Umgebung komme - Stunden verschwendet
- dann die Suche nach dem Outputfile - wieder Stunden verschwendet
- wie zum Teufel komme ich zu Hex2eq3 - ok im Wiki gefunden
- verdammt, woher nehme ich nun php -> ach ja geht nicht ich muss nach php5 suchen
- das war es auch nicht, ich brauche php5-cli
- so nun geht es -> doch nicht  - es fehlt srec_cat
- endlich gefunden -> geht wieder nicht - weitere Fehlermeldungen und wieder kein Ergebnis - wieder vergeudete Stunden
- und wahrscheinlich geht es dann mit flashen ebenso weiter
- ich mülle mir den RasPi mit Programmen zu, die ich dann für den Betrieb nicht mehr brauche

Ich komme zwar aus der Informatik und kann auch Programmieren, aber das ist mir zu hoch.
Viele Stunden für nichts vertan
:'(  >:(

Eigentlich kann ich mir nicht vorstellen, dass unbedarfte Anwender es schaffen können, den Switch mit neuer FW zu versehen.
Chipmunk
Sorry, wenn das nicht ins Forum gehört, aber ich bin irgendwie entmutigt und frustriert
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

Fritz!Maxi

Zitat von: chipmunk am 14 April 2015, 20:31:47
...
Eigentlich kann ich mir nicht vorstellen, dass unbedarfte Anwender es schaffen können, den Switch mit neuer FW zu versehen.
...
Ich bin ein unbedarfter Anwender, keine Ahnung vom Programmieren, lebe von copy and paste...

Aber dank fortwährenden Hilfe hier im Forum und der Anwendung einschlägiger Suchmaschinen habe ich es geschafft den Bootloader zu bauen, ihn zu flashen, die Firmware zu bauen und diese ota zu flashen. Ich habe es mit Linux, MAC OSX und Windows versucht und mit irgendeiner Kombination daraus geschafft. Mit individueller HMID und Seriennummer! Das hat insgesamt nicht Stunden, nicht Tage, eine es hat in Summe etliche Wochen gekostet.

Jetzt werde ich wohl weitere Wochen investieren müssen um mit der Konfiguration klar zu kommen. Aber so ist das halt mit Hobbies...

Wenn ich das Ganze reproduzieren konnte (habe noch 2 Schalter...) werde ich auch gerne Input zur Verfeinerung der vorhandenen Dokus / Wiki-Einträge liefern.

Das hilft jetzt wahrscheinlich nicht gegen deine Frustration, aber ich nutzt einfach mal die Gelegenheit allen Beteiligten ein dickes DANKE zu sagen!

Und wenn du mir (d)eine HMID und Seriennummer nennst könnte ich meine noch existierende Umgebung nutzen um Boatloader und Firmware für dich zu bauen. Das wäre gleich der erste Versuch zu reproduzieren ;-)
Natürlich ohne Garantie...

Viele Grüße,
Christoph
FHEM im Debian Container uaf QNAP, diverse Homematic Komponenten

chipmunk

Hallo Fritz!Maxi
Danke für dein Angebot. :)
Wenn du mir auch Bootloader und FW deines Switches schicken würdest, versuche ich die Dateien zu vergleichen und ein kleines Pogramm zu schreiben, das einfach die Seriennummer und HMID austauscht, damit man sich das compilieren spart.

Meine HMID: 380A73
SerialNr: MEQ0040629

Danke
Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

chipmunk

So, ich bin einen Schritt weiter, ich habe herausgefunden, dass ich Bin2EQ3 statt hex2eq3 verwenden muss, um die FW zu erstellen.
Jetzt habe ich einmal versucht, ob der Schaltaktor OTA-tauglich ist, ohne den altenativen Bootloader zu flashen.
Der HM-LC-Sw1PBU-FM (Bausatzversion) ließ sich in den Updatemodus versetzen und die Windows OTA-Software hat gemeldet, dass sie mit dem Update begonnen hat. Allerdings erfolgte dann jedesmal ein Abbruch wegen zu vieler Übertragungsfehler.
Auch flas-ota am RasPi beginnt mit dem Download, bricht aber weg Übertragungsfehlern ab.
Kann es sein, dass es gar nicht mehr nötig ist den OTA-Bootloader zu flashen?
Oder habe ich die Abbrüche, weil ich ihn nicht geflasht habe - aber wieso beginnt dann der Updateprozess korrekt?
Hat das sonst schon jemand versucht?

Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

nephdrasil

Hallo chipmunk,

mein letzter Kenntnisstand ist das du den Bootloader flaschen musst. Da die Alternative Firmware keine Signierung hat und somit nicht aktzeptiert wird.
FHEM 5.5 + Fritz Box 7390 + HM-CFG-USB + HM-CC-RT-DN

holzwurm83

Hallo zusammen,

ich habe eine Wechselschaltung mit dem Schalter realisiert und nun scheint es mit der Messung, ob das Licht an ist oder nicht Probleme zu geben. Ich denke das es wohl wie ich hier schon gelesen habe am Schwellwert liegt!?

Kann ich diesen irgendwie ermitteln, messen?

Ich habe in Summe 75 Watt daran angeschlossen. Reicht das normal, oder muss ich den Schwellwert dann anpassen.
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

jsloot

Zitat von: holzwurm83 am 18 April 2015, 20:55:27
Hallo zusammen,

ich habe eine Wechselschaltung mit dem Schalter realisiert und nun scheint es mit der Messung, ob das Licht an ist oder nicht Probleme zu geben. Ich denke das es wohl wie ich hier schon gelesen habe am Schwellwert liegt!?

Kann ich diesen irgendwie ermitteln, messen?

Ich habe in Summe 75 Watt daran angeschlossen. Reicht das normal, oder muss ich den Schwellwert dann anpassen.

Hallo Zusammen,
ich stehe dem Problem, dass der geflashte Schalter zwar funktioniert, er es aber nicht mitbekommt, wenn über den anderen Schalter die Lampe ausgeschaltet wird. Könnte das an dem gleichen Problem liegen, wie bei Holzwurm?
Ein FHEM-Raspi mit HM-CFG-USB-2. 9 HM Heizthermostate, 9 HM Temperatursensoren, 22 HM Fensterkontakte, 7 Rolloaktoren, 17 HM Unterputz-Aktoren

Mr. P

Könnte, ja.
Aber da die Glaskugeln allesamt kaputt sind, lässt sich das alleine durch deine Frage nicht beantworten.
Ein Listing von dem vierten Channels des Schalters (während das Licht eingeschaltet ist) könnte uU schon weiter helfen, um deine Frage zu beantworten. ;-)
Greetz,
   Mr. P