Zuletzt angesehen: • fhem_culresetter
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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 WatchdogCUL 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!')