Archiv der Kategorie: Raspberry Pi

[Fhem] wenn sunset zu spät ist

Wie ich hier bereits geschrieben habe, kann man die Funksteckdosen nach Sonnenaufgang (sunrise) und Sonnenuntergang(sunset) schalten.

Nur leider ist es bereits dunkel, wenn die Steckdose und die damit verbundene Lampe eingeschaltet wird. Bis dahin bin ich entweder über einen der Hunde, Kinderspielzeug oder die eigenen Füße gefallen. Obwohl ich glaube, das bei den eigenen Füßen auch nicht das Licht hilft.

Auf jeden Fall ist es ganz einfach, die Steckdose vor dem Sonnenuntergang zu schalten.

define LampeFlurAn at *{sunset(-3600,"17:00","22:00")} set LampeFlur on

Mit der Angabe -3600 (Zeitangabe in Sekunden) wird die Steckdose, in diesem Fall eine Stunde, vor dem Sonnenuntergang eingeschaltet.

[Raspberry Pi] Temperatur Sensor auslesen

Nachdem die Funksteckdosen in FHEM eingerichtet sind, wollte ich nun die Temperatur in den einzelnen Zimmern messen.
Hierfür hatte ich mir gleich mehrere OneWire Sensoren des Typs Dallas 18B20 zugelegt.

Das Problem bei der Variante über den OneWire Sensor ist die Verbindung zwischen dem Raspberry Pi und den Sensoren herzustellen. Ich hatte Glück das wir vor einigen Jahren gebaut haben und ich nun auf die Netzwerkverkabelung zurückgreifen konnte.
Auf einer Lochrasterplatine habe ich RJ 45 Buchsen gelötet und die Sensoren an RJ 45 Stecker.

OneWire Sensor

RJ45

Die Pins des OneWire Sensors werden wie folgt belegt:

Pin 1: Masse
Pin 2: GPIO4
Pin 3: 3.3V

Pin Belegung
Zwischen Pin 2 und 3 habe ich noch einen 4,7 KOhm Widerstand gesetzt.

Damit der Raspberry Pi in der Lage ist die Sensoren auszulesen, müssen zwei Module geladen werden.


sudo modprobe w1-gpio
sudo modprobe w1-therm

Um sich das händische laden der Module nach jedem Neustart zu sparen, können die Module in der /etc/modules eingetragen werden.

Unter /sys/bus/w1/devices/ findet man dann den Sensor, in meinem Fall ist es 28-000004b84990.
Ein cat 28-000004b84990/w1_slave liefert folgendes:
7f 01 4b 46 7f ff 01 10 33 : crc=33 YES
7f 01 4b 46 7f ff 01 10 33 t=23937

t=23937 gibt die Temperatur an, hier 23,937 Grad.

[Raspberry Pi] Ein und Ausschalter

Von Haus aus bietet der Raspberry Pi keine Möglichkeit für ein einfaches aus beziehungsweise einschalten. Zum einschalten muss der Raspberry Pi nur mit Spannung versorgt werden, zum ausschalten muss er sauber heruntergefahren werden. Möchte man den Pi nun wieder einschalten, muss er von der Spannungsversorgung getrennt und wieder verbunden werden.

Für das wieder einschalten gibt es eine einfache Möglichkeit und zwar müssen hierfür nur die beiden Kontakte neben dem HDMI Anschluss (gekennzeichnet mit P6) verbunden werden. Ich habe die beiden Kontakte mit einem einfachen Taster verbunden und kann nun den Raspberry Pi wieder einschalten. Wenn das Betriebssystem auf dem Raspberry noch nicht herunterfahren ist, würde ich vermeiden den Taster zu betätigen. Durch den Reset wird das Betriebssystem vorher nicht sauber heruntergefahren und könnte im schlimmsten Fall im Anschluss nicht mehr starten.

Reset beim Raspberry Pi

Raspberry Pi und der Ausschalter
Für das Ausschalten benötigt man einen der GPIO Ports, ich nutze im weiteren Verlauf den GPIO 22.
Um den Port als Eingang zu definieren, müssen die folgenden zwei Befehle auf der Kommandozeile ausgeführt werden:
echo 22 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio22/direction

Über cat /sys/class/gpio/gpio22/value wird der Zustand abgefragt.

Damit der Port den entsprechenden Zustand erreicht, lege ich ihn auf Masse (Zustand 0) oder 3,3 Volt (Zustand 1).
Ich habe den Port 22 mit einen Pullup Widerstand (10 kOhm) an Pin 1 (3,3V) angeschlossen und über einen Kippschalter kann ich den Gpio 22 Port auf Masse legen. Per Cronjob wird der Wert in der Datei /sys/class/gpio/gpio22/value abgefragt und bei einer 0 wird das System heruntergefahren.

