Installations Anleitung um eine CCU2 (FW+Backup) auf einem Raspberry zu installieren

Hier die komplette Liste aller Operationen die ausgeführt werden müssen um eine funktionsfähige CCU2 auf einem Raspberry zum Laufen zu bekommen :

Ermitteln der Datenträgerbezeichnung der SD-Karte

# Die folgenden Operationen wurden auf einem LINUX Rechner durchgeführt (installiert war Debian) 

# ls -la /dev/sd*

brw-rw---T 1 root disk   8,  0 Aug  5 10:29 /dev/sda
brw-rw---T 1 root disk   8,  1 Aug  5 10:29 /dev/sda1
brw-rw---T 1 root disk   8,  2 Aug  5 10:29 /dev/sda2
brw-rw---T 1 root disk   8,  5 Aug  5 10:29 /dev/sda5
brw-rw---T 1 root disk   8,  6 Aug  5 10:29 /dev/sda6
brw-rw---T 1 root disk   8,  7 Aug  5 10:29 /dev/sda7
brw-rw---T 1 root disk   8,  8 Aug  5 10:29 /dev/sda8
brw-rw---T 1 root disk   8,  9 Aug  5 10:29 /dev/sda9
brw-rw---T 1 root floppy 8, 16 Aug  5 10:29 /dev/sdb
brw-rw---T 1 root floppy 8, 32 Aug  5 10:29 /dev/sdc
brw-rw---T 1 root floppy 8, 33 Aug  5 10:29 /dev/sdc1

Wechseldatenträger werden mit "floppy" gekennzeichnet.
Auf "/dev/sdc" existiert eine Partition "/dev/sdc1"


fdisk starten und die Partitionstabelle der SD-Karte anzeigen:

# fdisk /dev/sdc

Command (m for help):p

Disk /dev/sdc: 1977 MB, 1977614336 bytes
61 heads, 62 sectors/track, 1021 cylinders, total 3862528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000



Ggfs. vorhandene Partitionen (in diesem Beispiel 4) löschen:

Command (m for help):d
Partition number (1-4):1

Command (m for help):d
Partition number (1-4):2

Command (m for help):d
Partition number (1-4):3

Command (m for help):d
Partition number (1-4):4



Änderungen speichern:


Command (m for help):w


fdisk schreibt die Änderungen und wird daraufhin beendet.



Berechnen der Anzahl der Zylinder:

Größe des Datenträgers in Bytes / 255 / 63 / 512

Beispiel: 1977614336 / 255 / 63 / 512 = 240



Geometrie der SD-Karte festlegen und 1. Partition einrichten:

# fdisk /dev/sdc

Command (m for help): x

Expert command (m for help): h
Number of heads (1-256, default 61): 255

Expert command (m for help): s
Number of sectors (1-63, default 62): 63

Expert command (m for help): c
Number of cylinders (1-1048576, default 1021): 240

Expert command (m for help): r

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-3862392, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-3862392, default 3862392): +75M

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 1
Changed system type of partition 1 to 1 (FAT12)

Command (m for help): c
DOS Compatibility flag is set (DEPRECATED!)

Command (m for help): a
Partition number (1-4): 1

Command (m for help): w



Den restlichen Speicherbereich der SD-Karte als zweite Partition einrichten:

# fdisk /dev/sdc

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (155648-3862392, default 155648): 155648
Last sector, +sectors or +size{K,M,G} (155648-3862392, default 3862392): 3862527

Command (m for help): p

Disk /dev/sdc: 1977 MB, 1977614336 bytes
176 heads, 38 sectors/track, 577 cylinders, total 3862528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *        2048      155647       76800    1  FAT12
/dev/sdc2          155648     3862527     1853440   83  Linux

Command (m for help): w



Partitionen der SD-Karte formatieren:

# mkfs.msdos -F 32 /dev/sdc1 -n BOOT

# mkfs.ext4 /dev/sdc2




Das Vorbereiten der SD-Karte ist damit abgeschlossen!






ANLEITUNG VON "IRINAMUELLER" MIT KORREKTUREN VON "PAULG4H":

(Datenträgerbezeichnung der SD-Karte ggfs. anpassen!)

