Orange PI PCにStretchを入れて、定期温度計測、webアップロード-temperが動かない時の対処

Stretchが出てた

いつの間にかStretchがリリースされていたので、設定してみます。

基本的には、

こちらの情報と同じに設定していきますが、Jessie からStretchに変わっているので若干変更しているところがあります。

Orange PIのパスワード

ユーザ名: orangepi

パスワード:orangepi

root のパスワードも orangepi

です。良く忘れるんで。

apt.sourceの設定

最初に登録のあった cnサイトを、jpサイトに書き換えました

# cat /etc/apt/sources.list
#deb http://ftp2.cn.debian.org/debian stretch main contrib non-free
#deb-src http://ftp2.cn.debian.org/debian stretch main contrib non-free
#deb http://ftp2.cn.debian.org/debian stretch-updates main contrib non-free
#deb-src http://ftp2.cn.debian.org/debian stretch-updates main contrib non-free

#deb http://security.debian.org/ stretch/updates main contrib non-free
#deb-src http://security.debian.org/ stretch/updates main contrib non-free

deb http://ftp.jp.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ stretch main contrib non-free

deb http://ftp.jp.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ stretch-updates main contrib non-free

deb http://ftp.jp.debian.org/debian/ stretch-backports main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ stretch-backports main contrib non-free

apt-get update

apt-get upgrade

にて、最新の状態を保ちます。

時刻を日本語表示に変更

Mon Jul 26 22:21:41 UTC 2021
root@OrangePi:/home/orangepi# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
root@OrangePi:/home/orangepi# date
Tue Jul 27 07:22:02 JST 2021

キーボードの日本語対応-うまくいかない

ssh接続で、ターミナル接続している時には気になりませんが、USB接続したキーボードは英語キーボードとして認識されています。

root@OrangePi:/home/orangepi# apt-get install keyboard-configuration
Otherを選択
Japaneseを選択

その後

dpkg-reconfigure keyboard-configuration

を実行し

Dellのキーボード使ってたんで、もしくはこちらで

もしくは、Japanese(OADG 109A)を選択

Jessieの時はこれでうまくいったはずなのですが、結局日本語キーマップにならずじまいでした。ちょっと不明だけど、SSH接続するんでもういいやと諦めて次へ進みます。

USB温度計準備

USB温度計をOrangePI PCへ挿入

dmesg

すると、USB温度計が認識しているのが分かります。

[   92.343374] usb 7-1: new full-speed USB device number 2 using ohci-platform
[   92.538464] usb 7-1: New USB device found, idVendor=413d, idProduct=2107, bcdDevice= 0.00
[   92.538482] usb 7-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[   92.548550] input: HID 413d:2107 as /devices/platform/soc/1c1c400.usb/usb7/7-1/7-1:1.0/0003:413D:2107.0003/input/input4
[   92.601302] hid-generic 0003:413D:2107.0003: input,hidraw2: USB HID v1.11 Keyboard [HID 413d:2107] on usb-1c1c400.usb-1/input0
[   92.606894] hid-generic 0003:413D:2107.0004: hiddev96,hidraw3: USB HID v1.10 Device [HID 413d:2107] on usb-1c1c400.usb-1/input1

USB温度計をコントロールするドライバをコンパイルするため、必要なアプリを取得します。

apt-get install build-essential libusb-0.1-4 libusb-dev git

git hubかあ温度測定ソースを取得します。

git clone https://github.com/bitplane/temper.git

ダウンロードしたtemper.c の時刻表示を変更します

# vi temper/temper.c

変更前

strftime(dt, 80, "%d-%b-%Y %H:%M", utc);

変更後

strftime(dt, 80, “%Y-%m-%d %H:%M:%S”, utc);

makeします

root@OrangePi:/home/orangepi# cd temper/
root@OrangePi:/home/orangepi/temper# make

temperが動かない

まれに動かないものがあるようです。

