Farbverlauf RGB über MQTT

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
julianpe
Beiträge: 39
Registriert: 28. Sep 2020 11:38
Answers: 0

Farbverlauf RGB über MQTT

Beitrag von julianpe »

Hallo zusammen,

ich habe ein H801 Controller für meine RGBCCT LED Stripes. Der Controller ist Tasmota geflasht und lässt sich über die Weboberfläche als auch über den Colorpicker in der OH Sitemap gut ansteuern.
Nun würde ich gerne ein Item erstellen, das ich aus der Sitemap heraus aktivieren kann.
Sobald das Item aktiv geschaltet ist, soll eine Rule aktiviert werden die sämtliche Farbverläufe durchtaktet und an den H801 Controller via MQTT sendet.

So sieht mein Skript momentan aus (es funktioniert jedoch nicht wie gewünscht, bzw. es tut nichts)
Ich würde gerne mit diesem Skript den Rot Kanal inkrementieren. Später würde ich gerne eine Abfolge von Inkrementieren/Dekrementieren von Farbkanälen machen, sodass ich am Ende über die Zeit einen Regenbogen Farbverlauf erhalte.

Code: Alles auswählen

import java.awt.Color
import java.util.List


// system startup rule
rule "System_started wz" 
when
    System started
then
	// initial set switch
	if (wzstripe.state === NULL) wzstripe.sendCommand(OFF)


	if (wz_string_color.state === NULL) wz_string_color.sendCommand('0,0,0')


	
end


// colorpicker rule: manages colorpicker changes
rule "WZ_Colorfade"
when
	Item wz_activate_colorfade received command
then


	var Rn = 0		// Rot
	var Gn = 0	// Grün
	var Bn = 0		// Blau
	var output = ''

// Rotkanal wird inkrementiert
	for (let i = 0; i < 255; i++) {
		output = (i as Number).intValue + "," + (Gn as Number).intValue + "," + (Bn as Number).intValue		// String aus Farbwerten zusammensetzen
		wz_string_color.sendCommand(output)	// Erzeugter String wird geschrieben
		java.lang.Thread.sleep(100);		// 100ms schlafen legen
	}



end

Was habe ich hier offensichtliches falsch gemacht? :(

Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Farbverlauf RGB über MQTT

Beitrag von udo1toni »

Welche Version von openHAB setzt Du ein?

Grundsätzlich: NULL != null. Ein Vergleich auf identisch (===) ist nur für null statthaft.

Code: Alles auswählen

if (wzstripe.state === NULL)
wird niemals wahr. Stattdessen musst Du mit == arbeiten. Gleiches gilt für die zweite Abfrage.
Die Schreibweisen stimmen teilweise nicht, außerdem gibt es den for-Befehl nicht in dieser Form, wohl aber in anderer Form. Wenn Du einen String zusammensetzen willst, musst Du Strings zusammensetzen. Integerwerte sind keine Strings.

Code: Alles auswählen

// system startup rule
rule "System_started wz"                                            // initial set switch
when
    System started
then
    if(wzstripe.state == NULL)
        wzstripe.sendCommand(OFF)
    if(wz_string_color.state == NULL)
        wz_string_color.sendCommand("0,0,0")
end

rule "WZ_Colorfade"                                                 // colorpicker rule: manages colorpicker changes
when
    Item wz_activate_colorfade received command
then
    var Integer Rn = 0                                              // Rot
    var Integer Gn = 0                                              // Grün
    var Integer Bn = 0                                              // Blau
    var String output = ""
    (0..255).forEach[i|                                             // Rotkanal wird inkrementiert
        output = i.toString + "," + Gn.toString + "," + Bn.toString // String aus Farbwerten zusammensetzen
        wz_string_color.sendCommand(output)	                    // Erzeugter String wird geschrieben
        Thread::sleep(100)                                          // 100ms schlafen legen
    ]
end
Falls Du eine Version < OH3.0 einsetzt, ist diese Rule potentiell ein Todesurteil (in dem Sinne, dass openHAB nicht mehr korrekt arbeitet, sobald die Rule gestartet wurde). Unter OH3.0 und darüber ist das Problem etwas entschärft. Das Stichwort ist hier shared Threads.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten