Raspberry Pi mit Baumarkt Fernbedienung in FHEM

Begonnen von Nick, 21 April 2013, 21:06:47

Vorheriges Thema - Nächstes Thema

Nick

Es gibt einige Internetforen und auch hier, wie man mit Hilfe des Pi oder des Arduino 433 Mhz Elro / Baumarktsteckdosen ansteuern kann. Es geht auch noch "günstiger" und auch prima mit FHEM. Ich habe hier einige Infos zusammengetragen und die von mir gebaute Erweiterung auch Intertechno Komponenten sowie eine FHEM Integration angehangen. Vielleicht hilft's jemand - für Kommentare bin ich dankbar.

Man braucht das typische Funksteckdosen Set mit DIP Schaltern (z.B. bei Pollin oder gerade bei Toom Baumarkt mit 4 Funksteckdosen für 12,99€ im Angebot). Dieses Sets sind Elro kompatibel. Einen Sender kann man sich kaufen - oder man baut den beiliegenden Sender um. Das ist prima in Jotschi's blog beschrieben:
http://www.jotschi.de/Technik/2012/12/05/raspberry-pi-433mhz-remote-controlled-power-plugs.html

Wenn man dann wiringpi und rcswitch-pi installiert, kann man die Elro/Baumarktsteckdosen steuern (Falls es nicht klappt, statt 8kOhm mal 5k probieren.).

Modifikation 1: Auf Intertechno erweitern
In das Verzeichnis rcswitch-pi die beiliegende send.cpp kopieren und neu bauen. Danach unterstützt send den bisherigen Syntax (Elro 440 mit DIP Schalter) auch die volle Intertechno Kodierung(Hauscode, Gruppe, Gerät). Als houseCode in Kleinbuchstaben a..p verwenden. Also beispielsweise <./send a 1 1 1>, um das Gerät mit Hauscode A, Gruppe 1 einzuschalten.

Modifikation 2: In fhem integrieren
Zunächst hatte ich mit notify experimentiert, um send aufzurufen. Das hat jedoch seine Limitationen und Probleme  u.a. wenn mehrere Kommandos zu selben Zeit entstehen. Einfach die anhängende 00_GenShellSwitch.pm mit sudo nach /opt/fhem/FHEM kopieren und fhem neu starten ( sudo service fhem stop und dann  sudo service fhem start).

Danach kann man rcswitch basierte Kommandos wie folge absetzen:
### WOHZIMMER LESELAMPE ###
define Wohnzimmer_Leselampe GenShellSwitch /home/pi/rcswitch-pi/send a 1 1 1 0
attr Wohnzimmer_Leselampe group Licht
attr Wohnzimmer_Leselampe room Wohnzimmer

(es geht natürlich auch der Elro Syntax: send 11111 1 1 0)

Dabei definieren die letzen zwei Argumente den on/off Syntax und die Zeichen davor ein Kommando. Für on wird dann "Kommando on" und für off "Kommando off" zusammengebaut. Das ist so ggf auch für andere Lösungen als rcswitch einsetzbar.

Damit das Ganze klappt, muss send mit root Rechten ausgeführt werden. Der einfachste Ansatz ist wohl das setuid Bit. Nach dem Bauen von send:
sudo chown root ./send
sudo chmod 4711 ./send


Funktioniert bisher prima. Ich kann damit die Baumarktdosen, meine Intertechno Komponenten und meine Elro HomeEasy Komponenten steuern.

P.S.: Z.T. habe ich das im raspberry Pi Forum gepostet.

Nick

Das im vorherigen Beitrag gepostete Device GenShellSwitch wird dank Matthias nun auch von andfhem unterstützt.
Vielen Dank!!!

Habe übrigens den 5k Widerstand auf 470 Ohm gesenkt. Damit ist die Reichweite wie bei der Fernbedienung im Originalzustand.

fh168

Hallo,
ich bekomme: root@raspberrypi:~/wiringPi/rcswitch-pi# Can't exec "/root/wiringPi/rcswitch-pi/send": Permission denied at ./FHEM/00_GenShellSwitch.pm line 131.
readline() on closed filehandle DATA at ./FHEM/00_GenShellSwitch.pm line 132.


auf der Kommandozeilenoberfläche wird das Kommando ausgeführt:
root@raspberrypi:~/wiringPi/rcswitch-pi# ./send 00000 1 1
sending systemCode[00000] unitCode[1] command[1]


Edit: Eine Frage ist schon gelöst, Rechteproblem
Lösung steht hier: http://www.itbasic.de/raspberry-pi-erster-schritt-zur-hausautomation/


Jetzt nur noch: Wie kann man sendTriState Kommandos da einfügen? bei arduino geht das so: mySwitch.sendTriState("0000FF0F10F0");

Kommando funktioniert nur auf der Kommandozeilenoberfläche, nicht aber unter Fhem. im Log steht keine Fehlermeldung.

LG
/robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Nick

Hast Du die chmod und chown Kommandos ausgeführt (s.o.)? - Wenn es von der Kommandozeile aus mit sudo geht, sieht es mir nach einem Rechteproblem aus. Nach den Kommandos sollte es von der Kommandozeile aus auch als User pi gehen und dann sich von fhem aus.

fh168

Hallo Nick,

yep, alles gemacht.
Fhem sagt auch, das geschaltet wird

