MySensors OTA Bootloader einrichten und nutzen

Begonnen von kleinerDrache, 21 Oktober 2016, 16:13:18

Vorheriges Thema - Nächstes Thema

kleinerDrache

Da Ich des öfteren schon angesprochen wurde Wie das Mit dem OTA bei MySensors geht schreibe ich Jetzt mal eine kleine Anleitung dazu.

Was brauche Ihr:

Einen ISP (InSystemProgrammer) das kann ein Arduino mit ISP-Sketch sein oder ein anderer der von Arduino unterstütz wird.
Den Bootloader und natürlich den Arduino den Ihr nutzen wollt (im Moment funktionieren alle mit 328P Chip)

Dann mal los.

Ich gehe jetzt mal davon aus das nicht jeder einen ISP zuhause hat, deswegen beschreibe ich Euch wie man das mit einem normalen Arduino und dem ISP-Sketch macht.

Arduino ISP Erstellen:

1. In der Arduino IDE auf "Datei -> Beispiele -> 11.ArduinoISP" den Sketch öffnen.
2. den Arduino den Ihr zum flashen verwenden wollt unter "Werkzeuge -> Board" auswählen und den Port einstellen.
3. Den Arduino mit einem klick auf "Hochladen" flashen.
4. ISP Ist fertig

Arduino IDE Vorbereiten:

1. Das File von oben herrunterladen und entpacken.
2. in den Ordner "Arduino Install Ort"\hardware\arduino\avr\bootloaders\ wechseln und den Ordner "MySysbootloader" dahin kopieren
3. Die Datei "Boards.txt" in "Arduino Install Ort"\Arduino\hardware\arduino\avr öffnen und
4. das am ende einfügen:
    ##############################################################

MYSBL13.name=ATmega328 with MYSBootloader

MYSBL13.upload.tool=avrdude
MYSBL13.upload.protocol=arduino

MYSBL13.bootloader.tool=avrdude
MYSBL13.bootloader.unlock_bits=0x3F
MYSBL13.bootloader.lock_bits=0x0F

MYSBL13.build.mcu=atmega328p
MYSBL13.build.board=AVR_PRO
MYSBL13.build.core=arduino
MYSBL13.build.variant=standard

## Arduino with MYSBootloader 1.3pre
## -------------------------------------------------
MYSBL13.menu.cpu.16MHzatmega328=ATmega328 16MHz (XTAL, BOD1V8)
MYSBL13.menu.cpu.16MHzatmega328.upload.maximum_size=30720
MYSBL13.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048
MYSBL13.menu.cpu.16MHzatmega328.upload.speed=115200
MYSBL13.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF
MYSBL13.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xDA
MYSBL13.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0x06
MYSBL13.menu.cpu.16MHzatmega328.bootloader.file=MYSBootloader/MYSBL13pre_atmega328_16Mhz.hex
MYSBL13.menu.cpu.16MHzatmega328.build.mcu=atmega328p
MYSBL13.menu.cpu.16MHzatmega328.build.f_cpu=16000000L

MYSBL13.menu.cpu.8MHzatmega328=ATmega328 8MHz (RC, BOD1V8)
MYSBL13.menu.cpu.8MHzatmega328.upload.maximum_size=30720
MYSBL13.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048
MYSBL13.menu.cpu.8MHzatmega328.upload.speed=38400
MYSBL13.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xE2
MYSBL13.menu.cpu.8MHzatmega328.bootloader.high_fuses=0xDA
MYSBL13.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0x06
MYSBL13.menu.cpu.8MHzatmega328.bootloader.file=MYSBootloader/MYSBL13pre_atmega328_8Mhz.hex
MYSBL13.menu.cpu.8MHzatmega328.build.mcu=atmega328p
MYSBL13.menu.cpu.8MHzatmega328.build.f_cpu=8000000L

MYSBL13.menu.cpu.1MHzatmega328=ATmega328 1MHz (RC/8, BOD1V8)
MYSBL13.menu.cpu.1MHzatmega328.upload.maximum_size=30720
MYSBL13.menu.cpu.1MHzatmega328.upload.maximum_data_size=2048
MYSBL13.menu.cpu.1MHzatmega328.upload.speed=9600
MYSBL13.menu.cpu.1MHzatmega328.bootloader.low_fuses=0x62
MYSBL13.menu.cpu.1MHzatmega328.bootloader.high_fuses=0xDA
MYSBL13.menu.cpu.1MHzatmega328.bootloader.extended_fuses=0x06
MYSBL13.menu.cpu.1MHzatmega328.bootloader.file=MYSBootloader/MYSBL13pre_atmega328_1Mhz.hex
MYSBL13.menu.cpu.1MHzatmega328.build.mcu=atmega328p
MYSBL13.menu.cpu.1MHzatmega328.build.f_cpu=1000000L

