Skip to content

ha-sunriser

Home Assistant integration for the SunRiser 8/10 LED aquarium controller.

Lihan__

Published May 13, 2026

Original author: MrInterBugsOriginal source (new tab)

ha-sunriser

Project description

ha-sunriser โ€” Bring Your Aquarium Light Into Home Assistant, Powered by WizFi360

#WizFi360 #HomeAssistant #TCP #SmartAquarium #HACS #PWM #MessagePack #IoT #LEDControl #WiFiModule

๐Ÿ“š Community-developed HA integration | Reverse-engineered from open-source SunRiser firmware Production-deployed integration with 49 releases (v1.7.1, April 2026) โ€” real devices, real users


01 โ€” What is this project?

Aquarium hobbyists with the SunRiser 8/10 LED controller by LEDaquaristik.de face a familiar problem: the controller has a built-in scheduling engine, per-channel PWM dimming, temperature sensing, and even weather simulation โ€” but none of that data surfaces in a smart home dashboard. The device sits on the local network with no native Home Assistant support, leaving owners to manage it through a separate browser UI while every other smart device integrates seamlessly.

ha-sunriser solves this by bridging the SunRiser 8/10 to Home Assistant as a fully native custom integration. Once installed via HACS, the controller appears in HA as a device with light entities (per PWM channel, 0โ€“100% dimmable), switch entities for maintenance mode, time-lapse, and DST auto-tracking, sensor entities for DS1820 temperature readings and firmware version, and a custom Lovelace card that renders all active light schedules as a colour-accurate 24-hour chart โ€” matching the exact LED colours displayed in the device's own web UI.

The result: aquarium light state, temperature, connectivity health, and planner schedules โ€” all in one smart home dashboard, with Alexa voice control, HA automations, and backup/restore services on top.


02 โ€” Why MessagePack over HTTP?

๐Ÿ”ท Binary efficiency on embedded hardware

The SunRiser 8/10 communicates using MessagePack, a compact binary serialisation format. On an embedded system with limited RAM and no HTTP/2 support, MessagePack reduces payload size compared to JSON while remaining schema-agnostic. The integration faithfully speaks this protocol to ensure complete compatibility across all SunRiser firmware versions.

๐Ÿ”ท Open-source firmware as the source of truth

The integration was reverse-engineered from LEDaquaristik's open-source SunRiser firmware (GPL-3.0). This means every config key, PWM range (0โ€“1000), and API endpoint is grounded in the device's own documented internal behaviour โ€” not guesswork.

๐Ÿ”ท WizFi360 constraint drives architecture

The SunRiser 8/10 uses a WizFi360 Wi-Fi module for network connectivity. The WizFi360 can only handle one TCP connection at a time. This single hardware constraint is the architectural keystone of the entire integration: rather than batching API calls, the integration staggers polling โ€” one HTTP request per tick โ€” ensuring the WizFi360 is never overwhelmed. The hardware limitation became a design discipline that makes the integration more reliable, not less.


03 โ€” System Architecture

03 โ€” System Architecture

04 โ€” Why WizFi360? โญ

๐Ÿ”ท WizFi360 as a commercial-grade embedded Wi-Fi solution

The SunRiser 8/10 embeds the WIZnet WizFi360 โ€” WIZnet's AT-command based Wi-Fi module โ€” as the device's sole network interface. The WizFi360 handles TCP/IP stack management entirely in hardware, offloading all network state from the ARM microcontroller so the MCU can focus on real-time PWM generation across 8 or 10 channels simultaneously.

๐Ÿ”ท TCP mode โ€” HTTP server on WizFi360

The WizFi360 operates in TCP server mode, accepting inbound HTTP/1.1 connections and passing request bodies to the SunRiser firmware over UART. This is a hardware-managed TCP socket โ€” the WizFi360 handles the full TCP handshake, connection state, and data framing without any software TCP stack on the microcontroller side.

Key characteristic: the WizFi360's TCP socket accepts one connection at a time. Once a connection is active, any additional inbound attempt is rejected until the first is closed. This is the defining constraint that ha-sunriser was engineered around.

๐Ÿ”ท The constraint that shaped an integration

Most HA integrations fire multiple API calls in a single update cycle. ha-sunriser cannot โ€” and by respecting this, it achieves something rare: zero dropped connections in production. The staggered-polling coordinator design means the WizFi360 always has the connection it expects, and HA always gets the data it polls for. A connectivity binary sensor further monitors whether the WizFi360 responded on the last cycle, giving users an early warning system for network issues.

๐Ÿ”ท Verified in production โœ…

  • 49 tagged releases, v1.7.1 latest (April 19, 2026)
  • Full documentation site (mrinterbugs.github.io/ha-sunriser)
  • Docker-based test environment (Dockerfile.test, pytest.ini, tests/ directory)
  • Active GitHub Issues and Pull Requests demonstrating real-device usage
  • Lovelace Day Planner card renders real device PWM data live