shutdown script
#!/bin/bash
i=`cat /sys/class/gpio/gpio22/value`
if [ $i -eq 0 ]
then
/sbin/shutdown -h now
fi

Reset der GPIO Ports nach neustart
Leider gehen nach einem Neustart die Einstellungen für die GPIO Ports verloren. Mit Hilfe eines Scripts, welches in der /etc/rc.local hinterlegt wird, werden die Einstellungen beim starten neu gesetzt.

set_gpio22.sh:
#!/bin/bash
echo 22 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio22/direction

[Raspberry Pi] CUL in Fhem einbinden

Endlich habe ich es geschafft die Stehlampen im Garten an den FS20 Umschalter anzuschließen. Über die Fernbedienung konnte ich die einzelnen Ausgänge bereits schalten, nun sollte es auch über Fhem möglich sein.

In der Dokumentation hatte ich gelesen das es reicht die CUL anzuschließen und den Fhem neu zu starten. Kurz nach dem Neustart kam folgende Meldung auf der Kommandozeile:

Use of uninitialized value in string ne at ./FHEM/99_CULflash.pm line 63.

Die Meldung tritt auf wenn man beim einstecken den kleinen Taster nicht eingedrückt hat. Also nochmal raus, Taster drücken, einstecken und Fhem neu starten.

Jedoch blinkte die CUL nicht und In den fhem logs kam folgende Meldungen
Can't open /dev/ttyAMA0: Keine Berechtigung

Ich änderte die Rechte auf /dev/ttAMA0 und startete Fhem neu, diesmal erhielt ich folgende Meldung:
usb create starting
Opening CUL device /dev/ttyAMA0
Setting CUL baudrate to 38400
CUL device opened
usb create end

Was mich jedoch wunderte ist, das in den Dokumentationen von /dev/ttyACM0 die Rede ist und die CUL auch nicht blinkte. In einem Forum stieß ich auf die Lösung, wenn Fhem auf dem Rasbperry Pi läuft gibt es Probleme beim einspielen der Firmware.

Also lud ich mich mir FLIP für Windows von Atmel herunter und die benötigte Firmware. Nach der Installation der Software ließ sich die Firmware ohne Probleme aufspielen und die CUL blinkte.
Nun gab es unter Linux auch das Device /dev/ttyACM0 und in der fhem.cfg fügte ich folgende Zeile hinzu:
define CUL1 CUL /dev/ttyACM0@9600 1234

Einbinden in Fhem

Ich hatte erst am nächsten Tag Zeit den FS20 Aktor in Fhem einzubinden. Als ich Fhem im Browser aufrief gab es bereits den Raum FS20, darunter befanden sich vier Schalter.
Ich klickte den ersten Schalter an und siehe da, die Lampen gingen an. Anscheinend erkennt die CUL alle FS20 Vorgänge und leitet sie an den Fhem weiter, dieser erstellt den passenden Schalter.
Nun musste ich nur noch in der fhem.cfg die angelegten Schalter nach meinen Wünschen umbenennen.

fhem fs20

Automatisch angelegte Schalter

Fhem registriert es wenn ich die Lampen per Fernbedienung schalte und ändert den Status im Webfrontend.

cul

CUL gekauft www.busware.de

[Raspberry Pi] Sendeleistung des 433Mhz Senders erhöhen

In dem Artikel hatte ich den 433 MHz Sender direkt an die 5 Volt des Rasbperry Pi’s angeschlossen. Die Reichweite würde ich auf 8 – 10 Meter schätzen, in der Entfernung habe ich eine Steckdose die sich zeitweilig nicht schalten lässt. Die maximale Reichweite des Senders erhält man, wenn der Sender mit 12 Volt betrieben wird. Laut Datenblatt ist 12 Volt die höchste Spannung die angelegt werden darf.
Ich habe den Sender mittlerweile auf eine Platine gelötet und zu Testzwecken über die Batterie(12 Volt) aus der Fernbedienung mit Spannung versorgt. Ich kann nicht sagen wie die Reichweite mit 12 Volt ist, die problematische Steckdose lässt sich jetzt jedoch ohne Probleme schalten.

Bei externer Spannungsversorgung
Wenn der Sender nicht über den Raspberry Pi mit Spannung versorgt wird, muss der Minuspol der Batterie mit dem Ground des Raspberry Pi´s verbunden werden. Wenn man die beiden Pole nicht miteinander verbindet, sendet der Sender nicht.

Damit die Fernbedienung wegfällt, könnte man die Kontakte auslösten und auf der Platine wieder ein löten. Ansonsten würde in meinem Fall sicherlich eine 9 Volt Batterie über einen Batterieclip reichen.

Spannungsversorgung mit 9 Volt

Spannungsversorgung mit 9 Volt

Spannungsversorgung mit 12 Volt

Spannungsversorgung mit 12 Volt