##############################################################


5. Arduino IDE neustarten. Es sollte jetzt unter "Werkzeuge -> Boards" ein Eintrag "Atmega328 with MYSBootloader" auftauchen.
6. auswählen welchen mann haben will (je nach Arduino oder gewünschter Taktrate)
7. Den als ISP geflashten Arduino anschließen und dessen PORT auswählen aber AUF DEM GEWÄHLTEN BOARD bleiben.
8. unter "Werkzeuge -> Programmer" "Arduino as ISP" auswählen
9. den zu flashenden Controller an den ISP anschließen:
     
     Pinbelegung:
     ISP          Controller
     5V           5V
     GND        GND
     10           Reset
     11           MOSI
     12           MISO
     13           SCK

      einen kleinen ELKO (ich hab 10µF 10V genommen) zwischen GND und RESET AM ISP anschließen (Polung beachten)

10. Unter Werkzeuge auf "Bootloader brennen" klicken und abwarten bis "Bootloader erfolgreich gebrannt" zu lesen ist.
11. Fertig

Euer Arduino ist jetzt Fertig und bereit für OTA *Gratulation*

Ihr könnt natürlich auch weiterhin Sketches per USB auf das Teil beamen.

Also los Sketche basteln bis der Arzt kommt.

Jetzt geht es weiter mit dem Update Tool:

1. Euren Gateway mit dem passenden OTA Sketch beladen . Ich verwende den WLAN Gateway für den gibt es in den "Samples" einen fertigen Sketch den Ihr nur noch auf euer Wlan anpassen müsst (SSID und Key eintragen)
2. Den Ordner "MYSController" dahin kopieren wo es euch gefällt und die .EXE im Ordner starten.
3. Auf Settings klicken und euren Gateway einstellen
4. "Connect" klicken und warten bis sich euer Gateway im mittleren Fenster meldet (meistens steht da was von "Gateway startup complette")
5. Eure Nodes sollten auftauchen sobald sie Meldungen an den Gateway geschickt haben.

6. In der Arduino IDE auf "Datei -> Preferences" klicken und da dann ziemlich weit unten auf den link um "preferences.txt" manuell zu bearbeiten klicken.
7. einen Eintrag "build.path=PFAD" am ende einfügen wobei ihr "PFAD" frei wählen könnt (da landet nachher die fertige HEX Datei)
8. IDE neustarten
9. Sketch den ihr hochladen wollt editieren (Version ändern nicht vergessen) und NUR "überprüfen" NICHT "Hochladen"
10. Die HEX Datei aus dem gewählten "build.path" kopieren (bitte die ohne BOOTLOADER) und in den Ordner "MYSController/firmware" kopieren

11. im Ordner "MYSController/firmware" die Datei "firmware_config.csv" bearbeiten und eure Firmware da Eintragen (Beispiele stehen schon drinn)
12. in der Software auf den Button "reload Repo" klicken
13. den Node den Ihr updaten wollt auswählen und rechtsklicken
14. Im sich öffnenden Menü auf "assign Firmware" und im Untermenü die Firmware auswählen. Dialog bestätigen und das update sollte loslaufen (spätestens bei der nächsten Meldung des Nodes)

leider Funktioniert das updaten nicht immer Automatisch, da bin ich aber im Kontakt mit dem Bootloader Entwickler. Wenns mal nicht Geht : Node reseten dann geht bei mir immer

So hoffe hab nix vergessen ;-) viel Spaß mit OTA

P.S.: Bilder zum ISP liefere ich nach sobald ich welche habe.
Raspi 2 - Hmusb2 , 2xJeeLink , EnOcean pi: Serie14 Geräte , 6xHM-Sec-Rhs , 6xHM-CC-RT-DN, verschiedene MySensor Nodes, ein bischen MQTT

meddie

Klasse! Vielen Dank für Deine Anleitung.
Freu mich schon auf die Bilder.
Gruß Eddie

kleinerDrache

kann sich nur Jahre handeln *gg* einfach zuviele Baustellen
Raspi 2 - Hmusb2 , 2xJeeLink , EnOcean pi: Serie14 Geräte , 6xHM-Sec-Rhs , 6xHM-CC-RT-DN, verschiedene MySensor Nodes, ein bischen MQTT

Markus.

Hallo Zusammen,

Bin durch Zufall auf diesen Beitrag gestoßen. Aber auch wenn er schon etwas älter ist versuche ich mal mein Glück hier... :-)
will mal langsam Anfangen meine MySensors Nodes auf den letzten Stand zu bringen und OTA-Fähig zu machen. Aber irgendwie hängt es schon am vorbereiten der IDE. Und zwar habe ich die Bootloader Files und in das entsprechende Installationsverzeichniss der IDE kopiert und die Boards.txt angepasst. Aber ich bekomme die Boards nicht in der Auswahl angezeigt. Verwende die IDE 1.8.