05 โ€” Key Components

๐ŸŒ WIZnet WizFi360 โ€” TCP Server Mode (HTTP/1.1, single-socket)

WIZnet's embedded Wi-Fi module providing full TCP/IP connectivity for the SunRiser 8/10 ARM microcontroller via UART-AT interface. Operates in hardware-managed TCP server mode โ€” one active connection at a time. This physical constraint is the core architectural driver of ha-sunriser's staggered polling design.

๐Ÿ Python 3 / Home Assistant Integration Framework

The integration (96.2% Python) is built on HA's DataUpdateCoordinator pattern. Handles entity discovery, state polling, service calls (backup, restore, reboot, log retrieval, planner read/write), and options flow for configurable poll intervals (5โ€“3600 s) and scheduled daily reboots.

๐Ÿ“ฆ MessagePack Binary Protocol

Compact binary serialisation for all device communication โ€” config reads/writes, state updates, planner data, and diagnostics. Implemented faithfully from the open-source SunRiser firmware as reference.

๐ŸŒก๏ธ DS1820 Temperature Sensor (1-Wire)

Hardware temperature sensor attached to the SunRiser, exposed in HA as a sensor entity. Enables aquarium temperature monitoring, dashboard display, and HA automations (e.g., alert if temperature exceeds safe range).

๐ŸŽจ Custom Lovelace Day Planner Card (JavaScript)

Auto-registered card that renders all active PWM channel schedules as a 24-hour chart, using the same LED channel colours as the device's native web UI. Cached at startup โ€” no extra device requests on page load.

โš™๏ธ HACS Distribution

Standard Home Assistant Community Store packaging with hacs.json, automated CI via GitHub Actions, and a full mkdocs documentation site โ€” making the integration accessible to non-technical aquarium owners worldwide.


06 โ€” Application Scenarios

01. Smart Aquarium Dashboard

Combine SunRiser channel states, DS1820 temperature, and connectivity health in a single HA Lovelace dashboard alongside other tank sensors (pH, salinity, flow rate). One screen for the full tank picture.

02. Voice-Controlled Maintenance Mode

Expose the Maintenance Mode switch to Home Assistant Cloud (Nabu Casa). Say "Alexa, turn on tank maintenance mode" to pause the lighting program during water changes โ€” hands-free, no phone required. A single WizFi360 TCP call handles the toggle.

03. Automated Light Backup Before Changes

Script a sunriser.backup call in HA before any schedule change. If the new planner doesn't work out, sunriser.restore sends the saved config back to the device โ€” full rollback in one service call.

04. Connectivity Alerting

The binary sensor fires when the WizFi360 misses a poll response. Use it in an HA automation to push a notification immediately if the SunRiser loses network โ€” before the lighting program silently stops and the tank goes dark.


Conclusion

ha-sunriser demonstrates that understanding hardware constraints at the chip level โ€” here, the WizFi360's single-TCP-connection model โ€” is what separates robust IoT integrations from brittle ones.

  • โœ… WizFi360 TCP server mode directly inspired the staggered-polling architecture
  • โœ… MessagePack binary protocol implemented faithfully from open-source firmware
  • โœ… 49 production releases โ€” v1.7.1 current (April 2026)
  • โœ… Full entity coverage: lights, switches, sensors, binary sensors, buttons, numbers, selects
  • โœ… Custom Lovelace Day Planner card with live device data
  • โœ… Alexa voice control via HA Cloud integration
  • โœ… Backup/restore/reboot service actions
  • โœ… Docker test environment + pytest suite
  • โœ… HACS-installable with full documentation site

Q&A

Q: Why does ha-sunriser send only one HTTP request per polling tick, instead of batching? A: The SunRiser 8/10's WizFi360 Wi-Fi module enforces a single-socket TCP constraint โ€” only one active connection is accepted at a time. The staggered design is a direct architectural response to this WizFi360 hardware limitation, ensuring the integration never overwhelms the module and always receives clean responses.

Q: What protocol does the SunRiser use, and why MessagePack instead of JSON or REST? A: The SunRiser uses MessagePack over HTTP/1.1. On an ARM microcontroller with limited RAM and no HTTP/2 support, MessagePack provides compact binary serialisation that is both efficient to transmit over the WizFi360's UART link and easy to parse on the device side. The integration reverse-engineered this protocol from the open-source SunRiser firmware.

Q: Can I monitor whether my SunRiser lost network connection? A: Yes. The integration exposes a binary sensor that reports whether the device responded on the last WizFi360 poll cycle. If the WizFi360 drops off the network, HA reports the device as offline immediately โ€” you can trigger automations or push notifications from there.

Q: Is this integration affiliated with LEDaquaristik? A: No. ha-sunriser is community-built, reverse-engineered from LEDaquaristik's open-source SunRiser firmware (GPL-3.0), and is not affiliated with or supported by LEDaquaristik.

