FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: moelski am 12 Januar 2015, 04:36:09

Titel: Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: moelski am 12 Januar 2015, 04:36:09
Moin !

Habe da so eine Idee für eine Deckenleuchte im Wohnzimmer in etwa wie in diesem Video:
https://www.youtube.com/watch?v=2qVhuQ_StXs

Die Ansteuerung würde ich gerne über einen Arduino + WLAN lösen. Die Frage ist nur wie ich in FHEM eine Farbauswahl einbauen und die ausgewählte Farbe per HTTP senden kann.
Also nach der Farbauswahl soll FHEM dann sowas machen:
GetHttpFile("IP:PORT","/?cmd=set_Color#<RGB VALUE>")

Ist das machbar?

PS: Ich weiss das es dieses LW12 Modul gibt. Aber damit könnte ich die restlichen Lampen nicht ansteuern.

Grüße Dominik
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: justme1968 am 12 Januar 2015, 08:00:36
wenn tatsächlich keines der vorhandenen module für farbige lampen (hue, panstamp, wifilight, milight, firmata rgb, ...) auf dein projekt passt schau dir doch mal die wiki seiten zu color und dmx an.

eine komplette readingsProxy basierte lösung für die  frontend seite findest du auch in der aktuellen demo config. hier musst du nur noch das GetHttpFile bzw. die aktuelleren Blocking/NonBlocking aufruhe in die setFn einbauen.

gruß
  andre
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: moelski am 12 Januar 2015, 08:26:16
Moin andre,

ok habe mal versucht in meiner Config einen Color Picker einzubauen:
define rgbtest dummy
attr rgbtest webCmd RGB
attr rgbtest widgetOverride RGB:colorpicker,RGB
attr rgbtest room Bad


Das Ergebnis ist aber eher noch bescheiden -> Siehe Anhang.

Zitatin der aktuellen demo config
Wo finde ich die denn? Im contrib Verzeichnis kann ich keine Demo finden.
Nachtrag:
fhem.cfg.demo habe ich gefunden. Enthält aber bei mit keinen RGB Color Picker.


Zitathier musst du nur noch das GetHttpFile bzw. die aktuelleren Blocking/NonBlocking aufruhe in die setFn einbauen.
Hättest du da evtl. ein Beispiel wie das geht?

Grüße Dominik
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: justme1968 am 12 Januar 2015, 08:55:10
die aktuelle .cfg.demo findest du im svn (http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/ (http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/)). die wird nicht per update verteilt.

wie das dann ausschauen sollte siehst du unten in dem post hier: http://forum.fhem.de/index.php/topic,31293.msg240054.html#msg240054 (http://forum.fhem.de/index.php/topic,31293.msg240054.html#msg240054).

gruss
  andre
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: moelski am 12 Januar 2015, 10:39:01
Hallo Andre,

habe mir mal die Demo Konfig aus der repo geholt. Ich sehe auch das da ein Eintrag mit RGB vorhanden sein müsste:
define RGB readingsProxy RGB
....

Aber bei mir sehe ich nicht im room Lights. Kann es sein das mir da noch aktuelle Module fehlen?

Grüße Dominik
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: justme1968 am 12 Januar 2015, 10:53:45
du brauchst dafür ein komplett aktuelles fhem.

gruss
  andre
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: moelski am 15 Januar 2015, 07:28:14
Moin Andre,

Zitatdu brauchst dafür ein komplett aktuelles fhem.
Jep, damit klappt es. Ich habe mir auch schon die Oberfläche grob an meinen Testaufbau angepasst.
Hoffentlich wird das bald in die normale Version gemerged!?