Gruß

Markus

meddie

ich muss ehrlich eingestehen, dass die ersten Tests ohne OTA und AES ganz simple waren, Node geflasht in FHEM sofort erkannt und alles gut. Ich wollte aber die Nodes absichern wie es MySensors bietet, das war aber so kompliziert, (zumindest für mich) mit dem ganzen Prozedere , und gescheitert bin ich dann daran das der Sensebender Micro zu wenige Speicher hatte um alles zu aktivieren.

Ich habe mich dann etwas eingelesen, und festgestellt dass die NRF24L01 auch nicht das gelbe vom Ei sind was den Empfang angeht, RFM69 sollte die bessere Wahl sein. Dann was ich in letzter Zeit oft gesehen habe ist MQTT ein sehr beliebter Protokoll, MySensors kann ja den auch, aber die ganze Umbauerei und wieder einlesen usw, das war mir dann to much. Deshalb bin ich bei MySensors erstmal raus.
Einfach aus dem Grund da es zur Zeit dank, Xiaomi, Shelly, Sonoff eine Vielzahl an Sensoren gibt die relativ Kostengünstig sind. Und sich aus meiner Sicht diese viele Bastlerei nicht lohnt.
Ich bastle zwar sehr gerne, aber in diesem Fall, nutze ich die Zeit dann lieber für andere Hobbies.

VG Eddie

Markus.

hi Eddie,

erstmal danke für die Antwort. Nunja finde die ganze MySensors Geschichte interessant ungeachtet dem Aufwand den man betreiben muss. Habe etwa 15 Sensoren im Einsatz über MySensors, die über zwei Gateways laufen und zudem noch auf unterschiedlichen MySensos Versionen. Nutze im "alten" Netz NRF24L01 was, da muss ich dir recht geben, ein wenig instabil ist von der Funkleistung. Im Anderen Netz habe ich RFM69 868 und das finde ich um Welten besser. Nunja zurück zumThema... Wll hat alles auf RFM69 umrüsten und dann gleichzeitig OTA fähig machen. Und da scheitert es eben schin am flashen des Bootloaders, da ich die Boards nicht entsprechend angezeigt bekomme in der IDE :-(

Gruß

Markus 

Beta-User

Moin Markus.,

der boards.txt-Auszug scheint mir nicht mehr ganz auf dem aktuellen Stand zu sein, versuch's mal mit https://github.com/mysensors/MySensorsBootloaderRF24/blob/development/boards.txt und den hex-Files aus dem Github-Repo.

Damit bekomme ich es jedenfalls angezeigt (am Ende der Arduino-Boards, IDE 1.8.5).

[OT]
zu MQTT: wenn man nicht auch andere Controller nutzt, bietet m.E. der Umbau in diese Richtung keine wirklichen Vorteile (jedenfalls, wenn die experimentelle 10_...DEVICE genutzt wird). Eher Nachteile, wenn man - wie ich - auf "kurze" Übertragungswege (aka serielles GW) steht; MQTT benötigt m.E. zwingend (W)LAN-GWs.

zu RFM: Ist auch nett, aber zum einen gibt es dann für OTA nur die DualOptiboot-Variante (zusätzliche Hardware, benötigt Speicher), und man muß mit 3.3V rummachen. Für reine Sensorik lohnt das m.E. nicht, aber wer mehr Sicherheit braucht, für den ist es ggf. eine Erleichterung (die RFM können irgendeine Art von hw-seitiger Verschlüsselung, vielleicht mag das mal jemand im Wiki erläutern, wie das geht).
(Das meiste habe ich eh' auf RS485 umgerüstet, daher ist das nicht mehr mein Thema).
[/OT]
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Markus.

#7
MMh.... Danke erstmal für die ausführliche Antwort.
Habe die IDE mal runter geschmissen und neu installiert. Wie auch immer jetzt bekomme ich die Boards angezeigt.
Aber das ganze Thema OTA muss ich mir nochmal durch den Kopf gehen lassen. ...
Eventuell flashe ich meine Sensoren nach und nach halt "old School" auf die 2.3 halt ohne zusätzliches OTA... ;-)


Gruß

Markus

Beta-User

Na ja, wenn du die Dinger eh' "in der Hand" hast, ist ggf. das mit dem OTA-Bootloader schon eine gute Idee, schadet jedenfalls nicht, mal abgesehen davon, dass man sich merken muß, welcher BL denn jetzt drauf ist (DualOptiboot ist zwischenzeitlich "eigentlich" Arduino-Vorgabe, das wissen nur manche Chinesen noch nicht). Allerdings hatte ich auch Schwierigkeiten beim Umflashen einer verlöteten Node, an der ein 3.3V-Sensor hängt; das war praktisch unmöglich, weil mein ISP wohl auf 5V läuft.

(Ja, man könnte einen Arduino als ISP verwenden und den nur mit 3.3V betreiben, das sollte eigentlich gehen; aber dann hätte ich immer noch die Kontakte löten müssen => too much...)

Aber den DualOptiBoot solltest du bei der Gelegenheit überlegen. Das ermöglicht den späteren Wechsel (Hardwareänderung vorausgesetzt), auch wenn du den Transceiver mal tauschen solltest. Die FHEM-Module sollten es jedenfalls demnächst können (und DualOptiBoot geht wohl auch problemlos mit der aktuellen Version aus dem "2.0"-Thread).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Markus.

ja denke werde mal Dualoptiboot ins Auge fassen. Meine Nodes sind fast ausschließlich auf Mysensors EasyPCBs aufgebaut wobei ich die Arduinos (3,3v Batteriebetrieben) immer gesockelt habe.
Muss mal schauen wie ich den Bootloader dann flashe mit einem Arduino ISP. Das Problem mit dem "unsichtbaren" Mysensors Bootloader in der IDE habe ich ja jetzt  behoben. Hast du mal einen Link wie ich den Dualoptiboot Bootloader in die IDE bekomme?
Achja wie mache ich das denn mit Wemos D1 Nodes und dem Bootloader?

Gruß

Markus

Beta-User

Sorry, aber mit DualOptiBoot habe ich bislang keine großen Erfahrungen, er sollte bei den neuen Board-Defs eigentlich bereits vorhanden sein, so wie ich das verstanden habe (muß ggf. über den Board-Manager in der IDE ein update machen und dann den MyS-BL wieder ergänzen).
Dann sollten da bei einem "normalen" Nano usw. die beiden BL-Versionen direkt auswählbar sein.

Wenn gesockelt, dürfte es kein Problem sein, dann später auch den BL wieder zu tauschen, von daher fände ich einen Test mit MyS-BL und der neuen Modul-Version super ;) .

