Firmware Update for HM-LC-Bl1PBU-FM (2.2 -> 2.3)

Hi Sathya,

I have seen that you upgraded the device config files and firmware update files to 2.11.6 but unfortunatly the newer firmware version 2.3 for my HM-LC-Bl1PBU-FM is not included. http://www.eq-3.de/Downloads/Software/Firmware/HM-LC-Bl1PBU-FM_update_V2_3_0002_131204.tgz.

Is there a way to manually add it or do you have to change the getFirmware.sh script?

Thanks in advance,
Chris

Added :wink:.

Yes, download it, extract it to “/var/lib/homegear/firmware”, rename the “*.eq3” file to “0000.00000022.fw” (“0000” is the device family [0 is HomeMatic BidCoS], “00000022” is the device type in hexadecimal format). Then add a file “0000.00000022.version” with the version number without “.” (in this case “23”).

Cheers,

Sathya

perfect. thanks

when I list my devices the device type for the HM-LC-Bl1PBU-FM is shown as 006A and not 0022. The new firmware is not shown in the UI or CLI. Might have something to do with the wrong (?) device type.

I have renamed the files to 0000.0000006A.* and they show up in the CLI and UI (HM Konfigurator). Will try to update one device and see if this works.

You are right, 0x6A is correct! My mistake! The feedback would be great.

Firmware update has worked. 4 are working flawlessly. One does not accept commands right now. I will have to repair it and see if this fixes the issue.

ok, great! I included the update in Version 0.5.21. When the firmware update on the not working device already has started and was disrupted, you need to use the manual update mode. Here’s howto enable it on the device (from the eQ3 website in German):

  1. Netzspannung ausschalten / vom Gerät trennen (Ggfs. Sicherheitshinweise der Installation beachten!),
  2. den Aus/runter-Taster (UP-Markenschalter) bzw. den Bedientaster von Kanal 1 (sonstige Aktoren) drücken und festhalten,
  3. bei immer noch gedrückt gehaltener Taste den Aktor wieder mit Netzspannung versorgen.
  4. Sobald die LED schnell blinkt, kann die Taste losgelassen werden. Das Update wird jetzt durchgeführt.

For the update to work, you need to use the CLI and enable the manual update mode (“peers update PEERID 1”) before doing the steps above.

Regards,

Sathya

Just putting homegear in pairing mode and pressing the pairing button on the non-working device made it join the “working class” :slight_smile:

Thanks for your help, Sathya.

Perfect - that was easy :smiley:

Hi Sathya,

I have tried to update to fw 2.8 yesterday and one of my devices had a communication issue with the LGW and the firmware update stopped after a while.

No all I get is an LED which is flashing really fast. I have tried the above procedure but it won’t work.

this is the status i get from the device 1400001020AEFF000000004B455130313535303534.

Any idea what that means and if there is a way to unbrick the device?

Cheers
Chris

here my first try to “decrypt” the message

14 00 00 10 20AEFF 000000 004B455130313535303534

Length 14 Bytes
Message Counter - 00 - 1st Message
ControlBye - 00 - Wake Up
Message Type - 10 - Configuration Parameters
Source Device - 20AEFF (mein “defektes” HM-LC-Bl1PBU-FM)
Destination Device - BroadCast
Payload - ???

Looks like it is trying to broadcast something and waiting for an answer ?!

I will wait for you, Sathya, to make sense out of it :slight_smile:

Hey Chris,

the Payload is the ASCII encoded serial number. That is the bootloader packet. You can update the firmware by starting the update with:

The 1 enables the manual update mode. After that you have a while (1 minute?) to power up your device. When Homegear receives the bootloader packet, the firmware update restarts.

Cheers,

Sathya

I have tried that quite a few times, but that did not work.

This bootloader packet is currently being sent by the device every few seconds. My log is getting full with this, but homegear does not respond even when i have entered “pud 36 1”. 36 is my PEERID.

Cheers,
Chris

I have looked through the source code and found this in HomeMaticCentral.cpp:

int64_t time = BaseLib::HelperFunctions::getTime(); bool requestReceived = false; while(waitIndex < 1000) { receivedPacket = _receivedPackets.get(peer->getAddress()); if(receivedPacket && receivedPacket->timeReceived() > time && receivedPacket->payload()->size() > 1 && receivedPacket->payload()->at(0) == 0 && receivedPacket->destinationAddress() == 0 && receivedPacket->controlByte() == 0 && receivedPacket->messageType() == 0x10) { std::string serialNumber((char*)&receivedPacket->payload()->at(1), receivedPacket->payload()->size() - 1); if(serialNumber == peer->getSerialNumber()) { requestReceived = true; break; } else GD::out.printWarning("Warning: Update request received, but serial number (" + serialNumber + ") does not match."); } std::this_thread::sleep_for(std::chrono::milliseconds(50)); waitIndex++; } if(!requestReceived || !receivedPacket) { peer->setPhysicalInterfaceID(oldPhysicalInterfaceID); _updateMutex.unlock(); _updateMode = false; _bl->deviceUpdateInfo.results[id].first = 7; _bl->deviceUpdateInfo.results[id].second = "No update request received."; GD::out.printWarning("Warning: No update request received."); return; }

From my understanding I get a packet which matches (receivedPacket && receivedPacket->timeReceived() > time && receivedPacket->payload()->size() > 1 && receivedPacket->payload()->at(0) == 0 && receivedPacket->destinationAddress() == 0 && receivedPacket->controlByte() == 0 && receivedPacket->messageType() == 0x10) but I still get the message: “No update request received.”

Do you want some log files?

did you change something in the latest commits?

I have just updated from 1194 to 1201 and tried manual pud again and it worked right away …

Thanks