4.8 KiB
Shelly Plug
Shelly Plugs are quite cheap but relatively accurate to measure power consumptions less than 2.5 kW.
Using Shellies Firmware
If you already have a sheyll device, you can locate it in your network.
MQTT can be enabled under "ADVANCED - DEVELOPER SETTINGS" -> "MQTT".
Then it will post a message on boot to your MQTT server:
{
"wifi_sta": {
"connected": true,
"ssid": "Guest",
"ip": "192.168.2.150",
"rssi": -43
},
"cloud": {
"enabled": false,
"connected": false
},
"mqtt": {
"connected": true
},
"time": "17:19",
"unixtime": 1676909964,
"serial": 1,
"has_update": false,
"mac": "4022D8891E97",
"cfg_changed_cnt": 0,
"actions_stats": {
"skipped": 0
},
"relays": [
{
"ison": true,
"has_timer": false,
"timer_started": 0,
"timer_duration": 0,
"timer_remaining": 0,
"overpower": false,
"source": "input"
}
],
"meters": [
{
"power": 117.46,
"overpower": 0,
"is_valid": true,
"timestamp": 1676913564,
"counters": [
0,
0,
0
],
"total": 0
}
],
"temperature": 0,
"overtemperature": false,
"tmp": {
"tC": 0,
"tF": 32,
"is_valid": true
},
"update": {
"status": "unknown",
"has_update": false,
"new_version": "",
"old_version": "20230109-114426/v1.12.2-g32055ee"
},
"ram_total": 52064,
"ram_free": 39744,
"fs_size": 233681,
"fs_free": 166664,
"uptime": 5
}
You an use shelly script to update this status periodically.
A documentation on how to do this can be found on Shellie's documentation.
Flash Tasmota
There's an OpenSource project to flash Tasmota on Shelly Plug S': mg2x
Danger: This is still not working.
Locate your Shellie's IP adress (here: 192.168.2.150) and update it "over the air" with the Tasmota firmware:
http://192.168.2.150/ota?url=http://ota.tasmota.com/tasmota/shelly/mg2tasmota-ShellyPlugS.zip
Your shelly will return something like a JSON object that looks like that:
{
"status": "updating",
"has_update": false,
"new_version": "20230109-114426/v1.12.2-g32055ee",
"old_version": "20230109-114426/v1.12.2-g32055ee"
}
After a while your Shelly Plug S should be flashed with Tasmota firmware.
Just be patient. This took longer than five minutes in my DSL connected network.
It will create create a new Wifi.
Join that Wifi and [configure the device)(http://192.164.4.1/).
You can configure it a a BlitzWolf SHP product.
Then it offers you power measurement and a programmable toogle.
It should be configurable just like our plant monitor.
Just enable MQTT and enter a shorter telemetry period.
It will post MQTT messages unter a topic tele/tasmota_891E97/SENSOR
like this one:
{
"Time": "2023-02-27T16:45:07",
"ENERGY": {
"TotalStartTime": "2023-02-27T16:33:06",
"Total": 0.004,
"Yesterday": 0,
"Today": 0.004,
"Period": 0,
"Power": 34,
"ApparentPower": 44,
"ReactivePower": 27,
"Factor": 0.79,
"Voltage": 253,
"Current": 0.172
}
}
We now can consume this messages in Node-RED and post them into InfluxDB and build a dashboard in Grafana.
InfluxDB Bucket
I created a bucket called Shelly
in InfluxDB, so we can store the messages in this bucket.
Node-RED
I create a usual flow in Node-RED. A MQTT node fetches the values.
The message is fed into a filter function to filter usefull information:
return {
payload: {
power: Number(msg.payload.ENERGY.Power),
volate: Number(msg.payload.ENERGY.Voltage),
current: Number(msg.payload.ENERGY.Current)
}
};
The payload
will be stored in InfluxDB in the bucket "shelly".
InfluxDB Data Explorer
In Influx DB Data Explorer you can query the stored data.
The query created by Data Explorer look like that:
from(bucket: "shelly")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "msg")
|> filter(fn: (r) => r["_field"] == "power" or r["_field"] == "volate" or r["_field"] == "current")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
Grafana
Using this query you can crate a dashboard in Grafana.