GELÖST: govee2mqtt

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

GELÖST: govee2mqtt

Beitrag von nw378 »

Moin,

ich brauche Profi-Hilfe, ich bin am Ende mit meinem Latein. Gefühlt auf der Zielgeraden, aber jetzt geht's nicht weiter. Und zwar:

Ich habe GU10-LED-Spots von Govee, Modell H600D https://eu.govee.com/de-de/products/gov ... DiWRbvlYz3

Diese lassen sich leider nicht direkt in OH einbinden. Zwar gibt es ein Govee Binding; um dies zu nutzen, muss in der Govee App der Schalter "LAN Control" eingeschaltet werden. Für dieses Modell ist das nicht verfügbar.

Aber: es gibt ein (home assistant) Tool, das per API (leider nicht lokal, aber in der Not frisst der Teufel Fliegen) auf die Govee Cloud zugreift:
https://github.com/wez/govee2mqtt/blob/ ... /DOCKER.md

Flux die .env-Datei angepasst (User, Passwort, MQTT Broker, API) und installiert - läuft und liefert Daten.

gv2mqtt/light/1005B08184C426FC/state

Code: Alles auswählen

{"brightness":70,"color_mode":"color_temp","color_temp":370,"effect":null,"state":"ON"}
und

gv2mqtt/switch/1005B08184C426FC/powerSwitch/state

OH zeigt sogar die Lampen in den Things per Autodiscovery an, allerdings stehen diese dann auf UNKNOWN statt ONLINE und haben auch keine Channel.

Code: Alles auswählen

UID: mqtt:homeassistant_gv2mqtt_2D1005B08184C426FC:mosquitto:gv2mqtt_2D1005B08184C426FC
label: Büro 3 (Light, Sensor, Switch, button)
thingTypeUID: mqtt:homeassistant_gv2mqtt_2D1005B08184C426FC
configuration:
  topics:
    - button/gv2mqtt-1005B08184C426FC-request-platform-data
    - light/gv2mqtt-1005B08184C426FC
    - sensor/sensor-1005B08184C426FC-gv2mqtt-status
    - switch/gv2mqtt-1005B08184C426FC-powerSwitch
  basetopic: homeassistant
bridgeUID: mqtt:broker:mosquitto
Also habe ich versucht, eine Lampe per Textfile zu installieren:

Code: Alles auswählen

