This Home Assistant configuration allows you to get the data directly from your own PWS (personal weather station). So this does NOT require that you register your PWS to cloud accounts, like WeatherUnderground (support will finish in the near future!), Ecowitt, WeatherCloud, WOW (takes weeks to get key), etc, or the use of WeeWX (extra software).
This configuration will directly capture the data from your weather station!
In general, if the station is supplied with EasyWeather
software (version 1.4.x, 1.5.x, 1.6.x), it is likely that the station will work with this HA Configuration!
Your PWS needs to be connected to your network. This can be done by using WS View app.
If supported by your PWS, connect your PWS with WS View Plus
(and also the 'older' WS View
or WS Tool
) to your router by wifi, so that your PWS can upload weather data to Home Assistant.
- Install
WS View Plus
on your mobile device - , or
WS View
- , or
WS Tool
- Follow the instructions to connect your PWS to your router
- Goto to Device List in Menu and choose your PWS
- Click on Next until you are on on the
Customized
page - Choose
Enable
- For
Protocol Type Same As
chooseEcowitt
- With Ecowitt the data will be send with a POST. Wunderground is using a GET, which is not (yet) supported by a HA webhook.
- For
Server IP / Hostname
enter your HA Server ip address, eg. 192.168.0.10 - For
Path
enter:/api/webhook/pws
Port
enter a port number8123
Upload Interval
, leave it60
seconds- Click on
Save
Use the latest version of HA!
Use the configuration.yaml to setup the PWS entities.
Use the customize.yaml to get appropriate icons for the entities
ID | Type | UoM | Description |
---|---|---|---|
sensor.pws_temperature |
Float | °C | Outdoor temperature |
sensor.pws_temperature_indoor |
Float | °C | Indoor temperature |
sensor.pws_humidity |
Int | % | Outdoor humidity |
sensor.pws_humidity_indoor |
Int | % | Indoor humidity |
sensor.pws_barometer_relative |
Float | hPa | Pressure (relative) |
sensor.pws_barometer_absolute |
Float | hPa | Pressure (absolute) |
sensor.pws_rainrate |
Float | mm/h | Current rain rate |
sensor.pws_rain |
Float | mm | Rain daily total |
sensor.pws_solar_radiation |
Float | W/m2 | Solar radiation |
sensor.pws_uv |
Int | UV Index | UV Index |
sensor.pws_wind_speed |
Float | m/s | Wind speed |
sensor.pws_wind_gust |
Float | m/s | Wind gust |
sensor.pws_wind_direction |
Int | ° | Wind direction |
sensor.pws_wind_direction_text |
Text | Wind direction in text, like 'NNE', 'N', 'SSW', 'SW', etc. (calculated, based on sensor.pws_wind_direction ) |
|
sensor.pws_stationtype |
Text | Firmware name/version, eg. EasyWeatherV1.6.4 |
|
sensor.pws_model |
Text | Weatherstation model, eg. WS2900 |
|
sensor.pws_dewpoint |
Float | °C | Dew point (calculated, because it is not supported in the Ecowitt protocol) |
sensor.pws_windchill |
Float | °C | Windchill (calculated, because it is not supported in the Ecowitt protocol) |
sensor.pws_heat_index |
Float | °C | Heat index (calculated, based on sensor.pws_temperature and sensor.pws_humidity ) |
sensor.pws_platform |
Text | HA platform in this configuration, eg. webhook (for debugging) |
|
sensor.pws_webhook_id |
Text | HA name for this webhook in the configuration, pws (for debugging) |
Example of data received from the PWS:
Data: {
"PASSKEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"baromabsin": "30.039",
"baromrelin": "30.068",
"dailyrainin": "0.921",
"dateutc": "2022-09-17 21:19:41",
"eventrainin": "1.461",
"hourlyrainin": "0.031",
"humidity": "95",
"humidityin": "59",
"maxdailygust": "19.5",
"model": "WS2900",
"monthlyrainin": "3.461",
"rainratein": "0.000",
"solarradiation": "0.00",
"stationtype": "EasyWeatherV1.6.4",
"tempf": "52.9",
"tempinf": "68.2",
"totalrainin": "131.039",
"uv": "0",
"weeklyrainin": "1.472",
"winddir": "173",
"windgustmph": "1.1",
"windspeedmph": "0.9",
"yearlyrainin": "131.039"
}
Data can be retrieved by using this general automation:
alias: Webhook Debugger
description: PWS Debugger
trigger:
- platform: webhook
webhook_id: pws
action:
- service: persistent_notification.create
data_template:
message: |-
{% if 'data' in trigger %}
Data: {{ dict(trigger.data)|tojson }}
{% elif 'json' in trigger %}
JSON: {{ dict(trigger.json)|tojson }}
{% endif %} {% if 'query' in trigger and trigger.query|length > 0 %}
Query: {{ dict(trigger.query)|tojson }}
{% endif %}