Python+Pyvantagepro:TempOut在低于0华氏度时“翻转”

2024-04-25 01:29:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有Davis Vantagepro 2气象站,我正在使用pyvantagepro(pip install pyvantagepro/GitHub)从终端设备获取当前数据。当外界温度保持在0华氏度以上时,一切正常,但不幸的是,在芬兰,这只和7月份一样。当温度低于0华氏度时,pyvantagepro返回的温度值约为6549.098(3620.61摄氏度)。你知道吗

某个地方有人提出,问题可能是温度是无符号16位整数,这就是为什么它在那个点上翻转。你知道吗

我不知道该怎么修。我试图改变pyvantagepro的循环格式分析器.py文件从('TempOut','H')到('TempOut','I'),希望能容纳更大的值,但之后就什么都不起作用了。你知道吗

有什么建议可以让它工作吗?我没有特别的理由使用这个,只有这个图书馆,所以请随意建议更好的图书馆(更好的是在易于使用和确认返回温度低于0华氏度正确)。你知道吗

如果有一个(404),我会把这个贴在projects问题跟踪器上。你知道吗

谢谢。你知道吗

[编辑]

它是固定在当前版本,现在有问题跟踪器。你知道吗


Tags: installpip数据github图书馆温度建议月份
1条回答
网友
1楼 · 发布于 2024-04-25 01:29:38

根据python struct documentation,格式说明符HI都用于无符号数据类型。所发生的事情是,当数字降到零下时,unsigned变量环绕着数字线,变成非常大的正数数字。你知道吗

很可能您可以尝试在分析器.py格式化有符号16位int的字符串,但是您可能会注意到一些奇怪的值:

val = struct.pack('H', 100)
struct.unpack('h', val)[0]
# 100, YAY!

val = struct.pack('H', 32768)
struct.unpack('h', val)[0]
# -32768, UMMM?

当然,这在芬兰可能不是问题,因为一周中的大部分时间温度都可能低于3276.7华氏度-但是修改客户端库有点难看,因为这意味着每次客户端提供更新时都必须这样做。你知道吗

如果变量已经包装并减去了正确的数量,那么最好在自己的代码测试中应用一些基本的修复。例如,请看以下内容:

struct.unpack('H', struct.pack('h', -1))[0]
# 65535

struct.unpack('H', struct.pack('h', -1))[0] - 65536
# -1

当然,我们只想减去65000当我们知道我们的价值已经包装。由于客户端库似乎将接收到的值除以10得到一个小数点,因此可以执行以下操作:

if temp_value > 3276.7:
    temp_value -= 6553.5

这里的常量值是基于无符号short(65535)和有符号short(该值的一半)的最大值。从长远来看,联系仪器制造商来描述您的问题并看看他们的建议也是值得的。你知道吗

相关问题 更多 >