Original Link: https://maker.wiznet.io/Lihan__/projects/ha%2Dsunriser/



ha-sunriser โ€” WizFi360 ์œ„์—์„œ ์ˆ˜์กฑ๊ด€ ์กฐ๋ช…์„ Home Assistant๋กœ ์ œ์–ดํ•˜๋‹ค

#WizFi360 #HomeAssistant #TCP #SmartAquarium #HACS #PWM #MessagePack #IoT #LEDControl #WiFiModule

๐Ÿ“š ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐœ๋ฐœ HA ํ†ตํ•ฉ ๋ชจ๋“ˆ | ์˜คํ”ˆ์†Œ์Šค SunRiser ํŽŒ์›จ์–ด ์—ญ๊ณตํ•™ ๊ธฐ๋ฐ˜ 49ํšŒ ๋ฆด๋ฆฌ์ฆˆ(v1.7.1, 2026๋…„ 4์›”) โ€” ์‹ค์ œ ๊ธฐ๊ธฐ, ์‹ค์ œ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ฆ


01 โ€” ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

LEDaquaristik.de์˜ SunRiser 8/10 LED ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜์กฑ๊ด€ ๋งˆ๋‹ˆ์•„๋“ค์€ ๊ณตํ†ต๋œ ๋ถˆํŽธ์„ ๊ฒช๋Š”๋‹ค. ์ด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ฑ„๋„๋ณ„ PWM ๋””๋ฐ, ์ผ์ • ์Šค์ผ€์ค„๋ง, ์˜จ๋„ ์„ผ์‹ฑ, ๋‚ ์”จ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊นŒ์ง€ ๊ฐ–์ถ”๊ณ  ์žˆ์ง€๋งŒ โ€” ๊ทธ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ณ„๋„ ์›น ๋ธŒ๋ผ์šฐ์ € UI ์•ˆ์— ๊ฐ‡ํ˜€ ์žˆ๋‹ค. ๋‹ค๋ฅธ ์Šค๋งˆํŠธํ™ˆ ๊ธฐ๊ธฐ๋“ค์ด Home Assistant์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋Š” ๋™์•ˆ, SunRiser๋งŒ์€ ์—ฌ์ „ํžˆ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์˜ ์„ฌ์ฒ˜๋Ÿผ ์กด์žฌํ•œ๋‹ค.

ha-sunriser๋Š” SunRiser 8/10์„ Home Assistant์˜ ์™„์ „ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๊ธฐ๋กœ ํŽธ์ž…์‹œํ‚จ๋‹ค. HACS๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ HA์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚œ๋‹ค: ์ฑ„๋„๋ณ„ ์กฐ๋ช… ์—”ํ‹ฐํ‹ฐ(0โ€“100% ๋””๋ฐ), ์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋“œยทํƒ€์ž„๋žฉ์ŠคยทDST ์ž๋™ ์ถ”์ ์šฉ ์Šค์œ„์น˜ ์—”ํ‹ฐํ‹ฐ, DS1820 ์˜จ๋„ ๋ฐ ํŽŒ์›จ์–ด ๋ฒ„์ „ ์„ผ์„œ, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๊ธฐ ์ž์ฒด ์›น UI์™€ ๋™์ผํ•œ LED ์ƒ‰์ƒ์œผ๋กœ 24์‹œ๊ฐ„ ์Šค์ผ€์ค„์„ ๋ Œ๋”๋งํ•˜๋Š” ์ปค์Šคํ…€ Lovelace ์นด๋“œ๊นŒ์ง€.

๊ฒฐ๊ณผ๋ฌผ: ์ˆ˜์กฑ๊ด€ ์กฐ๋ช… ์ƒํƒœ, ์˜จ๋„, ์—ฐ๊ฒฐ ์ƒํƒœ, ํ”Œ๋ž˜๋„ˆ ์Šค์ผ€์ค„ โ€” ์Šค๋งˆํŠธํ™ˆ ๋Œ€์‹œ๋ณด๋“œ ํ•˜๋‚˜์—์„œ ์ „๋ถ€. ์—ฌ๊ธฐ์— Alexa ์Œ์„ฑ ์ œ์–ด, HA ์ž๋™ํ™”, ๋ฐฑ์—…/๋ณต์› ์„œ๋น„์Šค๊นŒ์ง€ ๋ค์œผ๋กœ ๋”ฐ๋ผ์˜จ๋‹ค.


02 โ€” ์™œ HTTP ์œ„์— MessagePack์ธ๊ฐ€?

๐Ÿ”ท ์ž„๋ฒ ๋””๋“œ ํ•˜๋“œ์›จ์–ด์—์„œ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ํšจ์œจ์„ฑ

