Skip to main content

从 misc 读取温度数据。具有最小依赖性的“TEMPer”设备

项目描述

脾气.py

PCsensor 销售的 USB 温度和温度/湿度传感器可从母网站 ( http://pcsensor.com/usb-temperature-humidity.html )、亚马逊和 EBay 广泛购买。

设计

有几个支持这些传感器的开源软件项目,有时包括复杂的监控和绘图软件。与这些项目不同的是,该项目的目标是简单地从传感器读取数据而不做任何其他事情,考虑到以下约束:

  • 必须在Linux下工作,
  • 必须使用 Python 3,
  • 尽可能避免使用第三方软件,
  • 所有第三方软件必须作为标准 Debian 软件包提供。

未使用 libusb

我尝试使用 libusb (apt-get install python3-usb; "import usb.core"),它为 USB 设备提供了一个非常好的接口。不幸的是,我有一个温度计不适用于原始 USB,并且需要通过 hidraw 设备访问;我有另一个温度计,它有一个未记录的 HID 协议,但可以通过串行 tty 访问。

不使用 hid 和 hidapi

我尝试使用 hid (apt-get install python3-hid) 和 hidapi (apt-get install python3-hidapi),这些对于我拥有的两个温度计都可以正常工作,但对于需要通过串行 tty 访问的温度计则不行。

使用 pySerial

虽然直接访问 HID 设备,但 pySerial 用于 TTY。该模块作为 Debian 软件包提供:sudo apt-get install python3-serial

支持的设备

我拥有五种来自 PCsensors 的设备。这些都由 temp.py 支持。

在下表中,“I”表示传感器位于 U 盘内部,“E”表示传感器位于插入 U 盘的电缆上。

产品 ID 固件 温度 笔记
脾气 0c45:7401 TEMPerF1.4 金属
脾气 413d:2107 TEMPerGold_V3.1 金属
温度 413d:2107 TEMPerX_V3.1 白色塑料
温度2 413d:2107 TEMPerX_V3.3 IE 白色塑料
TEMPer1F 413d:2107 TEMPerX_V3.3 白色塑料
TEMPerX232 1a86:5523 TEMPerX232_V2.0 IE 白色塑料
TEMPer1V1.1 0c45:7401 TEMPer1F1.1Per1F 金属

1a86:5523 设备可能会识别为 413d:2107,具体取决于按钮按下,但在该模式下无法成功使用。

如果您尝试使用其他使用 libusb 的软件,则 hidraw 设备可能会断开连接。在这种情况下,请移除并重新插入 U 盘。

TEMPer1F 只有一个外部传感器,但无法检测到它是外部的,因此报告为内部温度。

脾气

这是一个金属 U 盘,标有“TEMPer”,一侧带有温度计标志,另一侧带有“TEMPer”。USB 连接器对面的一端有一个螺丝孔。没有湿度检测器,它看起来是防水的,我已经将我的暂时浸入冰水和沸水中。

温度

这是一个白色塑料 U 盘,标有“TEMPerHUM”、“-40C - +85C”和“0-100%RH”;带有标记为“TXT”的蓝色按钮。反面是“PCsensor”。该型号末端没有插孔。

按下按钮时,红色 LED 将闪烁,同时发送以下样式的消息(温度线每秒重复一次)。

www.pcsensor.com
temperx v3.1
caps lock:on/off/++
num lock:off/on/--
type:inner-h2
inner-temperinner-humidityinterval
32.73 [c]36.82 [%rh]1s

再次按下按钮时,LED 将熄灭或呈红色常亮。这是 temp.py 使用的模式。

温度2

物理描述:白色塑料U盘标有“TEMPer2”、“-40C - +125C”;带有标记为“TXT”的红色按钮。反面是“PCsensor”。该型号的末端有一个用于外部传感器的插孔。

注意:按下按钮时,红色 LED 将闪烁,同时发送以下形式的消息(温度线每秒重复一次)。

没有外部传感器:

www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:inner-tx
inner-tempinterval
27.93 [c]1s

使用外部传感器:

www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:inner-tx;outer-tx
inner-tempintervalinterval
27.18 [c]29.62 [c]1s

该程序使用 LED 熄灭或红色常亮的模式。

TEMPer1F

标有“TEMPer1F”、“-40C - +125C”的白色塑料 U 盘;带有标记为“TXT”的粉红色按钮。背面为“PCsensor”。该型号有一个用于外部传感器的插孔,但没有内部传感器。

按下按钮时,红色 LED 将闪烁,同时发送以下形式的消息(温度线每 1 秒重复一次)。

未插入探头:

www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:unknown
1s

插入探头后:

www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:outer-tx
outer-tempinterval
24.93 [c]1s

该程序使用 LED 熄灭或红色常亮的模式。

TEMPerX232

标有“TEMPerX232”、“0-100%RH”和“-40 - +85C”的白色塑料 U 盘;带有标有“按下”的绿色按钮。反面是“PCsensor”。在 USB 连接器对面的一端,有一个用于外部温度传感器的插孔(我没有也没有尝试过)。

按住按钮直到红色 LED 常亮时,蓝色 LED 将每秒闪烁一次。在此模式下,USB vendor:product 更改为 413d:2107,但只有一个 HID 设备可用,发送到 hidraw 设备的协议被拒绝并出现错误。

当 LED 呈蓝色闪烁并按下按钮时,将发送以下信息(温度线每秒重复一次)。

www.PCsensor.com
TEMPerX232-V2.0
type:inner-H2
inner-temperinner-humidityinterval
30.48 [C]40.19 [%RH]1

按住按钮直到红色 LED 常亮时,绿色 LED 将每秒闪烁一次。这是 temp.py 使用的模式。在这种模式下,如果向串口设备发送“Help”,将返回以下内容:

   >>PCsensor<<
Welcome to use TEMPerX232!
Firmware Version:TEMPerX232_V2.0
The command is:
    ReadTemp                     -->read temperature,temp_value = sensor_value + calibration
    ReadCalib                    -->read calibration
    SetCalib-type:xx.x,xx.x>     -->set calibration, xx.x(-10.0~+10.0)
    EraseFlash                   -->erase calibration
    Version                      -->read firmware version
    ReadType                     -->read the sensor type
    ReadAlert-Temp               -->read temp alert value
    SetTempUpperAlert-type:xx.xx>-->set temp upper alert value,xx.xx(-40.00~+85.00)
    SetTempLowerAlert-type:xx.xx>-->set temp lower alert value,xx.xx(-40.00~+85.00)
    ReadAlert-Hum                -->read hum alert value
    SetHumUpperAlert-type:xx.xx> -->set hum upper alert value,xx.xx(00.00~99.99)
    SetHumLowerAlert-type:xx.xx> -->set hum lower alert value,xx.xx(00.00~99.99)
    SetMode-Temp:x>              -->set tempmode, x(0~1)
    ReadMode-Temp                -->read tempmode
    Help                         -->command help
    ?                            -->command help
The COM configuration is:
    Mode:       ASCII
    Baud Rate:  9600bps
    Data Bit:   8
    Parity Bit: None
    Stop Bit:   1
SHENZHEN RDing Tech CO.,LTD
www.PCsensor.com

这是 temp.py 使用的模式。我没有成功让该设备响应通过 HID 设备发送的任何命令。

在使用终端程序(例如,cu)时,我最初无法获得对 ReadTemp 的回复,但是 temp.py 中的示例没有任何问题,可能是因为在命令之后没有发送换行符。

示例命令输出

帮助

$ ./temper.py --help
usage: temper.py [-h] [-l] [--json] [--force VENDOR_ID:PRODUCT_ID]

temper

optional arguments:
-h, --help            show this help message and exit
-l, --list            List all USB devices
--json                Provide output as JSON
--force VENDOR_ID:PRODUCT_ID
                      Force the use of the hex id; ignore other ids

列出设备

在此示例中,其中一个设备没有附加 HID 驱动程序,因为我使用的是基于 libusb 的程序来访问它。

$ ./temper.py -l
Bus 001 Dev 023 413d:2107 * ??? ['hidraw0', 'hidraw1']
Bus 001 Dev 086 0c45:7401 * TEMPerV1.4 []
Bus 002 Dev 002 04d8:f5fe   TrueRNG ['ttyACM0']

温度

在此示例中,其中一个设备没有附加 HID 驱动程序,因为我使用的是基于 libusb 的程序来访问它。

$ ./temper.py
Bus 001 Dev 023 413d:2107 TEMPerX_V3.1 26.55C 79.79F 43.41%
Bus 001 Dev 086 0c45:7401 Error: no hid/tty devices available
$ ./temper.py --json
[
    {
        "path": "/sys/bus/usb/devices/1-1.2",
        "busnum": 1,
        "devnum": 23,
        "vendorid": 16701,
        "productid": 8455,
        "vendor_name": "",
        "product_name": "",
        "devices": [
            "hidraw0",
            "hidraw1"
        ],
        "ident": "TEMPerX_V3.1",
        "celsius": 26.55,
        "fahrenheit": 79.78999999999999,
        "humidity": 43.65
    },
    {
        "path": "/sys/bus/usb/devices/1-1.1.1",
        "busnum": 1,
        "devnum": 86,
        "vendorid": 3141,
        "productid": 29697,
        "vendor_name": "RDing",
        "product_name": "TEMPerV1.4",
        "devices": [
        ],
        "error": "no hid/tty devices available"
    }
]

可以使用 --list 选项生成类似的 JSON 输出。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

temp-py-0.0.3.tar.gz (10.1 kB 查看哈希

已上传 source

内置分布

temp_py-0.0.3-py2-none-any.whl (10.6 kB 查看哈希

已上传 py2