尝试在 Ubuntu 上使用 TEMPer USB 温度计

尝试在 Ubuntu 上使用 TEMPer USB 温度计

我有一个价值 12 美元的 USB 记忆棒,可以记录温度(在设备本身上)。

有关详细信息,请参阅http://www.pcsensor.com/usb-thermometers/gold-temper.html

我下载了它的软件,它在 Windows 上运行良好- 目前是 Win-10 Insider Preview 17945 或最新的“FAST”Win-10...(现在,我使用的是 Linux)

当我启动 Ubuntu 17.10 并编译所提供的软件(makefile、C 程序等)时,我得到了

$ temper232    
/dev/ttyUSB0: No such file or directory

一场lsusb演出

Bus 002 Device 004: ID 0c45:7401 Microdia TEMPer Temperature Sensor     

该 C 程序有一行:

#define MODEMDEVICE "/dev/ttyUSB0"     

$ dmesg | grep -i temper    shows     
[    2.490091] usb 2-5.4: Product: TEMPerV1.4
[    2.493187] input: RDing TEMPerV1.4 as /devices/pci0000:00/0000:00:13.2/usb2/2-5/2-5.4/2-5.4:1.0/0003:0C45:7401.0003/input/input5     
[    2.553603] hid-generic 0003:0C45:7401.0003: input,hidraw2: USB HID v1.10 Keyboard [RDing TEMPerV1.4] on usb-0000:00:13.2-5.4/input0     
[    2.555527] hid-generic 0003:0C45:7401.0004: hiddev1,hidraw3: USB HID v1.10 Device [RDing TEMPerV1.4] on usb-0000:00:13.2-5.4/input1  

那么我该怎么做呢?这似乎是一些 USB/串行端口问题。自从 Win 3.1 上的软盘以来,我再也没有使用过串行端口!

互联网上有很多关于此设备的信息,但大多数涉及 Python、Github、Raspberry-PI LAMP(我也有)、PERL(天哪!)以及一种我以前从未听说过的叫做“mock”的东西!一定要读一读!

我只希望基本设备能够响应温度,至少在终端上!

可以提供更多信息!只需询问!

答案1

这在 CentOS 上对我来说是有效的,但在 Ubuntu 上应该也是一样的。

首先安装pip install temperusb(如果失败,请尝试pip2 install temperusb明确请求使用 python2 pip)

然后你只需运行temper-poll它就会打印当前读数。

答案2

鉴于设备状态:“(注意:我们的软件仅支持 Windows 操作系统。)”,我不能 100% 确定这是否会起作用,但值得一试。

尝试一下这里的脚本:确定设备端口的命令- 找到温度传感器的正确设备路径。

然后再次完成 C 程序,但MODEMDEVICE=/path/to/device/在编译时在命令行中添加脚本结果。根据GNU Make,这应该覆盖程序源中的标志。

答案3

有一个支持某些设备的 Python 库:

https://github.com/urwen/temper

我有一个 USB 温度计,但该库不支持它。

我试图对基于 HID 的协议进行逆向工程,但是自从我上次尝试(2012 年?)以来,计算机现在拥有如此多的 USB 设备,我甚至无法隔离它以进行可靠的数据包捕获。

相反,我所拥有的型号上有一个“TXT”按钮,可以将设备切换为键盘并定期输入温度。

它在“TXT”模式下注册自己/dev/input/by-id/usb-413d_2107-event-kbd,所以我可以使用它sudo evtest --grab /dev/input/by-id/usb-413d_2107-event-kbd来捕获它的输入,然后通过一些按摩将击键转换为一系列摄氏温度值。

这是我的脚本,它抓取 USB 设备(当它处于“TXT”模式时)并将击键转换为温度值:

#!/bin/sh

device_path='/dev/input/by-id/usb-413d_2107-event-kbd'

sed_script='s/^Event:.*(EV_KEY), code \([0-9]\+\)\s.*\(KEY_\w\+\).*, value 1$/\2/p'


sudo evtest --grab "$device_path" | \
        sed --unbuffered --silent "$sed_script" | \
        while read key; do
                case "$key" in
                        KEY_[0-9]) printf '%s' "${key#KEY_}" ;;
                        KEY_DOT) printf '.' ;;
                        KEY_ENTER) printf '\n' ;;
                        *) printf 'X'
                esac
        done | \
        sed --unbuffered 's/X.*//; /^$/d' | \
        while read temp; do echo "$temp"; echo "$(date +%s) $temp" >>celsius.log; done

你的旅费可能会改变。

相关内容