wez / govee2mqtt

Govee2MQTT: Connect Govee lights and devices to Home Assistant
MIT License
402 stars 23 forks source link

H6176 Effect change turns strip ON but state stays OFF #49

Open Chavife opened 8 months ago

Chavife commented 8 months ago

Govee Device SKU

H6176

Govee2MQTT Version

2024.01.10-2ddf9413

Describe the issue

  1. Initial state of strip light: OFF
  2. call:
    {
    "state": "ON",
    "effect": "Atlantis"
    }
  3. strip turns on with the desired effect
  4. mqtt state stays OFF image

Startup Diagnostics

[2024-01-11T09:28:18 INFO govee::commands::serve] Starting service. version 2024.01.10-2ddf9413 [2024-01-11T09:28:18 INFO govee::commands::serve] Querying platform API for device list [2024-01-11T09:28:19 INFO govee::commands::serve] Querying undocumented API for device + room list [2024-01-11T09:28:21 INFO govee::service::iot] Connected to IoT: CONNACK code 0: Connection Accepted. [2024-01-11T09:28:21 INFO govee::commands::serve] Starting LAN discovery [2024-01-11T09:28:21 INFO govee::commands::serve] Waiting 10 seconds for LAN API discovery [2024-01-11T09:28:21 INFO govee::service::iot] IoT (re)connected with status CONNACK code 0: Connection Accepted. [2024-01-11T09:28:31 INFO govee::commands::serve] Devices returned from Govee's APIs [2024-01-11T09:28:31 INFO govee::commands::serve] H6176_4B06 (0F:AD:C2:39:32:33:4B:06) sku=H6176 [2024-01-11T09:28:31 INFO govee::commands::serve] LAN API: ip=10.0.0.136 [2024-01-11T09:28:31 INFO govee::commands::serve] Platform API: devices.types.light. supports_rgb=true supports_brightness=true [2024-01-11T09:28:31 INFO govee::commands::serve] color_temp=Some((2000, 9000)) segment_rgb=Some(0..15) [2024-01-11T09:28:31 INFO govee::commands::serve] Undoc: room=None supports_iot=true ble_only=false [2024-01-11T09:28:31 INFO govee::commands::serve] Quirk { sku: "H6176", icon: "mdi:light-bulb", supports_rgb: true, supports_brightness: true, color_temp_range: Some((2000, 9000)), avoid_platform_api: false, ble_only: false, lan_api_capable: true, device_type: Light, supports_scenes: None } [2024-01-11T09:28:31 INFO govee::commands::serve] [2024-01-11T09:28:31 INFO govee::service::http] http server addr is 0.0.0.0:8056 [2024-01-11T09:28:37 INFO govee::service::hass] Wait 1s for hass to settle on 20 entity configs [2024-01-11T09:28:38 INFO govee::service::hass] MQTT connected with status=CONNACK code 0: Connection Accepted. [2024-01-11T09:31:36 INFO govee::service::hass] Command for H6176_4B06 (0F:AD:C2:39:32:33:4B:06): { "state": "ON", "effect": "Atlantis" } [2024-01-11T09:31:36 INFO govee::service::state] Using Platform API to set H6176_4B06 (0F:AD:C2:39:32:33:4B:06) to scene Atlantis

Additional Logs

MQTT Explorer: image the light in real life is ON (inconsistent state)

Home Assistant Logs

image

Anything else?

related: https://github.com/wez/govee2mqtt/issues/41

wez commented 7 months ago

Please set the debug level to govee::service::iot=debug,info and run through your reproduction steps again. For my devices, I see a Packet come in from the IoT connect to notify us of the device state change and I'm curious to see if that is happening for your device.

Chavife commented 7 months ago

Can you be more specific about where/how to set the debug level? I am running the gv2mqtt in docker.

wez commented 7 months ago

For docker, you can set RUST_LOG in your .env file, or otherwise tell docker to set it in the environment:

RUST_LOG=govee::service::iot=debug,info
Chavife commented 7 months ago

Thanks, here is the log:

[2024-01-11T15:03:17 INFO  govee::commands::serve] Starting service. version 2024.01.10-2ddf9413
[2024-01-11T15:03:17 INFO  govee::commands::serve] Querying platform API for device list
[2024-01-11T15:03:18 INFO  govee::commands::serve] Querying undocumented API for device + room list
[2024-01-11T15:03:20 INFO  govee::service::iot] Connected to IoT: CONNACK code 0: Connection Accepted.
[2024-01-11T15:03:20 INFO  govee::commands::serve] Starting LAN discovery
[2024-01-11T15:03:20 INFO  govee::service::iot] IoT (re)connected with status CONNACK code 0: Connection Accepted.
[2024-01-11T15:03:20 INFO  govee::commands::serve] Waiting 10 seconds for LAN API discovery
[2024-01-11T15:03:30 INFO  govee::commands::serve] Devices returned from Govee's APIs
[2024-01-11T15:03:30 INFO  govee::commands::serve] H6176_4B06 (0F:AD:C2:39:32:33:4B:06) sku=H6176
[2024-01-11T15:03:30 INFO  govee::commands::serve]   LAN API: ip=10.0.0.136
[2024-01-11T15:03:30 INFO  govee::commands::serve]   Platform API: devices.types.light. supports_rgb=true supports_brightness=true
[2024-01-11T15:03:30 INFO  govee::commands::serve]                 color_temp=Some((2000, 9000)) segment_rgb=Some(0..15)
[2024-01-11T15:03:30 INFO  govee::commands::serve]   Undoc: room=None supports_iot=true ble_only=false
[2024-01-11T15:03:30 INFO  govee::commands::serve]   Quirk { sku: "H6176", icon: "mdi:light-bulb", supports_rgb: true, supports_brightness: true, color_temp_range: Some((2000, 9000)), avoid_platform_api: false, ble_only: false, lan_api_capable: true, device_type: Light, supports_scenes: None }
[2024-01-11T15:03:30 INFO  govee::commands::serve] 
[2024-01-11T15:03:30 INFO  govee::service::http] http server addr is 0.0.0.0:8056
[2024-01-11T15:03:38 INFO  govee::service::hass] Wait 1s for hass to settle on 20 entity configs
[2024-01-11T15:03:39 INFO  govee::service::hass] MQTT connected with status=CONNACK code 0: Connection Accepted.
[2024-01-11T15:04:00 INFO  govee::service::hass] Command for H6176_4B06 (0F:AD:C2:39:32:33:4B:06): {
    "state": "ON",
    "effect": "Atlantis"
}
[2024-01-11T15:04:00 INFO  govee::service::state] Using Platform API to set H6176_4B06 (0F:AD:C2:39:32:33:4B:06) to scene Atlantis
[2024-01-11T15:04:03 DEBUG govee::service::iot] Packet { sku: Some("H6176"), device: Some("0F:AD:C2:39:32:33:4B:06"), cmd: Some("ptReal"), msg: None, state: StateUpdate { on_off: None, brightness: None, color: None, color_temperature_kelvin: None, sku: None, device: None }, op: Some(OpData { command: [Generic([A3, 02, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A1]), SetHumidifierMode { mode: 0, param: 0 }], mode_value: [], sleep_value: [], wakeup_value: [], timer_value: [] }) }
ctml91 commented 7 months ago

I have the same issue, I am using only the API KEY with no username/password. Are you doing the same @Chavife ?