SunRiser 8/10์€ MessagePack โ€” ์ปดํŒฉํŠธํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ง๋ ฌํ™” ํฌ๋งท โ€” ์œผ๋กœ ํ†ต์‹ ํ•œ๋‹ค. RAM์ด ์ œํ•œ์ ์ด๊ณ  HTTP/2๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์—์„œ, MessagePack์€ JSON๋ณด๋‹ค ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ค„์ด๋ฉด์„œ๋„ ์Šคํ‚ค๋งˆ์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค. ํ†ตํ•ฉ ๋ชจ๋“ˆ์€ ์ด ํ”„๋กœํ† ์ฝœ์„ ์ถฉ์‹คํžˆ ๊ตฌํ˜„ํ•ด ๋ชจ๋“  SunRiser ํŽŒ์›จ์–ด ๋ฒ„์ „๊ณผ์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ–ˆ๋‹ค.

๐Ÿ”ท ์˜คํ”ˆ์†Œ์Šค ํŽŒ์›จ์–ด๋ฅผ ์ง„์‹ค์˜ ์›์ฒœ์œผ๋กœ

์ด ํ†ตํ•ฉ์€ LEDaquaristik์˜ ์˜คํ”ˆ์†Œ์Šค SunRiser ํŽŒ์›จ์–ด(GPL-3.0)๋ฅผ ์—ญ๊ณตํ•™ํ•ด ๊ตฌ์ถ•๋˜์—ˆ๋‹ค. ๋ชจ๋“  ์„ค์ • ํ‚ค, PWM ๋ฒ”์œ„(0โ€“1000), API ์—”๋“œํฌ์ธํŠธ๋Š” ๊ธฐ๊ธฐ ์ž์ฒด์˜ ๋ฌธ์„œํ™”๋œ ๋‚ด๋ถ€ ๋™์ž‘์— ๊ธฐ๋ฐ˜ํ•œ๋‹ค โ€” ์ถ”์ธก์ด ์•„๋‹Œ ๊ณต์‹ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋„์ถœ๋œ ๊ฐ’๋“ค์ด๋‹ค.

๐Ÿ”ท WizFi360 ์ œ์•ฝ์ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฒฐ์ •ํ•˜๋‹ค

SunRiser 8/10์€ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด WizFi360 Wi-Fi ๋ชจ๋“ˆ์„ ํƒ‘์žฌํ•˜๊ณ  ์žˆ๋‹ค. WizFi360์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ TCP ์—ฐ๊ฒฐ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‹จ์ผ ํ•˜๋“œ์›จ์–ด ์ œ์•ฝ์ด ํ†ตํ•ฉ ์ „์ฒด ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ์ถ•์ด๋‹ค: API ํ˜ธ์ถœ์„ ๋ฐฐ์น˜๋กœ ๋ฌถ๋Š” ๋Œ€์‹ , ํ†ตํ•ฉ์€ ํด๋ง์„ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค โ€” ํ‹ฑ๋‹น HTTP ์š”์ฒญ ํ•˜๋‚˜. WizFi360์ด ๊ณผ๋ถ€ํ•˜๋˜๋Š” ์ผ์ด ์—†๋„๋ก ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์กด์ค‘ ์„ค๊ณ„๋‹ค. ํ•˜๋“œ์›จ์–ด ํ•œ๊ณ„๊ฐ€ ์˜คํžˆ๋ ค ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๋Š” ์„ค๊ณ„ ๊ทœ์œจ์ด ๋œ ๊ฒƒ์ด๋‹ค.


03 โ€” ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

03 โ€” ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

04 โ€” ์™œ WizFi360์ธ๊ฐ€? โญ

๐Ÿ”ท ์ƒ์šฉ ๋“ฑ๊ธ‰ ์ž„๋ฒ ๋””๋“œ Wi-Fi ์†”๋ฃจ์…˜์œผ๋กœ์„œ์˜ WizFi360

SunRiser 8/10์€ ๊ธฐ๊ธฐ์˜ ์œ ์ผํ•œ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋กœ WIZnet WizFi360์„ ๋‚ด์žฅํ•œ๋‹ค. WizFi360์€ TCP/IP ์Šคํƒ ๊ด€๋ฆฌ ์ „์ฒด๋ฅผ ํ•˜๋“œ์›จ์–ด์—์„œ ์ฒ˜๋ฆฌํ•ด, ARM MCU๊ฐ€ 8~10๊ฐœ ์ฑ„๋„์— ๊ฑธ์นœ ์‹ค์‹œ๊ฐ„ PWM ์ƒ์„ฑ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๐Ÿ”ท TCP ๋ชจ๋“œ โ€” WizFi360 ์œ„์˜ HTTP ์„œ๋ฒ„

