LED Beleuchtung mit Tasmota, AriLUX LC-01 / H801 und Bewegungsmelder HC-SR505

13. Februar 2019 at 23:09

Eine indirekte Beleuchtung im Schlafzimmer soll über Bewegungsmelder ausgelöst werden.
Dies natürlich nur wenn es dunkel ist. Weiterhin mit einem sanften fade in/out.
Die Farbe, Helligkeit und andere Parameter sollen über das Smartphone gesteuert werden,

Der erste Lösungsansatz mit einem arduino und MySensors habe ich nicht stabil hinbekommen.
Mittlerweile ist mir klar, dass dies nicht an der MySensor Software liegt, aber an dem Zusammenspiel zwischen Funkmodul und Bewegungssensor.
Jedes mal wenn das Funkmodul aktiv wurde, kam der Bewegungsmelder aus dem Tritt und meldete eine Bewegung.
Alle Lösungsansätze dies in der Software abzufangen waren nicht zuverlässig.
Dann habe ich mit der Spannungsversorgung gespielt – auch ohne Erfolg.
Als auch Ferrit-Kerne das Problem nicht gelöst haben, war ich kurz davor aufzugeben.

Die Lösung: einen Kondensator direkt an den Chip des Bewegungsmelder löten (siehe hier).

“need to solder a 220nF ceramic capacitor across pin12 und pin13 of the chip (BISS0001) so that the high-frequency interference coming from the ESP8266 don’t influece the gain stage anymore.”

Seit dem habe ich keinen einzigen “Fehlalarm” mehr.

Weiterhin habe ich noch einen LDR in das HC-SR501 Modul eingebaut.
Anleitung siehe hier.

ESP-Modul

Als Hardware habe ich ein preiswertes Modul gefunden: ARILUX AL-LC01 Mini WIFI LED RGB Controller
Das kostet 6 EUR und basiert auf einem ESP8285.

Die Firmware habe ich sofort durch Tasmota ersetzt. Der Hersteller verwendet eine Cloud-Lösung. Sieht zwar schick aus, so etwas will ich aber nicht im Haus haben.

Der Bewegungsmelder wird mit GPIO4/D2 verbunden.
Falls die Farben vertauscht sind, wechselt man einfach die Zuordnung der PWM-Kanäle zu den drei GPIOs, die unten sichtbar sind.

Über die Konsole werden ein paar Parameter eingestellt:

[codesyntax lang=”php”]

Speed 7
SwitchTopic 0
Switchmode1 1
Switchmode3 1
TelePeriod 0
rule2 on switch3#state do backlog power1 1; ruletimer1 30; publish house/tele/led/PIR ON  endon on rules#timer=1 do backlog power1 off; publish house/tele/led/PIR OFF endon
rule3 on switch3#state do power1 off endon
rule1 1 (activate rule1)

[/codesyntax]

Die Darstellung auf dem Smartphone sieht mit openHAB so aus:

sonoff.bridge

[codesyntax lang=”php”]

// bridge.things

Bridge mqtt:broker:MqttPandora20 "MQTT Broker Pandora" @ "MQTT Pandora" [ 
  host="192.168.1.20",
  port=1883,
  secure="AUTO",
  qos=0,
  retain=false,
  clientid="Oh2Mqtt2Thing20",
  keep_alive_time=30000,
  reconnect_time=60000,
  username="mqttusr20",
  password="mqttpass20"
]

[/codesyntax]

sonoff.things

[codesyntax lang=”php”]