Thing mqtt:topic:mosquitto:gv2mqtt "MQTT Govee" (mqtt:broker:mosquitto) {
    Channels:
      Type switch :  office1                               [ commandTopic="gv2mqtt/light/1005B08184C426FC/command", stateTopic="gv2mqtt/light/1005B08184C426FC/state", transformationPattern="JSONPATH:$.state",  off="OFF" , on="ON" ] 
Dann noch ein Switch-Item erstellt und verlinkt:

Code: Alles auswählen

UID: mqtt:topic:mosquitto:gv2mqtt
label: MQTT Govee
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:mosquitto
channels:
  - id: office1
    channelTypeUID: mqtt:switch
    label: On/Off Switch
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      commandTopic: gv2mqtt/light/1005B08184C426FC/command
      stateTopic: gv2mqtt/light/1005B08184C426FC/state
      transformationPattern: JSONPATH:$.state
      off: OFF
      on: ON
Leider reagiert die Lampe nicht, wenn ich den OH-Schalter betätige.... :(

edit:

Irgendwann später erscheint in mqtt dann noch folgendes:

homeassistant/light/gv2mqtt-1005B08184C426FC/config

Code: Alles auswählen

{"availability_topic":"gv2mqtt/availability","name":null,"origin":{"name":"gv2mqtt","sw_version":"2024.07.21-c9d27764","url":"https://github.com/wez/govee2mqtt"},"device":{"name":"Büro 3","manufacturer":"Govee","model":"H600D","via_device":"gv2mqtt","identifiers":["gv2mqtt-1005B08184C426FC"]},"unique_id":"gv2mqtt-1005B08184C426FC","schema":"json","command_topic":"gv2mqtt/light/1005B08184C426FC/command","state_topic":"gv2mqtt/light/1005B08184C426FC/state","optimistic":false,"supported_color_modes":["rgb","color_temp"],"color_mode":true,"brightness":true,"brightness_scale":100,"effect":true,"effect_list":["","Adventure Game","Asleep","Aurora","Awaken","Business","Candlelight","Candy","Cards Game","Care","Carnival","Cartoon","Christmas","Dance Party","Desert","Dreamland","Dusk","Enthusiastic","Father's Day","Fighting Game","Fire","Flower Field","Forest","Game","Halloween","Happy","Healing","Karst Cave","Longing","Meditation","Mild","Morning","Mother's Day","Movie","Music: Energic","Music: Rhythm","Music: Rolling","Music: Spectrum","Night Light","Party","Profound","Puzzle Game","Quiet","Racing Game","Rainbow","Reading","Relax","Rivalry","River","Romantic","Shooting Game","Sports Game","Starry Sky","Study","Sunset Glow","Sweet","Technology","Thanksgiving","Valentine's Day","Warm","White Light"],"min_mireds":153,"max_mireds":370,"payload_available":"online"}
und

homeassistant/switch/gv2mqtt-1005B08184C426FC-powerSwitch/config

Code: Alles auswählen

{"availability_topic":"gv2mqtt/availability","name":"Power Switch","origin":{"name":"gv2mqtt","sw_version":"2024.07.21-c9d27764","url":"https://github.com/wez/govee2mqtt"},"device":{"name":"Büro 1","manufacturer":"Govee","model":"H600D","via_device":"gv2mqtt","identifiers":["gv2mqtt-1005B08184C426FC"]},"unique_id":"gv2mqtt-1005B08184C426FC-powerSwitch","command_topic":"gv2mqtt/switch/1005B08184C426FC/command/powerSwitch","state_topic":"gv2mqtt/switch/1005B08184C426FC/powerSwitch/state"}
edit2:

Wenn ich in der Govee-App den Schalter betätige, reagiert der openHAB-Schalter (s.o.). In diese Richtung funktioniert das ganze also...
Fehlt noch umgehehrt.
Zuletzt geändert von nw378 am 15. Nov 2024 17:38, insgesamt 1-mal geändert.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: govee2mqtt

Beitrag von nw378 »

Und noch ein Nachtrag. Per action-Befehl in einer Rule klappt auch die Senderichtung.

Code: Alles auswählen

rule "test"
when
    Item Test changed
then
  var actions = getActions("mqtt","mqtt:broker:mosquitto")
  actions.publishMQTT("gv2mqtt/light/1005B08184C426FC/command", "{\"brightness\":5,\"color_mode\":\"color_temp\",\"color_temp\":370,\"effect\":null,\"state\":\"ON\"}")
end
Offenbar habe ich einen Fehler in der Konfiguration des Items/Commands...

Egal, so funktioniert's. Falls jemand mal vor der gleichen Aufgabe steht, so sieht dann die fertige Regel aus, um mehrere Spots gleichzeitig anzusteuern:

Code: Alles auswählen

rule "Beleuchtung Büro"
when
    Item Dimmer_OG_Office changed
then
  val x = newState
  var actions = getActions("mqtt","mqtt:broker:mosquitto")
  actions.publishMQTT("gv2mqtt/light/1005B08184C426FC/command", "{\"brightness\":" + x + ",\"color_mode\":\"color_temp\",\"color_temp\":370,\"effect\":null,\"state\":\"ON\"}")
  actions.publishMQTT("gv2mqtt/light/6C05983DAE0B0310/command", "{\"brightness\":" + x + ",\"color_mode\":\"color_temp\",\"color_temp\":370,\"effect\":null,\"state\":\"ON\"}")
  actions.publishMQTT("gv2mqtt/light/F7DB983DAE123424/command", "{\"brightness\":" + x + ",\"color_mode\":\"color_temp\",\"color_temp\":370,\"effect\":null,\"state\":\"ON\"}")
  actions.publishMQTT("gv2mqtt/light/7BEE983DAE0C2FAC/command", "{\"brightness\":" + x + ",\"color_mode\":\"color_temp\",\"color_temp\":370,\"effect\":null,\"state\":\"ON\"}") }
end
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Harka
Beiträge: 488
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: govee2mqtt

Beitrag von Harka »

Moin,
wenn Du dennoch was versuchen möchtest -> pass Dein formatBeforePublish mal an. So wird das z.B. bei zigbee2mqtt gemacht und dies sieht doch sehr ähnlich aus.

Code: Alles auswählen

formatBeforePublish: '{"state": %s}' 

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

Re: govee2mqtt

Beitrag von udo1toni »

nw378 hat geschrieben: 14. Nov 2024 18:27 Offenbar habe ich einen Fehler in der Konfiguration des Items/Commands...
Definitiv. Du sendest ja auch per Rule etwas völlig anderes als per Channel.

Switch Channel (mutmaßlich):

Code: Alles auswählen

UID: mqtt:topic:mosquitto:gv2mqtt
label: MQTT Govee
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:mosquitto
channels:
  - id: office1
    channelTypeUID: mqtt:switch
    label: On/Off Switch
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: "%s"
      commandTopic: gv2mqtt/switch/1005B08184C426FC/command/powerSwitch
      stateTopic: gv2mqtt/switch/1005B08184C426FC/powerSwitch/state
Hier wird also das powerSwitch Topic verwendet.

Dimmer Channel:

Code: Alles auswählen

UID: mqtt:topic:mosquitto:gv2mqtt
label: MQTT Govee
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:mosquitto
channels:
  - id: dim
    channelTypeUID: mqtt:dimmer
    label: Dimmer
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: '{"brightness":%s}'
      commandTopic: gv2mqtt/switch/1005B08184C426FC/command
      stateTopic: gv2mqtt/switch/1005B08184C426FC/state
      transformationPattern: JSONPATH:$.brightness
Es ist auch möglich, dass zwingend alle Parameter im JSON Objekt gesetzt sein müssen, dann sähe formatBeforePublish so aus:

Code: Alles auswählen

formatBeforePublish: '{"brightness":%s,"color_mode":"color_temp","color_temp":370,"effect":null}'
%s enthält den Zahlenwert 0-100. Der State darf als Parameter nicht notwendig sein, sonst müsste man ja für Helligkeit 0 abweichend ein OFF senden. Wenn man einfache Anführungszeichen verwendet, kann man auf das Escapen der doppelten Anführungszeichen verzichten. Das funktioniert aber nur per yaml bzw. über die UI
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: govee2mqtt

Beitrag von nw378 »

Danke Harka und Udo für den Input, das hat mir beides den passenden Anstoß gegeben.

Ich habe noch etwas daran rumgetüftelt, und meine, nun fertig zu sein ;-)