WizFi360์€ TCP ์„œ๋ฒ„ ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์ธ๋ฐ”์šด๋“œ HTTP/1.1 ์—ฐ๊ฒฐ์„ ๋ฐ›์•„ ์š”์ฒญ ๋ณธ๋ฌธ์„ UART๋ฅผ ํ†ตํ•ด SunRiser ํŽŒ์›จ์–ด๋กœ ์ „๋‹ฌํ•œ๋‹ค. MCU ์ธก์—๋Š” ์†Œํ”„ํŠธ์›จ์–ด TCP ์Šคํƒ์ด ์ „ํ˜€ ์—†๋‹ค โ€” TCP ํ•ธ๋“œ์…ฐ์ดํฌ, ์—ฐ๊ฒฐ ์ƒํƒœ, ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ด๋ฐ ๋ชจ๋‘ WizFi360 ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.

ํ•ต์‹ฌ ํŠน์„ฑ: WizFi360 TCP ์†Œ์ผ“์€ ํ•œ ๋ฒˆ์— ์—ฐ๊ฒฐ ํ•˜๋‚˜๋งŒ ์ˆ˜๋ฝํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜๋Š” ๋™์•ˆ ์ถ”๊ฐ€ ์ธ๋ฐ”์šด๋“œ ์‹œ๋„๋Š” ๋ชจ๋‘ ๊ฑฐ๋ถ€๋œ๋‹ค. ์ด๊ฒƒ์ด ha-sunriser๊ฐ€ ์„ค๊ณ„์ƒ ํ•ด๊ฒฐํ•ด์•ผ ํ–ˆ๋˜ ๊ฒฐ์ •์  ์ œ์•ฝ์ด๋‹ค.

๐Ÿ”ท ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋นš์–ด๋‚ธ ์ œ์•ฝ

๋Œ€๋ถ€๋ถ„์˜ HA ํ†ตํ•ฉ์€ ํ•œ ๋ฒˆ์˜ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์— ์—ฌ๋Ÿฌ API ํ˜ธ์ถœ์„ ๋ฌถ์–ด ๋ณด๋‚ธ๋‹ค. ha-sunriser๋Š” ๊ทธ๋Ÿด ์ˆ˜ ์—†๋‹ค โ€” ๊ทธ๋ฆฌ๊ณ  ์ด ์ œ์•ฝ์„ ์กด์ค‘ํ•จ์œผ๋กœ์จ ๋“œ๋ฌธ ๊ฒƒ์„ ๋‹ฌ์„ฑํ•œ๋‹ค: ํ”„๋กœ๋•์…˜์—์„œ ์—ฐ๊ฒฐ ๋“œ๋ž ์ œ๋กœ. ๋ถ„์‚ฐ ํด๋ง ์ฝ”๋””๋„ค์ดํ„ฐ ์„ค๊ณ„๋Š” WizFi360์ด ํ•ญ์ƒ ๊ธฐ๋Œ€ํ•˜๋Š” ์—ฐ๊ฒฐ์„ ๋ฐ›๊ณ , HA๋Š” ํ•ญ์ƒ ํด๋งํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค. ์ถ”๊ฐ€๋กœ ์—ฐ๊ฒฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ผ์„œ๊ฐ€ WizFi360 ์‘๋‹ต ์—ฌ๋ถ€๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ ๊ฒฝ๋ณดํ•œ๋‹ค.

๐Ÿ”ท ํ”„๋กœ๋•์…˜ ๊ฒ€์ฆ โœ…

  • 49ํšŒ ํƒœ๊ทธ ๋ฆด๋ฆฌ์ฆˆ, v1.7.1 ์ตœ์‹  (2026๋…„ 4์›” 19์ผ)
  • ์ „์ฒด ๋ฌธ์„œ ์‚ฌ์ดํŠธ (mrinterbugs.github.io/ha-sunriser)
  • Docker ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ (Dockerfile.test, pytest.ini, tests/ ๋””๋ ‰ํ† ๋ฆฌ)
  • ์‹ค์ œ ๊ธฐ๊ธฐ ์‚ฌ์šฉ์„ ์ฆ๋ช…ํ•˜๋Š” ํ™œ์„ฑ GitHub Issues ๋ฐ Pull Requests
  • Day Planner Lovelace ์นด๋“œ๊ฐ€ ์‹ค๊ธฐ๊ธฐ PWM ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„ ๋ Œ๋”๋ง

05 โ€” ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

๐ŸŒ WIZnet WizFi360 โ€” TCP ์„œ๋ฒ„ ๋ชจ๋“œ (HTTP/1.1, ๋‹จ์ผ ์†Œ์ผ“)

SunRiser 8/10 ARM MCU์— UART-AT ์ธํ„ฐํŽ˜์ด์Šค๋กœ TCP/IP ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•˜๋Š” WIZnet ์ž„๋ฒ ๋””๋“œ Wi-Fi ๋ชจ๋“ˆ. ํ•˜๋“œ์›จ์–ด ๊ด€๋ฆฌ TCP ์„œ๋ฒ„ ๋ชจ๋“œ๋กœ ๋™์ž‘ โ€” ๋™์‹œ ํ™œ์„ฑ ์—ฐ๊ฒฐ ํ•˜๋‚˜ ์ œํ•œ. ์ด ๋ฌผ๋ฆฌ์  ์ œ์•ฝ์ด ha-sunriser ๋ถ„์‚ฐ ํด๋ง ์„ค๊ณ„์˜ ํ•ต์‹ฌ ๋™์ธ.