However I also had the same issue with Govee HomeBridge which is what I'm switching from. When you toggle ON, it actually switches to ON for a second but quickly (not sure if this is just UI side). If the toggle is still highlighted as ON, and you quickly toggle OFF before it gets a chance to refresh it will toggle OFF successfully. After toggling many times, I was able to get it to stay in the ON position however then I had the same issue but in reverse where the toggle reports ON but the device state is OFF. When toggling OFF nothing happens because the device is already OFF but after a second the toggle switches back to ON while the device stays OFF, but if I toggle OFF and then ON quickly the device does turn on. This happens for both my H6199 TV Lightstrip and H7060 Flood lights.

In the case of my TV Lightstrip w/ camera H6199 govee2mqtt discovers the segments and has some options like DreamView and Gradient toggle (looks very cool!). I'm not exactly sure what the Dreamview and Gradient toggles do (is it camera mode, and gradient vs single colour?), the segments, dreamview, and gradients don't seem to have any effect. I read the FAQ and understand it may be device dependent whether brightness works, but neither the brightness nor color has any effect. The lightstrip stays in camera mode, perhaps I need to somehow toggle camera mode off first before the segment control will work?

On the H7060 the segment changing brightness/colors works properly. The H6199 does have segments that can be controller through the Govee App, so I wouldn't think it would be a device limitation.

Despite these minor issues, I just want to say this project looks fantastic and I'm looking forward to making it a permanent replacement for Govee Homebridge & the HA Govee integration which both used at one point or another.

Chavife commented 7 months ago

@ctml91 actually I do have the username and password defined as well with LAN control enabled. Does the API key work without username and pass? Interesting.

wez commented 7 months ago

The issue here is in the notification we get back from the AWS IoT connection:

StateUpdate { on_off: None,

Govee doesn't set the overall power state to anything in particular.

It does send some other packets:

Generic([A3, 02, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A1]),
SetHumidifierMode { mode: 0, param: 0 }],

There are a few things that need to happen for the power state to show up well here:

  1. For the sake of robustness, if we don't receive any IoT event within say 10s of a control attempt, we should fall back to a direct poll of the device
  2. For scene/effect control attempts: since we don't know how to encode/decode those for IoT anyway, we should prefer to poll the platform API directly after a control attempt
  3. Some reverse engineering is needed to properly understand those IoT packets in the right context. Right now it is interpreting something as a humidifier control. The bit pattern for that may well be equivalent to the "power is on" notification for this device. Some refactoring is necessary to allow providing some context in the data representation of these packets so that they can be decoded and re-encoding in the correct context.
  4. I want to introduce a per-device configuration entity that allows the user to enable/disable individual control/notification strategies. For example, if you could set this device to ignore the IoT API then the existing logic would cause us to poll it via the platform API already.
Chavife commented 7 months ago

I undefined the username and password from the .env file, effectively disabling IoT service and keeping LAN to update the status. Unfortunately the issue is the same.

2024-01-12T09:35:29 INFO  govee::service::hass] Command for H6176_4B06 (0F:AD:C2:39:32:33:4B:06): {
    "state": "ON",
    "effect": "Atlantis"
}
[2024-01-12T09:35:29 INFO  govee::service::state] Using Platform API to set H6176_4B06 (0F:AD:C2:39:32:33:4B:06) to scene Atlantis
[2024-01-12T09:35:29 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-12T09:35:29 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-12T09:35:29 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-12T09:35:29 TRACE hyper::client::pool] checkout waiting for idle connection: ("https", openapi.api.govee.com)
[2024-01-12T09:35:29 DEBUG reqwest::connect] starting new connection: https://openapi.api.govee.com/
[2024-01-12T09:35:29 TRACE hyper::client::connect::http] Http::connect; scheme=Some("https"), host=Some("openapi.api.govee.com"), port=None
[2024-01-12T09:35:29 DEBUG hyper::client::connect::dns] resolving host="openapi.api.govee.com"
[2024-01-12T09:35:29 DEBUG hyper::client::connect::http] connecting to 184.72.178.138:443
[2024-01-12T09:35:29 DEBUG hyper::client::connect::http] connected to 184.72.178.138:443
[2024-01-12T09:35:30 TRACE hyper::client::conn] client handshake Http1
[2024-01-12T09:35:30 TRACE hyper::client::client] handshake complete, spawning background dispatcher task
[2024-01-12T09:35:30 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Busy }
[2024-01-12T09:35:30 TRACE hyper::client::pool] checkout dropped for ("https", openapi.api.govee.com)
[2024-01-12T09:35:30 TRACE hyper::proto::h1::role] encode_headers;
[2024-01-12T09:35:30 TRACE hyper::proto::h1::role] -> encode_headers;
[2024-01-12T09:35:30 TRACE hyper::proto::h1::role] Client::encode method=POST, body=Some(Known(200))
[2024-01-12T09:35:30 TRACE hyper::proto::h1::role] <- encode_headers;
[2024-01-12T09:35:30 TRACE hyper::proto::h1::role] -- encode_headers;
[2024-01-12T09:35:30 TRACE hyper::proto::h1::encode] sized write, len = 200
[2024-01-12T09:35:30 TRACE hyper::proto::h1::io] buffer.flatten self.len=195 buf.len=200
[2024-01-12T09:35:30 DEBUG hyper::proto::h1::io] flushed 395 bytes
[2024-01-12T09:35:30 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: KeepAlive, keep_alive: Busy }
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] Conn::read_head
[2024-01-12T09:35:31 TRACE hyper::proto::h1::io] received 318 bytes
[2024-01-12T09:35:31 TRACE hyper::proto::h1::role] parse_headers;
[2024-01-12T09:35:31 TRACE hyper::proto::h1::role] -> parse_headers;
[2024-01-12T09:35:31 TRACE hyper::proto::h1::role] Response.parse bytes=318
[2024-01-12T09:35:31 TRACE hyper::proto::h1::role] Response.parse Complete(318)
[2024-01-12T09:35:31 TRACE hyper::proto::h1::role] <- parse_headers;
[2024-01-12T09:35:31 TRACE hyper::proto::h1::role] -- parse_headers;
[2024-01-12T09:35:31 DEBUG hyper::proto::h1::io] parsed 10 headers
[2024-01-12T09:35:31 DEBUG hyper::proto::h1::conn] incoming body is chunked encoding
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] decode; state=Chunked { state: Start, chunk_len: 0, extensions_cnt: 0 }
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Read chunk start
[2024-01-12T09:35:31 TRACE hyper::proto::h1::io] received 201 bytes
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Chunk size is 195
[2024-01-12T09:35:31 DEBUG hyper::proto::h1::decode] incoming chunked header: 0xC3 (195 bytes)
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Chunked read, remaining=195
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Body(Chunked { state: BodyCr, chunk_len: 0, extensions_cnt: 0 }), writing: KeepAlive, keep_alive: Busy }
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] decode; state=Chunked { state: BodyCr, chunk_len: 0, extensions_cnt: 0 }
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-12T09:35:31 TRACE hyper::proto::h1::io] received 5 bytes
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] Chunk size is 0
[2024-01-12T09:35:31 TRACE hyper::proto::h1::decode] end of chunked
[2024-01-12T09:35:31 DEBUG hyper::proto::h1::conn] incoming body completed
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] maybe_notify; read_from_io blocked
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle }
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle }
[2024-01-12T09:35:31 TRACE hyper::client::pool] pool dropped, dropping pooled (("https", openapi.api.govee.com))
[2024-01-12T09:35:31 TRACE hyper::proto::h1::dispatch] client tx closed
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] State::close_read()
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] State::close_write()
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Closed, writing: Closed, keep_alive: Disabled }
[2024-01-12T09:35:31 TRACE hyper::proto::h1::conn] shut down IO complete
[2024-01-12T09:35:36 TRACE govee::lan_api] Send disco packet to 239.255.255.250
[2024-01-12T09:35:36 TRACE govee::lan_api] process_packet: addr=10.0.0.136:58731 data={"msg":{"cmd":"scan","data":{"ip":"10.0.0.136","device":"0F:AD:C2:39:32:33:4B:06","sku":"H6176","bleVersionHard":"3.01.10","bleVersionSoft":"3.04.30","wifiVersionHard":"1.02.00","wifiVersionSoft":"2.05.08"}}}
[2024-01-12T09:35:36 TRACE govee::commands::serve] LAN disco: LanDevice { ip: 10.0.0.136, device: "0F:AD:C2:39:32:33:4B:06", sku: "H6176", ble_version_hard: "3.01.10", ble_version_soft: "3.04.30", wifi_version_hard: "1.02.00", wifi_version_soft: "2.05.08" }
[2024-01-12T09:35:36 TRACE govee::lan_api] query status of 10.0.0.136
[2024-01-12T09:35:36 TRACE govee::lan_api] LanDevice::send_request to 10.0.0.136 DevStatus
[2024-01-12T09:35:36 TRACE govee::lan_api] process_packet: addr=10.0.0.136:58732 data={"msg":{"cmd":"devStatus","data":{"onOff":0,"brightness":1,"color":{"r":0,"g":0,"b":0},"colorTemInKelvin":0}}}
[2024-01-12T09:35:36 TRACE govee::commands::serve] LAN disco: update and notify 0F:AD:C2:39:32:33:4B:06
[2024-01-12T09:35:36 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-12T09:35:36 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-12T09:35:36 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-12T09:35:36 TRACE govee::hass_mqtt::light] LightConfig::notify_state: state is DeviceState { on: false, online: None, kelvin: 0, color: DeviceColor { r: 0, g: 0, b: 0 }, brightness: 1, scene: Some("Atlantis"), source: "LAN API", updated: 2024-01-12T08:35:36.250992434Z }
[2024-01-12T09:35:36 TRACE govee::service::hass] gv2mqtt/light/0FADC23932334B06/state -> {"state":"OFF"}
[2024-01-12T09:35:36 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m48, 'gv2mqtt/light/0FADC23932334B06/state', ... (15 bytes))
[2024-01-12T09:35:36 TRACE govee::service::hass] gv2mqtt/switch/0FADC23932334B06/powerSwitch/state -> OFF
[2024-01-12T09:35:36 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m49, 'gv2mqtt/switch/0FADC23932334B06/powerSwitch/state', ... (3 bytes))
[2024-01-12T09:35:36 TRACE govee::hass_mqtt::switch] CapabilitySwitch::notify_state: didn't find state for H6176_4B06 (0F:AD:C2:39:32:33:4B:06) gradientToggle
Chavife commented 7 months ago

