homebridge-weatherflow-tempest
v5.0.1
Published
Exposes WeatherFlow Tempest Station data as Temperature Sensors, Light Sensors, Humidity Sensors and Fan Sensors (for Wind Speed).
Maintainers
Readme
Homebridge WeatherFlow Tempest Plugin
Homebridge Plugin providing basic WeatherFlow Tempest support. Exposing 7 Acessories.
- Temperature Sensor
- Humidity Sensor
- Light Sensor
- Motion Sensor (triggered by user configured value)
- Occupancy Sensor (triggered by user configured value)
- Fan (expressed as Rotation Speed - Wind Speed 0-100mph)
- Battery Sensor (added to
air_temperatureTemperature sensor)
Setup and Parameters
Local API is now supported which requires no authentication. If you choose to use the non-local HTTP API you will need to create an account at https://tempestwx.com/ and then generate a Personal Use Token https://tempestwx.com/settings/tokens.
name: (Required) Must always be set toWeatherFlow Tempest Platform.local_api: (Required) Use the Local API versus HTTP API.local_api_port: (Optional, Local API only) UDP port to listen on for Tempest hub broadcasts. Defaults to50222. Only change this if you need to remap the port (e.g., in a Docker container or behind a UDP relay).
Firewall Configuration (Required for Local API)
The Tempest hub broadcasts weather observations via UDP on port 50222 (or your configured
local_api_port). The host running Homebridge must allow incoming UDP traffic on this port or the plugin will not receive any data.
Important: The Tempest hub uses UDP broadcast, so the Homebridge host must be on the same Layer 2 network (subnet/VLAN) as the hub. Broadcasts do not cross routers or VLANs without additional configuration (e.g., a UDP relay/proxy).
Linux (ufw):
sudo ufw allow 50222/udp
Linux (firewalld):
sudo firewall-cmd --permanent --add-port=50222/udp sudo firewall-cmd --reload
Linux (iptables):
sudo iptables -A INPUT -p udp --dport 50222 -j ACCEPT
macOS: If the macOS application firewall is enabled, ensure that Node.js (or the Homebridge process) is allowed to accept incoming connections. You may be prompted automatically on first run.
Docker / Containers: You must map UDP port 50222 into the container:
docker run ... -p 50222:50222/udp ...
token: (Required for HTTP API) Oauth2 Personal Use Token, create via your tempestwx account.station_id: (Required for HTTP API) The station ID you are pulling weather data from.interval: (Required for HTTP API) How often to poll the Tempest REST API. Default 10 seconds. Minimum every second.local_api_shared: (Optional) enable multicast. Will reuse the address, even if another process has already bound a socket on it, but only one socket can receive the data. Default: False.sensors: (Required) An array of sensors to create. This is dynamic incase you want to target different temperature or wind speed attributes.sensors[].name: (Required) Display name of Sensor in Apple Home.sensors[].sensor_type: (Required) The type of Home Sensor to create. There are 6 options ["Temperature Sensor", "Light Sensor", "Humidity Sensor", "Fan", "Motion Sensor", "Occupancy Sensor"].sensors[].{1}_properties.value_key: (Required) Which REST API response body key to target for its value. You can find the available value_keys in the table below.sensors[].motion_properties.trigger_value: (Required with Motion Sensor) At what point (value) to trigger motion detected on/off. Minimum 1.sensors[].occupancy_properties.trigger_value: (Required with Occupancy Sensor) At what point (value) to trigger occupancy detected on/off. Minimum 0.sensors[].contact_properties.trigger_distance: (Required with Contact Sensor) The minimum distance (in kilometers) at which the strike was detected to activate the contact sensor.
{1} Replace with Sensor: temperature, humidity, light, fan
sensor_type {2} | value_key | metric units | std units | additional_properties | Typ metric trigger | Typ std trigger | Notes
:-- | :--- | :--: | :--: | :--- | :--: | :--: | :---
Temperature Sensor | air_temperature | C | F | NA | NA | NA | set by UI preferences
| feels_like | C | F | NA | NA | NA | set by UI preferences
| wind_chill | C | F | NA | NA | NA | set by UI preferences
| dew_point | C | F | NA | NA | NA | set by UI preferences
Humidity Sensor | relative_humidity | % | % | NA | NA | NA |
Light Sensor | brightness | lux | lux | NA | NA | NA |
Fan | wind_avg | m/s | mi/hr | NA | NA | NA | wind_avg speed reported as Fan %
Motion Sensor | wind_gust | m/s | mi/hr | motion_trigger_value | 5 | 10 |
Occupancy Sensor {3}{4} | barometric_pressure | mb | inHg | occupancy_trigger_value | 1000 | 30 |
| precip | mm/min | in/hr | occupancy_trigger_value | 0.1 | 0.25 |
| precip_accum_local_day | mm | in | occupancy_trigger_value | 25 | 1 | Not available with Local API
| solar_radiation | W/m^2 | W/m^2 | occupancy_trigger_value | 1000| 1000 |
| uv | Index | Index | occupancy_trigger_value | 3 | 3 |
| wind_direction | degrees | degrees | occupancy_trigger_value | 360 | 360 |
{2} Reference: https://weatherflow.github.io/Tempest/api/swagger/#!/observations/getStationObservation
{3} Reference Wiki for details on how to view Occupancy Sensor values with iOS 16.x and MacOS Ventura 13.x.
{4} NOTE: There is a current limitation with v3.0.0 and v4.0.0 of the plug-in in that HomeKit accessory names are set when the accessory is initially added and cannot be dynamically updated. The accessories are correctly displayed and updated in the Homebridge "Accessories" tab of the webpage interface. Occupancy sensors trigger_value status is correctly displayed in both HomeKit and Homebridge.
Local API Config Example
{
"name": "WeatherFlow Tempest Platform",
"local_api": true,
"local_api_port": 50222,
"station_id": 10000,
"units": "Standard",
"local_api_shared": false,
"sensors": [
{
"name": "Temperature",
"sensor_type": "Temperature Sensor",
"temperature_properties": {
"value_key": "air_temperature"
}
},
{
"name": "Relative Humidity",
"sensor_type": "Humidity Sensor",
"humidity_properties": {
"value_key": "relative_humidity"
}
},
{
"name": "Light Level",
"sensor_type": "Light Sensor",
"light_properties": {
"value_key": "brightness"
}
},
{
"name": "Wind Speed",
"sensor_type": "Fan",
"fan_properties": {
"value_key": "wind_avg"
}
},
{
"name": "Wind Gust",
"sensor_type": "Motion Sensor",
"motion_properties": {
"value_key": "wind_gust",
"trigger_value": 10
}
},
{
"name": "Barometer",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "barometric_pressure",
"trigger_value": 30
}
},
{
"name": "Solar Radiation",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "solar_radiation",
"trigger_value": 1000
}
},
{
"name": "UV",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "uv",
"trigger_value": 3
}
},
{
"name": "Precipitation Rate",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "precip",
"trigger_value": 0.25
}
},
{
"name": "Precipitation Today",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "precip_accum_local_day",
"trigger_value": 1
}
},
{
"name": "Wind Direction",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "wind_direction",
"trigger_value": 360
}
},
{
"name": "Lightening Detector",
"sensor_type": "Contact Sensor",
"contact_properties": {
"trigger_distance": 10
}
}
],
"platform": "WeatherFlowTempest"
}HTTP API Config Example
{
"name": "WeatherFlow Tempest Platform",
"local_api": false,
"token": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"station_id": 10000,
"interval": 10,
"units": "Standard",
"local_api_shared": false,
"sensors": [
{
"name": "Temperature",
"sensor_type": "Temperature Sensor",
"temperature_properties": {
"value_key": "air_temperature"
}
},
{
"name": "Feels Like",
"sensor_type": "Temperature Sensor",
"temperature_properties": {
"value_key": "feels_like"
}
},
{
"name": "Dew Point",
"sensor_type": "Temperature Sensor",
"temperature_properties": {
"value_key": "dew_point"
}
},
{
"name": "Relative Humidity",
"sensor_type": "Humidity Sensor",
"humidity_properties": {
"value_key": "relative_humidity"
}
},
{
"name": "Light Level",
"sensor_type": "Light Sensor",
"light_properties": {
"value_key": "brightness"
}
},
{
"name": "Wind Speed",
"sensor_type": "Fan",
"fan_properties": {
"value_key": "wind_avg"
}
},
{
"name": "Wind Gust",
"sensor_type": "Motion Sensor",
"motion_properties": {
"value_key": "wind_gust",
"trigger_value": 10
}
},
{
"name": "Barometer",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "barometric_pressure",
"trigger_value": 30
}
},
{
"name": "Solar Radiation",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "solar_radiation",
"trigger_value": 1000
}
},
{
"name": "UV",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "uv",
"trigger_value": 3
}
},
{
"name": "Precipitation Rate",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "precip",
"trigger_value": 0.25
}
},
{
"name": "Precipitation Today",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "precip_accum_local_day",
"trigger_value": 1
}
},
{
"name": "Wind Direction",
"sensor_type": "Occupancy Sensor",
"occupancy_properties": {
"value_key": "wind_direction",
"trigger_value": 360
}
},
{
"name": "Lightening Detector",
"sensor_type": "Contact Sensor",
"contact_properties": {
"trigger_distance": 10
}
}
],
"platform": "WeatherFlowTempest"
}