それを確かめるためには lsusbコマンドを打たなければなりません。

usbutilsをインストールします。

 apt-get install usbutils
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  adwaita-icon-theme at-spi2-core gnome-icon-theme gtk-update-icon-cache im-config libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0
  libaudio2 libcairo-gobject2 libcolord2 libcroco3 libdouble-conversion1 libegl1-mesa libepoxy0 libevdev2 libgail-common libgail18 libgbm1
  libgcroots0 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgles2-mesa libglew2.0 libglu1-mesa libgtk-3-0 libgtk-3-bin libgtk-3-common
  libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libice6 libinput-bin libinput10 libjson-glib-1.0-0 libjson-glib-1.0-common libllvm3.9
  libmariadbclient18 libmng1 libmtdev1 libpcre16-3 libqt4-dbus libqt4-designer libqt4-network libqt4-qt3support libqt4-script libqt4-sql
  libqt4-sql-mysql libqt4-xml libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5svg5 libqt5widgets5 libqt5x11extras5 libqtcore4
  libqtdbus4 libqtgui4 librest-0.7-0 librsvg2-2 librsvg2-common libsensors4 libsm6 libsoup-gnome2.4-1 libtxc-dxtn-s2tc libuim-custom2
  libuim-data libuim-plugins libuim-scm0 libuim8 libwacom-bin libwacom-common libwacom2 libwayland-client0 libwayland-cursor0
  libwayland-egl1-mesa libwayland-server0 libx11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1
  libxcb-present0 libxcb-randr0 libxcb-render-util0 libxcb-shape0 libxcb-sync1 libxcb-util0 libxcb-xfixes0 libxcb-xinerama0 libxcb-xkb1
  libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxft2 libxi6 libxinerama1 libxkbcommon-x11-0 libxkbcommon0 libxrandr2 libxshmfence1
  libxt6 libxtst6 libxxf86vm1 mesa-utils mysql-common qdbus qt-at-spi qt5-gtk-platformtheme qtchooser qtcore4-l10n qttranslations5-l10n
  uim-common uim-fep uim-gtk2.0 uim-gtk3 uim-qt uim-qt5 uim-utils uim-xim x11-common xkb-data

あたり製品を引いてしまいました。

Bus 007 Device 003: ID 413d:2107

がっかり。

このバージョンはtemperが動かないバージョンとして有名なんです。はずれ引いちゃいました。

動かす方法がないわけではないので、とりあえずやってみます。

ID 413d:2107 を設定する

HIDAPI をGitします。

HIDAPIは、アプリケーションがインターフェイスできるようにするマルチプラットフォームライブラリです。

signal11/hidapi
root@OrangePi:/home/orangepi# git clone https://github.com/signal11/hidapi
Cloning into 'hidapi'...
remote: Enumerating objects: 2006, done.
remote: Total 2006 (delta 0), reused 0 (delta 0), pack-reused 2006
Receiving objects: 100% (2006/2006), 2.73 MiB | 0 bytes/s, done.
Resolving deltas: 100% (1172/1172), done.

Makeするために必要なファイルをインストール

# apt install libusb-1.0-0-dev libudev-dev  cmake

シンボリックリンクを張る

# make -f Makefile-manual

# cp libhidapi-hidraw.so /usr/local/lib/

# ln -s /usr/local/lib/libhidapi-hidraw.so

root@OrangePi:/home/orangepi/hidapi/linux# make -f Makefile-manual
cc -Wall -g -fpic -c -I../hidapi `pkg-config libusb-1.0 --cflags` hid.c -o hid.o
g++ -Wall -g -fpic -c -I../hidapi `pkg-config libusb-1.0 --cflags` ../hidtest/hidtest.cpp -o ../hidtest/hidtest.o
g++ -Wall -g hid.o ../hidtest/hidtest.o `pkg-config libudev --libs` -lrt -o hidtest-hidraw
cc -Wall -g `pkg-config libudev --libs` -lrt -shared -fpic -Wl,-soname,libhidapi-hidraw.so.0 hid.o -o libhidapi-hidraw.so
root@OrangePi:/home/orangepi/hidapi/linux# cp libhidapi-hidraw.so /usr/local/lib/
root@OrangePi:/home/orangepi/hidapi/linux# ln -s /usr/local/lib/libhidapi-hidraw.so /usr/local/lib/libhidapi-hidraw.so.0

その後 git により、TEMPeredを取得します

git clone https://github.com/hughesr/TEMPered

最新のクローンしたソースではmac用に改変されているのだとか..。

今回はラズパイ(Linux用)で動かしたいので,Linuxで動いていたリビジョンまでコミットを戻していきます。

ラズパイとUSB温度計「TEMPer」(413d:2107)で温度を監視したいのだが,うまく動かない!?

git を見てみましたけど、私には分かりませんでした。この方の記事の通り進めたら、ちゃんと計測できるようになりました。大変ありがたいです。ありがとうございます。

  137  git clone https://github.com/hughesr/TEMPered
  138  cd TEMPered/
  139  ls
  140  git checkout hack-413d-2107
  141  git reset --hard 75aa1e2
  142  cmake .
  143  make
  144  ls
  145  make install
  146  tempered

温度計るとこんな感じで表示されます。

root@OrangePi:/home/orangepi/TEMPered# tempered
/dev/hidraw3 0: temperature 32.56 °C
/dev/hidraw3 1: Failed to get the temperature: Not enough data was read from the sensor.
/dev/hidraw3 1: no sensor data available

ntpの設定

ntpを設定します。

# apt-get install ntp

ntpq -pn すると、時刻同期の状況が分かります。

# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001
 1.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001
 2.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001
 3.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001
-173.255.192.10  129.7.1.66       2 u   12   64    1  150.811   -9.052   1.435
-38.229.54.9     172.16.21.35     2 u    9   64    1  178.537   -2.775   2.073
+162.159.200.123 10.23.8.4        3 u   12   64    1   59.450   -8.549   3.439
-167.179.96.146  43.162.219.88    2 u    9   64    1   18.533   -2.942   2.782
+157.245.125.229 129.6.15.30      2 u   11   64    1  162.530   -4.207   1.708
#138.68.201.49   205.161.200.3    3 u    9   64    1  114.760   -1.396   1.784
*133.130.121.141 133.243.238.163  2 u   11   64    1   19.865   -3.339   3.728
 74.6.168.73     208.71.46.33     2 u    8   64    1  113.001   -3.491   4.251
-66.220.9.122    .CDMA.           1 u   10   64    1  125.904   -5.413   3.677
-162.159.200.1   10.23.8.4        3 u   10   64    1   55.733   -5.601   3.206
-103.202.216.35  210.173.160.87   3 u   10   64    1   23.893   -4.868   2.060
#72.249.38.88    204.123.2.72     2 u    7   64    1  158.125   -4.206   1.184
-129.250.35.250  249.224.99.213   2 u    9   64    1   15.362   -4.420   1.829

rsyslogのインストール

# apt-get install rsyslog

日本語化

apt-get install locales

dpkg-reconfigure locales

テキストの加工

温度だけ取り出す

# tempered 2> /dev/null  | egrep '0\:' | awk -F: '{print $2}' | awk '{print $2$3}'
32.56°C

日本語年月日表示

# date "+%Y年%-m月%d日"
2021年7月27日

時刻表示

# date "+%H時%M分"
10時39分

HTMLを作成する

cronで回して、定期的にwebにアップロードするようにします。

その際のHTMLです。

#!/bin/sh

date "+%Y年%-m月%d日" | awk '{print "<p>"$1"<br>"}' > digi.html
date "+%H時%M分" | awk '{print $1"<br>"}' >> digi.html
tempered 2> /dev/null  | egrep '0\:' | awk -F: '{print $2}' | awk '{print $2$3"</p>"}' >> digi.html