Was den ESP/Wemos angeht: das hat damit gar nichts zu tun, für den gelten "andere Gesetze". Ob GW's sich OTA updaten lassen (wie ESPEasy-Nodes oder eine sidoh-MiLight-Bridge) kann ich nicht sagen, bin "seriell".
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Markus.

Werde es mal testen in nächster Zeit. Muss mir erstmal einen ISP bauen und so ganz blick ich da mit den "OPTI-Bootloadern" noch nicht durch. Optiboot 8 habe ich jetzt mal drin in der IDE. Dualoptiboot scheint in den Board Defs nicht drin zu sein bei der IDE 1.8.1 oder ich bin zu doof das zu sehen..  ;D ;D ;D
Wie auch immer wird wohl mein nächstes Test und Forschungsprojekt ;-)


Beta-User

...zwei Blinde... (Ich habe da auch noch nicht so den Durchblick und wollte mir das eingentlich ersparen; aber die Arbeiten im Modul schreien danach; grummel)

Was man wissen muß, sollte eigentlich hier stehen: https://www.mysensors.org/about/fota (da steht auch was zu ESP)
Da habe ich jedenfalls mal die wesentlichen Infos zum MyS-BL gefunden, auch wenn es am HW-Stöpseln noch fehlt.

OTA-updates sollten mit der 2.0-API-Dev-Version gehen (Ende Juli als erstes versuchen), man braucht keine extra SW mehr (hoffentich jedenfalls).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Markus.

Verstehe ich das richtig. Dualoptiboot geht nur in Verbindung mit einem externen Flashchip? das wäre blöd, Dann würden die ProMinis ja so wie sie sind gar nicht gehen. Ohne chip wäre nur der MySensors Bootloader möglich aber der unterstützt kein RFM69.... :-(

Beta-User

Yup, DualOptiBoot braucht einen (kompatiblen) Flash-Speicherchip.

Für RFM gab es mal ein Projekt, den MyS-BL dafür zu kompilieren, aber den aktuellen Stand kenne ich nicht, klang eher danach, als wäre das eingeschlafen.

Ich kann übrigens über nRF24 nicht klagen, die haben lange bei mir ordentlich gedient, ich habe nur ein paar Dinge darüber geschaltet, daher der Schwenk zu RS485. Kabel war vorhanden, sonst hätte ich evtl. die Personalisierungs-Dinge mal versucht. Hängt scheinbar auch und vor allem daran, wo der nRF-Chip herkommt. Und die "neue Generation" (nRF52) scheint ja auch gut zu sein.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files