2021年9月20日月曜日

github pages のドキュメントを sphinx で作成

github pages のドキュメントを sphinx で作成する方法はググるといろいろあるようですが、今回は以下を参考にしてみました。

github ではリポジトリの gh-pages ブランチを github pages として公開することができるので、main ブランチの sphinx の build/html/ に同リポジトリの gh-pages ブランチをサブモジュールとして割り当てます。


環境

  • Ubuntu 20.04.3 LTS
  • Sphinx 4.2.0

github でリポジトリを用意

github で新しくリポジトリを新規作成しました。リポジトリ名は test としています。

ローカルの Ubuntu にリポジトリをクローン

$ cd ~
$ git clone https://github.com/nezuppo/test.git

gh-pages ブランチを作成

git の test リポジトリのディレクトリに移動

$ cd ~/test/

–orphan オプションを付けて何も commit されていない gh-pages ブランチを作成してチェックアウト

$ git checkout --orphan gh-pages
Switched to a new branch 'gh-pages'

一応 git-branch で確認すると orphan だからなのか gh-pages ブランチは出てこず、以下のような出力となりました。

$ git branch -a
  main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

ファイルは main ブランチと同じのものがありましたが、commit 前の状態でした。

$ ls -la
total 16
drwxr-xr-x 3 test test 4096 Sep 19 22:46 .
drwxr-xr-x 8 test test 4096 Sep 19 22:55 ..
drwxr-xr-x 8 test test 4096 Sep 19 23:16 .git
-rw-r--r-- 1 test test    6 Sep 19 22:46 README.md
$ git status
On branch gh-pages

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

まずは空の状態にしました。

$ rm README.md
$ git rm --cached README.md
rm 'README.md'
$ ls -la
total 12
drwxr-xr-x 3 test test 4096 Sep 19 23:20 .
drwxr-xr-x 8 test test 4096 Sep 19 22:55 ..
drwxr-xr-x 8 test test 4096 Sep 19 23:21 .git
$ git status
On branch gh-pages

No commits yet

nothing to commit (create/copy files and use "git add" to track)

空の状態だと github に push できないので .nojekyll ファイルを追加し push までしました。なお、github pages でデフォルトで有効になっている Jekyll ツールが sphinx ドキュメントとの相性が悪いようなので .nojekyll ファイルで無効にする必要があるとのことです。

$ touch .nojekyll
$ git add .nojekyll
$ git commit
$ git push --set-upstream origin gh-pages

この状態で github の test リポジトリの [Settings] - [Pages] で確認すると Source が gh-pages リポジトリの / (root) となっていました。


main ブランチ配下に gh-pages ブランチをサブモジュールとして割り当て

main ブランチの doc/ に sphinx を展開し、html ファイル一式が置かれる doc/build/html/ に gh-pages ブランチをサブモジュールとして割り当てます。これにより gh-pages ブランチ の / (root) に sphinx ドキュメントの html ファイル一式が置かれ github pages で公開されるようになります。

main ブランチの / (root) に移動

$ cd ~/test

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

サブモジュール用のディレクトリを作成

$ mkdir -p doc/build

gh-pages ブランチをサブモジュールとして割り当て

$ git submodule add -b gh-pages https://github.com/nezuppo/test.git doc/build/html

doc/ に sphinx を展開

doc/ に移動

$ cd doc

sphinx を展開。以下のように source と build ディレクトリは分割させました。

$ sphinx-quickstart
(省略)
> Separate source and build directories (y/n) [n]: y
(省略)

この状態で make clean すると build 配下がサブモジュール化された状態も含め全て削除されてしまい都合が悪いので Makefile を以下のように修正。ついでに make clean と make html、make help 以外は使えないようにしました。

$ diff -U -1 Makefile{.org,}
--- Makefile.org        2021-09-20 00:14:36.590000000 +0900
+++ Makefile    2021-09-20 00:15:43.500000000 +0900
@@ -1,20 +1,25 @@
 # Minimal makefile for Sphinx documentation
 #

 # You can set these variables from the command line, and also
 # from the environment for the first two.
 SPHINXOPTS    ?=
 SPHINXBUILD   ?= sphinx-build
 SOURCEDIR     = source
 BUILDDIR      = build

 # Put it first so that "make" without argument is like "make help".
 help:
        @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

 .PHONY: help Makefile

