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 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-red-contrib-unofficial-sense

v1.2.5

Published

Unofficial Sense API implimentation for Node-Red (Home energy Monitoring)

Downloads

26

Readme

node-red-contrib-unofficial-sense

This Node-Red module connects to the Sense API used by mobile app and website to retrive data and expose 6 nodes to be used in your node-red flows.

If you are looking for a Node module to interface with sense, take a look at the unofficial-sense module.


Installation

npm install node-red-contrib-unofficial-sense

WARNING: This module requires es6 syntax and requires nodeJS 7+. If using the node-red docker image, nodered/node-red-docker:v8 works fantastically. If you install this module on an older node version, it will crash.

Disclaimer

This module was developed without the consent of the Sense company, and makes use of an undocumented and unsupported API. Use at your own risk, and be aware that Sense may change the API at any time and break this repository perminantly.

Usage

There are 6 nodes included in this module.

  • Sense Update
  • Sense Now
  • Sense Device Trigger
  • Sense Device On
  • Sense Monitor
  • Sense Devices

Every node needs to have a Sense config assigned. This hidden node stores user credentials securely and can be re-used for any number of Sense nodes. Only 1 API connection (websocket) will be maintained per Sense config.

Sense Update Node

The Sense update node will be triggered whenever there is new data from the Sense API. Sense uses Websockets, so this data can be real time. This is usually 4-5 times per second. An optional Interval property is available to set a minimum time in milliseconds between updates. (5000 = 5 seconds)

Sense Update Config

Example of Sense update

(Example of sense high energy usage triggering Google Home Notifier)

Sense nodes can be used in conjunction with node-red-dashboard to create graphs

Simply changing msg.payload to msg.payload.w can be used to generate line graphs.

The following function can be used to create the pi chart displaying device watts.

var newMessage = [{
    series: ["Watts"],
    data: [[]],
    labels: []
}];
var devices = msg.payload.devices
if(devices){
    for(var i = 0; i < devices.length; i++) {
        newMessage[0].labels.push(devices[i].name);
        newMessage[0].data[0].push(devices[i].w)
    }
}

return {payload: newMessage};

Payload Output

"payload": {
    "hz": 60.003795623779,
    "c": 122,
    "channels": [
        5870.3833007812,
        5293.4794921875
    ],
    "devices": [
        {
            "c": 61,
            "w": 5584.701171875,
            "name": "Dryer",
            "icon": "washer",
            "id": "11654c89",
            "tags": {
            ...
            }
        },
        {
            "c": 47,
            "w": 4340.5068359375,
            "name": "Other",
            "icon": "home",
            "id": "unknown",
            "tags": {
            ...
            }
        },
        {
            "c": 7,
            "w": 726,
            "name": "Always On",
            "icon": "alwayson",
            "id": "always_on",
            "tags": {
            ...
            }
        }
    ],
    "w": 11163.86328125,
    "_stats": {
        "mrcv": 1528234116.29,
        "brcv": 1528234116.1969,
        "msnd": 1528234116.29
    },
    "epoch": 1528234102,
    "deltas": [ ],
    "voltage": [
        121.58633422852,
        122.09526824951
    ],
    "frame": 18657330
}

Sense Now Node

Payload returned is the same data as the Sense Update Node, but relies on an input to be triggered. Input is ignored.

Sense Device Trigger

The Sense Device Trigger node will be ran when the selected device turns on or off. Two outputs available, top (on) and bottom (off).

Node Properties include a dropdown containing all descovered devices

Example Flows

Here The washer and dryer triggers are send to a format node that takes the device.name and alerts the house with Google Home Notifier.

Payload Output On

"payload" : {
    "c": 61,
    "w": 5584.701171875,
    "name": "Dryer",
    "icon": "washer",
    "id": "11654c89"
    "tags": {...}
}

Payload Output Off

"payload": {
    "status": "Device off"
}

Sense Device On

This node returns the same payload output as the device trigger, but accepts an input to toggle the check, or to dynamically pass a device name or id. msg.payload or msg.device can be used to set the device to check. Or this node can also make use of the device

Here the baby bottle warmer triggers a delay with a repeating timer. If the warmer is on for longer than 2 minutes, Google Home Notifier with alert us every minute that the bottle warmer was left on.

Sense Monitor

This node returns the status of the physical Energy Monitor, including devices being learned. Input is ignored, used as a trigger.

Payload Output

"payload": {
  "signals": {
    "progress": 100,
    "status": "OK"
  },
  "device_detection": {
    "in_progress": [
      {
        "icon": "cup",
        "name": "Possible Coffee Maker",
        "progress": 16
      },
      {
        "icon": "dishes",
        "name": "Possible Dishwasher",
        "progress": 5
      },
      {
        "icon": "stove",
        "name": "Possible Oven",
        "progress": 10
      } ...
    ],
    "found": [
      {
        "icon": "stove",
        "name": "Oven",
        "progress": 48
      },
      {
        "icon": "dishes",
        "name": "Washer",
        "progress": 50
      },
      {
        "icon": "home",
        "name": "Motor",
        "progress": 96
      } ...
    ],
    "num_detected": 18
  },
  "monitor_info": {
    "serial": "XXXXXXXXXX",
    "ndt_enabled": true,
    "online": true,
    "version": "1.11.1870-2d186a5-master",
    "ssid": "For the Horde",
    "signal": "-44 dBm",
    "mac": "xx:xx:xx:xx:xx:xx"
  }
}

Sense Devices

This node returns an array of all devices known by your sense. Input is ignored, used as a trigger.

Payload Output


"payload": [
    {
      "id": "xxxxxxx",
      "name": "Microwave",
      "icon": "microwave",
      "tags": {...}
    },
    {
      "id": "xxxxxxx",
      "name": "Stove 2",
      "icon": "stove",
      "tags": {...}
    },
    {
      "id": "xxxxxxxx",
      "name": "Washer",
      "icon": "dishes",
      "tags": {...}
    } ...
]

Disclaimer

This module was developed without the consent of the Sense company, and makes use of an undocumented and unsupported API. Use at your own risk, and be aware that Sense may change the API at any time and break this repository perminantly.

Tips for node-red creators

If you're here wondering how to change the color of label text (Inside the html js for node registration)

label: function() {
    $("#" + this.id.replace('.', '\\.') + " > text").css("fill", "white");
    return "node label";
}