Skip to main content

pywibeee

Tests PyPI version

Python library and CLI for WiBeee (old Mirubee) energy meters manufactured by Smilics / Circutor.

Home Assistant Integration

The official Home Assistant integration for WiBeee devices is built on top of this library and has been proposed to Home Assistant core:

The integration is polling-only (local_polling, 30-second interval), with config flow, DHCP discovery, and per-phase sensor entities. A development copy of the integration lives in ha_core_component/.

Python Library

Installation

Install from PyPI (dependencies are installed automatically):

pip install pywibeee --upgrade

Or install the latest source:

pip install git+https://github.com/fquinto/pywibeee

Usage

The library exposes an async client, WibeeeAPI, built on aiohttp:

import asyncio

import aiohttp

from pywibeee import WibeeeAPI


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        api = WibeeeAPI(session, "192.168.1.150")

        info = await api.async_fetch_device_info()
        print(info.model, info.mac_addr, info.firmware_version)

        data = await api.async_fetch_sensors_data()
        print(data["fase1"]["vrms"], data["fase4"]["p_activa"])


asyncio.run(main())

Highlights:

  • async_fetch_device_info() — model, MAC address, firmware version, and device ID. The whole discovery is bounded by an overall deadline (default 15 seconds, deadline parameter) and raises TimeoutError when exceeded.

  • async_fetch_sensors_data() — all sensor readings from status.xml, organized per phase (fase1..``fase3``, fase4 = total).

  • async_check_connection() — quick check that the host is a WiBeee device.

  • async_reboot() / async_reset_energy() — device actions.

  • async_configure_push_server() / async_get_push_server_config() — configure or read the device’s push destination.

  • async_fetch_device_diagnostics() — configuration variables for diagnostics.

  • Each HTTP request has a 10-second timeout (configurable) with optional retries; failed fetches are logged at debug level and return None.

Tests

pip install -e ".[test]"
pytest

The suite covers XML parsing, HTTP errors, retries, the discovery deadline, push server configuration, device actions, and diagnostics. It runs in CI on Python 3.10, 3.12, and 3.14.

CLI

Command line interface for WiBeee (old Mirubee) meters.

Features

  • Autodiscover the host (IP) of the meter on the network.

  • Get version, model, device name, info, status, and sensor list.

  • Actions: reboot (via command or web), reset energy counters, configure push server.

  • Output formats: xml, json, plain text, file.

Usage

pywibeee -h

usage: pywibeee [-h] [-version] (--host HOST | --auto) [-p PORT] [-t SETTIMEOUT]
                [-o {xml,json,plain,file}]
                (-a {reboot,rebootweb,resetenergy,configureserver} | -g {model,version,status,info,sensors,devicename})
                [--serverip SERVERIP] [--serverport SERVERPORT]

CLI for WiBeee (old Mirubee) meter

optional arguments:
  -h, --help            show this help message and exit
  -version, --version   show program's version number and exit
  --host HOST           The host (or the IP) of the meter.
  --auto                Autodiscover host function, look IP on net.
  -p PORT, --port PORT  set port (default 80)
  -t SETTIMEOUT, --settimeout SETTIMEOUT
                        set timeout in seconds (default 10.0)
  -o FORMAT, --output FORMAT
                        xml|json|plain|file
  -a ACTION, --action ACTION
                        reboot|rebootweb|resetenergy|configureserver
  -g GET, --get GET     model|version|status|info|sensors|devicename
  --serverip SERVERIP   Server IP for push config (use with -a configureserver)
  --serverport SERVERPORT
                        Server port for push config (default 8600)

Enjoy! :)

Examples

Get status

$ pywibeee --host 192.168.1.150 --get status
{"response": {"model": "WBB", "webversion": "3.4.614", "time": "1570484447",
"fase1_vrms": "228.70", "fase1_irms": "1.59", "fase1_p_activa": "264.34", ...}}

Get model

$ pywibeee --host 192.168.1.150 --get model
{"response": {"model": "WBB", "model_description": "Wibeee BOX"}}

Get info

$ pywibeee --host 192.168.1.150 -g info
{"response": {"model": "WBB", "model_description": "Wibeee BOX",
"webversion": "3.4.614", "host": "192.168.1.150", "devicename": "WIBEEE"}}

Get sensors with autodiscover

$ pywibeee --auto -g sensors
{"vrms": ["Vrms", "V", "mdi:sine-wave"], "irms": ["Irms", "A", "mdi:flash-auto"], ...}

Configure push server

Configure the WiBeee to push data to a server (e.g. 192.168.1.50:8600):

$ pywibeee --host 192.168.1.150 -a configureserver --serverip 192.168.1.50 --serverport 8600
{"response": {"configureServer": "done (server=192.168.1.50:8600)"}}

The device will restart to apply the configuration. The port is sent in hexadecimal to the WiBeee firmware (8600 decimal = 2198 hex).

Reboot the device

$ pywibeee --host 192.168.1.150 -a rebootweb

Reset energy counters

$ pywibeee --host 192.168.1.150 -a resetenergy

Local Push Protocol

