Two details save time: a target temperature outside the device's configured range is rejected rather than silently clamped, so you find out immediately, and set_xfan and set_light only work on devices where you enabled them in the config — the surface reflects what the hardware actually has.
A server that speaks the GREE units' native UDP protocol directly on the LAN. It binds each configured unit, polls its state continuously, and exposes read and write tools per device.
- list_devices — every configured unit with online and bound status and its last-known mode and temperature
- get_device_status and get_room_temperature — full decoded state, and calibrated current temperature
- set_power, set_mode (auto, cool, dry, fan, heat) and set_target_temperature
- set_fan_speed across auto, quiet, low, medium-low, medium, medium-high, high and turbo, mapped down on 3-speed units
- set_oscillation, set_xfan, set_light, set_quiet_mode and set_turbo_mode
- Both encryption schemes auto-detected per device, and IP discovery by MAC when no address is configured
Node.js 20 or newer, and the units on the same LAN as the server — it talks UDP to port 7000. A config file listing each device by MAC is required; in HTTP mode a bearerToken is required too, and is ignored over stdio. The server must be restarted to pick up config changes.