Ich hoffe ich liege richtig wenn ich meinen Web Requests mit in das setFn Attribut packe?
Im Moment schaut das so bei mir:
{
    Log (1,"Command : $CMD  -  Arguments : $ARGS");
    if( $CMD =~ m/on|off/ ) {
        $ARGS=$CMD;
        $CMD = "state"
    }
    else {
        fhem ("setreading $DEVICE state on");
    }
    if( $CMD =~ m/hue/ ) {
        my ($r,$g,$b) = Color::hsv2rgb($ARGS/360,1,1);
        my $rgb = Color::rgb2hex( $r*255, $g*255, $b*255 );
        fhem ("setreading $DEVICE rgb $rgb");
        Log (1,"RGB $rgb");
    }
    if( $CMD =~ m/rgb/ && $ARGS =~ m/^(..)(..)(..)/ ) {
        my( $r, $g, $b ) = (hex($1)/255.0, hex($2)/255.0, hex($3)/255.0);
        my ($h,$s,$v) = Color::rgb2hsv($r,$g,$b);
        my $hue = int($h*359);
        fhem ("setreading $DEVICE hue $hue");
        Log (1,"HUE $hue");
    }
    fhem ("setreading $DEVICE $CMD $ARGS");
   
if ( $ARGS =~ m/on|off/ ) {
Log (1,"On Off Event");
    }
    else {
Log (1,"Send Request");
my $rgb2 = ReadingsVal ("RGB", "rgb", "");
Log (1,"rgb $rgb2");
        GetHttpFile("192.168.30.139:999","/?#cmd=$rgb2")
    }

return undef;
}


Damit kriege ich schon mal den Farbwert zum Server geschickt.

Was mich etwas stört ist der Timeout von dem GetHttpFile (4 Sekunden). In der Zeit ist fhem blockiert.
Ich habe mal testweise mit GetFileFromURL probiert :
GetFileFromURL ("192.168.30.139:999",0,"/?#cmd=$rgb2")
Damit kommt aber am Server nichts an.

Hast du eine Idee wie ich einen Webrequest absetzen kann ohne auf eine Antwort warten zu müssen?

Grüße Dominik
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: justme1968 am 15 Januar 2015, 11:08:48
bei so viel code würde ich auf jeden fall anfangen das in 99_myUtils.pm auszulagern und in der setFn nur noch aufzurufen. das habe ich für die demo nicht gemacht damit es kein extra file gibt.

die andere möglichkeit ist das device so zu lassen wie es ist und nur in einem notify auf das rgb event zu reagieren.

wie oben schon geschrieben nimm statt GetHttpFile besser HttpUtils_NonblockingGet dann passiert das lesen asynchron und es wird nicht auf die antwort gewartet.

gruss
  andre
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: moelski am 18 Januar 2015, 12:56:40
Moin Andre,

Zitatbei so viel code würde ich auf jeden fall anfangen das in 99_myUtils.pm auszulagern
Ist inzwischen passiert. Und es ist auch gar nicht mal so viel für die RGB Steuerung:
sub ColorLamp() {
  my $rgb_Color = ReadingsVal ("RGB", "rgb", "");
  my $rgb_Dim = ReadingsVal ("rbgdim", "state", "");
  my $rgb_OnOff = ReadingsVal ("rgbonoff", "state", "");
  Log (1,"DS : Set ColorLamp RGB:$rgb_Color DIM:$rgb_Dim ONOFF:$rgb_OnOff");
  GetHttpFile("192.168.30.176:998","/?rgb=$rgb_Color?rgbdim=$rgb_Dim?rgbon=$rgb_OnOff")
}


ZitatGetHttpFile
Ich bin jetzt dabei geblieben und sende von meinem Arduino eine HTTP response:
    String cmd;
    cmd = "HTTP/1.1 200 OK\r\n";
    cmd += "Content-Length: 0\r\n";
    cmd += "Connection: close\r\n";
    cmd += "\r\n";

Damit ist fhem glücklich  :)

Problematisch wird es wohl nur wenn mein Arduino nicht erreichbar ist. Da wäre die non Blocking Variante sicher sinnvoller.
Kann man aber später sicher noch umbauen - wenn wirklich nötig.

Als nächstes werde ich nun noch die Lampensteuerung und den LED Himmel mit einbinden.
Wenn das fertig ist mache ich mal einen neuen Beitrag auf und stelle das projekt vor. Vielleicht interessiert es ja noch jemanden  :)

Danke jedenfalls für deine Hilfe !

PS: Kannst du mir evtl. noch sagen wann der RGB Teil die normale Version übernommen wird ?

Grüße Dominik
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: justme1968 am 18 Januar 2015, 12:58:44
die head version ist die aktuelle version. insofern sollte es mit jeder neuen version gehen.

gruss
  andre
Titel: Antw:Farbauswahl einbauen und per GetHttpFile senden?
Beitrag von: moelski am 18 Januar 2015, 13:05:09
Ok dank dir !  :)