๐Ÿ Python 3 / Home Assistant ํ†ตํ•ฉ ํ”„๋ ˆ์ž„์›Œํฌ

HA์˜ DataUpdateCoordinator ํŒจํ„ด ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ํ†ตํ•ฉ (์ „์ฒด ์ฝ”๋“œ์˜ 96.2%๊ฐ€ Python). ์—”ํ‹ฐํ‹ฐ ์ž๋™ ๋ฐœ๊ฒฌ, ์ƒํƒœ ํด๋ง, ์„œ๋น„์Šค ํ˜ธ์ถœ(๋ฐฑ์—…, ๋ณต์›, ์žฌ๋ถ€ํŒ…, ๋กœ๊ทธ ์ˆ˜์ง‘, ํ”Œ๋ž˜๋„ˆ ์ฝ๊ธฐ/์“ฐ๊ธฐ), ์˜ต์…˜ ํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•œ ํด๋ง ๊ฐ„๊ฒฉ(5โ€“3600์ดˆ) ๋ฐ ์ผ์ผ ์˜ˆ์•ฝ ์žฌ๋ถ€ํŒ… ์„ค์ • ์ง€์›.

๐Ÿ“ฆ MessagePack ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœํ† ์ฝœ

๋ชจ๋“  ๊ธฐ๊ธฐ ํ†ต์‹  โ€” ์„ค์ • ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์ƒํƒœ ์—…๋ฐ์ดํŠธ, ํ”Œ๋ž˜๋„ˆ ๋ฐ์ดํ„ฐ, ์ง„๋‹จ โ€” ์— ์‚ฌ์šฉ๋˜๋Š” ์ปดํŒฉํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ง๋ ฌํ™”. ์˜คํ”ˆ์†Œ์Šค SunRiser ํŽŒ์›จ์–ด๋ฅผ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ์ถฉ์‹คํžˆ ๊ตฌํ˜„.

๐ŸŒก๏ธ DS1820 ์˜จ๋„ ์„ผ์„œ (1-Wire)

SunRiser์— ์—ฐ๊ฒฐ๋œ ํ•˜๋“œ์›จ์–ด ์˜จ๋„ ์„ผ์„œ. HA ์„ผ์„œ ์—”ํ‹ฐํ‹ฐ๋กœ ๋…ธ์ถœ๋˜์–ด ์ˆ˜์กฑ๊ด€ ์˜จ๋„ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋Œ€์‹œ๋ณด๋“œ ํ‘œ์‹œ, HA ์ž๋™ํ™”(์˜ˆ: ์˜จ๋„ ์ด์ƒ ์‹œ ์•Œ๋ฆผ)์— ํ™œ์šฉ ๊ฐ€๋Šฅ.

๐ŸŽจ ์ปค์Šคํ…€ Lovelace Day Planner ์นด๋“œ (JavaScript)

๋ชจ๋“  ํ™œ์„ฑ PWM ์ฑ„๋„ ์Šค์ผ€์ค„์„ 24์‹œ๊ฐ„ ์ฐจํŠธ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ์ž๋™ ๋“ฑ๋ก ์นด๋“œ โ€” ๊ธฐ๊ธฐ ์ž์ฒด ์›น UI์™€ ๋™์ผํ•œ LED ์ฑ„๋„ ์ƒ‰์ƒ ์‚ฌ์šฉ. ์‹œ์ž‘ ์‹œ ์บ์‹œ๋˜์–ด ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ๊ธฐ๊ธฐ์— ์ถ”๊ฐ€ ์š”์ฒญ ์—†์Œ.

โš™๏ธ HACS ๋ฐฐํฌ

hacs.json, GitHub Actions CI ์ž๋™ํ™”, ์ „์ฒด mkdocs ๋ฌธ์„œ ์‚ฌ์ดํŠธ๋ฅผ ๊ฐ–์ถ˜ ํ‘œ์ค€ Home Assistant Community Store ํŒจํ‚ค์ง• โ€” ๋น„๊ธฐ์ˆ ์ ์ธ ์ˆ˜์กฑ๊ด€ ์• ํ˜ธ๊ฐ€๋„ ์ „ ์„ธ๊ณ„ ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ.


06 โ€” ์ ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

01. ์Šค๋งˆํŠธ ์ˆ˜์กฑ๊ด€ ๋Œ€์‹œ๋ณด๋“œ

