FHEM Forum

Verschiedenes => Projekte => Thema gestartet von: sumsum am 26 Juni 2021, 18:40:14

Titel: WLED Lampe mit Temperaturanzeige
Beitrag von: sumsum am 26 Juni 2021, 18:40:14
Hallo,

ich möchte hier eine WLED Lampe, mit Integration in FHEM, vorstellen.

Zielstellung:

Material:

Software:

Arbeitsschritte:

defmod rudi HTTPMOD http://192.168.200.101/json 60
attr rudi event-on-change-reading .*
attr rudi extractAllJSON 1
attr rudi icon light_led_stripe_rgb
attr rudi room Licht
attr rudi set01Name on
attr rudi set01NoArg 1
attr rudi set01URL http://192.168.200.101/win&A=128&FX=0&T=1
attr rudi set02Name off
attr rudi set02NoArg 1
attr rudi set02URL http://192.168.200.101/win&A=128&FX=0&T=0
attr rudi set03Data $val
attr rudi set03Header1 Content-Type: application/json
attr rudi set03Name temp
attr rudi set03NoArg 0
attr rudi set03TextArg 1
attr rudi set03URL http://192.168.200.101/json
attr rudi set04Name fire
attr rudi set04NoArg 1
attr rudi set04URL http://192.168.200.101/win&A=128&FX=66&T=1&FP=35
attr rudi stateFormat {(ReadingsVal($name,"state_on","off")?"on":"off")}
Programmierung:
Die Temperaturen werden von
0 - 9º - blau,
10 - 19º grün,
20 - 29º gelb,
30 - 40º rot dargestellt.
Das ergibt je Grad 1,875 LEDs. 
In der 99_myUtils.pm wird diese Funktion eingefügt.

sub rudi_temp{
my $str;
$str = '{"on":true,"bri":255,"seg":[';

my $temp_hi = ReadingsVal("DarkSkyWeather","fc1_high_c",40);
my $temp_lo = ReadingsVal("DarkSkyWeather","fc1_low_c",0);

my $led_hi = int( 75 / 40 * $temp_hi );
my $led_lo = int( 75 / 40 * $temp_lo );

my $brightness;

foreach my $seg (0..1){
$str .= '{"id":'.$seg.',"i":[';

foreach my $led (0..74){

if ( $led < $led_lo or $led > $led_hi ){
# dunkler, leds ausserhalb der Tagestemperatur
$brightness=10;
}
else{
# heller
$brightness=255;
}

# 0-9 ºC
if ($led < 18){
$str .= $led.",[0,0,$brightness]";
}
elsif ($led < 37){ # 10-19 ºC
$str .= $led.",[0,$brightness,0]";
}
elsif ($led < 56){ # 20-29 ºC
$str .= $led.",[$brightness,$brightness,0]";
}
else{ # 30-40 ºC
$str .= $led.",[$brightness,0,0]";
}

if ($led < 74){
$str .= ',';
}
}
$str .= ']}';
if ($seg < 1){
$str .= ',';
}
}
$str .= ']}';
fhem("set rudi temp ".$str.";set rudi temp ".$str);
}

Aus irgendeinem Grund müssen wir en JSON String 2x senden, um sicher die Temperatur anzuzeigen. Die Funktion {rudi_temp()} wird aus der Weckerfunktion aufgerufen.

Für den normalen Betrieb haben wir einen Homematic Taster benutzt. Darüber können wir on/off (kurz) bzw. ein Modus und die Temperaturanzeige (lang) schalten.

Es gibt sicher viele Verbesserungmöglichkeiten. Wir hatten jedenfalls viel Spass am Basteln.

Ulf
Titel: Antw:WLED Lampe mit Temperaturanzeige
Beitrag von: C@MP3R am 14 März 2023, 13:38:34
Moin, ich habe deine Config etwas umgebaut um mit die Leistung der Photovoltaik anzeigen zu lassen.
Ich habe einen 60er LED Stripe.

Funktioniert soweit auch, also eine LED leuchtet ja nach PV Leistung.
Ich möchte aber gerne nicht nur die eine errechnete LED leuchten lassen sondern bis dahin alle LEDs.

Hast du da ne Idee für mich?
Gruß
Titel: Antw:WLED Lampe mit Temperaturanzeige
Beitrag von: bartman121 am 14 März 2023, 21:09:10
my $led_lo = 0;