iobroker.weatherflow_udp
Version:
Weatherflow UDP receiver
1,306 lines (1,289 loc) • 24.7 kB
JavaScript
/*
WeatherFlow Smart Weather UDP Reference - v171
https://https://weatherflow.github.io/Tempest/api/udp/v171/
*/
const { ENETDOWN } = require("constants");
const messages = [];
messages.evt_precip = {
name: "Rain Start Event",
evt: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
},
};
messages.evt_strike = {
name: "Lightning Strike Event",
evt: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
1: [
"distance",
{
type: "state",
common: {
type: "number",
unit: "km",
read: true,
write: false,
role: "value.distance",
name: "Strike distance",
},
native: {},
},
],
2: [
"energy",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value.energy",
name: "Strike energy",
},
native: {},
},
],
},
};
messages.rapid_wind = {
name: "Rapid Wind",
ob: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
1: [
"windSpeed",
{
type: "state",
common: {
type: "number",
unit: "m/s",
read: true,
write: false,
role: "value.speed.wind",
name: "Wind speed",
},
native: {},
},
],
2: [
"windDirection",
{
type: "state",
common: {
type: "number",
unit: "°",
read: true,
write: false,
role: "value.direction.wind",
name: "Wind direction",
},
native: {},
},
],
},
};
messages.obs_air = {
name: "Observation (AIR)",
obs: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
1: [
"stationPressure",
{
type: "state",
common: {
type: "number",
unit: "hPa",
read: true,
write: false,
role: "value.pressure",
name: "Station pressure (raw)",
},
native: {},
},
],
2: [
"airTemperature",
{
type: "state",
common: {
type: "number",
unit: "°C",
read: true,
write: false,
role: "value.temperature",
name: "Air Temperature",
},
native: {},
},
],
3: [
"relativeHumidity",
{
type: "state",
common: {
type: "number",
unit: "%",
read: true,
write: false,
role: "value.humidity",
name: "Relative Humidity",
},
native: {},
},
],
4: [
"lightningStrikeCount",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "Lightning Strike Count",
},
native: {},
},
],
5: [
"lightningStrikeAvgDistance",
{
type: "state",
common: {
type: "number",
unit: "km",
read: true,
write: false,
role: "value.distance",
name: "Lightning Strike Avg Distance",
},
native: {},
},
],
6: [
"battery",
{
type: "state",
common: {
type: "number",
unit: "V",
read: true,
write: false,
role: "value.battery",
name: "Battery",
},
native: {},
},
],
7: [
"reportInterval",
{
type: "state",
common: {
type: "number",
unit: "min",
read: true,
write: false,
role: "value.interval",
name: "Report Interval",
},
native: {},
},
],
},
firmware_revision: {
0: [
"firmware_revision",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "Firmware revision",
},
native: {},
},
],
},
};
messages.obs_sky = {
name: "Observation (Sky)",
obs: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
1: [
"illuminance",
{
type: "state",
common: {
type: "number",
unit: "Lux",
read: true,
write: false,
role: "value.illuminance",
name: "Illuminance",
},
native: {},
},
],
2: [
"UV",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value.uv",
name: "UV Index",
},
native: {},
},
],
3: [
"rainAccumulated",
{
type: "state",
common: {
type: "number",
unit: "mm",
read: true,
write: false,
role: "value.precipitation.interval",
name: "Rain Accumulated",
},
native: {},
},
],
4: [
"windLull",
{
type: "state",
common: {
type: "number",
unit: "m/s",
read: true,
write: false,
role: "value.speed.wind.lull",
name: "Wind Lull (minimum 3 second sample)",
},
native: {},
},
],
5: [
"windAvg",
{
type: "state",
common: {
type: "number",
unit: "m/s",
read: true,
write: false,
role: "value.speed.wind",
name: "Wind Avg (average over report interval)",
},
native: {},
},
],
6: [
"windGust",
{
type: "state",
common: {
type: "number",
unit: "m/s",
read: true,
write: false,
role: "value.speed.wind.gust",
name: "Wind Gust (maximum 3 second sample)",
},
native: {},
},
],
7: [
"windDirection",
{
type: "state",
common: {
type: "number",
unit: "°",
read: true,
write: false,
role: "value.direction.wind",
name: "Wind Direction",
},
native: {},
},
],
8: [
"battery",
{
type: "state",
common: {
type: "number",
unit: "V",
read: true,
write: false,
role: "value.battery",
name: "Battery",
},
native: {},
},
],
9: [
"reportInterval",
{
type: "state",
common: {
type: "number",
unit: "min",
read: true,
write: false,
role: "value.interval",
name: "Report Interval",
},
native: {},
},
],
10: [
"solarRadiation",
{
type: "state",
common: {
type: "number",
unit: "W/m^2",
read: true,
write: false,
role: "value.radiation",
name: "Solar Radiation",
},
native: {},
},
],
11: [
"localDayRainAccumulation",
{
type: "state",
common: {
type: "number",
unit: "mm",
read: true,
write: false,
role: "value.precipitation.day",
name: "Local Day Rain Accumulation",
},
native: {},
},
],
12: [
"precipitationType",
{
type: "state",
common: {
type: "mixed",
states: {
0: "None",
1: "Rain",
2: "Hail",
3: "Rain/Hail",
},
unit: "",
read: true,
write: false,
role: "value.precipitation.type",
name: "Precipitation Type",
},
native: {},
},
],
13: [
"windSampleInterval",
{
type: "state",
common: {
type: "number",
unit: " s",
read: true,
write: false,
role: "value.interval",
name: "Wind Sample Interval",
},
native: {},
},
],
},
firmware_revision: {
0: [
"firmware_revision",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "state",
name: "Firmware revision",
},
native: {},
},
],
},
};
messages.obs_st = {
name: "Observation (Tempest)",
obs: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
1: [
"windLull",
{
type: "state",
common: {
type: "number",
unit: "m/s",
read: true,
write: false,
role: "value.speed.wind.lull",
name: "Wind Lull (minimum 3 second sample)",
},
native: {},
},
],
2: [
"windAvg",
{
type: "state",
common: {
type: "number",
unit: "m/s",
read: true,
write: false,
role: "value.speed.wind",
name: "Wind Avg (average over report interval)",
},
native: {},
},
],
3: [
"windGust",
{
type: "state",
common: {
type: "number",
unit: "m/s",
read: true,
write: false,
role: "value.speed.wind.gust",
name: "Wind Gust (maximum 3 second sample)",
},
native: {},
},
],
4: [
"windDirection",
{
type: "state",
common: {
type: "number",
unit: "°",
read: true,
write: false,
role: "value.direction.wind",
name: "Wind Direction",
},
native: {},
},
],
5: [
"windSampleInterval",
{
type: "state",
common: {
type: "number",
unit: "s",
read: true,
write: false,
role: "value.interval",
name: "Wind Sample Interval",
},
native: {},
},
],
6: [
"stationPressure",
{
type: "state",
common: {
type: "number",
unit: "hPa",
read: true,
write: false,
role: "value.pressure",
name: "Station pressure (raw)",
},
native: {},
},
],
7: [
"airTemperature",
{
type: "state",
common: {
type: "number",
unit: "°C",
read: true,
write: false,
role: "value.temperature",
name: "Air Temperature",
},
native: {},
},
],
8: [
"relativeHumidity",
{
type: "state",
common: {
type: "number",
unit: "%",
read: true,
write: false,
role: "value.humidity",
name: "Relative Humidity",
},
native: {},
},
],
9: [
"illuminance",
{
type: "state",
common: {
type: "number",
unit: "Lux",
read: true,
write: false,
role: "value.illuminance",
name: "Illuminance",
},
native: {},
},
],
10: [
"UV",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value.uv",
name: "UV Index",
},
native: {},
},
],
11: [
"solarRadiation",
{
type: "state",
common: {
type: "number",
unit: "W/m^2",
read: true,
write: false,
role: "value.radiation",
name: "Solar Radiation",
},
native: {},
},
],
12: [
"precipAccumulated",
{
type: "state",
common: {
type: "number",
unit: "mm",
read: true,
write: false,
role: "value.precipitation.interval",
name: "Precipitation Accumulated",
},
native: {},
},
],
13: [
"precipitationType",
{
type: "state",
common: {
type: "mixed",
states: {
0: "None",
1: "Rain",
2: "Hail",
3: "Rain/Hail",
},
unit: "",
read: true,
write: false,
role: "value.precipitation.type",
name: "Precipitation Type",
},
native: {},
},
],
14: [
"lightningStrikeAvgDistance",
{
type: "state",
common: {
type: "number",
unit: "km",
read: true,
write: false,
role: "value.distance",
name: "Lightning Strike Average Distance",
},
native: {},
},
],
15: [
"lightningStrikeCount",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "Lightning Strike Count",
},
native: {},
},
],
16: [
"battery",
{
type: "state",
common: {
type: "number",
unit: "V",
read: true,
write: false,
role: "value.battery",
name: "Battery",
},
native: {},
},
],
17: [
"reportInterval",
{
type: "state",
common: {
type: "number",
unit: "min",
read: true,
write: false,
role: "value.interval",
name: "Report Interval",
},
native: {},
},
],
},
firmware_revision: {
0: [
"firmware_revision",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "state",
name: "Firmware revision",
},
native: {},
},
],
},
};
messages.device_status = {
name: "Status (device)",
timestamp: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
},
uptime: {
0: [
"uptime",
{
type: "state",
common: {
type: "number",
unit: "s",
read: true,
write: false,
role: "value",
name: "Uptime",
},
native: {},
},
],
},
voltage: {
0: [
"voltage",
{
type: "state",
common: {
type: "number",
unit: " V",
read: true,
write: false,
role: "value.battery",
name: "Voltage",
},
native: {},
},
],
},
firmware_revision: {
0: [
"firmware_revision",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "Firmware revision",
},
native: {},
},
],
},
rssi: {
0: [
"rssi",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "RSSI value",
},
native: {},
},
],
},
hub_rssi: {
0: [
"hub_rssi",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "Hub RSSI value",
},
native: {},
},
],
},
sensor_status: {
// 0x00000000 All Sensors OK, 0x00000001 lightning failed, 0x00000002 lightning noise, 0x00000004 lightning disturber, 0x00000008 pressure failed, 0x00000010 temperature failed, 0x00000020 rh failed, 0x00000040 wind failed, 0x00000080 precip failed, 0x00000100 light/uv failed, 0x00008000 power booster depleted, 0x00010000 power booster shore power
0: [
"sensor_status",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value.status",
name: "Sensor status",
},
native: {},
},
],
},
debug: {
0: [
"debug",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "indicator.debug",
name: "Debug",
},
native: {},
},
],
},
};
messages.hub_status = {
name: "Status (hub)",
firmware_revision: {
0: [
"firmware_revision",
{
type: "state",
common: {
type: "string",
unit: "",
read: true,
write: false,
role: "value",
name: "Firmware revision",
},
native: {},
},
],
},
uptime: {
0: [
"uptime",
{
type: "state",
common: {
type: "number",
unit: "s",
read: true,
write: false,
role: "value",
name: "Uptime",
},
native: {},
},
],
},
rssi: {
0: [
"rssi",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "RSSI value",
},
native: {},
},
],
},
timestamp: {
0: [
"timestamp",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value.time",
name: "Time of event",
},
native: {},
},
],
},
reset_flags: {
0: [
"reset_flags",
{
type: "state",
common: {
type: "string",
read: true,
write: false,
role: "text",
name: "Reset flags",
},
native:
{} /* BOR Brownout reset, PIN PIN reset, POR Power reset, SFT Software reset, WDG Watchdog reset, WWD Window watchdog reset, LPW Low-power reset */,
},
],
},
seq: {
0: [
"seq",
{
type: "state",
common: {
type: "number",
read: true,
write: false,
role: "value",
name: "Seq",
},
native: {},
},
],
},
fs: {
0: [
"fs.internal_1",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "internal 1",
},
native: {},
},
],
1: [
"fs.internal_2",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "internal 2",
},
native: {},
},
],
2: [
"fs.internal_3",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "internal 3",
},
native: {},
},
],
3: [
"fs.internal_4",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "internal 4",
},
native: {},
},
],
},
radio_stats: {
0: [
"radio_stats.version",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "Version",
},
native: {},
},
],
1: [
"radio_stats.rebootCount",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "Reboot Count",
},
native: {},
},
],
2: [
"radio_stats.I2CBusErrorCount",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "I2C Bus Error Count",
},
native: {},
},
],
3: [
"radio_stats.radioStatus",
{
type: "state",
common: {
type: "mixed",
states: {
0: "Radio Off",
1: "Radio On",
3: "Radio Active",
7: "BLE Connected",
},
read: true,
write: false,
role: "value.status",
name: "Radio Status",
},
native: {},
},
],
4: [
"radio_stats.radioNetworkID",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "state",
name: "Radio Network ID",
},
native: {},
},
],
},
mqtt_stats: {
0: [
"mqtt_stats.internal_1",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "internal 1",
},
native: {},
},
],
1: [
"mqtt_stats.internal_2",
{
type: "state",
common: {
type: "number",
unit: "",
read: true,
write: false,
role: "value",
name: "internal 2",
},
native: {},
},
],
},
};
// Device type by first two characters of serial number
const devices = {
HB: "Hub",
AR: "Air",
SK: "Sky",
ST: "Tempest",
};
const sensorfails = {
0b000000001: "Lightning failed",
0b000000010: "Lightning noise",
0b000000100: "Lightning disturber",
0b000001000: "Pressure failed",
0b000010000: "Temperature failed",
0b000100000: "Humidity failed",
0b001000000: "Wind failed",
0b010000000: "Precipitation failed",
0b100000000: "Light/uv failed",
};
const powermodes = {
0b0000100000000000: 1,
0b0001000000000000: 2,
0b0010000000000000: 3,
};
// Wind directions in letters
const windDirections = [
"N",
"NNE",
"NE",
"ENE",
"E",
"ESE",
"SE",
"SSE",
"S",
"SSW",
"SW",
"WSW",
"W",
"WNW",
"NW",
"NNW",
"N",
];
const minCalcs = [
"airTemperature",
"stationPressure",
"relativeHumidity",
"lightningStrikeAvgDistance",
"distance",
];
const maxCalcs = [
"airTemperature",
"windLull",
"windGust",
"windAvg",
"windSpeed",
"illuminance",
"UV",
"solarRadiation",
"stationPressure",
"relativeHumidity",
"lightningStrikeCount",
"energy",
];
module.exports = {
messages,
devices,
windDirections,
minCalcs,
maxCalcs,
sensorfails,
powermodes,
};