Maybe related: changes of scenes/effects in the Govee Home app are not notified/updated in the mqtt topic. Other changes like brightness and colors are updated. Also any change to the effects also by tap to run group controls do not update. Although there is a message comming but without any change. Is there a way to disable caching in the govee2mqtt docker? I would try if that helps

wez commented 7 months ago

Please try the latest version and let me know how you get on with it!

Chavife commented 7 months ago

Looks like it is not published? docker-compose is saying "up to date" with version 2024.01.10-2ddf9413

wez commented 7 months ago

try this to force a pull:

$ docker compose up -d --pull=always
Chavife commented 7 months ago

Updated to version: 2024.01.13-13871749

Issue not fixed, same results.

wez commented 7 months ago

Please share the logs from this version

Chavife commented 7 months ago
[2024-01-13T21:49:16 INFO  govee::service::hass] Command for H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176): {
    "state": "ON",
    "effect": "Atlantis"
}
[2024-01-13T21:49:16 INFO  govee::service::state] Using Platform API to set H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176) to scene Atlantis
[2024-01-13T21:49:16 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-13T21:49:16 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-13T21:49:16 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-13T21:49:16 TRACE hyper::client::pool] checkout waiting for idle connection: ("https", openapi.api.govee.com)
[2024-01-13T21:49:16 DEBUG reqwest::connect] starting new connection: https://openapi.api.govee.com/
[2024-01-13T21:49:16 TRACE hyper::client::connect::http] Http::connect; scheme=Some("https"), host=Some("openapi.api.govee.com"), port=None
[2024-01-13T21:49:16 DEBUG hyper::client::connect::dns] resolving host="openapi.api.govee.com"
[2024-01-13T21:49:16 DEBUG hyper::client::connect::http] connecting to 18.215.11.0:443
[2024-01-13T21:49:16 DEBUG hyper::client::connect::http] connected to 18.215.11.0:443
[2024-01-13T21:49:16 TRACE hyper::client::conn] client handshake Http1
[2024-01-13T21:49:16 TRACE hyper::client::client] handshake complete, spawning background dispatcher task
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Busy }
[2024-01-13T21:49:16 TRACE hyper::client::pool] checkout dropped for ("https", openapi.api.govee.com)
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] encode_headers;
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] -> encode_headers;
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] Client::encode method=POST, body=Some(Known(200))
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] <- encode_headers;
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] -- encode_headers;
[2024-01-13T21:49:16 TRACE hyper::proto::h1::encode] sized write, len = 200
[2024-01-13T21:49:16 TRACE hyper::proto::h1::io] buffer.flatten self.len=195 buf.len=200
[2024-01-13T21:49:16 DEBUG hyper::proto::h1::io] flushed 395 bytes
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: KeepAlive, keep_alive: Busy }
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] Conn::read_head
[2024-01-13T21:49:16 TRACE hyper::proto::h1::io] received 318 bytes
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] parse_headers;
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] -> parse_headers;
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] Response.parse bytes=318
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] Response.parse Complete(318)
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] <- parse_headers;
[2024-01-13T21:49:16 TRACE hyper::proto::h1::role] -- parse_headers;
[2024-01-13T21:49:16 DEBUG hyper::proto::h1::io] parsed 10 headers
[2024-01-13T21:49:16 DEBUG hyper::proto::h1::conn] incoming body is chunked encoding
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] decode; state=Chunked { state: Start, chunk_len: 0, extensions_cnt: 0 }
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Read chunk start
[2024-01-13T21:49:16 TRACE hyper::proto::h1::io] received 201 bytes
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Chunk size is 195
[2024-01-13T21:49:16 DEBUG hyper::proto::h1::decode] incoming chunked header: 0xC3 (195 bytes)
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Chunked read, remaining=195
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Body(Chunked { state: BodyCr, chunk_len: 0, extensions_cnt: 0 }), writing: KeepAlive, keep_alive: Busy }
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] decode; state=Chunked { state: BodyCr, chunk_len: 0, extensions_cnt: 0 }
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-13T21:49:16 TRACE hyper::proto::h1::io] received 5 bytes
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] Chunk size is 0
[2024-01-13T21:49:16 TRACE hyper::proto::h1::decode] end of chunked
[2024-01-13T21:49:16 DEBUG hyper::proto::h1::conn] incoming body completed
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] maybe_notify; read_from_io blocked
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle }
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle }
[2024-01-13T21:49:16 TRACE hyper::client::pool] pool dropped, dropping pooled (("https", openapi.api.govee.com))
[2024-01-13T21:49:16 TRACE hyper::proto::h1::dispatch] client tx closed
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] State::close_read()
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] State::close_write()
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Closed, writing: Closed, keep_alive: Disabled }
[2024-01-13T21:49:16 TRACE hyper::proto::h1::conn] shut down IO complete
[2024-01-13T21:49:17 DEBUG mosquitto_rs::lowlevel] Client AP/9492568/c2d35c60469a40f5a1c0f9ab83ec3f73 received PUBLISH (d0, q0, r0, m0, 'GA/26b3505415863ed3c1b21c0305e265c3', ... (329 bytes))
[2024-01-13T21:49:17 TRACE govee::service::iot] GA/26b3505415863ed3c1b21c0305e265c3 -> {"proType":2,"sku":"H6176","device":"0F:AD:C2:39:32:33:4B:06","softVersion":"3.04.30","wifiSoftVersion":"2.05.08","wifiHardVersion":"1.02.00","cmd":"ptReal","type":1,"transaction":"oapi_1705178956694","pactType":1,"pactCode":1,"state":{"result":1},"op":{"command":["owIAAAAAAAAAAAAAAAAAAAAAAKE=","MwUAAAAAAAAAAAAAAAAAAAAAADY="]}}
[2024-01-13T21:49:17 DEBUG govee::service::iot] Packet { sku: Some("H6176"), device: Some("0F:AD:C2:39:32:33:4B:06"), cmd: Some("ptReal"), msg: None, state: StateUpdate { on_off: None, brightness: None, color: None, color_temperature_kelvin: None, sku: None, device: None }, op: Some(OpData { command: [Generic([A3, 02, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A1]), SetHumidifierMode { mode: 0, param: 0 }], mode_value: [], sleep_value: [], wakeup_value: [], timer_value: [] }) }
[2024-01-13T21:49:17 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-13T21:49:17 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-13T21:49:17 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-13T21:49:17 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/state -> Available
[2024-01-13T21:49:17 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m48, 'gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/state', ... (9 bytes))
[2024-01-13T21:49:17 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes -> {"http":null,"iot":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"AWS IoT API","updated":"2024-01-13T20:49:17.619945016Z"},"lan":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"LAN API","updated":"2024-01-13T20:48:46.337430233Z"},"overall":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"AWS IoT API","updated":"2024-01-13T20:49:17.619945016Z"},"platform_metadata":{"capabilities":[{"alarmType":null,"eventState":null,"instance":"powerSwitch","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.on_off"},{"alarmType":null,"eventState":null,"instance":"gradientToggle","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.toggle"},{"alarmType":null,"eventState":null,"instance":"brightness","parameters":{"dataType":"INTEGER","range":{"max":100,"min":1,"precision":1},"unit":"unit.percent"},"type":"devices.capabilities.range"},{"alarmType":null,"eventState":null,"instance":"segmentedBrightness","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"brightness","range":{"max":100,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"segmentedColorRgb","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"colorRgb","parameters":{"dataType":"INTEGER","range":{"max":16777215,"min":0,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"colorTemperatureK","parameters":{"dataType":"INTEGER","range":{"max":9000,"min":2000,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"lightScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"musicMode","parameters":{"dataType":"STRUCT","fields":[{"dataType":"ENUM","defaultValue":null,"fieldName":"musicMode","options":[{"name":"Energic","value":1},{"name":"Rhythm","value":2},{"name":"Spectrum","value":3},{"name":"Rolling","value":4},{"name":"Separation","value":5},{"name":"Hopping","value":6},{"name":"PianoKeys","value":7},{"name":"Fountain","value":8},{"name":"DayandNight","value":9},{"name":"Sprouting","value":10},{"name":"Shiny","value":11}],"required":true},{"dataType":"INTEGER","defaultValue":null,"fieldName":"sensitivity","range":{"max":100,"min":0,"precision":1},"required":true,"unit":"unit.percent"},{"dataType":"ENUM","defaultValue":null,"fieldName":"autoColor","options":[{"name":"on","value":1},{"name":"off","value":0}],"required":false},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":false,"unit":null}]},"type":"devices.capabilities.music_setting"},{"alarmType":null,"eventState":null,"instance":"diyScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"snapshot","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"}],"device":"0F:AD:C2:39:32:33:4B:06","deviceName":"H6176_4B06","sku":"H6176","type":"devices.types.light"},"platform_state":null}
[2024-01-13T21:49:17 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m49, 'gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes', ... (4106 bytes))
[2024-01-13T21:49:17 TRACE govee::hass_mqtt::light] LightConfig::notify_state: state is DeviceState { on: false, online: None, kelvin: 0, color: DeviceColor { r: 0, g: 255, b: 255 }, brightness: 1, scene: Some("Atlantis"), source: "AWS IoT API", updated: 2024-01-13T20:49:17.619945016Z }
[2024-01-13T21:49:17 TRACE govee::service::hass] gv2mqtt/light/0FADC23932334B06/state -> {"state":"OFF"}
[2024-01-13T21:49:17 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m50, 'gv2mqtt/light/0FADC23932334B06/state', ... (15 bytes))
[2024-01-13T21:49:17 TRACE govee::service::hass] gv2mqtt/switch/0FADC23932334B06/powerSwitch/state -> OFF
[2024-01-13T21:49:17 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m51, 'gv2mqtt/switch/0FADC23932334B06/powerSwitch/state', ... (3 bytes))
[2024-01-13T21:49:17 TRACE govee::hass_mqtt::switch] CapabilitySwitch::notify_state: didn't find state for H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176) gradientToggle
[2024-01-13T21:49:18 TRACE govee::lan_api] Send disco packet to 239.255.255.250
[2024-01-13T21:49:18 TRACE govee::lan_api] process_packet: addr=10.0.0.136:63030 data={"msg":{"cmd":"scan","data":{"ip":"10.0.0.136","device":"0F:AD:C2:39:32:33:4B:06","sku":"H6176","bleVersionHard":"3.01.10","bleVersionSoft":"3.04.30","wifiVersionHard":"1.02.00","wifiVersionSoft":"2.05.08"}}}
[2024-01-13T21:49:18 TRACE govee::commands::serve] LAN disco: LanDevice { ip: 10.0.0.136, device: "0F:AD:C2:39:32:33:4B:06", sku: "H6176", ble_version_hard: "3.01.10", ble_version_soft: "3.04.30", wifi_version_hard: "1.02.00", wifi_version_soft: "2.05.08" }
[2024-01-13T21:49:18 TRACE govee::lan_api] query status of 10.0.0.136
[2024-01-13T21:49:18 TRACE govee::lan_api] LanDevice::send_request to 10.0.0.136 DevStatus
[2024-01-13T21:49:18 TRACE govee::lan_api] process_packet: addr=10.0.0.136:63031 data={"msg":{"cmd":"devStatus","data":{"onOff":0,"brightness":1,"color":{"r":0,"g":255,"b":255},"colorTemInKelvin":0}}}
[2024-01-13T21:49:18 TRACE govee::commands::serve] LAN disco: update and notify 0F:AD:C2:39:32:33:4B:06
[2024-01-13T21:49:18 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-13T21:49:18 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-13T21:49:18 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-13T21:49:18 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/state -> Available
[2024-01-13T21:49:18 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m52, 'gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/state', ... (9 bytes))
[2024-01-13T21:49:18 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes -> {"http":null,"iot":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"AWS IoT API","updated":"2024-01-13T20:49:17.619945016Z"},"lan":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"LAN API","updated":"2024-01-13T20:49:18.388499064Z"},"overall":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"LAN API","updated":"2024-01-13T20:49:18.388499064Z"},"platform_metadata":{"capabilities":[{"alarmType":null,"eventState":null,"instance":"powerSwitch","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.on_off"},{"alarmType":null,"eventState":null,"instance":"gradientToggle","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.toggle"},{"alarmType":null,"eventState":null,"instance":"brightness","parameters":{"dataType":"INTEGER","range":{"max":100,"min":1,"precision":1},"unit":"unit.percent"},"type":"devices.capabilities.range"},{"alarmType":null,"eventState":null,"instance":"segmentedBrightness","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"brightness","range":{"max":100,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"segmentedColorRgb","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"colorRgb","parameters":{"dataType":"INTEGER","range":{"max":16777215,"min":0,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"colorTemperatureK","parameters":{"dataType":"INTEGER","range":{"max":9000,"min":2000,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"lightScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"musicMode","parameters":{"dataType":"STRUCT","fields":[{"dataType":"ENUM","defaultValue":null,"fieldName":"musicMode","options":[{"name":"Energic","value":1},{"name":"Rhythm","value":2},{"name":"Spectrum","value":3},{"name":"Rolling","value":4},{"name":"Separation","value":5},{"name":"Hopping","value":6},{"name":"PianoKeys","value":7},{"name":"Fountain","value":8},{"name":"DayandNight","value":9},{"name":"Sprouting","value":10},{"name":"Shiny","value":11}],"required":true},{"dataType":"INTEGER","defaultValue":null,"fieldName":"sensitivity","range":{"max":100,"min":0,"precision":1},"required":true,"unit":"unit.percent"},{"dataType":"ENUM","defaultValue":null,"fieldName":"autoColor","options":[{"name":"on","value":1},{"name":"off","value":0}],"required":false},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":false,"unit":null}]},"type":"devices.capabilities.music_setting"},{"alarmType":null,"eventState":null,"instance":"diyScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"snapshot","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"}],"device":"0F:AD:C2:39:32:33:4B:06","deviceName":"H6176_4B06","sku":"H6176","type":"devices.types.light"},"platform_state":null}
[2024-01-13T21:49:18 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m53, 'gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes', ... (4102 bytes))
[2024-01-13T21:49:18 TRACE govee::hass_mqtt::light] LightConfig::notify_state: state is DeviceState { on: false, online: None, kelvin: 0, color: DeviceColor { r: 0, g: 255, b: 255 }, brightness: 1, scene: Some("Atlantis"), source: "LAN API", updated: 2024-01-13T20:49:18.388499064Z }
[2024-01-13T21:49:18 TRACE govee::service::hass] gv2mqtt/light/0FADC23932334B06/state -> {"state":"OFF"}
[2024-01-13T21:49:18 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m54, 'gv2mqtt/light/0FADC23932334B06/state', ... (15 bytes))
[2024-01-13T21:49:18 TRACE govee::service::hass] gv2mqtt/switch/0FADC23932334B06/powerSwitch/state -> OFF
[2024-01-13T21:49:18 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m55, 'gv2mqtt/switch/0FADC23932334B06/powerSwitch/state', ... (3 bytes))
[2024-01-13T21:49:18 TRACE govee::hass_mqtt::switch] CapabilitySwitch::notify_state: didn't find state for H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176) gradientToggle

Also this version introduced this warning:

[2024-01-13T21:52:18 WARN  govee::hass_mqtt::switch] CapabilitySwitch::notify_state: Do something with DeviceCapabilityState {
    kind: Toggle,
    instance: "gradientToggle",
    state: Object {
        "value": String(""),
    },
}
Chavife commented 7 months ago

Issue still persists on version 2024.01.14-bd981e4e

New logs:

[2024-01-15T12:20:17 INFO  govee::service::hass] Command for H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176): {
    "state": "ON",
    "effect": "Atlantis"
}
[2024-01-15T12:20:17 INFO  govee::service::state] Using Platform API to set H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176) to scene Atlantis
[2024-01-15T12:20:17 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-15T12:20:17 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-15T12:20:17 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-15T12:20:17 TRACE hyper::client::pool] checkout waiting for idle connection: ("https", openapi.api.govee.com)
[2024-01-15T12:20:17 DEBUG reqwest::connect] starting new connection: https://openapi.api.govee.com/
[2024-01-15T12:20:17 TRACE hyper::client::connect::http] Http::connect; scheme=Some("https"), host=Some("openapi.api.govee.com"), port=None
[2024-01-15T12:20:17 DEBUG hyper::client::connect::dns] resolving host="openapi.api.govee.com"
[2024-01-15T12:20:17 DEBUG hyper::client::connect::http] connecting to 23.21.196.107:443
[2024-01-15T12:20:18 DEBUG hyper::client::connect::http] connected to 23.21.196.107:443
[2024-01-15T12:20:18 TRACE hyper::client::conn] client handshake Http1
[2024-01-15T12:20:18 TRACE hyper::client::client] handshake complete, spawning background dispatcher task
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Busy }
[2024-01-15T12:20:18 TRACE hyper::client::pool] checkout dropped for ("https", openapi.api.govee.com)
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] encode_headers;
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] -> encode_headers;
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] Client::encode method=POST, body=Some(Known(200))
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] <- encode_headers;
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] -- encode_headers;
[2024-01-15T12:20:18 TRACE hyper::proto::h1::encode] sized write, len = 200
[2024-01-15T12:20:18 TRACE hyper::proto::h1::io] buffer.flatten self.len=195 buf.len=200
[2024-01-15T12:20:18 DEBUG hyper::proto::h1::io] flushed 395 bytes
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: KeepAlive, keep_alive: Busy }
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] Conn::read_head
[2024-01-15T12:20:18 TRACE hyper::proto::h1::io] received 318 bytes
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] parse_headers;
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] -> parse_headers;
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] Response.parse bytes=318
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] Response.parse Complete(318)
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] <- parse_headers;
[2024-01-15T12:20:18 TRACE hyper::proto::h1::role] -- parse_headers;
[2024-01-15T12:20:18 DEBUG hyper::proto::h1::io] parsed 10 headers
[2024-01-15T12:20:18 DEBUG hyper::proto::h1::conn] incoming body is chunked encoding
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] decode; state=Chunked { state: Start, chunk_len: 0, extensions_cnt: 0 }
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Read chunk start
[2024-01-15T12:20:18 TRACE hyper::proto::h1::io] received 201 bytes
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Chunk size is 195
[2024-01-15T12:20:18 DEBUG hyper::proto::h1::decode] incoming chunked header: 0xC3 (195 bytes)
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Chunked read, remaining=195
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Body(Chunked { state: BodyCr, chunk_len: 0, extensions_cnt: 0 }), writing: KeepAlive, keep_alive: Busy }
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] decode; state=Chunked { state: BodyCr, chunk_len: 0, extensions_cnt: 0 }
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-15T12:20:18 TRACE hyper::proto::h1::io] received 5 bytes
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Read chunk hex size
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] Chunk size is 0
[2024-01-15T12:20:18 TRACE hyper::proto::h1::decode] end of chunked
[2024-01-15T12:20:18 DEBUG hyper::proto::h1::conn] incoming body completed
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] maybe_notify; read_from_io blocked
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle }
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle }
[2024-01-15T12:20:18 TRACE hyper::client::pool] pool dropped, dropping pooled (("https", openapi.api.govee.com))
[2024-01-15T12:20:18 TRACE hyper::proto::h1::dispatch] client tx closed
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] State::close_read()
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] State::close_write()
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] flushed({role=client}): State { reading: Closed, writing: Closed, keep_alive: Disabled }
[2024-01-15T12:20:18 TRACE hyper::proto::h1::conn] shut down IO complete
[2024-01-15T12:20:19 DEBUG mosquitto_rs::lowlevel] Client AP/9492568/eb4a532521b04e50ac4845a4358e85e6 received PUBLISH (d0, q0, r0, m0, 'GA/26b3505415863ed3c1b21c0305e265c3', ... (329 bytes))
[2024-01-15T12:20:19 TRACE govee::service::iot] GA/26b3505415863ed3c1b21c0305e265c3 -> {"proType":2,"sku":"H6176","device":"0F:AD:C2:39:32:33:4B:06","softVersion":"3.04.30","wifiSoftVersion":"2.05.08","wifiHardVersion":"1.02.00","cmd":"ptReal","type":1,"transaction":"oapi_1705317618434","pactType":1,"pactCode":1,"state":{"result":1},"op":{"command":["owIAAAAAAAAAAAAAAAAAAAAAAKE=","MwUAAAAAAAAAAAAAAAAAAAAAADY="]}}
[2024-01-15T12:20:19 DEBUG govee::service::iot] Packet { sku: Some("H6176"), device: Some("0F:AD:C2:39:32:33:4B:06"), cmd: Some("ptReal"), msg: None, state: StateUpdate { on_off: None, brightness: None, color: None, color_temperature_kelvin: None, sku: None, device: None }, op: Some(OpData { command: [Base64HexBytes([A3, 02, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A1]), Base64HexBytes([33, 05, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 36])], mode_value: [], sleep_value: [], wakeup_value: [], timer_value: [] }) }
[2024-01-15T12:20:19 DEBUG govee::service::iot] Decoded: Generic([A3, 02, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A1]) for H6176
[2024-01-15T12:20:19 DEBUG govee::service::iot] Decoded: Generic([33, 05, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 36]) for H6176
[2024-01-15T12:20:19 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-15T12:20:19 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-15T12:20:19 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-15T12:20:19 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/state -> Available
[2024-01-15T12:20:19 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m78, 'gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/state', ... (9 bytes))
[2024-01-15T12:20:19 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes -> {"http":null,"iot":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"AWS IoT API","updated":"2024-01-15T11:20:19.323990932Z"},"lan":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"LAN API","updated":"2024-01-15T11:19:59.687758269Z"},"overall":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"AWS IoT API","updated":"2024-01-15T11:20:19.323990932Z"},"platform_metadata":{"capabilities":[{"alarmType":null,"eventState":null,"instance":"powerSwitch","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.on_off"},{"alarmType":null,"eventState":null,"instance":"gradientToggle","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.toggle"},{"alarmType":null,"eventState":null,"instance":"brightness","parameters":{"dataType":"INTEGER","range":{"max":100,"min":1,"precision":1},"unit":"unit.percent"},"type":"devices.capabilities.range"},{"alarmType":null,"eventState":null,"instance":"segmentedBrightness","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"brightness","range":{"max":100,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"segmentedColorRgb","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"colorRgb","parameters":{"dataType":"INTEGER","range":{"max":16777215,"min":0,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"colorTemperatureK","parameters":{"dataType":"INTEGER","range":{"max":9000,"min":2000,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"lightScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"musicMode","parameters":{"dataType":"STRUCT","fields":[{"dataType":"ENUM","defaultValue":null,"fieldName":"musicMode","options":[{"name":"Energic","value":1},{"name":"Rhythm","value":2},{"name":"Spectrum","value":3},{"name":"Rolling","value":4},{"name":"Separation","value":5},{"name":"Hopping","value":6},{"name":"PianoKeys","value":7},{"name":"Fountain","value":8},{"name":"DayandNight","value":9},{"name":"Sprouting","value":10},{"name":"Shiny","value":11}],"required":true},{"dataType":"INTEGER","defaultValue":null,"fieldName":"sensitivity","range":{"max":100,"min":0,"precision":1},"required":true,"unit":"unit.percent"},{"dataType":"ENUM","defaultValue":null,"fieldName":"autoColor","options":[{"name":"on","value":1},{"name":"off","value":0}],"required":false},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":false,"unit":null}]},"type":"devices.capabilities.music_setting"},{"alarmType":null,"eventState":null,"instance":"diyScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"snapshot","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"}],"device":"0F:AD:C2:39:32:33:4B:06","deviceName":"H6176_4B06","sku":"H6176","type":"devices.types.light"},"platform_state":null}
[2024-01-15T12:20:19 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m79, 'gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes', ... (4106 bytes))
[2024-01-15T12:20:19 TRACE govee::hass_mqtt::light] LightConfig::notify_state: state is DeviceState { on: false, online: None, kelvin: 0, color: DeviceColor { r: 0, g: 255, b: 255 }, brightness: 1, scene: Some("Atlantis"), source: "AWS IoT API", updated: 2024-01-15T11:20:19.323990932Z }
[2024-01-15T12:20:19 TRACE govee::service::hass] gv2mqtt/light/0FADC23932334B06/state -> {"state":"OFF"}
[2024-01-15T12:20:19 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m80, 'gv2mqtt/light/0FADC23932334B06/state', ... (15 bytes))
[2024-01-15T12:20:19 TRACE govee::service::hass] gv2mqtt/switch/0FADC23932334B06/powerSwitch/state -> OFF
[2024-01-15T12:20:19 DEBUG mosquitto_rs::lowlevel] Client (null) sending PUBLISH (d0, q0, r0, m81, 'gv2mqtt/switch/0FADC23932334B06/powerSwitch/state', ... (3 bytes))
[2024-01-15T12:20:19 TRACE govee::hass_mqtt::switch] CapabilitySwitch::notify_state: didn't find state for H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176) gradientToggle

the last Warning disappeared

wez commented 7 months ago

Please adjust your debug log level; rather than using trace, use govee=trace, so that it is easier to see what is happening in the application.

Can you remind me what exactly you are trying and what isn't working? It's not obvious from the logs!

Chavife commented 7 months ago

Sorry if I was not descriptive enough in the "Describe the issue" section. What is not working is that the light is on (in real life) but the state of the light claims OFF after turning the light ON with an effect change.

Step by step repro:

  1. lights OFF (in real and state as well)
  2. call MQTT command {"state": "ON", "effect": "Atlantis"} on topic gv2mqtt/light/0FADC23932334B06/command
  3. the light turns ON (in real life)
  4. status of light stays OFF (everywhere e.g. HASS toggle as well as the status in MQTT message)

I tried this with my other light H6076 and it works without any issue, so the problem should be with H6176.

new logs with govee=trace. Hope the filtering helps, but all the below is present in previous logs as well.

[2024-01-16T09:39:25 INFO  govee::service::hass] Command for H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176): {
    "state": "ON",
    "effect": "Atlantis"
}
[2024-01-16T09:39:25 INFO  govee::service::state] Using Platform API to set H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176) to scene Atlantis
[2024-01-16T09:39:25 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-16T09:39:25 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-16T09:39:25 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-16T09:39:26 TRACE govee::service::iot] GA/26b3505415863ed3c1b21c0305e265c3 -> {"proType":2,"sku":"H6176","device":"0F:AD:C2:39:32:33:4B:06","softVersion":"3.04.30","wifiSoftVersion":"2.05.08","wifiHardVersion":"1.02.00","cmd":"ptReal","type":1,"transaction":"oapi_1705394365719","pactType":1,"pactCode":1,"state":{"result":1},"op":{"command":["owIAAAAAAAAAAAAAAAAAAAAAAKE=","MwUAAAAAAAAAAAAAAAAAAAAAADY="]}}
[2024-01-16T09:39:26 DEBUG govee::service::iot] Packet { sku: Some("H6176"), device: Some("0F:AD:C2:39:32:33:4B:06"), cmd: Some("ptReal"), msg: None, state: StateUpdate { on_off: None, brightness: None, color: None, color_temperature_kelvin: None, sku: None, device: None }, op: Some(OpData { command: [Base64HexBytes([A3, 02, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A1]), Base64HexBytes([33, 05, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 36])], mode_value: [], sleep_value: [], wakeup_value: [], timer_value: [] }) }
[2024-01-16T09:39:26 DEBUG govee::service::iot] Decoded: Generic([A3, 02, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A1]) for H6176
[2024-01-16T09:39:26 DEBUG govee::service::iot] Decoded: Generic([33, 05, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 36]) for H6176
[2024-01-16T09:39:26 TRACE govee::cache] cache hit for scene-list-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-16T09:39:26 TRACE govee::cache] cache hit for scene-list-diy-H6176-0F:AD:C2:39:32:33:4B:06
[2024-01-16T09:39:26 TRACE govee::cache] cache hit for scenes-H6176
[2024-01-16T09:39:26 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/state -> Available
[2024-01-16T09:39:26 TRACE govee::service::hass] gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes -> {"http":null,"iot":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"AWS IoT API","updated":"2024-01-16T08:39:26.627210501Z"},"lan":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"LAN API","updated":"2024-01-16T08:38:59.385691446Z"},"overall":{"brightness":1,"color":{"b":255,"g":255,"r":0},"kelvin":0,"on":false,"online":null,"scene":"Atlantis","source":"AWS IoT API","updated":"2024-01-16T08:39:26.627210501Z"},"platform_metadata":{"capabilities":[{"alarmType":null,"eventState":null,"instance":"powerSwitch","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.on_off"},{"alarmType":null,"eventState":null,"instance":"gradientToggle","parameters":{"dataType":"ENUM","options":[{"name":"on","value":1},{"name":"off","value":0}]},"type":"devices.capabilities.toggle"},{"alarmType":null,"eventState":null,"instance":"brightness","parameters":{"dataType":"INTEGER","range":{"max":100,"min":1,"precision":1},"unit":"unit.percent"},"type":"devices.capabilities.range"},{"alarmType":null,"eventState":null,"instance":"segmentedBrightness","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"brightness","range":{"max":100,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"segmentedColorRgb","parameters":{"dataType":"STRUCT","fields":[{"dataType":"Array","defaultValue":null,"elementRange":{"max":14,"min":0},"elementType":"INTEGER","fieldName":"segment","options":[],"required":true,"size":{"max":15,"min":1}},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":true,"unit":null}]},"type":"devices.capabilities.segment_color_setting"},{"alarmType":null,"eventState":null,"instance":"colorRgb","parameters":{"dataType":"INTEGER","range":{"max":16777215,"min":0,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"colorTemperatureK","parameters":{"dataType":"INTEGER","range":{"max":9000,"min":2000,"precision":1},"unit":null},"type":"devices.capabilities.color_setting"},{"alarmType":null,"eventState":null,"instance":"lightScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"musicMode","parameters":{"dataType":"STRUCT","fields":[{"dataType":"ENUM","defaultValue":null,"fieldName":"musicMode","options":[{"name":"Energic","value":1},{"name":"Rhythm","value":2},{"name":"Spectrum","value":3},{"name":"Rolling","value":4},{"name":"Separation","value":5},{"name":"Hopping","value":6},{"name":"PianoKeys","value":7},{"name":"Fountain","value":8},{"name":"DayandNight","value":9},{"name":"Sprouting","value":10},{"name":"Shiny","value":11}],"required":true},{"dataType":"INTEGER","defaultValue":null,"fieldName":"sensitivity","range":{"max":100,"min":0,"precision":1},"required":true,"unit":"unit.percent"},{"dataType":"ENUM","defaultValue":null,"fieldName":"autoColor","options":[{"name":"on","value":1},{"name":"off","value":0}],"required":false},{"dataType":"INTEGER","defaultValue":null,"fieldName":"rgb","range":{"max":16777215,"min":0,"precision":1},"required":false,"unit":null}]},"type":"devices.capabilities.music_setting"},{"alarmType":null,"eventState":null,"instance":"diyScene","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"},{"alarmType":null,"eventState":null,"instance":"snapshot","parameters":{"dataType":"ENUM","options":[]},"type":"devices.capabilities.dynamic_scene"}],"device":"0F:AD:C2:39:32:33:4B:06","deviceName":"H6176_4B06","sku":"H6176","type":"devices.types.light"},"platform_state":null}
[2024-01-16T09:39:26 TRACE govee::hass_mqtt::light] LightConfig::notify_state: state is DeviceState { on: false, online: None, kelvin: 0, color: DeviceColor { r: 0, g: 255, b: 255 }, brightness: 1, scene: Some("Atlantis"), source: "AWS IoT API", updated: 2024-01-16T08:39:26.627210501Z }
[2024-01-16T09:39:26 TRACE govee::service::hass] gv2mqtt/light/0FADC23932334B06/state -> {"state":"OFF"}
[2024-01-16T09:39:26 TRACE govee::service::hass] gv2mqtt/switch/0FADC23932334B06/powerSwitch/state -> OFF
[2024-01-16T09:39:26 TRACE govee::hass_mqtt::switch] CapabilitySwitch::notify_state: didn't find state for H6176_4B06 (0F:AD:C2:39:32:33:4B:06 H6176) gradientToggle

I guess from the logs you can see:

  1. the command that is being sent
  2. Using platform API to change the effect (and turn the light ON??)
  3. Receiving a weird message msg: None, state: StateUpdate { on_off: None ....... (I guess this is already parsed)
  4. last lines in the log publishing state of the light as OFF (the light is actually ON)
Chavife commented 7 months ago

I tried to record a video of what am I doing and that the status is showing OFF after turning the strip ON. Note that the light strip will turn ON after the command is published.

VIDEO

I can also see a new MQTT message after the command on topic gv2mqtt/sensor/sensor-0FADC23932334B06-gv2mqtt-status/attributes maybe could be useful

{
    "http": null,
    "iot": {
        "brightness": 1,
        "color": {
            "b": 255,
            "g": 255,
            "r": 0
        },
        "kelvin": 0,
        "on": false,
        "online": null,
        "scene": "Atlantis",
        "source": "AWS IoT API",
        "updated": "2024-01-16T11:17:40.726495678Z"
    },
    "lan": {
        "brightness": 1,
        "color": {
            "b": 255,
            "g": 255,
            "r": 0
        },
        "kelvin": 0,
        "on": false,
        "online": null,
        "scene": "Atlantis",
        "source": "LAN API",
        "updated": "2024-01-16T11:17:32.183292146Z"
    },
    "overall": {
        "brightness": 1,
        "color": {
            "b": 255,
            "g": 255,
            "r": 0
        },
        "kelvin": 0,
        "on": false,
        "online": null,
        "scene": "Atlantis",
        "source": "AWS IoT API",
        "updated": "2024-01-16T11:17:40.726495678Z"
    },
    "platform_metadata": {
        "capabilities": [
            {
                "alarmType": null,
                "eventState": null,
                "instance": "powerSwitch",
                "parameters": {
                    "dataType": "ENUM",
                    "options": [
                        {
                            "name": "on",
                            "value": 1
                        },
                        {
                            "name": "off",
                            "value": 0
                        }
                    ]
                },
                "type": "devices.capabilities.on_off"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "gradientToggle",
                "parameters": {
                    "dataType": "ENUM",
                    "options": [
                        {
                            "name": "on",
                            "value": 1
                        },
                        {
                            "name": "off",
                            "value": 0
                        }
                    ]
                },
                "type": "devices.capabilities.toggle"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "brightness",
                "parameters": {
                    "dataType": "INTEGER",
                    "range": {
                        "max": 100,
                        "min": 1,
                        "precision": 1
                    },
                    "unit": "unit.percent"
                },
                "type": "devices.capabilities.range"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "segmentedBrightness",
                "parameters": {
                    "dataType": "STRUCT",
                    "fields": [
                        {
                            "dataType": "Array",
                            "defaultValue": null,
                            "elementRange": {
                                "max": 14,
                                "min": 0
                            },
                            "elementType": "INTEGER",
                            "fieldName": "segment",
                            "options": [],
                            "required": true,
                            "size": {
                                "max": 15,
                                "min": 1
                            }
                        },
                        {
                            "dataType": "INTEGER",
                            "defaultValue": null,
                            "fieldName": "brightness",
                            "range": {
                                "max": 100,
                                "min": 0,
                                "precision": 1
                            },
                            "required": true,
                            "unit": null
                        }
                    ]
                },
                "type": "devices.capabilities.segment_color_setting"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "segmentedColorRgb",
                "parameters": {
                    "dataType": "STRUCT",
                    "fields": [
                        {
                            "dataType": "Array",
                            "defaultValue": null,
                            "elementRange": {
                                "max": 14,
                                "min": 0
                            },
                            "elementType": "INTEGER",
                            "fieldName": "segment",
                            "options": [],
                            "required": true,
                            "size": {
                                "max": 15,
                                "min": 1
                            }
                        },
                        {
                            "dataType": "INTEGER",
                            "defaultValue": null,
                            "fieldName": "rgb",
                            "range": {
                                "max": 16777215,
                                "min": 0,
                                "precision": 1
                            },
                            "required": true,
                            "unit": null
                        }
                    ]
                },
                "type": "devices.capabilities.segment_color_setting"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "colorRgb",
                "parameters": {
                    "dataType": "INTEGER",
                    "range": {
                        "max": 16777215,
                        "min": 0,
                        "precision": 1
                    },
                    "unit": null
                },
                "type": "devices.capabilities.color_setting"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "colorTemperatureK",
                "parameters": {
                    "dataType": "INTEGER",
                    "range": {
                        "max": 9000,
                        "min": 2000,
                        "precision": 1
                    },
                    "unit": null
                },
                "type": "devices.capabilities.color_setting"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "lightScene",
                "parameters": {
                    "dataType": "ENUM",
                    "options": []
                },
                "type": "devices.capabilities.dynamic_scene"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "musicMode",
                "parameters": {
                    "dataType": "STRUCT",
                    "fields": [
                        {
                            "dataType": "ENUM",
                            "defaultValue": null,
                            "fieldName": "musicMode",
                            "options": [
                                {
                                    "name": "Energic",
                                    "value": 1
                                },
                                {
                                    "name": "Rhythm",
                                    "value": 2
                                },
                                {
                                    "name": "Spectrum",
                                    "value": 3
                                },
                                {
                                    "name": "Rolling",
                                    "value": 4
                                },
                                {
                                    "name": "Separation",
                                    "value": 5
                                },
                                {
                                    "name": "Hopping",
                                    "value": 6
                                },
                                {
                                    "name": "PianoKeys",
                                    "value": 7
                                },
                                {
                                    "name": "Fountain",
                                    "value": 8
                                },
                                {
                                    "name": "DayandNight",
                                    "value": 9
                                },
                                {
                                    "name": "Sprouting",
                                    "value": 10
                                },
                                {
                                    "name": "Shiny",
                                    "value": 11
                                }
                            ],
                            "required": true
                        },
                        {
                            "dataType": "INTEGER",
                            "defaultValue": null,
                            "fieldName": "sensitivity",
                            "range": {
                                "max": 100,
                                "min": 0,
                                "precision": 1
                            },
                            "required": true,
                            "unit": "unit.percent"
                        },
                        {
                            "dataType": "ENUM",
                            "defaultValue": null,
                            "fieldName": "autoColor",
                            "options": [
                                {
                                    "name": "on",
                                    "value": 1
                                },
                                {
                                    "name": "off",
                                    "value": 0
                                }
                            ],
                            "required": false
                        },
                        {
                            "dataType": "INTEGER",
                            "defaultValue": null,
                            "fieldName": "rgb",
                            "range": {
                                "max": 16777215,
                                "min": 0,
                                "precision": 1
                            },
                            "required": false,
                            "unit": null
                        }
                    ]
                },
                "type": "devices.capabilities.music_setting"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "diyScene",
                "parameters": {
                    "dataType": "ENUM",
                    "options": []
                },
                "type": "devices.capabilities.dynamic_scene"
            },
            {
                "alarmType": null,
                "eventState": null,
                "instance": "snapshot",
                "parameters": {
                    "dataType": "ENUM",
                    "options": []
                },
                "type": "devices.capabilities.dynamic_scene"
            }
        ],
        "device": "0F:AD:C2:39:32:33:4B:06",
        "deviceName": "H6176_4B06",
        "sku": "H6176",
        "type": "devices.types.light"
    },
    "platform_state": null
}
Chavife commented 7 months ago

New information: when I publish a command with brightness specified as well, the state updates correctly to ON.

{
    "brightness": 10,
    "state": "ON",
    "effect": "Atlantis"
}
wez commented 7 months ago

Thanks for spelling things out. So I think the current state of things is this:

Chavife commented 7 months ago

just tried out

Therefore the state may report incorrectly until you click on the "Request Platform API State" diagnostic button

and interestingly it doesn't help: The API returns an OFF state, So I guess there is a bug in the firmware of the light itself?

Well, now that I know it can be hacked by providing "brightness" as well, I am not blocked anymore for my automation plan.

wez commented 7 months ago

Oh, it seems like that is a bug to report to Govee then!