Das https://www.home-assistant.io/integrations/light.template/ für Dingz zu adaptieren hat mir einiges Kopfzerbrechen verursacht und gewisse Probleme sind noch ungelöst.
Es basiert auf dem bereits erstellten Sensor Template https://forum.dingz.ch/d/27-dingz-sensoren-mit-template-einbinden-watt-temperatur:
platform: rest
method: GET
resource: http://192.168.1.195/api/v1/state
name: Dingz Wohnzimmer State
value_template: "OK"
json_attributes:
- "dimmers"
- "blinds"
- "led"
- "sensors"
- "thermostat"
- "wifi"
Weiter den Rest Commands zum Schalten des Dimmers https://forum.dingz.ch/d/25-dingz-dimmer-einschalten-ausschalten-und-dimmen:
dingz_wohnzimmer_dimmer_onoff:
url: http://192.168.1.195/api/v1/dimmer/{{ dimmer }}/{{ enum }}
method: POST
dingz_wohnzimmer_dimmer:
url: http://192.168.1.195/api/v1/dimmer/{{ dimmer }}/{{ enum }}
method: POST
payload: 'value={{ value }}'
content_type: 'application/x-www-form-urlencoded; charset=utf-8'
Folgende Punkte sind wichtig:
- Das Level muss mit *255/100 sowie *100/255 umgerechnet werden, da das Template von 0-255 ausgeht und das Level für Dingz jedoch 0-100 sein muss. Irgendwo habe ich gesehen, dass es die Möglichkeit diese min/max Werte im Template einzuschränken, jedoch habe ich das nicht probiert.
- Ohne die entity_id in set_level wurde der Wert brightness nicht in das Script übergeben.
- Nur mit einer gesetzten unique_id kann die Lampe dann dem korrekten Bereich zugeordnet werden, ansonsten lässt sich die Entität nicht im GUI bearbeiten.
/config/configuration.yaml
light: !include_dir_list lights/
/config/lights/template/Templated Lights.yaml
platform: template
lights:
dingz_katzenbaum_light:
unique_id: dingz_katzenbaum_light
friendly_name: "Dingz Katzenbaum"
level_template: "{{ (states.sensor.dingz_wohnzimmer_state.attributes
['dimmers'][3]['output']*255/100)|int }}"
value_template: "{{ states.sensor.dingz_wohnzimmer_state.attributes['dimmers'][3]['on']}}"
turn_on:
service: script.dingz_katzenbaum_light_on
turn_off:
service: script.dingz_katzenbaum_light_off
set_level:
service: script.dingz_katzenbaum_light_level
entity_id: light.dingz_katzenbaum_light
data:
brightness: "{{ (brightness * 100 / 255) | int }}"
/config/scripts.yaml
dingz_katzenbaum_light_on:
alias: Dingz Katzenbaum Light On
sequence:
- service: rest_command.dingz_wohnzimmer_dimmer_onoff
data:
dimmer: 3
enum: 'on'
mode: single
icon: hass:lightbulb
dingz_katzenbaum_light_off:
alias: Dingz Katzenbaum Light Off
sequence:
- service: rest_command.dingz_wohnzimmer_dimmer_onoff
data:
dimmer: 3
enum: 'off'
mode: single
icon: hass:lightbulb
dingz_katzenbaum_light_level:
alias: Dingz Katzenbaum Light Level
sequence:
- service: rest_command.dingz_wohnzimmer_dimmer
data:
dimmer: 3
enum: 'on'
value: '{{ brightness }}'
mode: single
icon: hass:lightbulb
Offene Probleme:
- Das ein- oder ausschalten klappt, jedoch kippt der Schalter nach wenigen Sekunden wieder zurück um dann rund 15 Sekunden später auf der richtigen Position zu sein. Das muss mit der Verzögerung des Sensor zu tun haben, der sich nur alle rund 15 Sekunden aktualisiert. Wie ich die Sensor Daten forcieren kann, fand ich noch nicht heraus.
- Dingz merkt sich den letzten Zustand nicht. Ein on geht also immer auf 100% Leistung. Wie ich mir den letzten Dimmwert merken, speichern und ihn wieder verwenden kann, habe ich in HA noch nicht rausgefunden. Schöner wäre es, wenn sich Dingz den selber merken und beim einschalten ohne value verwenden würde.
- Aktuell noch zu viel nahezu redundanter Code - vor allem bezüglich rest_command und script.