npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

iobroker.dreo

v0.0.13

Published

ioBroker adapter for Dreo smart devices using the native Dreo Cloud API.

Downloads

52

Readme

ioBroker.dreo

Native ioBroker adapter for Dreo smart devices. The first supported device family is Dreo heaters / space heaters.

This adapter does not use Python, Home Assistant, or a subprocess bridge. The Dreo Cloud API logic was ported to TypeScript from the public Python projects hass-dreo, pydreo-client, and hass-dreoverse.

Dreo manufacturer website: https://www.dreo.com/

Current Scope

  • Login against Dreo Cloud with email/password
  • MD5 password preparation as used by the Dreo Open API client
  • Token region detection for US/EU API endpoints
  • Device list retrieval
  • Device state polling
  • State writes mapped to Dreo Cloud control commands
  • Retry/backoff for cloud and authentication errors
  • Unknown devices remain visible with info.rawData
  • No passwords or full access tokens are logged

Dreo API Mapping

The current cloud implementation uses:

  • Login: POST https://open-api-us.dreo-tech.com/api/oauth/login
  • Devices: GET /api/v2/device/list
  • State: GET /api/v2/device/state?deviceSn=...
  • Control: POST /api/v2/device/control

Commands are sent as:

{
  "devicesn": "DEVICE_SN",
  "desired": {
    "poweron": true
  }
}

Heater command keys ported from the Python projects:

  • poweron for power
  • temperature for current temperature
  • ecolevel for target temperature
  • mode for coolair, hotair, eco, off
  • htalevel for heat level / exposed as fanSpeed
  • oscon, oscangle, oscmode for oscillation variants
  • timeron, timeroff for timer values

Where firmware behavior is unclear, the TypeScript code contains TODO comments and keeps debug/raw payloads available.

ioBroker States

Devices are created under:

dreo.0.devices.<deviceId>

Per device:

info.name
info.model
info.deviceId
info.online
info.rawData
status.power
status.currentTemperature
status.targetTemperature
status.mode
status.fanSpeed
status.oscillation
status.timer
control.power
control.targetTemperature
control.mode
control.fanSpeed
control.oscillation

Unknown devices still get info.*, status.power, control.power, and complete info.rawData.

Admin Config

  • email: Dreo account email
  • password: Dreo account password, stored via ioBroker encrypted native config
  • pollingInterval: seconds between cloud polls, minimum 15
  • deviceFilter: optional comma-separated device serial numbers, device IDs, names, or models
  • debugMode: verbose adapter-side API/debug logging without secrets

Setup

Create a Dreo adapter instance in ioBroker Admin, enter the Dreo credentials, choose the temperature unit, and start the instance.

Test Anleitung

Build checks are executed by GitHub Actions for each push and pull request.

Expected results:

  • info.connection becomes true
  • device objects appear under dreo.0.devices.*
  • status.* states update after each poll
  • writing control.power, control.targetTemperature, control.mode, control.fanSpeed, or control.oscillation sends a cloud command and then refreshes state

Debug Hints

Enable debugMode in the adapter config and set the instance log level to debug.

Useful checks:

iobroker logs dreo.0 --watch
iobroker object get dreo.0.devices.<id>.info.rawData
iobroker state get dreo.0.info.connection

If commands do not affect a device, inspect info.rawData and debug logs. Dreo firmware variants may expose oscillation as oscon, oscangle, or oscmode; the adapter chooses the visible property first and falls back to oscon.

VIS Template

An importable VIS widget template is available in vis/dreo-heater-widget.json. Replace __DREO_DEVICE__ with your device object path, then import it in the VIS editor via Widgets importieren.

VIS Widget

The adapter also includes a native VIS 1 widget set named dreo. After uploading the adapter files and restarting/opening the VIS editor, drag the Dreo heater widget into a view and select any state below the target Dreo device, for example dreo.0.devices.<device>.status.power.

Project Structure

admin/jsonConfig.json
io-package.json
LICENSE
package.json
README.md
src/main.ts
src/lib/DreoClient.ts
src/lib/DreoDevice.ts
src/lib/DreoHeater.ts
tsconfig.json
vis/dreo-heater-widget.json
widgets/dreo.html
widgets/dreo/css/dreo.css
widgets/dreo/js/dreo.js

Notes

Dreo does not provide a public official API. This adapter uses behavior discovered by community Python integrations and should be tested carefully with real devices.

Changelog

0.0.13

  • Switched polling and Dreo WebSocket timers to ioBroker-managed timer handling.

0.0.12

  • Added a native VIS 1 draggable Dreo heater widget.

0.0.11

  • Updated metadata after the first npm publication.

0.0.10

  • Prepared adapter metadata for official ioBroker repository submission.
  • Added license, changelog, and GitHub Actions test workflow.
  • Fixed temperature unit display encoding.

0.0.9

  • Added importable VIS heater widget template.

0.0.8

  • Improved Dreo state handling and Celsius/Fahrenheit conversion.

0.0.1

  • Initial native TypeScript adapter for Dreo Cloud devices.

License

Copyright (c) 2026 Alexander Tartler

MIT License. See LICENSE for details.