1 This repository contains utilities to use the [HM-CFG-USB(2)][] (HomeMatic USB
 
   2 Konfigurations-Adapter) from [ELV][] on Linux/Unix by using [libusb 1.0][].
 
   4 The HM-CFG-USB can be used to send and receive [BidCoS-Packets][] to control
 
   5 [HomeMatic][] home automation devices (like remote controllable sockets,
 
   6 switches, sensors, ...).
 
   8 This repository contains, amongst others, an application, which emulates the
 
   9 HomeMatic LAN configuration adapter-protocol to make it possible to use the
 
  10 HM-CFG-USB in [Fhem][] or as a lan configuration tool for the [CCU][] or the
 
  11 HomeMatic windows configuration software, also supporting devices using
 
  12 AES-signing like [KeyMatic][].
 
  14 [HM-CFG-USB(2)]: http://www.elv.de/homematic-usb-konfigurations-adapter-1.html
 
  15 [ELV]: http://www.elv.de/
 
  16 [libusb 1.0]: http://www.libusb.org/
 
  17 [BidCoS-Packets]: http://homegear.eu/index.php/BidCoS%C2%AE_Packets
 
  18 [HomeMatic]: http://www.homematic.com/
 
  19 [Fhem]: http://fhem.de/
 
  20 [KeyMatic]: http://www.elv.de/homematic-funk-tuerschlossantrieb-keymatic-silber-inkl-funk-handsender.html
 
  21 [CCU]: http://www.elv.de/homematic-zentrale-ccu-2.html
 
  23 ### Short hmland HowTo: ###
 
  25 1.  Install prerequisites:
 
  26     `apt-get install libusb-1.0-0-dev build-essential git`
 
  27 2.  Get the current version of this software (choose **one** option):
 
  28     *   Get the current *release*-version as a .tar.gz:
 
  29         1.  Download the latest version from the [releases-directory][].
 
  30             Version 0.100 is used as an example for the following commands.
 
  31         2.  Extract the archive: `tar xzf hmcfgusb-0.100.tar.gz`
 
  32         3.  Change into the new directory: `cd hmcfgusb-0.100`
 
  33     *   Get the current *development*-version via git (can be easily updated with `git pull`):
 
  34         1.  `git clone git://git.zerfleddert.de/hmcfgusb`
 
  35         2.  Change into the new directory: `cd hmcfgusb`
 
  36     *   Get the current *development*-version as an archive:
 
  37         1.  [hmcfgusb-HEAD-xxxxxxx.tar.gz][] (xxxxxxx is part of the commit-id.
 
  38             xxxxxxx is just a placeholder for this HowTo, use your value)
 
  39         2.  Extract the archive: `tar xzf hmcfgusb-HEAD-xxxxxxx.tar.gz`
 
  40         3.  Change into the new directory: `cd hmcfgusb-HEAD-xxxxxxx`
 
  41 3.  Build the code: `make`
 
  42 4.  Optional: Install udev-rules so normal users can access the device:
 
  43     `sudo cp hmcfgusb.rules /etc/udev/rules.d/`
 
  44 5.  Plug in the HM-CFG-USB
 
  45 6.  Run hmland (with debugging the first time, see `-h` switch):
 
  47 7.  Configure Fhem to use your new HMLAN device:  
 
  48     ``define hmusb HMLAN 127.0.0.1:1234``  
 
  49     ``attr hmusb hmId <hmId>``
 
  51 **Important compatibility information:**  
 
  52 If older Fhem-versions (before 2015-06-19) or [Homegear][] before 2015-07-01
 
  53 is used to connect to hmland, the `-I` switch might be needed to
 
  54 impersonate a LAN-interface (this replaces the identity string HM-USB-IF with
 
  55 HM-LAN-IF). eQ-3 rfd (CCU and configuration software) works without this switch.
 
  56 Software which needs this will not keep a stable connection open to
 
  57 hmland without this switch. It was the hardcoded default in versions
 
  60 This incompatibility is needed so connecting software is able to
 
  61 differentiate between HM-CFG-LAN and HM-CFG-USB.
 
  63 **Important security information:**  
 
  64 Versions before 0.101 do not correctly transmit the AES channel-mask
 
  65 to the HM-CFG-USB, which results in signature-requests not being generated
 
  66 by the device in most cases. This can lead to processing of unsigned messages
 
  67 by the host-software. If you are relying on authenticated messages
 
  68 (with e.g. aesCommReq in Fhem) from devices like door-sensors and remotes,
 
  69 you should upgrade to at least version 0.101.
 
  71 [releases-directory]: https://git.zerfleddert.de/hmcfgusb/releases/
 
  72 [hmcfgusb-HEAD-xxxxxxx.tar.gz]: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/snapshot/HEAD.tar.gz
 
  73 [Homegear]: https://www.homegear.eu/
 
  75 ### Updating the HM-CFG-USB firmware to version 0.967: ###
 
  77 1.  Compile the hmcfgusb utilities like in the hmland HowTo above
 
  78     (steps 1 to 5) and stay in the directory
 
  79 2.  Download the new firmware: [hmusbif.03c7.enc][] (extracted from the
 
  80     [Firmware update tool][]):
 
  81     `wget https://git.zerfleddert.de/hmcfgusb/firmware/hmusbif.03c7.enc`
 
  82 3.  Make sure that hmland is not running
 
  83 4.  Flash the update to the USB-stick:
 
  84     `./flash-hmcfgusb hmusbif.03c7.enc` (You might need to use `sudo` for this)
 
  86 [hmusbif.03c7.enc]: https://git.zerfleddert.de/hmcfgusb/firmware/hmusbif.03c7.enc
 
  87 [Firmware update tool]: http://www.eq-3.de/Downloads/Software/Firmware%20Update%20Tool/HM-CFG-USB-2_FW-UpdateTool-Usersoftware_V1_1_eQ-3_140619.zip
 
  89 ### Updating HomemMatic devices over the air (OTA) (also for CUL devices): ###
 
  91 1.  Compile the hmcfgusb utilities like in the hmland HowTo above
 
  92     (steps 1 to 5) and stay in the directory
 
  93 2.  Download the new firmware from [eQ-3][], in this example the HM-CC-RT-DN
 
  95 3.  Extract the tgz-file: `tar xvzf hm_cc_rt_dn_update_V1_4_001_141020.tgz`
 
  96 4.  Make sure that hmland is not running
 
  97 *   When using the **[HM-CFG-USB(2)][]**, flash the new firmware to the device
 
  98     with serial *KEQ0123456*:  
 
  99      `./flash-ota -f hm_cc_rt_dn_update_V1_4_001_141020.eq3 -s KEQ0123456`
 
 100 *   When using a **[culfw][]**-based device (**[CUL][]/[COC][]/...**), flash
 
 101     the new firmware to the device with serial *KEQ0123456*:  
 
 102      `./flash-ota -f hm_cc_rt_dn_update_V1_4_001_141020.eq3 -s KEQ0123456 -c /dev/ttyACM0`
 
 104 **Automatic firmware-updates:**  
 
 105 The options `-C` (HMID of central), `-D` (HMID of device) and `-K` (AES key w/
 
 106 index) can be used to send a device to the bootloader automatically without
 
 107 manually rebooting the device while pressing buttons:
 
 109 `./flash-ota -f hm_cc_rt_dn_update_V1_4_001_141020.eq3 -C ABCDEF -D 012345 -K 01:00112233445566778899AABBCCDDEEFF`
 
 111 `-K` is only needed, when AES signing is active on the device.
 
 114 flash-ota uses the public domain [AES implementation by Brad Conte][] to answer
 
 115 signing-requests with culfw-devices.
 
 117 [eQ-3]: http://www.eq-3.de/downloads.html
 
 118 [culfw]: http://culfw.de/culfw.html
 
 119 [CUL]: http://busware.de/tiki-index.php?page=CUL
 
 120 [COC]: http://busware.de/tiki-index.php?page=COC
 
 121 [AES implementation by Brad Conte]: https://github.com/B-Con/crypto-algorithms