+clean:
+       rm -rf $(BUILDDIR)/html/*
+       rm -rf $(BUILDDIR)/html/.buildinfo
+       rm -rf $(BUILDDIR)/doctrees
+
 # Catch-all target: route all unknown targets to Sphinx using the new
 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
-%: Makefile
+html:
        @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

また、sphix のテーマは bizstyle が好みなの以下のようにで変更しました。

$ diff -U 0 source/conf.py{.org,}
--- source/conf.py.org  2021-09-20 00:21:20.030000000 +0900
+++ source/conf.py      2021-09-20 00:21:58.500000000 +0900
@@ -54 +54 @@
-html_theme = 'alabaster'
+html_theme = 'bizstyle'

html ドキュメントを生成

$ make html

build/html/ 配下に github pages で公開する html ドキュメントが生成されました。

$ ls -la build/html/
total 48
drwxr-xr-x 4 test test 4096 Sep 20 00:23 .
drwxr-xr-x 4 test test 4096 Sep 20 00:23 ..
-rw-r--r-- 1 test test  230 Sep 20 00:23 .buildinfo
-rw-r--r-- 1 test test   45 Sep 19 23:59 .git
-rw-r--r-- 1 test test    0 Sep 19 23:59 .nojekyll
drwxr-xr-x 2 test test 4096 Sep 20 00:23 _sources
drwxr-xr-x 2 test test 4096 Sep 20 00:23 _static
-rw-r--r-- 1 test test 3070 Sep 20 00:23 genindex.html
-rw-r--r-- 1 test test 4484 Sep 20 00:23 index.html
-rw-r--r-- 1 test test  269 Sep 20 00:23 objects.inv
-rw-r--r-- 1 test test 3437 Sep 20 00:23 search.html
-rw-r--r-- 1 test test  598 Sep 20 00:23 searchindex.js

gh-pages ブランチを commit

main ブランチより先に gh-pages ブランチを commit する必要があるようです。

gh-pages ブランチを割り当てたサブモジュールディレクトリに移動

$ cd ~/test/doc/build/html/

ブランチが gh-pages であることを確認

$ git branch
* gh-pages
  main

git インデックスに追加

$ git add *
$ git add .buildinfo

commit

$ git commit

git status でコミット漏れがないことを確認して push

$ git status
On branch gh-pages
Your branch is ahead of 'origin/gh-pages' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
$ git push

main ブランチを commit

gh-pages ブランチの次に main ブランチを commit します。

test リポジトリの / (root) に移動

$ cd ~/test

ブランチが main であることを確認

$ git branch
  gh-pages
* main

git インデックスに追加

$ git add doc/build/html/
$ git add doc/

commit

$ git commit

git status でコミット漏れがないことを確認して push

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
$ git push

github pages を確認

これで sphinx ドキュメントの html ファイル一式を github pages で公開することができました。


sphinx ドキュメントを更新する場合

以下の順序で実施します。

  1. doc/source/ 配下のドキュメントを更新
  2. doc/ で make html
  3. 上記の [gh-pages ブランチを commit] を実施
  4. 上記の [main ブランチを commit]

新たにリポジトリを clone する場合

gh-pages リポジトリをサブモジュールとして割り当てられた test リポジトリを新たに clone する場合は以下の順序で実施します。

  1. test リポジトリを clone
  2. サブモジュールを update
    $ cd test/
    $ git submodule update --init
    
  3. サブモジュールのディレクトリに移動して gh-pages ブランチにチェックアウト
    $ cd doc/build/html/
    $ git checkout gh-pages
    

参考

2021年7月18日日曜日

find コマンドでディレクトリを除外して列挙

はじめに

find コマンドでディレクトリを除外して列挙しようと思って調べてみたら

$ find /etc ! -type d

でよさそうなので、本当にいけてるか調べてみました。

まずは対象ディレクトリ配下のファイルやディレクトリの数を確認

対象ディレクトリとして /etc でやってみます。

$ find /etc
/etc
/etc/services
/etc/lsb-release
(以下省略)

普通に find できます。が。。。

$ find /etc > /dev/null
find: ‘/etc/polkit-1/localauthority: Permission denied
find: ‘/etc/ssl/private: Permission denied

というように標準エラー出力を確認すると、一般ユーザーではアクセスできないものがあるようなので以下、sudo つけてやります。

これらがファイルとかディレクトリとかを確認するために ls に渡します。

$ sudo find /etc | xargs sudo ls -lad
drwxr-xr-x 93 root root        4096 Jul 18 09:55 /etc
-rw-------  1 root root           0 Jun  4 06:39 /etc/.pwd.lock
drwxr-xr-x  3 root root        4096 Jun  4 06:40 /etc/NetworkManager
(以下省略)

drwxr-xr-x の先頭の文字でファイルとかディレクトリとか判断できます。 (この場合は d なのディレクトリ)

cut コマンドで先頭の文字だけ切り出します。

$ sudo find /etc | xargs sudo ls -lad | cut -b 1
d
-
d
d
-(以下省略)

ソートをかけて uniq コマンドでカウントします。

$ sudo find /etc | xargs sudo ls -lad | cut -b 1 | sort | uniq -c
    728 -
    213 d
    628 l

/etc 配下にはファイル (-) が 728個、ディレクトリ (d) が 213個、シンボリックリンク (l) が 628個あることがわかりました。

最終的にファイル名やディレクトリ名にスペースが含まれる場合でも対応できるように以下のようにします。(find に -print0、xargs に -0 を付けてます)

$ sudo find /etc -print0 | xargs -0 sudo ls -lad | cut -b 1 | sort | uniq -c
    728 -
    213 d
    628 l

find に ! -type d を付けてディレクトリが除外されているか確認

ディレクトリが除外され、その他 (今回の場合はファイルとシンボリックリンク) が期待通り列挙されているようです。

$ sudo find /etc ! -type d -print0 | xargs -0 sudo ls -lad | cut -b 1 | sort | uniq -c
    728 -
    628 l

念のため、!-type d だけに効くように () を付けます。

$ sudo find /etc \( ! -type d \) -print0 | xargs -0 sudo ls -lad | cut -b 1 | sort | uniq -c
    728 -
    628 l

結論

$ find /etc ! -type d

でディレクトリを除外して列挙できるみたいです。

2020年10月2日金曜日

meishi2 の QMK ファームウェアのビルドをラズパイのコマンドラインでやってみた

名刺サイズ自作キーボード meishi2 を組み立てた後そのままにしていたので、引っ張り出してきて QMK ファームウェアをビルドして書き込んでみました。ラズパイのコマンドラインでやっています。ほぼ「 meishi2 keyboard ビルドガイド」に記載されていることをそのままやっています。

環境

QMK ファームウェアをビルドする母艦はラズパイを使いました。

  • Raspberry Pi 4B Model B 4GB Memory
  • Raspberry Pi OS Version: August 2020 (Raspbian GNU/Linux 10 buster)

QMK ファームウェアのビルド環境を構築

QMK ソースコードをダウンロード

$ git clone https://github.com/qmk/qmk_firmware.git

QMK ビルドに必要な依存を解決

$ cd qmk_firmware/
util/qmk_install.sh
  • 主に QMK ビルドに必要な Raspberry Pi OS の deb パッケージがインストールされるようです。

meishi2 をラズパイに接続

ログを見ながら meishi2 をラズパイに接続してみるのでまずはシスログをリアルタイムで確認

$ tail -f /var/log/syslog

meishi2 とラズパイを USB ケーブルで接続すると LED が点灯し、ログには以下のメッセージやその他いろいろ出てきました。

Sep 25 12:25:43 raspi4 kernel: [  409.663764] usb 1-1.1: Product: meishi2

QMK をビルドして meishi2 に書き込み

とりあえずやってみたらエラーになりました。

$ make meishi2:default:avrdude
QMK Firmware 0.10.17
WARNING: Some git submodules are out of date or modified.
 Please consider running make git-submodule.

Making meishi2 with keymap default and target avrdude

tmk_core/protocol/lufa.mk:14: lib/lufa/LUFA/makefile: No such file or directory
make[1]: *** No rule to make target 'lib/lufa/LUFA/makefile'.  Stop.
Make finished with errors
make: *** [Makefile:584: meishi2:default:avrdude] Error 1

メッセージに従い以下実施

$ make git-submodule

再度以下実行したらうまくいきました。

$ make meishi2:default:avrdude

途中で以下のメッセージが出ました。

Detecting USB port, reset your controller now

meishi2 基板上の pro micro の横のタクトスイッチ (シルク印刷で SW5 と記載) を押すと meishi2 のリセットがかかり書き込みが完了しました。この時にラズパイ上で meishi2 と接続されている USB デバイスファイルが /dev/ttyACM0 であると自動認識したようです。

meishi2 の pro micro の LDE は緑 x 1、赤 x 2 が点灯している状態になったので USB ケーブルの切断/再接続をしたところ緑 x 1 のみの点灯状態となりました。

これで meishi2 が使えるようになったようです。

動作確認

meishi2 には 4つのキーがあり、今回の QMK の初期設定で左から順番に以下の内容が設定されていました。

  • 左 CTRL + Z (やり直し)
  • 左 CTRL + X (切り取り)
  • 左 CTRL + C (コピー)
  • 左 CTRL + V (貼り付け)

meishi2 を PC と USB ケーブルで接続するとうまくキーボードとして認識されたようで、エディタ上で上記 4ボタンが期待通りに動きました。

参考

2020年6月19日金曜日

ラズパイで PlatformIO でコマンドラインで M5StickC を Lチカ

ラズパイのコマンドラインで PlatformIO を使って M5StickC を Lチカしてみました。


環境

  • Raspberry Pi 4 model B
  • Raspbian GNU/Linux 10 (buster)
  • M5StickC

pipenv プロジェクト作成

pipenv プロジェクトのディレクトリを作成して移動

$ mkdir /some/where/m5stickc-lflash
$ cd /some/where/m5stickc-lflash/

pipenv プロジェクト作成

$ pipenv --python $(which python3)

pipenv shell 起動

$ pipenv shell

以下、全て pipenv シェルで実行


Platformio インストール

インストール

$ pipenv install platformio

バージョン確認

$ platformio --version
PlatformIO, version 4.3.4

M5StickC のボード ID を確認

PlatformIO での M5StickC のボード ID を確認しました。

$ platformio boards
--- 省略 ---
Platform: espressif32
================================================================================
ID                               MCU    Frequency    Flash    RAM     Name
-------------------------------  -----  -----------  -------  ------  --------------------------------
--- 省略 ---
m5stack-core-esp32               ESP32  240MHz       4MB      320KB   M5Stack Core ESP32
m5stack-fire                     ESP32  240MHz       16MB     6.25MB  M5Stack FIRE
m5stack-grey                     ESP32  240MHz       16MB     520KB   M5Stack GREY ESP32
m5stick-c                        ESP32  240MHz       4MB      320KB   M5Stick-C
--- 省略 ---

ボード ID は m5stick-c でよさそうです。


PlatformIO プロジェクト作成

プロジェクトのディレクトリを作成して移動

$ mkdir pio_project
$ cd pio_project/

プロジェクト初期化

$ platformio init --board=m5stick-c
  • 上で調べてた M5StickC のボード ID を指定しました。

シリアルポートデバイスを確認

M5StickC を USB 接続したラズパイのシリアルポートデバイスを確認しました。

M5StickC をラズパイの USB に接続する時の /var/log/messages で確認することもできますが、PlatformIO をインストールしたのでこれで確認してみました。

M5StickC をラズパイの USB に接続している状態で以下のコマンドを打ちました。

$ platformio device list
/dev/ttyUSB0
------------
Hardware ID: USB VID:PID=0403:6001 SER=7552CE3E93 LOCATION=1-1.3
Description: M5 Serial Converter

/dev/ttyAMA0
------------
Hardware ID: fe201000.serial
Description: ttyAMA0

/dev/ttyUSB0 で良いようです。


Lチカプログラムを用意

led-flash.ino ファイルを src/ に置きました。

$ cat src/led-flash.ino

#define LED_PIN 10

#define LED_ON  LOW
#define LED_OFF HIGH


void setup() {
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    digitalWrite(LED_PIN, LED_ON);
    delay(100);

    digitalWrite(LED_PIN, LED_OFF);
    delay(900);
}
  • M5StickC の LED は LOW が ON、HIGH が OFF とのことです。

プログラムをビルド

以下のコマンドでビルド

$ platformio run

エラー無くビルドできました。ターゲットに upload を指定していないのでビルドされただけで M5SticC には書き込まれていません。

.pio/ 配下にビルドされたファイルが出来ていました。

$ ls -la .pio/build/m5stick-c/
合計 28712
drwxr-xr-x 4 pi pi     4096  6月 19 21:38 .
drwxr-xr-x 3 pi pi     4096  6月 19 21:32 ..
-rw-r--r-- 1 pi pi   149000  6月 19 21:38 .sconsign37.db.dblite
drwxr-xr-x 3 pi pi     4096  6月 19 21:32 FrameworkArduino
-rw-r--r-- 1 pi pi   211040  6月 19 21:32 firmware.bin
-rwxr-xr-x 1 pi pi  4265992  6月 19 21:32 firmware.elf
-rw-r--r-- 1 pi pi 24743628  6月 19 21:32 libFrameworkArduino.a
-rw-r--r-- 1 pi pi        8  6月 19 21:32 libFrameworkArduinoVariant.a
-rw-r--r-- 1 pi pi     3072  6月 19 21:32 partitions.bin
drwxr-xr-x 2 pi pi     4096  6月 19 21:38 src

再度ビルドして M5StickC に書き込み

$ platformio run --upload-port /dev/ttyUSB0 --target upload
  • 上で確認したシリアルポートデバイスを指定しました。
  • --target upload によりビルド後 M5StickC に書き込まれました。

M5StickC で Lチカできました。


参考

ラズパイで esptool でコマンドラインで M5Stick のフラッシュをバックアップ&リストア

ラズパイのコマンドラインで esptool を使って M5StickC のフラッシュをバックアップ、リストアしてみました。

ほぼ https://lang-ship.com/blog/work/esp32-esptool-py/ に書かれていることをそのままやっています。

環境

  • Raspberry Pi 4 model B
  • Raspbian GNU/Linux 10 (buster)
  • M5StickC

M5StickC を接続したラズパイのシリアルポートデバイスを確認

ラズパイで $ tail -f /var/log/messages をしながら M5StickC に付属の USB ケーブルでラズパイの USB に接続すると以下のメッセージが出ました。

Jun 18 23:33:44 raspi4 kernel: [19742.992308] usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB0

ttyUSB0 と出ているのでシリアルポートデバイスは /dev/ttyUSB0 であることがわかりました。

デバイスファイルも存在していました。

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0  6月 18 23:33 /dev/ttyUSB0

pipenv プロジェクト作成

pipenv インストール

$ sudo apt install pipenv

pipenv プロジェクト用のディレクトリを作成して移動

$ mkdir /some/where/m5stickc
$ cd /some/where/m5stickc/

pipenv プロジェクト作成

$ pipenv --python $(which python3)

pipenv shell 起動

$ pipenv shell

以下、全て pipenv シェルで実行

M5StcikC のフラッシュをバックアップ

esptool をインストール

$ pipenv install esptool

esptool.py --help で確認すると出てくる flash_id : Read SPI flash manufacturer and device ID を実行。シリアルポートは上で確認した /dev/ttyUSB0 を指定しました。

$ esptool.py --port /dev/ttyUSB0 flash_id
esptool.py v2.8
Serial port /dev/ttyUSB0
Connecting......
Detecting chip type... ESP32
Chip is ESP32-PICO-D4 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
--- 省略 ---
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...

いろいろ情報が表示され、フラッシュのサイズが 4MB であることがわかりました。

フラッシュをバックアップ

$ esptool.py --port /dev/ttyUSB0 read_flash 0x00000 0x400000 ./image-factory-default-4M.bin
  • 先頭アドレス 0x00000 から上で確認したフラッシュのサイズ 0x400000 (10進数で ‭4,194,304‬) バイトを読み出して指定したファイルに保存しました。

保存したファイルのサイズはフラッシュのサイズと同じ 4MB でした。

$ ls -lh image-factory-default-4M.bin
-rw-r--r-- 1 pi pi 4.0M  6月 17 23:18 image-factory-default-4M.bin

バックアップしたフラッシュをベリファイ

$ esptool.py --port /dev/ttyUSB0 verify_flash --diff yes 0x0000 ./image-factory-default-4M.bin
--- 省略 ---
Auto-detected Flash size: 4MB
Verifying 0x400000 (4194304) bytes @ 0x00000000 in flash against ./image-factory-default-4M.bin...
-- verify FAILED: 279 differences, first @ 0x0000b02b
   0000b02b 00 a8
   0000b02c 00 aa
   0000b02d a0 fa
   --- 省略 ---
   0000b81b 00 ff
   0000b81c 01 ff
   0000b81d 00 ff

A fatal error occurred: Verify failed.

ベリファイがエラーになりました。。。

「起動するたびにデータを書き換えているプログラムが存在しており、その場合にはベリファイチェックがNG」とのことで、工場出荷時のフラッシュだったのですがこれに該当しているのかもしれません。

フラッシュをリストア

ベリファイはエラーになりましたが、このバックアップからリストアしてみました。

まずはフラッシュを消去

$ esptool.py --port /dev/ttyUSB0 erase_flash

バックアップしたフラッシュをリストア

$ esptool.py --port /dev/ttyUSB0 write_flash 0x0000 ./image-factory-default-4M.bin
  • 先頭アドレス 0x0000 を指定すると良いようです

うまくリストアできていました。

2020年5月14日木曜日

Grafana で Raspberry Pi の CPU、GPU 温度をグラフ表示



前回のブログ [Grafana で Raspberry Pi のメモリ使用率などリソース状態を可視化してみた] で CPU 使用率やメモリ使用率等のリソースを Grafana のダッシュボードで確認できるようにしましたが、下のキャプチャ画面のように CPU と GPU 温度に関しては現在の状態 (温度) の確認はできますが、過去の状態をグラフで確認することはできないようです。

CPU、GPU の現在の温度

今回は Grafana にダッシュボードを追加して、Raspberry Pi の CPU、GPU 温度のグラフを表示してみました。

環境

InfluxDB に保存されている CPU、GPU の温度データを確認

InfluxDB に保存されている CPU 温度のデータは実際の温度を 1,000倍した値が保存されており、GPU 温度はそのままの値が保存されているので確認してみました。

InfluxDB shell 起動

$ influx

telegraf データベースを指定

> use telegraf

CPU 温度データを確認

> select * from cpu_temperature limit 3
name: cpu_temperature
time                host  value
----                ----  -----
1587525500000000000 raspi 50464
1587525510000000000 raspi 50464
1587525520000000000 raspi 50464

CPU 温度は 50464 という値になっていますが、これは Telegraf で CPU データを取得するときに /sys/class/thermal/thermal_zone0/temp を参照しているためと思われます。実際は値を 1000 で割った 50.464度ですね。

ちなみに手動だと以下のように現時点の値を確認できました。

$ cat /sys/class/thermal/thermal_zone0/temp
54230

GPU 温度は以下のように、実際の温度が値として保存されていました。

> select * from gpu_temperature limit 3
name: gpu_temperature
time                host  value
----                ----  -----
1587525501000000000 raspi 50.5
1587525510000000000 raspi 49.9
1587525520000000000 raspi 50.5

CUP 温度とは異なり GPU 温度は以下のコマンドで取得しているためだと思われます。

$ /opt/vc/bin/vcgencmd measure_temp
temp=53.7'C

ダッシュボード追加

ブラウザで Grafana の GUI を開いて以下実行しました。

  • [Create (+ アイコン)] - [Dashboard]

  • CPU 温度を追加するために [Add Query] をクリック

  • 以下、Query のフォームで

    • [From] の [select measurement] をクリックして [cpu_temperature] を選択
    • [Select] の [field (value)]、[mean ()] に続く [+] をクリックして [Math] - [math] を選択
      • [math (/100)] が追加されたので [(/100)] をクリックして [(/1000)] に変更 (上で確認した通り、IfluxDB 上では 1,000倍された値なので 1,000 で割りました)
  • 画面右側の方の [Query Inspector] をクリックしてクエリを確認すると select 文でも / 1000 されていることが確認できました。

    SELECT mean("value") / 1000 FROM "cpu_temperature" WHERE time >= now() - 6h GROUP BY time(20s) fill(null)
    
  • 次に GPU 温度を追加するために [Add Query] をクリック

  • 追加された Query のフォームで

    • [From] の [select measurement] をクリックして [cpu_temperature] を選択
    • CPU 温度とは異なり、GPU 温度は InfluxDB に実温度が保存されている (1,000倍されていない) ので 1,000 で割る必要はありません
  • 画面上部のフロッピーアイコンの [Save dashboard] をクリックし、適宜ダッシュボード名等を入れて保存

CPU、GPU 温度のグラフを表示できました。

2020年5月11日月曜日

試しに Markdown で Sphinx ドキュメント作成



Sphinx はドキュメントを作成するためのツールであり reStructuredText を採用しています。

reStructuredText は Markdown と同様な軽量マークアップ言語のひとつで実際に使ってみるとなかなか使いやすいですが、Markdown と比べると Sphinx 以外では汎用的に採用されておりません。

そこで Sphinx で reStructuredText ではなく Markdown を使ってドキュメントを作成できるようにしてみました。

下にも書いてますが、何かワーニングが出ましたが一応 Markdown でドキュメントを書いて html に変換できました。

環境

  • Ubuntu 18.04.4 LTS (Windows10 WSL)

インストール

pipenv で Sphinx をインストールするのでまずは pipenv をインストール

$ sudo apt install pipenv

sphinx インストール用のディレクトリを作成して移動

$ mkdir /some/where/sphinx
$ cd /some/where/sphinx/

virtual environment 作成

$ pipenv --python $(which python3)

Sphinx インストール

$ pipenv install sphinx

Markdownパーサー recommonmark をインストール

$ pipenv install recommonmark

pipenv シェル起動

Sphinx をインストールした virtual environment でシェルを起動しました。

virtual environment に起動

$ cd /some/where/sphinx/

pipenv シェル起動

$ pipenv shell

Sphinx ドキュメントプロジェクト作成

上に描いた「pipenv シェル起動」を実行した状態で以下をやりました。

プロジェクト用のディレクトリを作成して移動

$ mkdir /some/where/document
$ cd /some/where/document/

プロジェクトファイル作成

$ sphinx-quickstart

いろいろ聞いてくるので以下のように入力してみました。

> Separate source and build directories (y/n) [n]: n
> Project name: test-markdown
> Author name(s): Nezuppo
> Project release []:
> Project language [en]: ja

以下のうようにディレクトリとファイルが作成されました。

$ tree -aF
.
├── Makefile
├── _build/
├── _static/
├── _templates/
├── conf.py
├── index.rst
└── make.bat

3 directories, 4 files

Markdown が使えるようにプロジェクトを設定

まずは conf.py を修正するのでバックアップをとる

$ cp conf.py{,.org}

以下のようになるよう、conf.py を修正。なお本題とは関係ありませんが好みで html_theme を bizstyle に変更しました。

$ diff -u conf.py{.org,}
--- conf.py.org 2020-05-10 14:51:51.652409000 +0900
+++ conf.py     2020-05-10 15:30:52.760240100 +0900
@@ -28,6 +28,7 @@
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
+    'recommonmark'
 ]

 # Add any paths that contain templates here, relative to this directory.
@@ -51,9 +52,17 @@
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
 #
-html_theme = 'alabaster'
+html_theme = 'bizstyle'

 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
 html_static_path = ['_static']
+
+
+
+source_suffix = {
+    '.rst': 'restructuredtext',
+    '.txt': 'markdown',
+    '.md' : 'markdown',
+}

Markdown でドキュメント作成

index.rst のファイル名を index.md に変更

$ mv index.rst index.md

この時点で index.md の中身はデフォルトで用意されたサンプルの reStructuredText なので、不要であることを確認して中身を削除し Markdown に書き換え

html に変換

$ make html

以下のワーニングが出ました。。。

/home/worker/.local/share/virtualenvs/sphinx-5rYzJHjd/lib/python3.6/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))

が、とりあえず _build/html が作成され、ブラウザで index.html を確認できました。

参考