# mkdir -p coc
# mkdir -p /media/BOOT
# mkdir -p /media/rootfs
# mkdir -p /media/ubi

# cd coc
# wget http://files.busware.de/RPi/kernel+boot+modules-3.6.11-busware.tar.gz
# tar -C ./ -xzvf kernel+boot+modules-3.6.11-busware.tar.gz
# mount /dev/sdc1 /media/BOOT/
# mount /dev/sdc2 /media/rootfs/
# cd boot
# cp * /media/BOOT/

mtd-utils installieren, wenn noch nicht geschehen

# apt-get install mtd-utils
# cd ~

AB HIER NUR WEITER, WENN IHR EINE CCU2 HABT!!!
weitere Infos zu den Befehlen hier: http://pjankows.blogspot.de/2012/01/how-to-mount-ubi-image.html und http://www.linux-mtd.infradead.org/faq/ubi.html

# wget http://www.eq-3.de/Downloads/Software/HM-CCU2-Firmware_Updates/HM-CCU2-2.3.15.tar.gz
# tar -xzvf HM-CCU2-2.3.15.tar.gz
# modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte=0x15
# ubiformat /dev/mtd0 -f rootfs.ubi -O 2048
# modprobe ubi
# ubiattach /dev/ubi_ctrl -m 0 -O 2048
# mkdir -p /media/ubi
# mount -t ubifs ubi0:root /media/ubi
# cd /media/ubi

# vi /media/ubi/etc/inittab

jetzt die Zeile 'ttyGS0::respawn:/sbin/getty -L ttyGS0 115200 vt100 # USB SERIAL' suchen und mit dem Cursor auf das erste Zeichen gehen, i drücken und mit einer # auskommentieren, dann ESC drücken und :wq

Kopieren des CCU2 Images auf die SDKarte

# cp -Rav /media/ubi/* /media/rootfs/

# umount /media/BOOT/
# umount /media/rootfs/




Die SD-Karte kann nun in den Raspberry Pi gesteckt und dieser neu gebootet werden.

Um das Wiederherstellen von CCU-Backups zu ermöglichen müssen an der Installation noch Anpassungen vorgenommen werden.

Dazu verbindet man sich über SSH mit dem Rasperry Pi:
IP: <beim Bootvorgang ablesen>
Benutzername: root
Passwort: MuZhlo9n%8!G

Um die Anpassungen vorzunehmen werden folgende Befehle markiert und per Rechtsklick in das Fenster der SSH-Session eingefügt.
(den CR der leztzten Zeile mit kopieren!)


#/etc/inittab
sed -i 's/ttyGS0::respawn:\/sbin\/getty -L ttyGS0 115200 vt100 # USB SERIAL/#ttyGS0::respawn:\/sbin\/getty -L ttyGS0 115200 vt100 # USB SERIAL/g' /etc/inittab
sed -i 's/ttyAMA0::respawn:\/sbin\/getty -L ttyAMA0 115200 vt100 # GENERIC_SERIAL/#ttyAMA0::respawn:\/sbin\/getty -L ttyAMA0 115200 vt100 # GENERIC_SERIAL/g' /etc/inittab
sed -i 's/::restart:\/bin\/update_firmware_run/#::restart:\/bin\/update_firmware_run/g' /etc/inittab

