Govee Smart

Control Govee WiFi devices via LAN, MQTT and Cloud API.

Current Release
3.2.1
Developer
krobi
License
MIT

Controls Govee Wi-Fi devices from ioBroker: light strips, bulbs and panels, thermometers, hygrometers and air quality monitors, smart plugs, battery buttons and remotes, and appliances such as heaters, humidifiers, aroma diffusers, kettles, ice makers, fans and air purifiers.

The adapter talks to your devices locally whenever it can. A light with the local API enabled answers on your own network in milliseconds, and the cloud is never allowed to overwrite what the device just said locally. The cloud fills in what only it knows — device names, capabilities, scenes and snapshots — and takes over control for devices that have no local API at all.

What you get for what you enter

Everything is optional: with nothing entered, the lights on your network are found and switched locally; a free Govee API key adds names, capabilities, scenes, snapshots and segments; your Govee account adds real-time status — what each step brings in detail is on the wiki page Setup.

The local API has to be switched on per device, in the Govee Home app (device settings → LAN Control). Without it, that device is controlled through the cloud — which works, but takes a few seconds per command and is rate-limited by Govee.

Setting it up

  1. Install the adapter and create an instance.
  2. Open the instance settings. The Connection card walks you through the three tiers above and tells you what is working and what is not — including a login test that really logs in rather than just checking the form.
  3. If Govee asks for a verification code (it does that for a new client), the card asks you for it. Nothing else is needed; the adapter remembers the login across restarts so no further codes are sent.
  4. Devices appear under devices.<model>-<id> — the model and the last four characters of the device's own ID, for example devices.h61be-525f. Should two devices of one model end in the same four characters, the second one gets its whole ID. Groups you created in the Govee app appear under groups..

Updating from 2.x

Version 3.0.0 gives every device a new object ID once: devices.h61be_525f becomes devices.h61be-525f, with a hyphen like the other device adapters of this developer. The move happens by itself at the first start: values, recording settings, rooms, functions and aliases move along, and recorded history continues in its old series. Scripts and visualizations that use the old IDs must be updated.

Reporting a problem

Open the adapter's Expert tab, press Diagnostics, pick the device and press the button: the adapter builds a report and your browser saves it as a file. Attach that file to a GitHub issue — the device-support form asks for exactly this file.

The device list offers every device, reachable or not — a report is wanted precisely when something misbehaves. A report writes no datapoint.

The report is pseudonymised: IP addresses, mail addresses, device names, your own snapshot and DIY names and hardware ids are replaced by stable markers, and credentials never appear at all. The same real value always maps to the same marker inside one file, so the report stays followable without carrying anything about your home.

A report is what lets a device be added or a bug found without anyone needing your hardware. If it does not contain enough to do that, the report is at fault, not you — please say so in the issue.

Where to read more

The wiki has the detail, in English and German:

  • Setup — the three tiers, the local API, verification codes, what to do when a channel stays off
  • Behavior — which channel handles what, how reachability is decided, what happens when the cloud is down
  • State tree — every datapoint, what writes it and what you may write yourself
  • Scenes and snapshots — scenes, DIY scenes, cloud snapshots and locally saved snapshots
  • Segments — segment control, the detection wizard, cut strips and manual segment lists
  • Groups — how Govee app groups behave here
  • Sensors and appliances — readings, events and what the cloud limits mean
  • Devices — every supported model, generated from the adapter's own catalogue

→ https://github.com/krobipd/ioBroker.govee-smart/wiki

Device not listed?

Send a diagnostics report and the model gets added. That is what the report exists for — the catalogue grows from user reports, and no hardware needs to change hands.

Changelog

WORK IN PROGRESS

  • Fixed: the diagnostics report contains the object tree again
  • Improved: the diagnostics report names the source of a device's reachability and segment count
  • Fixed: the colour temperature no longer keeps its old value while the light shows a colour, and the colour no longer shows Govee's placeholder in colour-temperature mode
  • New: a colour temperature set in the Govee app as a white colour also shows as colour temperature
  • Fixed: local snapshots and the segment wizard restore a colour as a colour and a colour temperature as a colour temperature
  • Fixed: a device renamed in the Govee app also shows its new name after a restart
  • Fixed: a device's IP address is no longer emptied when the adapter starts before it finds the device on the network again
  • Fixed: after a rate-limit answer from Govee, no further call goes to that server until the wait Govee asks for has passed
  • Improved: the adapter settings page loads about 8 MB less and opens faster
  • Changed: needs js-controller 7.2.5 and Admin 8.2.0

3.2.1 (2026-10-15)

  • Fixed: the H1771 table lamp no longer offers a DreamView switch that Govee refuses for this model

