OTA on DualOptiBoot mysensors nodes?
-
Hi!
Coming from the mysensors forum... I've been using Domoticz as my controller and MysController for OTA updates for my nodes, which is working quite well.
I've just installed MyController on my server, mainly to test the OTA feature since some of them update once every several hours and leaving my PC on for that is just not too energy effective, specially having a small server running 24h/day.
My nodes work with DualOptiboot with EPROM memory installed.
I've run some tests with Mycontroller but haven't had success on OTA even though I think I followed all the step.
I've searched this forum but the only thing I found is a year old or so request to test OTA with optiboot nodes.
Would you be so kind to provide an update on if this setup should work with v1.3? I can obviously volunteer to run tests on my network if this is still unders testing or development.
Thanks!
-
@manutremo Welcome to MyController community.
Can you try with SNAPSHOT version? This version has some of the fixes.Disable
Stream ack
in the gateway configuration.Do you see the node on your MyController? Can you show your gateway configuration on MyController?
-
Hi @jkandasa ,
Yes for sure. Many thanks for preparing the snapshot. I downloaded the snapshot version and tested fota on a test node. I run MYSController in parallel to capture the communications between the gw and the node during the update.
These are my first obervations:
When the note is rest, ota is detected and starts. However the first requests for blocks are done in a row and with no response from the gateway, which doesnt happen with MYSController. See capture below. I'm not sure if this is as intended.
I also noticed that OTA seems to start only on node reset, not after next update.
Finally, the OTA operations are logged into the MyController log as ERROR, like e.g.
2018-11-04 08:26:09,209 ERROR [mc-th-pool-0] [org.mycontroller.standalone.provider.EngineAbstract:279] Throws exception while processing!, [MessageImpl(gatewayId=1, nodeEui=23, sensorId=SENSOR_BC, type=Stream, subType=Firmware request, ack=0, payload=010000002604, isTxMessage=false, timestamp=1541316369203, properties=null)]
java.lang.NullPointerException: nullThat's all for the moment. I can do more testing as time allows, and hope this helps
-
@manutremo said in OTA on DualOptiBoot mysensors nodes?:
Eui=23, sensorId=SENSOR_BC, type=Stream, subType=Firmware request, ack=0, payload=010000002604, isTxMessage=false, timestamp=1541316369203, properties=null)]
java.lang.NullPointerException: nullCan you post the complete error trace?
-
@jkandasa said in OTA on DualOptiBoot mysensors nodes?:
Can you post the complete error trace?
I tried again but nothing was recorded on the MyController log in Status / MyController server log.
I checked the Serial Monitor output and everything seems to be fine, same as when I use MysController. Maybe I did something wrong the first time. I can still send the full Serial Monitor log if you want to have a look.
My comment about OTA not starting after a normal update from the node but only after a reset still remains. In case, it matters, my node is using smartsleep.
-
@manutremo Send me the log if you face the issue again.
My comment about OTA not starting after a normal update from the node but only after a reset still remains. In case, it matters, my node is using smartsleep.
My guess, here it is a node reboot ^^
for DualOptiboot select your node and click on
Actions >> Upload firmware
. If it is smartsleep node, you have to wait until this node gets wakeup. I do not have the idea of MySensors library walkup time when firmware process started. -
Ah yes, I meant reboot. Thanks for directing me to the command, I was assuming that once the firmware was assigned to the node, it would be sent as part of the next update. My Controller does that so there must be a way, I can run some tests for you to discover how. I have set my nodes now to update accordingly, I'll let you know how it goes.
-
@manutremo OTA works in the following way,
- send available firmware details(version, checksum, etc.,) to the node
- If node thinks, it is a different sketch, it will request block by block.
- MyController sends firmware block data(requested block)