Dies ist eine alte Version des Dokuments!


CUL Resetter auf dem Raspberrys Pi einrichten

Viele FHEM User berichten von zeitweisen Problemen bei einem nanoCUL mit FTDI-Chip auf dem Arduino.
In den Foren wird viel spekuliert. Über billige FTDI-Clones aus China bis zu fehlender Test-Pin-Verbindung (Pins 3+4 verlöten). Aber dies alles hilft meistens nicht weiter und der nanoCUL hängt sich weiterhin auf. Ich bin der Meinung, dass es an der Firmware liegt. Diese hat einen Bug und irgendwann möchte ein Watchdog aufgrund einiger Fehler den Ardunino neu booten und der CUL bleibt in einer Endlos-Schleife hängen. Deswegen blinkt er auch schnell und ist nicht mehr ansprechbar. Dann hilft nur noch ein manuelles Entfernes und Wiedereinstecken des nanoCUL um diesen wieder in Betrieb nehmen zu können. Doof nur, wenn man nicht zuhause ist und die halbe Hausautomation nicht mehr funktioniert.

Der CUL-Resetter setzt genau hier ein und verschafft Abhilfe. Er resettet den nanoCUL, damit dieser wieder wie gewohnt funktioniert.
Über ein DOIF wird der CUL-Resetter nur dann ausgelöst, wenn der nanoCUL über 60 Sekunden im Zustand opened verweilt. Er resettet den nanoCUL und initialisiert ihn wieder.
Leider ist dies softwaretechnisch nicht möglich. Aber diese kleine Hardware wird einfach an den Raspberry Pi angeschlossen und hilft uns einen Workaround anzuwenden.

Nachfolgend die erforderliche Installation- und Konfiguration-Anleitung.


Hardware Installation

Der CUL-Resetter hat 3 Stck beschriftete Dupont Kabel, welche an die GPIO-Schnittstelle des Raspberry Pi aufgesteckt werden.

Dazu wählt man die Anschlüsse 5V, GND und einen der GPIO-Pins. Hier im Beispiel wird GPIO-18 verwendet.

Anschließend wird der USB-Adapter in einen der USB-Ports am Raspberry eingesteckt und der nanoCUL auf den Adapter.
Auch wenn der Raspberry bereits gestartet ist, wird der nanoCUL noch nicht mit Strom versorgt und zeigt disconnected. Dies ändert sich nach der nachfolgenden Konfiguration in FHEM.


Software Installation

Zunächst das System updaten und WiringPi (Tool um die GPIO Schnittstellen vereinfacht anzusprechen) herunterladen.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git git-core
cd
git clone git://git.drogon.net/wiringPi

Danach WiringPi kompilieren.

cd wiringPi
./build

Nun ist WiringPi installiert und verfüghbar. Die Weitere Konfiguration wird im FHEM Webinterface vorgenommen.

FHEM Konfiguration

Wir erstellen zunächst einen dummy zum generellen Einschalten des nanoCUL.

define GPIO_18 dummy
attr GPIO_18 room Watchdog
attr GPIO_18 setList on off
attr GPIO_18 icon RPi

Anschließend 2x notify zum ein/ausschalten.

Einschalten des nanoCUL:

define GPIO_18_on notify GPIO_18:on {system("/usr/bin/gpio export 18 out && /usr/bin/gpio -g write 18 1")}
attr GPIO_18_on room Watchdog
attr GPIO_18_on icon audio_shuffle

Ausschalten des nanoCUL:

define GPIO_18_off notify GPIO_18:off {system("/usr/bin/gpio export 18 out && /usr/bin/gpio -g write 18 0")}
attr GPIO_18_off room Watchdog
attr GPIO_18_off icon audio_shuffle

Nun können wir bereits den CUL-Resetter händisch über FHEM schalten. Steckt man einen nanoCUL an, leuchtet desssen LED sobald man den dummy einschaltet.

Automatismus

Jetzt konfigurieren wir einen Watchdog für den automatischen Reset des nanoCUL.
Die Funktion ist folgende: Wechselt der nanoCUL für mehr als 60 Sekunden auf openend, wird der Strom des nanoCUL weggenommen und wieder zugeführt. Dies simuliert ein händisches aus/einstecken und der nanoCUL geht wieder auf initialized.
Die Zeile mit der pushmsg muss man anpassen oder entfernen wenn der Service nicht vorhanden ist, also nicht benutzt wird.

define nanoCULWatchdog DOIF ( [nanoCUL:state] eq "opened" ) (\
\
	{\
        my $culpath = InternalVal('nanoCUL','DEF','');;\
        fhem("defmod nanoCUL CUL /dev/serial/by-id/none\@38400 0000");;\
	system("/usr/bin/gpio export 18 out");;\
	system("/usr/bin/gpio -g write 18 0");;\
	sleep 3;;\
	system("/usr/bin/gpio -g write 18 1");;\
	fhem("defmod nanoCUL CUL $culpath");;\
        fhem("set pushmsg msg 'fhem' 'nanoCUL wurde resettet, da 1min im Status opened'");
	}\
)\
DOELSE{}\
\

attr nanoCULWatchdog do always
attr nanoCULWatchdog repeatcmd 600
attr nanoCULWatchdog wait 60
attr nanoCULWatchdog room Watchdog
attr Watchdog_nanoCUL icon control_reboot

Als letztes muss die FHEM Konfiguration des nanoCUL noch leicht erweitert werden, damit die Zustandsänderung einen Event erzeugt.

attr nanoCUL event-on-change-reading state
attr nanoCUL event-on-update-reading state

Falls das o.g. DOIF nicht funktioniert, hier eine Alternative, welche die Zeit des letzten Datenempfangs beurteilt.

define nanoCULWatchdog DOIF ( time() - time_str2num(ReadingsTimestamp("nanoCUL","state","0")) > 15 ) (set pushmsg msg 'fhem' 'nanoCUL hat mehr als 15 min kein Update erhalten - Bitte prüfen!')

cul-resetter-fhem.jpg


Navigation
Eigene Werkzeuge