Thing mqtt:topic:DG_Kim_LED_thg "Sonoff LED Kim" (mqtt:broker:MqttPandora20) @ "MQTT Pandora"  {
  Channels:
    Type string : color          "Color"           [ commandTopic="house/cmnd/led/Color"]
    Type string : dimmer         "Dimmer"          [ commandTopic="house/cmnd/led/Dimmer"]
    Type string : fade           "Fade"            [ commandTopic="house/cmnd/led/Fade"]
    Type string : scheme         "Fade"            [ commandTopic="house/cmnd/led/Scheme"]
    Type string : speed          "Speed"           [ commandTopic="house/cmnd/led/Speed"]
    Type switch : Rule1Switch    "Rule 1"          [ stateTopic="house/stat/led/RESULT", transformationPattern="JSONPATH:$.Rule1",on="ON",off="OFF", commandTopic="house/cmnd/led/Rule1", on="1", off="0" ]
    Type switch : Rule1State     "Rule 1"          [ stateTopic="house/stat/led/RESULT", transformationPattern="JSONPATH:$.Rule1",on="ON",off="OFF"]
    Type switch : Rule2Switch    "Rule 2"          [ stateTopic="house/stat/led/RESULT", transformationPattern="JSONPATH:$.Rule2",on="ON",off="OFF", commandTopic="house/cmnd/led/Rule2", on="1", off="0" ]
    Type switch : Rule2State     "Rule 2"          [ stateTopic="house/stat/led/RESULT", transformationPattern="JSONPATH:$.Rule2",on="ON",off="OFF"]
    Type switch : Rule3Switch    "Rule 3"          [ stateTopic="house/stat/led/RESULT", transformationPattern="JSONPATH:$.Rule3",on="ON",off="OFF", commandTopic="house/cmnd/led/Rule3", on="1", off="0" ]
    Type switch : Rule3State     "Rule 3"          [ stateTopic="house/stat/led/RESULT", transformationPattern="JSONPATH:$.Rule3",on="ON",off="OFF"]

    Type switch : PowerSwitch    "Power Switch 02" [ stateTopic="house/stat/led/POWER", commandTopic="house/cmnd/led/POWER", on="1", off="0" ]
    Type switch : PowerSwitchRes "Switch State 02" [ stateTopic="house/stat/led/RESULT", transformationPattern="JSONPATH:$.POWER",on="ON",off="OFF"]

    Type string : Version        "Version 02"      [ stateTopic="house/tele/led/INFO1",  transformationPattern="JSONPATH:$.Version"]
    Type string : fallback       "fallback topic"  [ stateTopic="house/tele/led/INFO1",  transformationPattern="JSONPATH:$.FallbackTopic"]
    Type string : hostname       "hostname      "  [ stateTopic="house/tele/led/INFO2",  transformationPattern="JSONPATH:$.Hostname"]
    Type string : IP             "IP            "  [ stateTopic="house/tele/led/INFO2",  transformationPattern="JSONPATH:$.IPAddress"]

    Type string : time          "Time"             [ stateTopic="house/tele/led/STATE", transformationPattern="JSONPATH:$.Time" ]
    Type string : uptime        "Uptime"           [ stateTopic="house/tele/led/STATE", transformationPattern="JSONPATH:$.Uptime" ]
    Type number : vcc           "VCC"              [ stateTopic="house/tele/led/STATE", transformationPattern="JSONPATH:$.Vcc"  ]
    Type string : wifi-ap       "Wifi AP"          [ stateTopic="house/tele/led/STATE", transformationPattern="JSONPATH:$.Wifi.AP" ]
    Type string : wifi-ssid     "Wifi SSID"        [ stateTopic="house/tele/led/STATE", transformationPattern="JSONPATH:$.Wifi.SSId" ]
    Type string : wifi-channel  "Wifi Channel"     [ stateTopic="house/tele/led/STATE", transformationPattern="JSONPATH:$.Wifi.Channel" ]
    Type string : wifi-rssi     "Wifi RSSI"        [ stateTopic="house/tele/led/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI" ]

    Type string : devicestate   "Device State"     [ stateTopic="house/tele/led/LWT" ]

} // end of thing

[/codesyntax]

sonoff.items

[codesyntax lang=”php”]