SunRiser ์ฑ„๋„ ์ƒํƒœ, DS1820 ์˜จ๋„, ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ์ˆ˜์กฐ ์„ผ์„œ(pH, ์—ผ๋„, ์œ ๋Ÿ‰)์™€ ํ•จ๊ป˜ HA Lovelace ๋Œ€์‹œ๋ณด๋“œ ํ•˜๋‚˜์— ํ†ตํ•ฉ. ์ „์ฒด ์ˆ˜์กฐ ์ƒํ™ฉ์„ ํ™”๋ฉด ํ•˜๋‚˜๋กœ ํŒŒ์•….

02. ์Œ์„ฑ ์ œ์–ด ์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋“œ

์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋“œ ์Šค์œ„์น˜๋ฅผ Home Assistant Cloud(Nabu Casa)์— ๋…ธ์ถœํ•˜๋ฉด Alexa๊ฐ€ ์Šค๋งˆํŠธํ™ˆ ๊ธฐ๊ธฐ๋กœ ์ธ์‹ํ•œ๋‹ค. ์ˆ˜์กฐ ๋ฌผ๊ฐˆ์ด ์ค‘ "์•Œ๋ ‰์‚ฌ, ์ˆ˜์กฐ ์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋“œ ์ผœ์ค˜" ํ•œ ๋งˆ๋””๋กœ ์กฐ๋ช… ํ”„๋กœ๊ทธ๋žจ์„ ์ผ์‹œ ์ •์ง€ โ€” ์† ํ•˜๋‚˜ ์•ˆ ์จ๋„ ๋œ๋‹ค. WizFi360 TCP ํ˜ธ์ถœ ํ•˜๋‚˜๊ฐ€ ํ† ๊ธ€์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

03. ๋ณ€๊ฒฝ ์ „ ์ž๋™ ์„ค์ • ๋ฐฑ์—…

HA ์Šคํฌ๋ฆฝํŠธ๋กœ ์Šค์ผ€์ค„ ๋ณ€๊ฒฝ ์ „ sunriser.backup ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ƒˆ ํ”Œ๋ž˜๋„ˆ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด sunriser.restore๊ฐ€ ์ €์žฅ๋œ ์„ค์ •์„ ๊ธฐ๊ธฐ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค โ€” ์„œ๋น„์Šค ํ˜ธ์ถœ ํ•˜๋‚˜๋กœ ์ „์ฒด ๋กค๋ฐฑ ์™„๋ฃŒ.

04. ์—ฐ๊ฒฐ ์ƒํƒœ ์•Œ๋ฆผ

WizFi360์ด ํด๋ง ์‘๋‹ต์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ผ์„œ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋œ๋‹ค. HA ์ž๋™ํ™”์—์„œ ์ด๋ฅผ ํ™œ์šฉํ•ด SunRiser๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ์žƒ๋Š” ์ฆ‰์‹œ ํ‘ธ์‹œ ์•Œ๋ฆผ ์ „์†ก โ€” ์กฐ๋ช… ํ”„๋กœ๊ทธ๋žจ์ด ์กฐ์šฉํžˆ ๋ฉˆ์ถ”๊ณ  ์ˆ˜์กฐ๊ฐ€ ์–ด๋‘์›Œ์ง€๊ธฐ ์ „์— ๋Œ€์‘.


๊ฒฐ๋ก 

ha-sunriser๋Š” ์นฉ ์ˆ˜์ค€์˜ ํ•˜๋“œ์›จ์–ด ์ œ์•ฝ โ€” ์—ฌ๊ธฐ์„œ๋Š” WizFi360์˜ ๋‹จ์ผ TCP ์—ฐ๊ฒฐ ๋ชจ๋ธ โ€” ์„ ๊นŠ์ด ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ฒฌ๊ณ ํ•œ IoT ํ†ตํ•ฉ๊ณผ ์ทจ์•ฝํ•œ ํ†ตํ•ฉ์„ ๊ฐ€๋ฅด๋Š” ์ฐจ์ด์ž„์„ ์ฆ๋ช…ํ•œ๋‹ค.

  • โœ… WizFi360 TCP ์„œ๋ฒ„ ๋ชจ๋“œ๊ฐ€ ๋ถ„์‚ฐ ํด๋ง ์•„ํ‚คํ…์ฒ˜์˜ ์ง์ ‘์  ๋™์ธ
  • โœ… ์˜คํ”ˆ์†Œ์Šค ํŽŒ์›จ์–ด์—์„œ ๋„์ถœ๋œ MessagePack ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœํ† ์ฝœ ์ถฉ์‹ค ๊ตฌํ˜„
  • โœ… 49ํšŒ ํ”„๋กœ๋•์…˜ ๋ฆด๋ฆฌ์ฆˆ โ€” v1.7.1 ํ˜„์žฌ (2026๋…„ 4์›”)
  • โœ… ์™„์ „ํ•œ ์—”ํ‹ฐํ‹ฐ ์ปค๋ฒ„๋ฆฌ์ง€: ์กฐ๋ช…, ์Šค์œ„์น˜, ์„ผ์„œ, ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ผ์„œ, ๋ฒ„ํŠผ, ์ˆซ์ž, ์„ ํƒ
  • โœ… ์‹ค๊ธฐ๊ธฐ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ปค์Šคํ…€ Lovelace Day Planner ์นด๋“œ
  • โœ… HA Cloud ํ†ตํ•ฉ์„ ํ†ตํ•œ Alexa ์Œ์„ฑ ์ œ์–ด
  • โœ… ๋ฐฑ์—…/๋ณต์›/์žฌ๋ถ€ํŒ… ์„œ๋น„์Šค ์•ก์…˜
  • โœ… Docker ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ + pytest ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ
  • โœ… ์ „์ฒด ๋ฌธ์„œ ์‚ฌ์ดํŠธ๋ฅผ ๊ฐ–์ถ˜ HACS ๋ฐฐํฌ

