Cookies helfen uns bei der Bereitstellung unserer Dienste. Durch die Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies einsetzen.

Suche

dedanlenfrelitptrues

Der PC_DIMMER_Server ist eine Java-App (siehe Artikel zur Handy-Lichtsteuerung), die auf dem Raspberry-Pi oder jedem anderen Gerät mit Java-Unterstützung ausgeführt werden kann. Dabei kann man über simple Terminal-Kommandos sowohl einzelne Kanalwerte setzen, als auch Kanalwerte auslesen. Der Server unterstützt dabei zeitgleich mehrere Verbindungen, sodass man die Android-Handy-App parallel zu anderen Steuergeräten verwenden kann. Da die zahlreichen Heim-Automatisierungs-Tools den Zugriff via TELNET in der Regel unterstützen, möchte ich in diesem Artikel zeigen, wie man die bekannte Software FHEM mit dem PC_DIMMER_Server verbindet, die Kanäle einrichtet und über Timer die Kanalwerte abruft, um Änderungen z.B. über die Handy-App auch in FHEM anzeigt.

 

Einrichten des Haupt-Device zur TELNET-Kommunikation

FHEM bietet direkt die Einbindung von Telnet an. Hierzu benötigen wir noch eine Klassendefinition, damit die FHEM die Kommandos bekannt gemacht werden. Diese Datei kann weiter unten heruntergeladen werden. Zusätzlich legen wir gleich eine Definition für RGB-Lampen an - dazu kommen wir dann weiter unten:

define PCDIMMERSERVER ECMD telnet IP.ADRESSE.DES.SERVERS:10014
attr PCDIMMERSERVER classdefs PCDIMMERSERVERDEF=/opt/fhem/pcdimmerserver.classdef:RGBLEDDEF=/opt/fhem/pcdimmerserverrgb.classdef
attr PCDIMMERSERVER icon black_FS20.on
attr PCDIMMERSERVER room Devices

Somit haben wir schon einmal das Schnittstellenobjekt angelegt. Nun brauchen wir noch ein logisches Objekt, damit wir über die Schnittstelle kommunizieren können. Hierzu instanzieren wir ein ECMDDevice über die Klassendefinition pcdimmerserver.classdev:

define Beleuchtung ECMDDevice PCDIMMERSERVERDEF
attr Beleuchtung IODev PCDIMMERSERVER
attr Beleuchtung room Devices

Anschließend werden die beiden Geräte in FHEM als ECMD und als ECMDDevice angezeigt:

fhem devices

 

Dummygeräte für Dimmerkanäle anlegen und Notifications einrichten

Theoretisch kann man bereits jetzt über das ECMDDevice Kanalwerte setzen und auslesen (die Zeit ist dabei in der classdef-Datei fix auf 1000ms eingestellt):

set Beleuchtung ch1 100
get Beleuchtung ch1

Aber es ist noch nicht wirklich komfortabel. Deshalb legen wir nun für jeden Kanal ein Dummydevice zur bequemen Steuerung über die Weboberfläche an. Wir richten zudem zwei Notifications ein. Die erste Notification notify_light_ch1 wird verwendet, damit Änderungen des Dummydevices ein Kommando ausführen und den eigentlichen Lichtkanal des PC_DIMMERs ändern. Das zweite Event notify_light_ch1b wird dann schließlich für die andere Richtung verwendet, sodass bei Kanalwertänderungen von Außen (z.B. über das Handy) das Dummydevice neue Werte erhält.

define light_ch1 dummy;
attr light_ch1 room Wohnzimmer->Beleuchtung;
attr light_ch1 alias Channel 1;
attr light_ch1 setList state:slider,0,2,100;
attr light_ch1 stateFormat state;
attr light_ch1 devStateIcon {Color::devStateIcon($name,"dimmer",undef,"state")};
attr light_ch1 group PC_DIMMER;
attr light_ch1 webCmd state;
define notify_light_ch1 notify light_ch1 set Beleuchtung ch1 $EVENT;
define notify_light_ch1b notify Beleuchtung:ch1:.* {fhem "set light_ch1 $EVTPART1"}

Dies müssen wir nun für jeden einzelnen Kanal machen, also light_ch2... bis light_ch16...

RGB-Lampen einrichten

FHEM kann auch direkt mit RGB-Lampen umgehen. Allerdings muss man hier einen kleinen Kniff über globale Variablen machen, da der PC_DIMMER_Server ja einzelne Kanalwerte überträgt. Über die drei Variablen werden über die Klassendefinition die RGB-Farben zusammengefügt, sodass die Oberfläche damit auch etwas anfangen kann.

# Definition von drei globalen Variablen
attr global userattr LED_R LED_G LED_B;

# Definition des RGB-Gerätes auf Kanal 9
define BeleuchtungRGB1 ECMDDevice RGBLEDDEF 9;
attr BeleuchtungRGB1 IODev PCDIMMERSERVER;
attr BeleuchtungRGB1 LED_R 0;
attr BeleuchtungRGB1 LED_G 0;
attr BeleuchtungRGB1 LED_B 0;

