Tasmota GU10 LED Lampen
Damit unser Teich am Abend so richtig in Szene gesetzt wird, gibt es jetzt eine färbige Beleuchtung.
Der erste Versuch mit 12V Spots und einem Trafo im Freien hat nicht das gewünschte Ergebnis geliefert, daher wurde alles auf 230V GU10 Lampen geändert. Um auch Farbe ins Spiel zu bringen, wurden bereits mit tasmota geflashte GU10 LED-Lampen von athom besorgt.
Der erste Schritt ist wie bei allen tasmota Geräten gleich. Zuerst einmal die devices ins eigene WLAN bringen, dann die Verbindung zum MQTT Broker herstellen und dann noch eine statische IP Adresse vergeben. Ach ja, die neueste Version (derzeit 9.5.0) wird natürlich auch noch aufgespielt.
Da es sich um 3 Lampen handelt, macht es natürlich Sinn, diese auch gemeinsam anzusteuern. Dafür gibt es bei tasmota die Möglichkeit mit GroupTopics zu arbeiten.
Es wird also in der Console der zu verbindenden Geräte jeweils das gleiche GroupTopic angelegt, ich nenne es BridgeLight, den die Beleuchtung ist auf der Brücke montiert.
Um Device Groups zu erlauben, muss auf jedem device die Option 85 eingeschalten werden.
# tasmota console
grouptopic BridgeLight
SetOption85 1
Funktioniert perfekt, wenn man jetzt eine Lampe einschaltet, dann schalten sich auch die anderen beiden ein. Wechselt man zu einer bestimmten Farbe, so schalten alle drei Lampen auf diese Farbe.
Das einzige, das nicht synchron funktioniert sind die verschieden Schema, was bei einer zufälligen Farbauswahl ja ok ist, aber wenn man die Farben automatisch synchron wechseln lassen möchte, dann ist das noch nicht die richtige Lösung.
Daher habe ich beschlossen die gleichzeitige Ansteuerung der Lampen mit einer kleinen Programmierung im OH3 selber zu machen. Das hat auch den Vorteil, dass ich zusätzlich jede Lampe auch eigenständig ansteuern kann.
Also die SetOption85 wieder auf 0 stellen.
Da ich die Ansteuerung über MQTT machen möchte habe ich folgende Channels angelegt. Das Ganze natürlich mal 3, also für jede Lampe, das Gleiche gilt auch für die items, dort gibt es auch welche für die Gruppensteuerung. Da es nur ein topic gibt über das man die Lampenfarben, etc. steuern kann und ort ein JSON Format erwartet wird, muss dieses in der Regel zusammengebaut werden. Einige Beispiele sind unten angegeben.
// things file
Thing topic tasmota12 "RGBW GU10 athom LED Lampe"@ "Garten" {
Channels:
Type switch : t12Power "t12 Power"
[stateTopic="stat/tasmota12/POWER",
commandTopic="cmnd/tasmota12/POWER",
on="ON", off="OFF"]
Type string : t12Status "t12 status"
[commandTopic="cmnd/tasmota12/Status" ]
Type string : t12Dimmer "t12 Dimmer"
[stateTopic="stat/tasmota12/STATE",
commandTopic="cmnd/tasmota12/Dimmer",
transformationPattern="JSONPATH:$.Dimmer"]
Type string : t12Dimmer_result "t12 Dimmer"
[stateTopic="stat/tasmota12/RESULT",
transformationPattern="JSONPATH:$.Dimmer"]
Type string : t12State "t12 state"
[stateTopic="stat/tasmota12/STATUS",
commandTopic="cmnd/tasmota12/STATUS"]
Type colorHSB : t12Color "t12 Farbe"
[stateTopic="tele/tasmota12/HSBColor",
commandTopic="cmnd/tasmota12/HSBColor" ]
// CT 153=cold bis 500=warm
Type number : t12CT "t12 Color Temperature"
[stateTopic="tele/tasmota12/STATE",
commandTopic="cmnd/tasmota12/CT",
transformationPattern="JSONPATH:$.CT"]
Type number : t12CT_result "t12 Color Temperature"
[stateTopic="stat/tasmota12/RESULT",
transformationPattern="JSONPATH:$.CT"]
Type number : t12White "t12 White"
[stateTopic="stat/tasmota12/STATE",
commandTopic="cmnd/tasmota12/White",
transformationPattern="JSONPATH:$.White" ]
Type number : t12White_result "t12 White"
[stateTopic="stat/tasmota12/RESULT",
transformationPattern="JSONPATH:$.White" ]
Type string : t12StatusModul "t12 tasmota Modul"
[stateTopic="tele/tasmota12/INFO1",
transformationPattern="JSONPATH:$.Module"]
Type datetime : t12StatusZeit "t12 Zeit"
[stateTopic="tele/tasmota12/STATE",
transformationPattern="JSONPATH:$.Time"]
Type string : t12Hostname "t12 Hostname"
[stateTopic="stat/tasmota12/STATUS5",
transformationPattern="JSONPATH:$.StatusNET.Hostname"]
Type string : t12IP "t12 IP Adresse"
[stateTopic="stat/tasmota12/STATUS5",
transformationPattern="JSONPATH:$.StatusNET.IPAddress"]
Type string : t12WiFiSSID "t12 SSID"
[stateTopic="tele/tasmota12/STATE",
transformationPattern="JSONPATH:$.Wifi.SSId"]
Type string : t12WiFiRSSI "t12 RSSI"
[stateTopic="tele/tasmota12/STATE",
transformationPattern="JSONPATH:$.Wifi.RSSI"]
Type string : t12WiFiSignal "t12 Signal"
[stateTopic="tele/tasmota12/STATE",
transformationPattern="JSONPATH:$.Wifi.Signal"]
Type number : t12Scheme "t12 Schema"
[stateTopic="stat/tasmota12/RESULT",
commandTopic="cmnd/tasmota12/Scheme",
transformationPattern="JSONPATH:$.Scheme"]
Type number : t12Speed "t12 Speed"
[stateTopic="stat/tasmota12/RESULT",
commandTopic="cmnd/tasmota12/Speed",
transformationPattern="JSONPATH:$.Speed"]
}
Wie man bei einigen items sieht, gibt es zwei channels. Das bringt den Vorteil, dass die Information, die zuerst kommt auf das item übertragen wird. Das result topic wird z.B. nur geschickt, nachdem etwas published wurde.
// items file
// Gruppensteuerung für die 3 GU10 Lampen unter der Brücke
Switch g1Power "g1 Power" <switch>
String g1Dimmer "g1 Dimmer [%d %%]" ["Lighting"]
Color g1Color "g1 Farbe RGBCW" <rgb>
Number g1CT "g1 Color Temperature"
Number g1White "g1 White"
Number g1Scheme "g1 Scheme"
Number g1Speed "g1 Speed"
// athom GU10 LED Lampe
Switch t12Power "t12 Power" <switch>
{channel="mqtt:topic:mosquitto:tasmota12:t12Power" }
String t12Status "t12 Status"
{channel="mqtt:topic:mosquitto:tasmota12:t12Status"}
String t12Dimmer "t12 Dimmer[%d %%]" ["Lighting"]
{channel="mqtt:topic:mosquitto:tasmota12:t12Dimmer", channel="mqtt:topic:mosquitto:tasmota12:t12Dimmer_result"}
Color t12Color "t12 Farbe RGBCW" <rgb>
{channel="mqtt:topic:mosquitto:tasmota12:t12Color"}
Number t12CT "t12 Color Temperature"
{channel="mqtt:topic:mosquitto:tasmota12:t12CT", channel="mqtt:topic:mosquitto:tasmota12:t12CT_result"}
Number t12White "t12 White"
{channel="mqtt:topic:mosquitto:tasmota12:t12White", channel="mqtt:topic:mosquitto:tasmota12:t12White_result"}
DateTime t12StatusZeit "t12 Zeit"
{channel="mqtt:topic:mosquitto:tasmota12:t12StatusZeit"}
String t12Hostname "t12 Hostname" (gHostname)
{channel="mqtt:topic:mosquitto:tasmota12:t12Hostname" }
String t12IP "t12 IP" (gIP)
{channel="mqtt:topic:mosquitto:tasmota12:t12IP" }
String t12WiFiSSID "t12 SSID" (gSSID)
{channel="mqtt:topic:mosquitto:tasmota12:t12WiFiSSID" }
String t12WiFiRSSI "t12 RSII" (gRSII)
{channel="mqtt:topic:mosquitto:tasmota12:t12WiFiRSSI" }
String t12WiFiSignal "t12 Signal" (gSignal)
{channel="mqtt:topic:mosquitto:tasmota12:t12WiFiSignal" }
String t12Modul "t12 tasmota Modul"
{channel="mqtt:topic:mosquitto:tasmota12:t12Modul" }
Number t12Scheme "t12 Scheme"
{channel="mqtt:topic:mosquitto:tasmota12:t12Scheme" }
Number t12Speed "t12 Speed"
{channel="mqtt:topic:mosquitto:tasmota12:t12Speed" }
// sitemap file
Frame label="Teichbeleuchtung GU10 LED Gruppensteuerung" {
Switch item=g1Power label="LED Power"
Switch item=g1Color label="Farben []" icon="rgb"
mappings=["0,100,100"="rot", "128,100,100"="grün", "256,100,100"="blau", "60,100,100"="gelb"]
Slider item=g1Dimmer label="Dimmer[%d %%]" icon="light"
Colorpicker item=g1Color label="RGB" icon="colorpicker"
Slider item=g1White label="Weiß [%d %%]" icon="light-0" minValue=1 maxValue=100
Slider item=g1CT label="Farbtemeratur [%d]" icon="light-60" minValue=153 maxValue=500
Selection item=g1Scheme label="g1 Scheme [%d]" icon="video"
mappings=[0 = "single color for LED light (default)",
1 = "start wake up sequence (same as Wakeup)",
2 = "cycle up through colors using Speed option",
3 = "cycle down through colors using Speed option",
4 = "random cycle through colors using Speed and Fade"]
Slider item=g1Speed label="g1 Speed [%d]" icon="motion" minValue=1 maxValue=40
Text label="LED Garagenseite" icon="rgb" {
Frame label="Brücke Teichbeleuchtung GU10 LED Garagenseite" { // Lampe Garagenseite
Switch item=t12Power label="Tasmota t12 Power"
Switch item=t12Color label="Farben []" icon="rgb" mappings=["0,100,100"="rot", "128,100,100"="grün", "256,100,100"="blau", "60,100,100"="gelb"]
Slider item=t12Dimmer label="Dimmer" icon="light"
Colorpicker item=t12Color label="RGB" icon="colorpicker"
Slider item=t12CT label="Farbtemeratur" icon="light-0" minValue=153 maxValue=500
Slider item=t12White label="Weiß" icon="light-60" minValue=1 maxValue=100
Selection item=t12Scheme label="t12 Scheme" icon="video"
mappings=[0 = "single color for LED light (default)",
1 = "start wake up sequence (same as Wakeup)",
2 = "cycle up through colors using Speed option",
3 = "cycle down through colors using Speed option",
4 = "random cycle through colors using Speed and Fade"]
Slider item=t12Speed label="t12 Speed" icon="motion" minValue=1 maxValue=40
}
}
rule "Teichbeleuchtung Power"
when
Item g1Power changed
then
t12Power.sendCommand(g1Power.state.toString)
t13Power.sendCommand(g1Power.state.toString)
t14Power.sendCommand(g1Power.state.toString)
end
rule "Teichbeleuchtung Dimmer"
when
Item g1Dimmer changed
then
g1Power.sendCommand(ON)
t12Dimmer.sendCommand(g1Dimmer.state.toString)
t13Dimmer.sendCommand(g1Dimmer.state.toString)
t14Dimmer.sendCommand(g1Dimmer.state.toString)
end
rule "sh3BtnRed pressed"
when
Item sh3BtnColor changed to 1 // red
then
var jsonString = "{"
jsonString = jsonString + "\"turn\":" + "\"on\""
jsonString = jsonString + ",\"red\":" + " 255"
jsonString = jsonString + ",\"green\":" + " 0"
jsonString = jsonString + ",\"blue\":" + " 0"
jsonString = jsonString + ",\"gain\": 100"
jsonString = jsonString + ",\"effect\": 0"
jsonString = jsonString + "}"
sh3Set0.sendCommand(jsonString)
end