Q&A

Q: ha-sunriser๋Š” ์™œ ๋ฐฐ์น˜ ์š”์ฒญ ๋Œ€์‹  ํ‹ฑ๋‹น HTTP ์š”์ฒญ ํ•˜๋‚˜๋งŒ ๋ณด๋‚ด๋‚˜์š”? A: SunRiser 8/10์˜ WizFi360 Wi-Fi ๋ชจ๋“ˆ์€ ๋‹จ์ผ ์†Œ์ผ“ TCP ์ œ์•ฝ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค โ€” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ™œ์„ฑ ์—ฐ๊ฒฐ๋งŒ ์ˆ˜๋ฝ๋ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์„ค๊ณ„๋Š” ์ด WizFi360 ํ•˜๋“œ์›จ์–ด ํ•œ๊ณ„์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์•„ํ‚คํ…์ฒ˜ ๋Œ€์‘์œผ๋กœ, ํ†ตํ•ฉ์ด ๋ชจ๋“ˆ์„ ์ ˆ๋Œ€ ๊ณผ๋ถ€ํ•˜์‹œํ‚ค์ง€ ์•Š๊ณ  ํ•ญ์ƒ ๊น”๋”ํ•œ ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

Q: SunRiser๋Š” ์–ด๋–ค ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ณ , ์™œ JSON์ด๋‚˜ REST ๋Œ€์‹  MessagePack์ธ๊ฐ€์š”? A: SunRiser๋Š” HTTP/1.1 ์œ„์˜ MessagePack์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. RAM์ด ์ œํ•œ์ ์ด๊ณ  HTTP/2๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ARM MCU์—์„œ, MessagePack์€ WizFi360์˜ UART ๋งํฌ๋ฅผ ํ†ตํ•ด ์ „์†กํ•˜๊ธฐ์— ํšจ์œจ์ ์ด๋ฉด์„œ ๊ธฐ๊ธฐ ์ธก์—์„œ ํŒŒ์‹ฑํ•˜๊ธฐ๋„ ์‰ฌ์šด ์ปดํŒฉํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ง๋ ฌํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ•ฉ์€ ์˜คํ”ˆ์†Œ์Šค SunRiser ํŽŒ์›จ์–ด์—์„œ ์ด ํ”„๋กœํ† ์ฝœ์„ ์—ญ๊ณตํ•™ํ–ˆ์Šต๋‹ˆ๋‹ค.

Q: SunRiser๊ฐ€ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์žƒ์—ˆ๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‚˜์š”? A: ๋„ค. ํ†ตํ•ฉ์ด ๋…ธ์ถœํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ผ์„œ๊ฐ€ ๋งˆ์ง€๋ง‰ WizFi360 ํด๋ง ์‚ฌ์ดํด์—์„œ ๊ธฐ๊ธฐ๊ฐ€ ์‘๋‹ตํ–ˆ๋Š”์ง€ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. WizFi360์ด ๋„คํŠธ์›Œํฌ์—์„œ ์ดํƒˆํ•˜๋ฉด HA๊ฐ€ ์ฆ‰์‹œ ๊ธฐ๊ธฐ๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค โ€” ์—ฌ๊ธฐ์„œ ์ž๋™ํ™”๋‚˜ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q: ์ด ํ†ตํ•ฉ์€ LEDaquaristik๊ณผ ๊ณต์‹ ์ œํœด ๊ด€๊ณ„์ธ๊ฐ€์š”? A: ์•„๋‹™๋‹ˆ๋‹ค. ha-sunriser๋Š” LEDaquaristik์˜ ์˜คํ”ˆ์†Œ์Šค SunRiser ํŽŒ์›จ์–ด(GPL-3.0)๋ฅผ ์—ญ๊ณตํ•™ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•œ ํ”„๋กœ์ ํŠธ๋กœ, LEDaquaristik๊ณผ ์ œํœดํ•˜๊ฑฐ๋‚˜ ๊ณต์‹ ์ง€์›์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Comments

Comments