Die "CC1101-OneWire-Clock extension for Raspberry Pi (COC)"
der Firma Busware nutzt den beliebten und günstigen "Raspberry Pi" als zusätzliche
Hardware- und Software Basis für die Implementation Ihrer bekannte Empfängerbausteine. Dieses Zusatzmodul für den Extensionsport
hat die gleiche Hardware wie der bekannte CUNO, allerdings keinen eigenen
Netzwerk-Anschluss. Die Verbindung erfolgt über eine serielle Schnittstelle auf den seriellen Port des Raspberry .
Dieser seriellen Port wird mittels SER2NET auf den auch vom CUNO genutzten TCP-Port 2323
umgeleitet, so das die Extension mit der Firmware CULFW quasi als "CUNO auf dem Raspberry" genutzt werden kann.
Zusätzlich gibt auch die Möglichkeit, eine externe Stromversorgung und zusätzliche 1Wire Bausteine anzuschliessen.
Ich habe den COC mit der Standard-Antenne und dem optionalen Gehäuse bei Busware gekauft. Dieses Gehäuse ist ein Standard TekBerry Gehäuse, in welches Busware die benötigten zusätzlichen Öffnungen gefräst hat. Wer das ordentlich selber machen kann (ich nicht), kann es auch woanders günstiger kaufen. Als Stromversorgung kann ein Netzteil mit Micro USB-Anschluss oder ein externes Netzteil mit 3,5mm Stecker (>1,5cm Länge, sonst passt er nicht durch das Gehäuse) mit mind. 1,2A Belastbarkeit verwendet werden.
Zunächst ist die Hardware gemäß der bereitgestellen Installationsanleitung zusammen zu bauen. Auf den aktuell(2014) ausgelieferten COC ist der Spalt für den herausstehenden Connector auf dem Pi gross genug. Die Kappe auf dem Connector muss allerdings wie beschrieben ausgeklingt werden. Ist sollte darauf geachtet werden, die Extension wirklich bis zum "Klick" auf den Expansionsport zu drücken.
Jetzt kann wie üblich der Raspberry mit dem Betriebssystem "Rasbian" installiert werden. Der Grafische Desktop ist für den Betrieb nicht notwendig.
vi /boot/cmdline.txt dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p3 rootfstype=ext4 rootwait #dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p3 rootfstype=ext4 rootwait
aptitude update aptitude upgrade reboot
aptitude install avrdude aptitude install ser2net
vi /etc/ser2net.conf #add 2323:telnet:600:/dev/ttyAMA0:38400 8DATABITS NONE 1STOPBIT
wget -O COC.hex "http://sourceforge.net/p/culfw/code/HEAD/tree/trunk/culfw/Devices/COC/COC.hex?format=raw"
vi upload_coc_fw.sh #!/bin/bash echo "calling COC bootloader..." if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi if test ! -d /sys/class/gpio/gpio18; then echo 18 > /sys/class/gpio/export; fi echo out > /sys/class/gpio/gpio17/direction echo out > /sys/class/gpio/gpio18/direction echo 0 > /sys/class/gpio/gpio18/value echo 0 > /sys/class/gpio/gpio17/value sleep 1 echo 1 > /sys/class/gpio/gpio17/value sleep 1 echo 1 > /sys/class/gpio/gpio18/value avrdude -p atmega1284p -P /dev/ttyAMA0 -b 38400 -c avr109 -U flash:w:COC.hex
chmod a+x flash_coc.sh ./flash_coc.shTest neu installierte Firmware mit screen. Mit dem Kommando "V"<Enter> sollte sich die COC-Extension mit der CULFW Version melden. Mit "X21"<Enter> wird der benötigte Hex-Modus eingestellt und mit "X"<Enter> abgefragt. Anschliessend können die ersten Datensätze auftauchen.
screen /dev/ttyAMA0 38400 V -Version abfragen X21 -Modus setzen X -Modus Abfragen
modprobe i2c-bcm2708 echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device modprobe rtc-ds1307 hwclock -s
vi reset_coc #!/bin/bash /usr/sbin/service ser2net stop echo "resetting 868MHz extension..." /usr/bin/logger -p local0.notice "Reset COC" if test ! -d /sys/class/gpio/gpio17; then echo 17 > sys/class/gpio/export; fi if test ! -d /sys/class/gpio/gpio18; then echo 18 > sys/class/gpio/export; fi echo out > /sys/class/gpio/gpio17/direction echo out > /sys/class/gpio/gpio18/direction echo 1 > /sys/class/gpio/gpio18/value echo 0 > /sys/class/gpio/gpio17/value sleep 1 echo 1 > /sys/class/gpio/gpio17/value sleep 3 /usr/sbin/service ser2net start #mit :x abspeichern und verlassen chmod a+x reset_coc
vi /etc/rc.local #add modprobe i2c-bcm2708 echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device modprobe rtc-ds1307 hwclock -s /root/reset_coc
/etc/init.d/ser2net start netstat -lan|grep 2323 tcp 0 0 0.0.0.0:2323 0.0.0.0:* LISTEN
Damit sollte die Software Konfiguration abgeschlossen sein.
Das COC-Modul besitzt einen RJ11-Anschluss für 5V-1Wire Geräte. Die CULFW-Firmwäre unterstützt DS18[BS]20-Temperatursensoren
direkt und gibt die Temperatur im Format der HMS-T Sensoren in einem einstellbaren Intervall aus.
Alle anderen Sensoren müssen direkt angesprochen(gepollt) werden.
Leider entspricht die Pinbelegung der RJ11-Buchse keinerlei existierenden Standards, so dass ein eigener Anschluss notwendig ist.
Ich habe dazu ein Stück einer einfachen Streifenleiter-Platine verwendet und darauf einen DS18B20 direkt und zusätzlich noch einen
Anschluss für einen DS18B20 Rohrsensor dazugelötet, der dann am Vorlauf des Heizungsrohres angebracht wurde.
Nun sollte geprüft werden, ob die angeschlossenen 1wire Geräte erkannt werden. Dazu verbinden wir uns mit Telnet auf den von
ser2net bereitgestellten Port. Wie beim CUN ist auch hier nur eine gleichzeitige Verbindung möglich.
(Entgegen der Aufforderung zum Beenden der telnet session CTRL-+ bei einem deutschen Keyboard nutzen.)
telnet localhost 2323 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Of<Enter> #wird nicht angezeigt R:580008029007E810 R:8F000005550D5128 D: 2 telnet> quit Connection closed.Bei DS18B20 Sensoren finden sich diese IDs später auch in IPSymcon als WSDEV Device Instancen des CUL Moduls als HMS-T Sensoren wieder. Die Angaben für Batterie und Signal sind nicht echt und statisch.
Bei längerem Betrieb scheint der COC(bei mir V1.57) Probleme mit der Ausgabe zu bekommen, das heisst: bei einem Datensatz fehlt das erste und/oder andere Zeichen. Damit können die nachfolgenden Scripte keine Daten mehr erkennen und es werden unsinnige Instancen angelegt. Nach einem Reset des COC (s.o) , spätestens jedoch nach einem Reboot des Rasbpi ist jedoch alles wieder OK. Aus diesem Grund füre ich das reset_coc Script einmal täglich als Cronjob in cron.daily aus.