Ich habe alles als Textfile konfiguriert, mit diesem Yaml-Zeug komme ich nur schwierig zurecht.

Tatsächlich ist es so, dass state als Einzelargument gesendet werden kann; brightness benötigt die gesamte Kette, inkl. state.

Umgekehrt ist es so, dass wenn state=OFF ist, auch nur dieses als Parameter im stateTopic gesendet wird.
Deshalb habe ich noch ein JS eingefügt (sonst erscheint ein JSONPATH-transformation failed: Invalid path '$.brightness im Log).


.things

Code: Alles auswählen

Thing mqtt:topic:mosquitto:gv2mqtt "MQTT Govee" (mqtt:broker:mosquitto) {
    Channels:
      Type switch :  office1 [ commandTopic="gv2mqtt/light/1005B08184C426FC/command", stateTopic="gv2mqtt/light/1005B08184C426FC/state", transformationPattern="JSONPATH:$.state",  formatBeforePublish="{\"state\":\"%s\"}" ] 
      Type dimmer :  dimmer1 [ commandTopic="gv2mqtt/light/1005B08184C426FC/command", stateTopic="gv2mqtt/light/1005B08184C426FC/state", transformationPattern="JS:|JSON.parse(input).brightness",  formatBeforePublish="{\"brightness\":%s,\"color_mode\":\"color_temp\",\"color_temp\":370,\"effect\":null,\"state\":\"ON\"}" ] 
      ...}
.items

Code: Alles auswählen

Group:Switch:OR(ON,OFF)  gOffice_Switch
Group gOffice_Dimmer

Switch  Licht_Office1         (gOffice_Switch)                     {channel="mqtt:topic:mosquitto:gv2mqtt:office1"}
Dimmer  Dimmer_Office1        (gOffice_Dimmer)                     {channel="mqtt:topic:mosquitto:gv2mqtt:dimmer1"}
...
.rules

Code: Alles auswählen

rule "Beleuchtung Büro"
when
    Item Dimmer_OG_Office changed
then
  val x = newState
  if (x == 0)  
    gOffice_Switch.members.forEach[i | i.sendCommand(OFF)]    
  else {
    if (previousState==0) 
      gOffice_Switch.members.forEach[i | i.sendCommand(ON)]    
    gOffice_Dimmer.members.forEach[i | i.sendCommand(x.toString)]  }
end
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: govee2mqtt

Beitrag von udo1toni »

Sehr schön! :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten