node-red-contrib-dess-monitor 2.1.0

Node-RED palette for DESS/ShinePower solar inverter monitoring via MQTT

npm install node-red-contrib-dess-monitor

node-red-contrib-dess-monitor

npm version license

A Node-RED palette for monitoring DESS / ShinePower / Growatt solar inverters via the ShinePower cloud API. Publishes clean, structured MQTT topics for every inverter metric — battery, PV, grid, output, and system data.

🔒 Listen-Only by Design — This package intentionally never reads or writes to your inverter EEPROM. queryDeviceCtrlField and all write commands have been permanently removed. Your inverter hardware is safe.


Features

  • dess-poller — Polls the DESS cloud API on a configurable interval and publishes inverter data as individual MQTT messages
  • dess-config — Shared credential node (username + password) used by the poller node
  • Automatic token refresh on expiry — no manual re-authentication needed
  • Sanity filtering — drops physically impossible readings before they reach MQTT
  • All-zeros guard — detects cloud bridge offline state and suppresses false-zero payloads
  • Duplicate slug deduplication — multiple raw API aliases for the same field publish only once
  • Field allowlist — configure exactly which fields to publish, ignore the rest
  • Supports multiple inverters simultaneously
  • Zero EEPROM access — ctrl field polling and all write commands permanently removed

Why No Write Commands?

The queryDeviceCtrlField API call reads from the inverter's EEPROM via the cloud bridge on every single call. EEPROM has a finite read/write cycle life. At a 60-second poll interval that's 1,440 EEPROM accesses per day — accelerating hardware wear and potentially causing inverter faults over time.

This package permanently removes all ctrl field polling and write commands. To change inverter settings, use the DessMonitor app or web.shinemonitor.com directly.


Requirements

  • Node-RED >= 3.0.0
  • Node.js >= 16.0.0
  • A DESS / ShinePower / DessMonitor account at dessmonitor.com
  • An MQTT broker (e.g. Mosquitto) — nodes output msg objects ready for a standard MQTT-out node

Installation

Via Node-RED Palette Manager (recommended)

  1. Open Node-RED → MenuManage PaletteInstall
  2. Search for node-red-contrib-dess-monitor
  3. Click Install

Via npm

cd ~/.node-red
npm install node-red-contrib-dess-monitor

Then restart Node-RED.


Quick Start

  1. Drag a dess-config node onto the canvas and double-click it
  2. Enter your DessMonitor username (email) and password
  3. Drag a dess-poller node, select your config node, set the base topic and poll interval
  4. Wire Output 1 and Output 2 to MQTT-out nodes
  5. Deploy — data starts flowing immediately

Nodes

dess-config

Credential config node shared by all DESS nodes.

Property Description
Username Your DessMonitor account email
Password Your DessMonitor password (stored securely via Node-RED credentials API)
Already hashed Enable if you are providing a pre-hashed SHA1 password

dess-poller

Polls the DESS cloud API and emits two output streams.

Property Default Description
Config node Select your dess-config node
Base topic home/inverters MQTT topic prefix
Poll interval 60 s How often to query the API (min 10s)
Device PNs (blank = all) Comma-separated list of inverter PNs to include
Include offline false Include devices marked offline by the cloud
Fetch last data true Poll querySPDeviceLastData
Last Data Fields (blank = all) Comma-separated slug allowlist for last_data output
Fetch energy flow true Poll webQueryDeviceEnergyFlowEs
Energy Flow Fields (blank = all) Comma-separated slug allowlist for energy_flow output
QoS 1 MQTT QoS level
Retain true MQTT retain flag

Outputs:

Output Content
1 (top) Last data metrics — one msg per field
2 (bottom) Energy flow metrics — one msg per field

Field Filtering (Allowlist)

By default the poller publishes every field your inverter reports. Use the Fields boxes to limit output to only what you need:

Last Data Fields example:

battery_voltage, battery_capacity, pv_power, pv_voltage, grid_input_voltage, active_load_power, load_percent, inv_temperature, output_priority

Energy Flow Fields example:

