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

node-red-contrib-dess-monitor

v2.1.0

Published

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

Downloads

45

Readme

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.