3.2.0 (2026-10-15)

  • New: lights without a local connection switch through your Govee account, faster than through the Cloud
  • Changed: a command shows as confirmed only when it really reached the device
  • Changed: a group command shows as confirmed only when every light of the group took it
  • New: a diagnostics report for each device in the Expert tab, with your personal data replaced by placeholders
  • Changed: the datapoint diag.lastExport is removed from every device
  • Improved: a device that does not answer no longer holds up the others
  • Fixed: a device reached only through the Cloud shows offline while the Cloud is not connected
  • Fixed: a heater's target temperature is shown and set in °C, also on models that work in °F
  • Fixed: the refresh button of a light is confirmed only when Govee answered
  • Changed: an untested model asks for a diagnostics report and never claims that it works
  • New: seven models added as untested: Smart Gateway 1s (H5044, R5044), Wi-Fi Gateway (H5151), Smart Light (H610E, H610F), Outdoor String Lights 2 (H7030), Smart Fan (H7108)
  • Improved: an outage of a Govee service is shown as a status instead of a stream of warnings
  • Fixed: the network address chosen in the settings now applies to every connection to Govee

3.1.1 (2026-10-01)

  • Fixed: a cloud command that fails because the Govee server name cannot be resolved is sent again within 10 seconds instead of being lost after one try
  • Fixed: after a failed command the light's real state is read back right away, so its datapoint no longer stays on the wrong value — also without a Govee account
  • Fixed: calls that never reached Govee (DNS or connection errors) no longer use up the daily budget, so an appliance is not blocked for the rest of the day
  • Fixed: a group command that only some of its lights took now names the lights that did not switch and why, so a dark light no longer goes unnoticed
  • Improved: connection errors in the log are written in plain words, e.g. that the Govee server name could not be resolved and the DNS is the likely cause

3.1.0 (2026-10-01)

  • Fixed: a rejected background token refresh of the Govee account now counts toward the login protection and asks to check email/password instead of retrying silently
  • Fixed: "Test login" in the connection card counts toward the account's login limit (3 per hour) and says when the next test is possible
  • Fixed: segment colours and brightness are confirmed only after the command went out — a refused Cloud command no longer leaves them acked
  • Fixed: stopping the adapter while it is still starting really stops it — it no longer goes on to search the network or log in to your Govee account afterwards
  • Fixed: a light found on the network before the saved data loads keeps its scene speed and remembered libraries after a restart
  • Fixed: a group offers only the colour temperatures every member supports, so no member is sent a value outside its range
  • Fixed: when Govee no longer accepts the account session, scene, music and DIY libraries, snapshots and groups ask for a fresh login instead of reading as empty
  • Fixed: a Cloud rate limit or rejected API key is reported once, with the real waiting time — no longer three times or with a wrong retry hint
  • Fixed: moving a 2.x device tree to its new id no longer loses recordings or room assignments when the move fails or is interrupted
  • Fixed: a light whose scene library has not loaded yet keeps its scenes.scene_speed datapoint, value and recording — a start without saved data deleted and re-created it
  • Improved: a restart leaves the object tree untouched when nothing changed, so scripts and history that watch object changes no longer see needless updates
  • Fixed: a mode or level dropdown only takes a value the device declares — a fan speed no longer shows 50, an air purifier's level no longer 0 in Auto mode
  • Fixed: the manual device sync after a failed start shows the Cloud connected and stops the pending retry; a device it adds gets its first values without a log warning
  • Fixed: a Govee e-mail or password of spaces only counts as not entered — at start, in the sensor hint and in the connection card's test
  • Fixed: the refresh button of a light keeps its scene list across restarts and corrects a wrong segment count; devices that are not lights no longer use up Cloud calls
  • Fixed: a temperature reading carries °C whichever way it arrives — a model that declares Fahrenheit no longer flips the unit to °F (the value is always °C)
  • Fixed: a segment colour above 255 is sent as 255 — it wrapped to 0 before; a segment brightness is rounded like the light's brightness
  • Improved: a lamp that is unplugged or unreachable on your network leaves one warning in the log instead of a new warning for every command you send to it
  • Fixed: a group that is switched off or set to a colour clears its scene and music dropdowns the same way a single light already does
  • Fixed: a heater that declares no temperature unit shows none instead of an invented °F; a command delivered after the device came back shows the value that was sent
  • Fixed: an untested model without catalog corrections no longer warns to turn on the experimental switch — it works as it is; the log only asks for a diagnostics report
  • Fixed: the settings describe the experimental switch for what it does — it turns on the catalog corrections of untested models; every device appears without it
  • Improved: after you press the device sync or the refresh button, the log tells you what it found, for example which new devices were added to the object tree
  • Fixed: the connection card words every answer in the admin's language — a full login window shows the time on your own clock, and a repeated login test no longer claims a code was just requested
  • Fixed: the music mode read from Govee's state answer showed the mode at that position instead of the reported one; a mode the device never declared is no longer written
  • Fixed: the segment detection wizard no longer counts a dark segment at the end when the measurement runs all the way to the longest strip Govee supports
  • Improved: appliance modes and levels and the device type show readable names in your ioBroker language; scripts may still write the names Govee uses, such as Auto

3.0.1 (2026-09-27)

  • Improved: the note the Admin shows before an update to 3.x is short now: the warning, one example old → new and a link to the details

License

MIT License

Copyright (c) 2026 krobi krobi@power-dreams.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Developed with assistance from Claude.ai