pv_total_power, battery_capacity, battery_power, active_load_power, grid_in_power

Leave either box empty to publish all fields for that output. Slug names are case-insensitive and must match the snake_case field names visible in your MQTT topics.


MQTT Topic Structure

<base>/<device_pn>/last_data/<category>/<field_slug>
<base>/<device_pn>/last_data/<category>/<field_slug>/unit
<base>/<device_pn>/energy_flow/<field_slug>
<base>/<device_pn>/energy_flow/<field_slug>/unit

Example topics (base = home/inverters, pn = Q0001)

home/inverters/Q0001/last_data/battery/battery_voltage          → 51.2
home/inverters/Q0001/last_data/battery/battery_voltage/unit     → V
home/inverters/Q0001/last_data/battery/battery_capacity         → 87
home/inverters/Q0001/last_data/pv/pv_power                      → 1840
home/inverters/Q0001/last_data/pv/pv_voltage                    → 342.5
home/inverters/Q0001/last_data/grid/grid_input_voltage          → 234.1
home/inverters/Q0001/last_data/grid/grid_frequency              → 50.02
home/inverters/Q0001/last_data/output/active_load_power         → 620
home/inverters/Q0001/last_data/output/load_percent              → 31
home/inverters/Q0001/last_data/system/inv_temperature           → 42.0
home/inverters/Q0001/last_data/system/output_priority           → SBU
home/inverters/Q0001/energy_flow/pv_power                       → 1840
home/inverters/Q0001/energy_flow/battery_capacity               → 87
home/inverters/Q0001/energy_flow/active_load_power              → 620

Supported Inverter Brands

Any inverter reporting to the ShinePower / DessMonitor cloud platform:

  • EASUN (SMG-II, SMX series)
  • VOLTRONIC (Axpert, InfiniSolar)
  • Growatt (SPF series)
  • PowMr (MPPT hybrid series)
  • Must (PH1800, PV series)
  • Any OEM rebranded on the ShinePower platform

Flow Context Variables

Variable Content
flow.dess_token Current auth token
flow.dess_secret Current auth secret
flow.dess_devices Array of device objects from the API
flow.dess_read_only Always true

Changelog

1.4.0

  • Removed: dess-ctrl node entirely — dead code with read-only enforced
  • Removed: dess-ctrl.js and dess-ctrl.html from package
  • Updated: package.json node-red nodes section — only dess-config and dess-poller
  • Package now contains exactly 2 nodes, both read-only

1.3.0

  • Breaking: Reduced outputs from 3 to 2 — ctrl_fields output permanently removed
  • Removed: queryDeviceCtrlField API call — zero EEPROM reads from Node-RED
  • Added: Field allowlist filtering for last_data and energy_flow outputs
  • Added: flow.dess_read_only always true
  • Node canvas label shows 🔒 listen-only status

1.2.0

  • Fixed: Re-authentication on token expiry backs off instead of hammering the API
  • Fixed: All-zeros guard no longer false-fires at night
  • Fixed: HTTP non-200 responses no longer leak socket connections
  • Fixed: Empty device list retries once before giving up
  • Fixed: Duplicate slug collision in multi-alias inverter responses

1.1.0

  • Added sanity checking (physical limits filter) for all metric fields
  • Added all-zeros guard for cloud bridge offline detection
  • Added field mapping with clean snake_case MQTT topic names and categories

1.0.0

  • Initial release

Credits

This package is a Node-RED implementation inspired by and ported from:

Both projects are MIT licensed. Original authors retain their respective copyrights.


License

MIT © 2026 Nitin ([email protected])

See LICENSE for full text including upstream copyright notices.

Node Info

Version: 2.1.0
Updated 1 week, 5 days ago
License: MIT
Rating: not yet rated

Categories

Actions

Rate:

Downloads

0 in the last week

Nodes

  • dess-config
  • dess-poller

Keywords

  • node-red
  • dess
  • solar
  • inverter
  • shinemonitor
  • dessmonitor
  • mqtt
  • monitoring
  • listen-only

Maintainers