Color   DG_KIM_LED_Color      "Bed Color" <colorlight>
String  DG_KIM_LED_ColSel     "LED Color Selection"  (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:color" }
String  DG_KIM_LED_ColorCMD   "LED Color" 	         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:color" }
String  DG_KIM_LED_Dimmer     "LED Dimmer" 	         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:dimmer" }
String  DG_KIM_LED_Fade       "LED Fade"   	         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:fade" }
String  DG_KIM_LED_Speed      "LED Speed"  	         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:speed" }
Switch  DG_KIM_LED_Switch 		"LED Switch 1"         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:PowerSwitch" }
Switch  DG_KIM_LED_State 		  "LED State 1"          (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:PowerSwitchRes"}
String  DG_KIM_LED_Uptime 		"LED Uptime" 	         (gSonoffSw1Info)           { channel="mqtt:topic:DG_Kim_LED_thg:uptime" }
Switch  DG_KIM_LED_Rule1Switch 	"LED Rule 1"         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:Rule1Switch" }
Switch  DG_KIM_LED_Rule1State 	"LED Rule 1"         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:Rule1State"}
Switch  DG_KIM_LED_Rule2Switch 	"LED Rule 2"         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:Rule2Switch" }
Switch  DG_KIM_LED_Rule2State 	"LED Rule 2"         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:Rule2State"}
Switch  DG_KIM_LED_Rule3Switch 	"LED Rule 3"         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:Rule3Switch" }
Switch  DG_KIM_LED_Rule3State 	"LED Rule 3"         (gSonoffSw1,gPersist)      { channel="mqtt:topic:DG_Kim_LED_thg:Rule3State"}
Switch  DG_KIM_LED_PirSwitch 	"PIR on/off"           (gSonoffSw1,gPersist)    

[/codesyntax]

sonoff.rules

[codesyntax lang=”php”]


//—————————————————————————————————
// do not use postUpdate – this will not send an MQTT command
//
rule “Kim LED PIR on/off”
when
ItemDG_KIM_LED_PirSwitch changed
then
if ( DG_KIM_LED_PirSwitch.state ==ON ) {
sendCommand( DG_KIM_LED_Rule2Switch, ON )
sendCommand( DG_KIM_LED_Rule3Switch, OFF )
}
else {
sendCommand( DG_KIM_LED_Rule2Switch, OFF )
sendCommand( DG_KIM_LED_Rule3Switch, ON )
}
end
rule “Set RGB value KIM Led Light”
when
ItemDG_KIM_LED_Color changed
then
val hsbValue =DG_KIM_LED_Color.state as HSBType
val brightness = hsbValue.brightness.intValue
val redValue = ((((hsbValue.red.intValue *255) /100) * brightness) /100).toString
val greenValue = ((((hsbValue.green.intValue *255) /100) * brightness) /100).toString
val blueValue = ((((hsbValue.blue.intValue *255) /100) * brightness) /100).toString
val color = redValue +”,”+ greenValue +”,”+ blueValue
sendCommand( DG_KIM_LED_ColorCMD, color )
end
[/codesyntax]

sonoff.sitemap

[codesyntax lang=”php”]
sitemap LED label=”LED Lights” {
Frame label=”KIM – Bett”{
Switch item=DG_KIM_LED_PirSwitch label=”Bewegungsmelder an/aus”
Switch item=DG_KIM_LED_Switch label=”LED an/aus” icon=”light”
// Selection item=DG_KIM_LED_ColSel label=”Farbe” mappings=[1=”Rot”, 2=”Grün”, 3=”Blau”, 12=”Weiß”, 4=”Orange”,7=”Bernstein”,8=”Cyan”, 9=”Lila”,10=”Gelb”,11=”Pink”]
Switch item=DG_KIM_LED_ColSel label=”Farbe” mappings=[1=”Rot”, 2=”Grün”, 3=”Blau”, 12=”Weiß”]
// Colorpicker item=DG_KIM_LED_Color label=”Farbspektrum” icon=”colorwheel”
Slider item=DG_KIM_LED_Dimmer label=”Dimmer”// minValue=0 maxValue=100
Switch item=DG_KIM_LED_Fade label=”Fade an/aus”
Slider item=DG_KIM_LED_Speed label=”Fade speed” minValue=0 maxValue=20
Switch item=DG_KIM_LED_State label=”Status Power”
Switch item=DG_KIM_LED_Rule2State label=”Status Bew.Melder (2)”
Switch item=DG_KIM_LED_Rule3State label=”Status Bew.Muell (3)”
} // end of FRAME
} // end of sitemap
[/codesyntax]

Alternative

Für einfache Aufgaben kann man eine Steuerung auch mit NodeRED realisieren:

Programmierung / Flashing tasmota firmware

Anschluss des Sensors

H801RGB LED Strip WiFi Controller

Alternativ kann man auch ein Modul des Typs H801 verwenden, welches wesentlich solider als  das AriLUX LC-01 aussieht. Vorteile:
  • Schraubklemmen statt Steckverbindung
  • MOSFETs können größeren Strom schalten
  • 5 Kanäle: RGBWW
Flashen der Firmware:
Die 5V für den PIR habe ich oben abgegriffen, da an der Programmierleiste nur 3,3V anliegen.
GPIO0 darf man nicht für den PIR verwenden. Also habe ich GPIO3 genommen.