#/etc/init.d/S00eQ3SystemStart
sed -i 's/	echo 255 > \/sys\/class\/leds\/power\/brightness/#	echo 255 > \/sys\/class\/leds\/power\/brightness/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/	echo default-on > \/sys\/class\/leds\/power\/trigger/#	echo default-on > \/sys\/class\/leds\/power\/trigger/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/	echo none > \/sys\/class\/leds\/internet\/trigger/#	echo none > \/sys\/class\/leds\/internet\/trigger/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/	echo timer > \/sys\/class\/leds\/info\/trigger/#	echo timer > \/sys\/class\/leds\/info\/trigger/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/	echo 255 > \/sys\/class\/leds\/info\/brightness/#	echo 255 > \/sys\/class\/leds\/info\/brightness/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/	echo 100 > \/sys\/class\/leds\/info\/delay_off/#	echo 100 > \/sys\/class\/leds\/info\/delay_off/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/	echo 100 > \/sys\/class\/leds\/info\/delay_on/#	echo 100 > \/sys\/class\/leds\/info\/delay_on/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^        /	/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	modprobe spidev/#	modprobe spidev/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	modprobe ic200_spi/#	modprobe ic200_spi/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	modprobe spi_eq3_gpio/#	modprobe spi_eq3_gpio/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	modprobe spi_bitbang/#	modprobe spi_bitbang/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	mknod spidev0.0 c 153 0/#	mknod spidev0.0 c 153 0/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	modprobe gpio-keys/#	modprobe gpio-keys/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	modprobe fsl_usb2_udc.ko/#	modprobe fsl_usb2_udc.ko/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	if grep -q "eQ3Mode=production" \/proc\/cmdline ; then/#	if grep -q "eQ3Mode=production" \/proc\/cmdline ; then/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	  modprobe g_multi luns=1/#	  modprobe g_multi luns=1/g' /etc/init.d/S00eQ3SystemStart
sed -i '/iSerialNumber="$SERIAL"/{ N; s/iSerialNumber="$SERIAL"
	fi/iSerialNumber="$SERIAL"
#	fi/ }' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	modprobe ehci-hcd/#	modprobe ehci-hcd/g' /etc/init.d/S00eQ3SystemStart
sed -i 's/^	\/bin\/update_firmware_pre/#	\/bin\/update_firmware_pre/g' /etc/init.d/S00eQ3SystemStart

#/etc/init.d/40UsbNetwork
mv /etc/init.d/S40UsbNetwork /etc/init.d/_40UsbNetwork

#/etc/init.d/S50eq3configd
sed -i 's/        /	/g' /etc/init.d/S50eq3configd
sed -i 's/	radio_mac=$(cat \/sys\/module\/plat_eq3ccu2\/parameters\/radio_mac)/	sss=`grep Serial \/proc\/cpuinfo | cut -d" " -f2`
	pp5=`expr length $sss - 5`
	pp6=`expr length $sss - 6`
	radio_mac=0x${sss:$pp6}/g' /etc/init.d/S50eq3configd
sed -i 's/board_serial=$(cat \/sys\/module\/plat_eq3ccu2\/parameters\/board_serial)/board_serial=`printf "RPI%07d" 0x${sss:$pp5}`/g' /etc/init.d/S50eq3configd

#/etc/init.d/S60rfd
sed -i 's/^        /	/g' /etc/init.d/S60rfd
sed -i 's/^	update/#	update/g' /etc/init.d/S60rfd

#/etc/init.d/S99eQ3SystemStarted
sed -i 's/^        /	/g' /etc/init.d/S99eQ3SystemStarted
sed -i 's/^SERIAL=$(cat \/sys\/module\/plat_eq3ccu2\/parameters\/board_serial)/#SERIAL=$(cat \/sys\/module\/plat_eq3ccu2\/parameters\/board_serial)/g' /etc/init.d/S99eQ3SystemStarted
sed -i 's/^	echo 255 > \/sys\/class\/leds\/power\/brightness/#	echo 255 > \/sys\/class\/leds\/power\/brightness/g' /etc/init.d/S99eQ3SystemStarted
sed -i 's/^	echo default-on > \/sys\/class\/leds\/power\/trigger/#	echo default-on > \/sys\/class\/leds\/power\/trigger/g' /etc/init.d/S99eQ3SystemStarted
sed -i 's/^	echo none > \/sys\/class\/leds\/internet\/trigger/#	echo none > \/sys\/class\/leds\/internet\/trigger/g' /etc/init.d/S99eQ3SystemStarted
sed -i 's/^	echo none > \/sys\/class\/leds\/info\/trigger/#	echo none > \/sys\/class\/leds\/info\/trigger/g' /etc/init.d/S99eQ3SystemStarted
sed -i 's/^	\/bin\/hss_led 2>&1 > \/dev\/null  &/#	\/bin\/hss_led 2>&1 > \/dev\/null  &/g' /etc/init.d/S99eQ3SystemStarted

#/www/api/methods/bidcosrf/setconfiguration-rf.tcl
sed -i 's/^puts $fd "\\\[Interface 0\\\]"/#puts $fd "\\\[Interface 0\\\]"/g' /www/api/methods/bidcosrf/setconfiguration-rf.tcl
sed -i 's/^puts $fd "Type = CCU2"/#puts $fd "Type = CCU2"/g' /www/api/methods/bidcosrf/setconfiguration-rf.tcl
sed -i 's/^puts $fd "Description = CCU2-Coprocessor"/#puts $fd "Description = CCU2-Coprocessor"/g' /www/api/methods/bidcosrf/setconfiguration-rf.tcl
sed -i 's/^puts $fd "ComPortFile = \/dev\/ttyAPP0"/#puts $fd "ComPortFile = \/dev\/ttyAPP0"/g' /www/api/methods/bidcosrf/setconfiguration-rf.tcl
sed -i 's/^puts $fd "AccessFile = \/dev\/null/#puts $fd "AccessFile = \/dev\/null/g' /www/api/methods/bidcosrf/setconfiguration-rf.tcl
sed -i 's/^puts $fd "ResetFile = \/dev\/ccu2-ic200"/#puts $fd "ResetFile = \/dev\/ccu2-ic200"/g' /www/api/methods/bidcosrf/setconfiguration-rf.tcl
sed -i 's/^puts $fd ""/#""/g' /www/api/methods/bidcosrf/setconfiguration-rf.tcl

#/etc/config_templates/netconfig
sed -i 's/^HOSTNAME=homematic-ccu2/#HOSTNAME=homematic-rcu/g' /etc/config_templates/netconfig

#/bin/update_firmware_run
sed -i 's/^\/update_script CCU2/\/update_script RCU/g' /bin/update_firmware_run

