Tasmota Dimmen mit Fernbedienung

Posted by quark007 | Posted in Computer & IT | Posted on 14-02-2021-05-2008

0

Mein SmartHome ist um einige Rafinessen erweitert worden. Auf Grund des Lockdowns hatte ich mehr Zeit mich mal wieder um was Neues zu kümmern.

Da war zunächst ein gedimmter LED-Streifen als Nachtlicht im Schlafzimmer. Mit einem Wemos D1 mini und einem MOSFET lässt sich über Tasmota der 5V LED Streifen super dimmen und gleichzeitig ins SmartHome integrieren.

Da sowieso bei Ikea etwas bestellt / abgeholt werden sollte, kamen gleich auch noch 2 Tradfri Dimmer ins Haus. Mit diesen sollte sich der LED-Streifen steuern lassen.

Mit Zigbee2MQTT und einem CC2531 ließen sich die Tradfri Geräte super einfach einbinden und per MQTT in OpenHab integrieren (das nervtötende LED Leuchten kann auch deaktiviert werden). Soweit so gut, der Dimmer liefert bei einfachem Druck “On” oder “Off”. Da es ein Dimmer ist, liefert er bei längerem Druck “brightness_up” bzw. “brightness_down” und beim Loslassen “brightness_stop”.

Leider hat Tasmota keine automatische Dimming Funktion (analog Hue), an welches “INCREASE / DECREASE” geschickt werden kann und das Dimmen so lange läuft, bis “STOP” geschickt wird. Daher musste das in OpenHab realisiert werden. Ich habe mich dabei an einem Artikel aus dem Internet orientiert. Meine Regel dazu sieht wie folgt aus:

var Timer DimTimer = null //Timer zum anwenden der nächsten Dimmstufe
var Number DimDir = 0 //Dimm Richtung (+ oder -)

//Rule to simulate dimming to Tasmota device
rule "MFDimmer Dimming Rule"
when
    Item MQTT_MFDimmer_Dimming changed to ON
then
    DimTimer?.cancel
    DimTimer = createTimer(now.plusMillis(10),[|
        val Number DimmerState = (MQTT_MFDimmer_brightness.state as Number)

        if(DimmerState == 0 || DimmerState == 100 || MQTT_MFDimmer_Dimming.state == OFF)
        {
            MQTT_MFDimmer_Dimming.sendCommand(OFF)
            DimDir = 0
            DimTimer?.cancel
        }

        if(MQTT_MFDimmer_Dimming.state == ON && DimmerState > 0 && DimmerState < 100) 
        {          
            MQTT_MFDimmer_brightness.sendCommand(DimmerState + (DimDir * 2)) 
            DimTimer.reschedule(now.plusMillis(500))
			//logInfo("MFDimmer Dimming", "Dimming to " + (DimmerState + (DimDir * 2)))
        }
    ])
end

Dazu muss ein Dummy-Switch angelegt werden:

Switch MQTT_MFDimmer_Dimming "Dimming active [%s]" (mqtt)

Sobald nun dieses Item aktiviert wird, wird in 0.5 Sekunden Schritten die Helligkeit jeweils um 2% erhöht bzw. erniedrigt, jenachdem welcher Wert für DimDir beim Tastendruck angegeben wird. Das geschieht hier:

rule "Tradfri Dimmer1"
when
    Item z2m_remote_dimmer1_button received update
then
	//logInfo("RemoteRuleDimer1", "Tradfri Dimmer1 Input: " + z2m_remote_dimmer1_button.state)
	
	var String RemoteCmd = z2m_remote_dimmer1_button.state
	switch (RemoteCmd){
    case "on":
		{
			MQTT_MFDimmer_switch.sendCommand(ON)
			MQTT_MFDimmer_switch.postUpdate(ON)
		}
    case "off":
		{
			MQTT_MFDimmer_switch.sendCommand(OFF)
			MQTT_MFDimmer_switch.postUpdate(OFF)
			MQTT_MFDimmer_Dimming.postUpdate(OFF)
			DimTimer?.cancel
		}
	case "brightness_up":
		{
			if(MQTT_MFDimmer_switch.state == ON) {
				MQTT_MFDimmer_Dimming.postUpdate(ON)
				DimDir = 1
			} else {
				zwave_device_[id]_node15_blinds_control.sendCommand(0)
				zwave_device_[id]_node15_blinds_control.postUpdate(0)
			}
		}
	case "brightness_down":
		{
			if(MQTT_MFDimmer_switch.state == ON) {
				MQTT_MFDimmer_Dimming.postUpdate(ON)
				DimDir = -1
			} else {
				zwave_device_[id]_node15_blinds_control.sendCommand(100)
				zwave_device_[id]_node15_blinds_control.postUpdate(100)
			}
		}
	case "brightness_stop":
		{
			if(MQTT_MFDimmer_switch.state == ON) {
				MQTT_MFDimmer_Dimming.postUpdate(OFF) 
				DimTimer?.cancel
			} else {
				zwave_device_[id]_node15_blinds_control.sendCommand("STOP")
				zwave_device_[id]_node15_blinds_control.postUpdate("STOP")
			}
		}
	}
end

Dabei ist parallel noch integriert, dass die Rollläden gesteuert werden können, sofern der LED-Streifen nicht angeschaltet ist.

Ich bin mir sicher, dass das auch in Tasmota selber abbildbar ist. Mit Rules geht es aber (soweit ich das überblicken kann) nicht, außer man aktiviert das Math-Paket. Das ist mir jedoch eine ExtraWurst zu viel. Oder aber mit Scripting, was für mich aus dem gleichen Grund ausscheidet.

Für jeden Hinweis, wie ich meine SmartHome Regeln entschlacken kann, bin ich aber sehr dankbar.

Write a comment