The WiBeee device can be configured to push data to a server via HTTP GET requests. The device sends periodic requests to the configured server with all sensor values as query parameters. The request path is hardcoded in the firmware; only the destination host and port are configurable.

Endpoint

GET /Wibeee/receiverAvg?mac=001ec0112233&v1=230.5&a1=277&e1=222157&vt=230.5&...

The server must respond with <<<WBAVG to acknowledge receipt.

The server can also send <<<WREBOOT to remotely reboot the device.

Push parameter mapping

Push param prefix

Sensor

Unit

v

Phase voltage (vrms)

V

i

Current (irms)

A

p

Apparent power

VA

a

Active power

W

r

Inductive reactive power

var

q

Frequency

Hz

f

Power factor

—

e

Active energy

Wh

o

Inductive reactive energy

varh

Phase suffixes: 1 = L1, 2 = L2, 3 = L3, t = Total.

Example: v1 = voltage L1, at = active power total, e2 = active energy L2.

Configure push via HTTP

# Set the push server (port in hex: 8123 = 1fbb for HA default port)
curl "http://192.168.1.150/configura_server?ipServidor=192.168.1.50&URLServidor=192.168.1.50&portServidor=1fbb"

# Reset the device to apply changes
curl "http://192.168.1.150/config_value?reset=true"

Other useful HTTP endpoints

# Harmonics data
curl http://192.168.1.150/services/user/harmonics.xml

# Waveform data (per phase)
curl http://192.168.1.150/services/user/wafeformsF1.xml

# Read measurement refresh rate
curl "http://192.168.1.150/services/user/values.xml?var=WIBEEE.measuresRefresh"

# Read app refresh rate
curl "http://192.168.1.150/services/user/values.xml?var=WIBEEE.appRefresh"

# Trigger WiFi scan and get results
curl "http://192.168.1.150/scan.cgi?getAllBss"
curl http://192.168.1.150/scanallresults.xml

Device Notes

  • Default IP: 192.168.1.150

  • Default credentials:

    • Basic: user / user

    • Admin: admin / Sm1l1cs?

    • Admin (alt): admin / Wib333?

  • MAC OUI: 00:1E:C0 (Microchip Technology / Circutor)

Open ports

80/tcp  open http      Web interface, configuration, bootloader commands
502/tcp open modbus    Modbus TCP (input registers from 1009)
550/tcp open binary    OTA firmware transfer (do NOT use without full understanding)

OTA commands

  • 21001A 576246696E697368426F6F746C6F6164657250726F6363657373 0D0A (hex) = WbStartBootloaderProccess

  • 200119 576246696e697368426f6f746c6f6164657250726f6363657373 0D0A (hex) = WbFinishBootloaderProccess

  • 0D (hex) = Enter key = get version

  • 0F (hex) = read Backup Position

  • 01 (hex) = reset

Models

Code

Description

WBM

Wibeee 1Ph

WBT

Wibeee 3Ph

WMX

Wibeee MAX

WTD

Wibeee 3Ph RN

WX2

Wibeee MAX 2S

WX3

Wibeee MAX 3S

WXX

Wibeee MAX MS

WBB

Wibeee BOX

WB3

Wibeee BOX S3P

W3P

Wibeee 3Ph 3W

WGD

Wibeee GND

WBP

Wibeee SMART PLUG

Security

The WiBeee has no authentication on local HTTP endpoints and uses plain HTTP. Recommended precautions:

  • Isolate the device on a separate VLAN or IoT network.

  • Use firewall rules to restrict access to ports 80, 502, and 550.

  • Do not expose the device to the internet.

Tools

Changelog

See CHANGELOG.md

License

GNU General Public License version 2

Donations for software development

If this project is useful to you, you can support its development:

Donate with PayPal

Thank you for collaborating and helping the development of software improvements.

Metadata

Release files for pywibeee 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pywibeee 0.1.8
File Size Uploaded Provenance Actions
pywibeee-0.1.8.tar.gz 35.3 kB With provenance Details for pywibeee-0.1.8.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pywibeee 0.1.8
File Interpreter ABI Platform Actions
pywibeee-0.1.8-py3-none-any.whl Python 3 none any Details for pywibeee-0.1.8-py3-none-any.whl

Total release size: 59.6 kB

Release files / pywibeee-0.1.8.tar.gz

Download URL pywibeee-0.1.8.tar.gz
Size 35.3 kB
Tags Source
SHA-256 checksum
How to use checksums
489673591d11d66a81b7f8da1e098813b4ddf7e897965c8370717df3a751e6fb
BLAKE2b-256 checksum
How to use checksums
d101fbf3396ce613e8d642bf5226b676a454f414a478cb4def420a376c117fe4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pywibeee-0.1.8-py3-none-any.whl

Download URL pywibeee-0.1.8-py3-none-any.whl
Size 24.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
96b82073844dd1d82d9327f575cac87d40e8321b4e4ef0c1108cab08fcc2ea8c
BLAKE2b-256 checksum
How to use checksums
d5957a325a1cedf50b9c9ea5d85d9a150f2ff0b81d19ff1cdfc70df7fe06f485
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Security for pywibeee 0.1.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pywibeee-0.1.8.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page