一个基于事件异步库,用于在本地网络中读取Weatherflow气象系统发送的UDP数据包,无需依赖任何云服务。
项目描述
pyweatherflowudp
一个基于事件异步库,用于在本地网络中读取Weatherflow气象系统发送的UDP数据包,无需依赖任何云服务。
WeatherFlow传感器提供的原子数据都是原生公制的。为了帮助进行单位转换或进行计算和比较,本模块使用Pint的Quantity类作为大部分具有单位属性的类型。有关更多详细信息,请参阅下面的Quantity部分。
本模块利用PsychroLib帮助进行额外的天气计算,这些计算基于实际WeatherFlow传感器提供的各种数据点。虽然WeatherFlow通过应用程序和REST API提供了这些额外的数据点,但它们无法通过低级UDP数据包数据获取。而且,尽管已经发布了派生指标及其相关方程式列表,但实施起来可能相当复杂,例如计算露点温度。因此,PsychroLib是一个无价的资源,因为它已经完成了这项工作,并消除了在此模块中编写所有方程式(以及可能出错)的需求。您可能会注意到,其中一些值与WeatherFlow应用程序中显示的并不完全一致,因为存在不同的公式(有些简单,有些复杂)来计算派生的天气指标。这是因为WeatherFlow和PsychroLib可能会选择其中的一种有时很多不同的公式来得到所需的结果。然而,它们应该仍然相对接近。
支持设备
- Tempest
- 空气(未测试)
- 天空(未测试)
用法
与该模块及其发现的设备交互的主要方式是通过事件订阅。
它们目前支持以下类和事件,但您也可以在demo.py中看到如何将这些内容整合在一起。
客户端
WeatherFlowListener
- EVENT_DEVICE_DISCOVERED - 当首次发现新设备(中心、空气、天空或Tempest)时发出
本节中的类和事件可以从pyweatherflowudp.client
导入。
设备
HubDevice
- EVENT_LOAD_COMPLETE - 中心首次完成状态更新解析时发出
- EVENT_STATUS_UPDATE - 每次中心解析状态更新时发出,包括紧随EVENT_LOAD_COMPLETE之后
WeatherFlowSensorDevice
(AirDevice
、SkyDevice
和TempestDevice
的基类)
- EVENT_LOAD_COMPLETE - 传感器首次完成一个状态更新和一个观测解析时发出
- EVENT_OBSERVATION - 每次传感器解析观测时发出
- EVENT_STATUS_UPDATE - 每次传感器解析状态更新时发出
AirSensorType
(AirDevice
/ TempestDevice
)
- EVENT_STRIKE - 检测到闪电时发出
SkySensorType
(SkyDevice
/ TempestDevice
)
- EVENT_RAIN_START - 检测到雨水时发出
- EVENT_RAPID_WIND - 每3秒(或根据电池电压更频繁)发出一次,以告知当前风速
本节中的类和事件可以从pyweatherflowudp.device
导入。
属性和方法
WeatherFlowListener
属性 | 类型 | 描述 |
---|---|---|
devices | 列表 | 已知的设备。 |
hubs | 列表 | 已知的中心。 |
is_listening | 布尔值 | 如果监听器目前正在监控网络上的UDP数据包,则为True ,否则为False 。 |
sensors | 列表 | 已知的传感器。 |
WeatherFlowDevice
中心和传感器的基类。
属性 | 类型 | 描述 |
---|---|---|
firmware_revision | 字符串 | 设备的当前固件版本。 |
load_complete | 布尔值 | 如果设备已解析所有初始更新,则为True ,否则为False 。 |
model | 字符串 | 设备的型号(“中心”、“空气”、“天空”、“Tempest”)。 |
rssi | 数量 | 设备在分贝中的信号强度。 |
serial_number | 字符串 | 设备的序列号。 |
timestamp | 日期时间 | 上次状态更新的UTC时间戳。 |
up_since | 日期时间 | 设备启动并运行以来的UTC时间戳。 |
uptime | 整数 | 设备已运行和运行的时间(秒)。 |
HubDevice
属性 | 类型 | 描述 |
---|---|---|
reset_flags | 列表 | 网关当前的重置标志。 |
WeatherFlowSensorDevice
传感器的基础。
属性 | 类型 | 描述 |
---|---|---|
battery | 数量 | 当前电池电压。 |
hub_rssi | 数量 | 网关的信号强度(分贝)。 |
hub_sn | 字符串 | 传感器所属网关的序列号。 |
last_report | 日期时间 | 上一次观测的UTC时间戳。 |
sensor_status | 列表 | 传感器当前报告的问题列表。 |
report_interval | 数量 | 报告间隔(分钟)。 |
reset_flags | 列表 | 网关当前的重置标志。 |
AirSensorType
"空气"传感器测量基础(Air/Tempest)。
属性 | 类型 | 描述 |
---|---|---|
air_temperature | 数量 | 当前空气温度(摄氏度)。 |
last_lightning_strike_event | LightningStrikeEvent | 上一次闪电事件。 |
lightning_strike_average_distance | 数量 | 闪电的平均距离(公里)。 |
lightning_strike_count | 整数 | 闪电的数量。 |
relative_humidity | 数量 | 相对湿度百分比。 |
station_pressure | 数量 | 观测到的气压(毫巴)。 |
air_density* | 数量 | 计算出的空气密度(千克每立方米)。 |
delta_t* | 数量 | 计算出的Delta T(温差摄氏度)。 |
dew_point_temperature* | 数量 | 计算出的露点温度(摄氏度)。 |
heat_index* | 数量 | 计算出的热指数(摄氏度)。 |
vapor_pressure* | 数量 | 计算出的水汽压(毫巴)。 |
wet_bulb_temperature* | 数量 | 计算出的湿球温度(摄氏度)。 |
* 表示派生属性
method | 输入(类型) | 返回 | 描述 |
---|---|---|---|
calculate_cloud_base | altitude (Quantity) | 数量 | 计算到云层的估计海拔高度(平均海平面以上)。 |
calculate_freezing_level | altitude (Quantity) | 数量 | 计算温度在冰点(0°C/32°F)的平均海平面以上的估计海拔高度。 |
calculate_sea_level_pressure | altitude (Quantity) | 数量 | 计算海平面气压(毫巴)。 |
SkySensorType
"天空"传感器测量基础(Sky/Tempest)。
属性 | 类型 | 描述 |
---|---|---|
illuminance | 数量 | 当前照度(勒克斯)。 |
last_rain_start_event | RainStartEvent | 上一次降雨开始事件。 |
last_wind_event | WindEvent | 上一次风事件。 |
precipitation_type | PrecipitationType | 当前的降水类型:(无、雨、冰雹或雨冰雹)。 |
rain_accumulation_previous_minute | 数量 | 上一分钟的降雨累积量(毫米)。 |
rain_rate* | 数量 | 降雨率(基于上一分钟的累积量,毫米每小时)。 |
solar_radiation | 数量 | 太阳辐射(每立方米瓦特)。 |
uv | 整数 | 当前的UV指数。 |
wind_average | 数量 | 报告间隔内的平均风速(米每秒)。 |
wind_direction | 数量 | 报告间隔内的风向(度)。 |
wind_direction_cardinal | 字符串 | 风向(16风向罗盘)。 |
wind_gust | 数量 | 风速(最大3秒样本)以米每秒计。 |
wind_lull | 数量 | 风速(最小3秒样本)以米每秒计。 |
wind_sample_interval | 数量 | 风速样本间隔(秒)。 |
wind_speed | 数量 | 风速(米每秒)。 |
* 表示派生属性
TempestDevice
属性 | 类型 | 描述 |
---|---|---|
feels_like_temperature* | 数量 | 计算出的“感觉”温度(摄氏度)。 |
wind_chill_temperature* | 数量 | 计算出的风寒温度(摄氏度)。 |
* 表示派生属性
数量
pint.Quantity
类被用于与测量单位相关的设备属性。这允许从本地公制单位转换为用户选择的另一种单位,例如摄氏度到华氏度,这将产生另一个pint.Quantity
device.air_temperature.to("degF")
要获取属性的数值部分,只需附加一个.magnitude
(或短形式.m
)
device.air_temperature.m
您还可以使用.units
(或短形式.u
)来获取属性的单元部分
device.air_temperature.u
查看Pint 文档获取更多技巧。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建版本
pyweatherflowudp-1.4.5.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2d693f809c1780fed448b1d97836f0f873e4fbe3fefe1e054bd7f7c5828cf72b |
|
MD5 | a70ad1f301acab0c129e802268c4b58e |
|
BLAKE2b-256 | dfec554b6b1a08f9d2c1ec372a111b752db224b2ef795a900f11dbea775177aa |
pyweatherflowudp-1.4.5-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 78e7c4f888960fdae1a6868a3dfd90f0440c5d75cf345e615172746ad1bfce20 |
|
MD5 | 3275efeb95080107468ea37b96c2191e |
|
BLAKE2b-256 | e0264cf4ef16aaf1377fbbed711872a0abec0285a7ee397b9c8c99b4e75bf2a5 |