ロリポップマネージドクラウドへSCPアップロード

root@OrangePi:/home/orangepi# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CtpV9I8c7wEIqTAE5DmqIJfXs3Fz9mvBgohqsSUNAWw root@OrangePi
The key's randomart image is:

/root/.ssh/ ディレクトリにif_rsa.pubができているので、これをロリポップマネージドクラウドに設置します。

登録すると、SSH接続できるようになります。

root@OrangePi:~/.ssh# ssh -p 3335 fast-aishin0111@ssh-5.ib.lolipop.jp
The authenticity of host '[ssh-5.ib.lolipop.jp]:3335 ([***.***.***.***]:3335)' can't be established.
ECDSA key fingerprint is SHA256:********************************
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[ssh-5.ib.lolipop.jp]:3335,[***.***.***.***]:3335' (ECDSA) to the list of known hosts.
  __  __  ____   _          _ _
 |  \/  |/ ___| | |    ___ | (_)_ __   ___  _ __
 | |\/| | |     | |   / _ \| | | '_ \ / _ \| '_ \
 | |  | | |___ _| |__| (_) | | | |_) | (_) | |_) |
 |_|  |_|\____(_)_____\___/|_|_| .__/ \___/| .__/
                               |_|         |_|

******* Welcome to Lolipop! Managed Cloud *******

ここまでできればSCPも可能です。

scp -i /root/.ssh/id_rsa -P 3335 /usr/local/sbin/temperature/digi.html fast-aishin0111@ssh-5.ib.lolipop.jp:./html

コマンド結果を一列に表記

日付、時刻、温度 を一列で表記したい

(date "+%Y/%m/%d %H:%M:%S" ; /usr/local/bin/tempered 2> /dev/null  | egrep '0\:' | awk -F: '{print $2}' | awk '{print $2$3}') | xargs

CRONに登録して定期実行

毎時0分に温度を計測し、HTMLを整形して、webサーバにアップロードするスクリプトをCronで定期実行します。

# m h  dom mon dow   command

0 * * * * /usr/local/sbin/temperature/digi.sh

まとめ

日付・時刻・気温を1時間ごとにテキストへ記録

日付・時刻・気温をHTML化し、ロリポップマネージドクラウドへアップロード

#!/bin/sh

#日付時刻と温度を一行で記録- 1時間ごとの気温を記録し続ける
(date "+%Y/%m/%d,%H:%M:%S," ; /usr/local/bin/tempered 2> /dev/null  | egrep '0\:' | awk -F: '{print $2}' | awk '{print $2$3}') | xargs >> /usr/local/sbin/temperature/ondo.txt

#日付 HTML形式で
date "+%Y年%-m月%d日" | awk '{print "<p>"$1"<br>"}' > /usr/local/sbin/temperature/digi.html

#時刻 HTML形式で
date "+%H時%M分" | awk '{print $1"<br>"}' >> /usr/local/sbin/temperature/digi.html

#温度 HTML形式で
/usr/local/bin/tempered 2> /dev/null  | egrep '0\:' | awk -F: '{print $2}' | awk '{print $2$3"</p>"}' >> /usr/local/sbin/temperature/digi.html

#SCPでロリポップマネージドクラウドへアップ
scp -i /root/.ssh/id_rsa -P 3335 /usr/local/sbin/temperature/digi.html fast-aishin0111@ssh-5.ib.lolipop.jp:./html

stretchで固定IP

以前は、

/etc/network/interfaces

を編集してた

今回OrangePIで設定したのは

/etc/network/interface.d/eth0

の中に

allow-hotplug eth0
iface eth0 inet static
        address         192.168.2.103
        netmask         255.255.255.0
        gateway         192.168.2.254
        dns-nameservers 8.8.8.8