#/www/config/cp_security.cgi
sed -i 's/exec umount \/usr\/local/#exec umount \/usr\/local/g' /www/config/cp_security.cgi
sed -i 's/exec \/usr\/sbin\/ubidetach -p \/dev\/mtd6/#exec \/usr\/sbin\/ubidetach -p \/dev\/mtd6/g' /www/config/cp_security.cgi
sed -i 's/exec \/usr\/sbin\/ubiformat \/dev\/mtd6 -y/#exec \/usr\/sbin\/ubiformat \/dev\/mtd6 -y/g' /www/config/cp_security.cgi
sed -i 's/exec \/usr\/sbin\/ubiattach -p \/dev\/mtd6/#exec \/usr\/sbin\/ubiattach -p \/dev\/mtd6/g' /www/config/cp_security.cgi
sed -i 's/exec \/usr\/sbin\/ubimkvol \/dev\/ubi1 -N user -m/#exec \/usr\/sbin\/ubimkvol \/dev\/ubi1 -N user -m/g' /www/config/cp_security.cgi
sed -i 's/exec mount \/usr\/local/#exec mount \/usr\/local
exec rm -rf \/usr\/local\/*/g' /www/config/cp_security.cgi
sed -i 's/exec mount -o remount,ro \/usr\/local/#exec mount -o remount,ro \/usr\/local/g' /www/config/cp_security.cgi
sed -i 's/exec mount -o remount,rw \/usr\/local/#exec mount -o remount,rw \/usr\/local/g' /www/config/cp_security.cgi

Herzlichen Dank an unseren Techniker der das ganze für mich zusammengestellt hat sowie an IRINA MUELLER, PAULG4H und MULE aus dem FHZ Forum : http://homematic-forum.de/forum/viewtopic.php?f=26&t=13303&p=107260#p107260

PS. Als Hardware benötigt man neben dem Raspberry und der SD Karte auch mindestens einen Homematic LAN Adapter

Hallo BestEx,

danke für die Komplett-Anleitung, spart weitere eigene Versuche :wink: :smiley:

Zwei Punkte, die ich noch nicht verstanden habe (den anderen Thread hatte ich auch durchgelesen) :

  • Läuft der RasPi dann „nur“ als CCU oder können noch andere Programme/Funktionen drauf ? Sinnvoll oder nicht ?
  • Wie geht die Installation ohne einen zusätzlichen Linux-PC, ist das möglich oder nicht ?

Vielleicht weisst Du / Dein Techniker noch was dazu.

Gruß
Bruno

1.) Es läuft nur die CCU2 auf dem Raspberry
2.) Prinzipiell kann man die SD Karte auch mit einem Windows Tool partitionieren und formatieren. Alternativ kann man ein Wheezy (RASPBERRY Linux) auch fertig auf einer SD Karte installiert kaufen. (Im FHZ Forum steht etwas zu Wheezy)

Danke, Wheezy läuft schon mit der Karte, mein Problem ist der Teil ab „wget …“, aber das sind wohl auch nur Kopier- bzw. Entpackbefehle nach dem Download.

Funktioniert das in Verbindung mit dem LAN Adapter?

Ich wüßte nicht, welches Empfangs-/Sendemodul man sonst anbinden könnte. Also definitiv JA!

Korrekt, da der Raspberry keine HF Schnittstelle hat funktioniert das ganze nur mit einem bzw. mehreren LAN Adaptern.

Oder auf dem IP-Symcon Server per Qemu:
http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/

Quizfrage wo da der Vorteil liegt ??

Also bei der Himbeere denke ich spielt Ausfallsicherheit gegenüber Windows noch ne Rolle aber alles auf der selben Hardware…da kann ich auch beim Bidcos Service bleiben

Eines vorab - das Projekt an sich ist eine coole Sache und ich werde das sicher ausprobieren. Vielen Dank an BextEx für die Umsetzung und Dokumentation.

Aber jetzt wird es dann doch ein klein wenig hahnebüchen. Ich emuliere einen Pi auf dem ich dann eine CCU2 emuliere. Aaaah ja. :wink:

Ich dachte immer die CCU wäre ein Mittel zum Zweck eventuelle Unzulänglichkeiten bei der Zuverlässigkeit eines Windows-Rechners oder eines PCs an sich auszugleichen, eine Art Notprogramm.

Und eine der Stärken des Pi ist es Strom zu sparen.

Beides wird damit erfolgreich und viel Aufwand über Bord geworfen. Das wäre dann in meinen Augen nur eine (zugegeben nette) Machbarkeitsstudie.

Ich bin mit IP-Symcon garnicht auf Windows und habe somit ein Problem mit dem Bidcos Service :wink:

Steigerung: Man könnte Windows selbst noch in eine VM legen. LOL

Ich könnte das Szenario ja mal unter Windows auf Parallels unter OSX testen. Hihihi

Guten Morgen,

mich würde die ganze Sache mit der CCU1 Firmeware interessieren, geht das auch?
Interessieren deshalb, weil ich gerne BlueID implementieren würde und das erstmal nicht auf der CCU2 läuft.

Gruß
Frank

Die CCU2 FW ist binärkompatibel mit dem Raspberry (Beide HW Systeme nutzen den gleichen Prozessor). Das ist meines Wissens bei der CCU1 nicht der Fall und deshalb wird man durch einfaches Kopieren und konfigurieren die CCU1 FW auf dem Raspberry nicht zum laufen bekommen

Interessant…aber man muss schon eine CCU2 im Besitz haben, oder wie?

Das wäre zumindest fairer.

Wie das von der rechtlichen Seite her aussieht wurde im Homematc-Forum auch schon diskutiert. Ich schätze mal mit einer CCU2 im Schrank bewegt man sich zwar auch in einer Grauzone aber so ganz ohne CCU die Firmware zu nutzen dürfte rechtlich sehr bedenklich sein.

Ich kann Kronos nur zustimmen. Ohne CCU2 im Schrank sollte man die Homematic-ccu2 FW auf dem Raspberry nicht nutzen. Ich wäre auch bereit für eine SW Lizenz zu zahlen falls eine angeboten wird

Gesendet von meinem Nexus 4 mit Tapatalk 2

Aber wie kommt man mit dem Paket ins Netz, wenn man am LAN Port des RBP den Lan Adapter hängen hat? oder hat der LAN Adapter eien eigene IP, sodass man diesen und den RBP an einen Switch hängen kann?

Gruß Marcel

Der Lan Adapter hat eine eigene IP und hängt seperat im Netz. Die Rasp. CCU2 hat meine Adapter alle gefunden (Nach Eingabe der Homematic Device ID und der verschlüsselungsparameter)