Command
/root/wiringPi/rcswitch-pi/send 11111 4
DEF   
/root/wiringPi/rcswitch-pi/send 11111 4 1 0
NAME
Wohnzimmer_Leselampe
NR
123
NTFY_TRIGGERTIME
2013-05-18 23:29:47
OffValue
0
OnValue
1
STATE
off
TYPE
GenShellSwitch

Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

fh168

ich habs hinbekommen:

chmod +s /root/wiringPi/rcswitch-pi/send
mv send /usr/bin/

Info habe ich von: http://issuu.com/themagpi/docs/issue_8_final?mode=window
Dort steht ein interessanter Artikel über Funksteckdosen.

Jetzt nochmal die Frage:
Wie kann man sendTriState Kommandos da einfügen? bei arduino geht das so: mySwitch.sendTriState("0000FF0F10F0");

Robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Nick

Der chmod 4711 sollte es eigentlich auch tun. Evtl. fehlte der Pfad. Egal, klappt ja.

Der sendTriState ist in der RCSwitch.h drin und wir auch verwendet. Du musst die send.CPP anpassen. Aktuell unterstützt die Intertechno und Elro Formate auf der Kommandozeile; der Syntax waere wie von Dir gepostet.

Brauchst Du eine adaptierte send.cpp, oder wo ist das Problem genau?

fh168

Hallo Nick,
die Funksteckdosen, die ich hier liegen habe, sind wohl weder Intertechno noch Elro und haben keine DIP-Schalter. Jedoch habe ich es hinbekommen den Code auszulesen und mit dem obigen Kommando werden diese mit dem Arduino ein/ausgeschaltet. Die Funksteckdosen sind schon alt, aber funktionieren tadellos.
Robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Nick

Mir ist nicht klar, woran es hängt. die sendTriState Funktion ist public und kann aus send.cpp ausgerufen werden. Brauchst Du ein wenig Hilfe, damit das send Kommando direkt einen Tristate Code entgehen nimmt?
Man könnte relativ trivial einbauen, dass ein einziger Parameter als Tristate String interpretiert wird. Intertechno und Elro haben ja mehr Parameter. Technisch klappen sollte es, da sendTriState von jedem Intertechno/Elro Kommando im Hintergrund verwendet wird und der Code identisch zur Arduino Implementierung ist.

P.S.: Was für Dosen sind es denn?

fh168

Hallo Nick,

genau, wenn ich das Kommando send 0000FF0F01F0 auf der Kommandozeile absetze bekomme ich einen  Segmentation fault. Die Receive-Funktion beim Arduino rcswitch gibt mir das zurück.

Decimal: 20788 (24Bit) Binary: 000000000101000100110100 Tri-State: 0000FF0F01F0 PulseLength: 313 microseconds Protocol: 1
Raw data: 5212,312,944,312,940,316,940,312,944,312,940,316,940,312,940,316,940,316,940,940,312,316,940,940,316,312,940,316,940,312,944,940,312,312,944,312,940,940,316,940,312,316,940,940,312,316,940,312,944,


Man muss also nur die send.cpp anpassen. Das sind no name Dosen, yk-1 steht da drauf. Die gibt (gab) es aber häufig, ich habe hier 6 Stück rumliegen. Ein Foto davon habe ich in meinem Blog hinzugefügt: http://blog.moneybag.de/baumarkt-steckdosen-schalten-mit-dem-arduino/

Robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Nick

Ach so, das Problem heißt C++ ;-)
send unterstützt diesen Syntax nicht. Das ursprüngliche send kann nur den Elro 440 Syntax. Ich habe das auf Elro 600 und Intertechno erweitert.

Du brauchst eine Erweiterung in send.CPP damit man auch direkt TriStates absetzen kann (das ist der Level darunter). Ich kann das die Tage mal machen. Ist recht simpel.

fh168

Genau,
ich habe jeetzt send.cpp mal etwas angepasst.
dann mit make kompiliert. Aber irgendwie übernimmt der nicht den Source-Code von der send.cpp - Datei. Ich bekomme immer noch die alte Version. Ich kann kein c++ wie kompiliere ich da, sodass ich eine send bekomme?

Edit: hat sich erledigt, klappt jetzt auch mit sendTriState

Danke für die Hilfe!

Robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

dahans

Also ich bin leider absoluter Neuling in Linux :(
Meine Vorgehensweise. Elro 440ér
- raspian via mac installiert.
- sudo su - -->startx--->root terminal
- apt-get update
- apt-get upgrade
- git clone git://git.drogon.net/wiringPi">git://git.drogon.net/wiringPi
- cd wiringPi
- ./build
------------
- git clone https://github.com/domfi/rcswitch-pi.git
- cd rcswitch-pi
- make (also das rcswitch verzeichnis ist dann IM wiribgpi verzeichnis)
--------------
dann mit ./send 11111 1 1 probiert
aber steckdose schaltet nicht jumper 1-5 on und nur  A on!
-------------
Bauteil von Watterott mit 17cm antenne (angelötet) und an gpio17 (pin 11)--> 5v liegt an mit multimeter nachgemessen.
-------------
gpio readall zeigt gpio 17 auf out ---low
------------
Bin echt am verzweifeln ne hilfe wär super

dahans

Hat sich erledigt funktioniert nun. Tolle Arbeit Fhem installiert und funktioniert wunderbar sogar Mobil via andfhem.

Patrickp

Hi dahans,
wie hast du dein Problem lösen können.
Von heute auf morgen geht bei mir nichts mehr über gpio 17.
Auch nach x neuen Installtionen. Funkbedienung läuft aber noch ohne Raspberry.