# Definition des Color-Pickers
define light_rgbled1 readingsProxy BeleuchtungRGB1:state;
attr light_rgbled1 setFn {fhem ("attr BeleuchtungRGB1 LED_R ".hex(substr($ARGS,0,2)));;fhem ("attr BeleuchtungRGB1 LED_G ".hex(substr($ARGS,2,2)));;fhem ("attr BeleuchtungRGB1 LED_B ".hex(substr($ARGS,4,2)));;fhem ("set BeleuchtungRGB1 rgb");;fhem ("setreading BeleuchtungRGB1 RGB $ARGS");;fhem ("setreading BeleuchtungRGB1 rgb $ARGS");;return undef};
attr light_rgbled1 setList rgb:colorpicker,HSV on off
attr light_rgbled1 getList rgb;
attr light_rgbled1 webCmd rgb:rgb FF0000:rgb FFFF00:rgb 00FF00:rgb 0000FF:rgb FFFFFF:rgb 000000;
attr light_rgbled1 devStateIcon {Color_devStateIcon(ReadingsVal("BeleuchtungRGB1","rgb","rgb"))}
attr light_rgbled1 getFn {fhem ("get BeleuchtungRGB1 rgb")};
attr light_rgbled1 room Wohnzimmer->Beleuchtung
attr light_rgbled1 alias LED-Leiste1
attr light_rgbled1 group LEDs

Weboberfläche

In den oben gezeigten Codes wurden bereits die Web-Commands definiert, die FHEM anweisen, wie einzelne Geräte in der Weboberfläche erscheinen sollen. Über den webCmd-Befehl werden 6 statische Farbboxen definiert und drei Slider. Über den ersten Slider kann man die Farbe wählen, der zweite Slider die Farbsättigung und der dritte Slider die Helligkeit. Zudem wird das Icon passend geändert, sodass es bei RGB-Lampen die Farbe anzeigt und bei den Standard-Dimmerkanälen die Helligkeit über den Kanalwert. So sollte es dann aussehen:

fhem control

 

Kanalwerte per Timer abrufen

Damit FHEM nun die Kanalwerte abfragen kann, benötigen wir einen Timer, der zyklisch den Server per Telnet pollt. Nachfolgender Code pollt für die Kanäle 1 bis 8 und noch für zwei RGBW-Geräte auf den Kanälen 9 bis 16 alle 10 Sekunden:

define Beleuchtung_timer at +*00:00:10 get Beleuchtung ch1 ;; get Beleuchtung ch2 ;; get Beleuchtung ch3 ;; get Beleuchtung ch4 ;; get Beleuchtung ch5 ;; get Beleuchtung ch6 ;; get Beleuchtung ch7 ;; get Beleuchtung ch8 ;; get Beleuchtung ch9 ;; get Beleuchtung ch10 ;; get Beleuchtung ch11 ;; get Beleuchtung ch12 ;; get Beleuchtung ch13 ;; get Beleuchtung ch14 ;; get Beleuchtung ch15 ;; get Beleuchtung ch16 ;; get light_rgbled1 rgb ;; get light_rgbled2 rgb;
attr Beleuchtung_timer room Verwaltung->Timer

Szenen

 FHEM bietet sogar die Funktionen für Lichtszenen. Diese kann man dann recht komfortabel im Browser konfigurieren. Eine Lichtszene kann man mit den nachfolgenden Kommandos erstellen:

define lightscenes LightScene light_ch1 light_ch2 light_ch3 light_ch4 light_ch5 light_ch6 light_ch7 light_ch8 light_rgbled1 light_ch12 light_rgbled2 light_ch16
attr lightscenes alias Lichtszenen
attr lightscenes room Wohnzimmer->Beleuchtung

fhem scenes

 

TabletUI

Die FHEM-Erweiterung TabletUI ermöglicht dann die komfortable Steuerung über ein Tablet mit Standard-Browser, aber auch Handys und Laptops. So kann ein fertiges System zum Beispiel aussehen:

fhem tabletui

 

Tablet UI nutzt dabei eine einfache Scriptsprache, die direkt in HTML-Dateien eingesetzt werden kann. Für die einzelnen Kanäle kann folgender Code verwendet werden:

<div data-type="dimmer" data-device="Beleuchtung" data-min="0" data-max="100" data-step="2"
data-get-on="!0" data-get-off="0" data-get="ch1" data-set="ch1" data-dim="ch1">

Lichtszenen können noch einfacher als einzelner Button dargestellt werden:

<div data-type="switch" data-device="lightscenes" data-set-on="scene Alles_dunkel">

Die RGB-Lampen brauchen dann wieder etwas mehr Code:

# Farbrad zum Wählen 
<div data-type="volume" data-device="light_rgbled1" data-get="rgb" data-set="rgb"
data-min="0" data-max="65535" class="hue-tick rgb hue-front small">
# Farbkreis
<div data-type="colorwheel" data-device="light_rgbled1" data-get="rgb" data-set="rgb" class="small">

Das sieht dann für RGBs dann z.B. so aus:

fhem rgbcontrol

 

Insgesamt braucht man einiges an Zeit, bis alle Devices und Parameter korrekt sitzen, aber am Ende hat man tatsächlich ein verlässliches System. Bei mir hat es bislang auch stets die einzelnen Systemupdates durchstanden und man kann vom Rechner oder vom Handy bequem das Licht heller oder dunkler schalten. Insgesamt eine feine - und cloudlose - Lösung.

 

Die vom PC_DIMMER_Server unterstützten Befehle sind hier aufgeführt: Handy-Lichtsteuerung

 

Download einzelner Dateien

 

JSN Teki is designed by JoomlaShine.com