ゲートウェイ開発環境の構築

ゲートウェイとして、アットマーテクノ社製、Armadillo IoT G3 開発用セット を使用
日本語マニュアルの解説が十分詳細、具体的であるため、これに従って作業

1. VMWare Workstation Playerのダウンロード

条件:ロングモードでLAHF/SAHF命令をサポートしている64ビットCPU
W7、W8.1、W10マシン上で動く

2. 端末エミュレータのためのATDE6仮想マシン(開発環境)をWindows上に構築

ホストOSに依存しない仮想マシンから、USBーRS232C経由でゲートウェイを制御 付属CDの中にあるtar.xzを解凍
解凍ツールは、7-ZIP
VMWareから、解凍したvxdファイルを開くと開発環境ATDE6が起動
ATDE6(バイナリ)を、USBメモリ上に置く
atmark?atmarkでサインイン

3. ゲートウェイを接続

(1) 仮想マシンにPC本体からUSBを奪う(プルダウン)

(2) USBケーブルでつなぐ

取り外し可能デバイス(プルダウン)から選択
 Future Devices FT232R USB UART

(3) LANG=C minicom --setup

Configuration:
Filenames and paths
File transfer protocols
Serial port setup => /dev/ttyUSB0 modem
Modem and dialing
Screen and keyboard
Save setup as dfl
as ...
Exit
Exit from minicom

(4) LANG=C minicom _wrap --device /dev/ttyUSB0

(5) ゲートウェイ側の電源を入れる

 USB I/F カードのスライドスイッチで、
  マニュアルモードを選択した場合、boot を入力するとあるが、受け付けない
  オートモードを選択した場合、自動的にブートする
   →長い起動メッセージ群を表示しコマンド入力待ちになる
  (とりあえずマニュアルモードの疑問を棚上げとしてオートモードで作業を続ける)

4. セットアップが完了した後、二回目以降の起動方法

(1)VMWareを起動

(2)ATDE6を再生

(3)USBを挿す

(4)プルダウン[Player]→[取り外し可能デバイス]→[FUTURE DEVICES FT232R USB UART]を選択

(5)GUIで[アプリケーション]→[ユーティリティ]→[端末]

 仮想環境上のコマンドライン型シェルを起動

(6)>LANG=C minicom --wrap --device /dev/ttyUSB0

→ゲートウェイに接続

(7)電源投入→長い起動メッセージ群を表示

(8)ログイン

 root/atmark/warasi
 初期設定では、root/root, atmark/atmark  であるが、外部接続された状態では危険であるため変更。
(サスペンドモードで終了した場合には、この状態から再開)

 コマンドラインによる各種作業

 接続したまま、PC上仮想環境上のATDE6をサスペンドすると、次にここから再開できる。

(9)>halt 緊急停止、電源は切らない

>halt -p パワーオフ
>halt -w wtempレコードに記録のみ、停止しない
>halt -n halt実行時にsyncしない(速い)
  >shutdown パワーオフまで行く。halt -p と同じ効果

(10)ゲートウェイ電源OFF

5.LANへの接続

(一般事項)
nmcli コマンドを使用
 >nmcli connection eth0
>nmcli device (一覧)
wlan0 wifi
eth0 ethernet,LAN環境
ttyACM3 modem
gre0 gre
gretap0 gretap
ip6tnl0 ip6tnl
tunl0 ipip
lo loopback
sit0 sit
ip6_vtl0 vti6
ナド
>nmcli device connect (デフォルトeth0)
>nmcli device disconnect eth0
>nmcli connection modify eth0
10.194.67.108
255.255.254.0
10.194.66.1
(具体操作:成功手順)

(1) コネクション作成

>nmcli connection add con-name NAZE type ethernet ifname eth0

(2)固定IP

>nmcli connection modify NAZE ipv4.method "10.194.67.110/23 10.194.66.1"

(3)DNS

>nmcli connection modify NAZE ipv4.dns 10.194.66.1

(4)反映

>nmcli connection up NAXE

(5)確認

>nmclie devices
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected NAZE

(6)表示による確認

http://10.194.67.110
 でデフォルト・ページが表示される。
/etc/lighttpd/conf-available/README
  CGIは /usr/lib/lighttpd
logは /var/log/lighttpd
defaultは、index.html /var/www/foo/bar/index.html
/var/www/html/index.lighttpd.html

6.コンパイラ

(1)環境構築

ゲートウェイがLANまたはWiFiまたはSIM経由でネットワークに接続した状態で、
>apt-get install build-essential
libssl-dev
(apt-getは、パッケージを取得してインストールする。
 サーバーに問い合わせて、所望のパッケージのダウンロードからインストールまでを自動的実施)
>apt-get update
パッケージを管理しているDBを更新して最新の状態にする
/etc/apt/sources.list
サーバー:
 http://ftp.jp.debian.org/debian (地球流体電脳倶楽部:北大京大九大)
security.debian.org/
download.atmark-techno.com/debian

(2)エディタ

vi [filename] で閲覧
i インサートモード
 a アペンドモード
 esc で戻る
:wq で保存して終了
:q! で保存せずに終了

(3) gccはゲートウェイにインストールされている。

>gcc sample.c (ビルド)
>./a.out (実行)

(4) gccはATDE6にもインストールされている。


viエディタのほか、gedit, nano, emacsが利用可

7.動作確認のためのコマンドなど(180410)

(1)LED

echo 1>/sys/class/leds/[LED]/brightness ??
echo 0>/sys/class/leds/[LED]/brightness ??
[LED]??{LED1,LED2,LED3,LED4}

(2)温度センサ

cat /sys/class/thermal/thermal_zone1/temp
51100 は、51.1℃

(3)ADコンバータ

cat /sys/bus/iio/devices/iio:device0/name
-> 3-0012 (device name)
cat /sys/bus/iio/devices/iio:device0/in_voltage_raw
cat /sys/bus/iio/devices/iio:device0/in_voltage_scal

8.SDカード、USBメモリ

> mount [-t fstype] device dir (マウント一般形)
> mount -t vfat /dev/mmcblk0p1 /mnt (マウント具体例1:SDカード)
> mount /dev/sda1 /mnt (マウント具体例2:USBメモリ)
> umount /mnt (取り外し)

現状の/mntには、
 mmcblk2
mmcblk2boot0
mmcblk2boot1
mmcblk2p1
mmcblk2p2
mmcblk2p3
mmcblk2rpmb
がある


SDXCカードは通常、exFATでフォーマットされているため見えない
SDHCカードはfat32なので、見える
???????/dev????
mmcblk0, mmcblk0pl ?????mnt??
> mount -t vfat device /dev/mmcblk0pl
/mnt配下にDCIM/100CANONなどがある

>umount /mnt が失敗するとき(target is busy)
>umount -f /mnu 強制終了
>fuser -muv /mnt →使用中のユーザーをリスト
USER PID ACCESS COMMAND
root kernel mount (root)/mnt
root 20979c ..c.. (root)ul
>kill -9 9133 ナド


9.E-dispZのセットアップ(180413)

温湿度計測用のエッジ(子機)としてDD社製 e-DISP・Zを使用。
単三電池2本で駆動し、Wi-SUN通信でゲートウェイにデータを送信。
(スマートメータ等に使用されている通信方法で、Wi-Fiより長く約1kmまで到達。)
ゲートウェイに増設する通信ボード1枚で、最大15台の子機からの報告を受ける。

(1)ドライバ等

>sudo apt-get update
>sudo apt-get install edispz-device-app

(2)通信モジュールをゲートウェイ内部に取り付け(ねじ2本)

(3)rootでログインし、以下の表示

>dpkg -i (エラー表示が出るが成功しているらしい)
>dpkg --list (セットアップされているデバイス一覧)
 edispz-device-

(4)/etc/edispz-device-app/connection.list を見る

>vi connection.list
#Write MAC address of
00C14F010284を追加(子機毎に、裏に記された番号、2桁毎の:を略す)
本親機では、アドオンインターフェース2(CON2)にスロット接続したため、
/etc/edispz-device-app/edispz.conを以下のように修正
[前]tty=/dev/ttymxc0 mode=32
[後]tty=/dev/ttymxc1 mode=33
(32はCON1に接続した場合)

(5)サービスを開始

>systemctl start edispz-fluentd.service
>systemctl start edispz-device-app.service
成功
>systemctl list -unit-files
多数のサービスの一覧が表示される中に、edispz-device-appがある

(6) 子機の開始

 電源ボタンを押す
→LED1, LED2が同時に点灯
→橙がしばらく点滅する(28回程度)
→ペアリングが成立すると2灯とも点灯して消える
以後、/var/run/fluentd のsensor.logに最新データがアップされる
sensor.logはシンボリックリンク
>cp sensor.log yyy→参照先をコピー
>cp sensor.log yyy -d シンボリックリンクをコピー
>ls -a でのファイルの表示
lrwxrwxrwx リンク
-rw-r--r-- 実体ファイル
.xxxx 隠しファイル

(7)子機のその他のボタン

B2:パケット強制送信ボタン
B3:親機再接続ボタン
LED1(赤)
LED2(橙)
 強制通信ボタンで、親機にデータをアップする(赤が一回点灯)
 再ペアリングボタンで、ペアリングを行なう
(あまりうまくいかない。一度電源を落として再起動するのが確実)
 再ペアリング後の最初のログにはパケットの最初に"get_battery"

(8)電波の到達距離など

 ペアリングが成立しているとき、
 ボタン2→赤一発
 ボタン3→橙点滅
 電波が届かないと、
 ボタン2→無反応または橙一発
 再び届くと
 ボタン2→橙+赤

 ペアリングが崩れているとき、
 ボタン2→橙一発
 ボタン3→橙点き放し→消える
 電源ボタンでOFF、再ON→ペアリング→再開

(9)子機の追加

(180723納品、E-dispZが3台追加で到着)
MAC {00C1 4F01 xxxx}
S/N xxxx
 No.1 176 0284
No.2 203 20EF
No.3 210 02F6
No.4 215 02FB

No.1 は7月24日で停止(電池切れ、液漏あり)
 リモコンの電源としてはマンガン電池の方が液漏れしにくいとの情報(絶対ではない)
 二次電池
  eneloop 1年後85% ニッケル水素電池、1000回充放電可能
  evolta 1年後80% 液漏れしにくい
登録手順
@/etc/edispz-device-app/connection.listに3行追加
A
>systemctl stop edispz-fluentd.service
>systemctl stop edispz-device-app.service
>systemctl start edispz-device-app.service
>systemctl start edispz-fluentd.service
B子機のそれぞれに電源投入
C
>cd /var/run/fluentd
>cat sensor.log
→4台からのデータが同じファイル中に
D>mount sda1 /mnt
>umount /mnt
Eedispz.confのモード設定
 mode=33 は頻繁
 mode一覧は、https://armadillo.atmark-techno.com/howto/aggregate-data-from-edispz
にある

10.プログラム開発

(1)ログファイルの解読

 ログファイルは、/var/log/fluentd の下に作成されている。
 但し、最大64を超えると古いファイルは削除される。
 そこで、定時処理でUSBメモリにバックアップ蓄積している

(2)ログファイルを作成しているプログラム群

 ソースコードは公開されている。
 @1.1.0.1.debian.ar.gz
 A1.1.0.orig.tar.gz こちらにソースあり
 Makefile の中身
  main.c 11kb
fluentd-client.h, fluentd-client.c
edispz-controller.h,c 15kb
edipz-config.h
bp35a1-raw-message.h,c
bp35a1-message.h,c
bp35a1-client.h,c
BP35A1はローム株式会社製Wi-SUN対応無線モジュール
  fluentd ログを作るオープンソース(記事、仕様書を印刷済)

(3)タイムスタンプ

ログファイルの中に記録されているタイムスタンプは、ゲートウェイ内蔵時計のもの。
 一度シャットダウンすると1970.1.1にリセットされる。
 ゲートウェイのボード上のRTCにCR1220(@200)を追加し、保持されるようになった。

(4)ログ解読プログラム

 VS2005のEdispZプロジェクトのjournal.c等に最新形
NEXT/Utility/Files

11.0sim

 180426申込み→180429届く(支払いファミマ)
 S/N AX0504501171320
 伝 412896613242
 APN:so-net.jp
ユーザ:nuro P/W:nuro
認証タイプ CHAP or PAP
カードP/W 92373997 tel 07041608449
AX050/45011/71320/A
www.so-net.ne.jp/retail/w/
ネットワークP/W 初期値92373997
sim電話番号とP/Wでログイン
PCからは電話#とP/Wではログインできない。
0simによるttyACM3と共に、ppp0がデバイスに掲示される。pppはプロバイダとのユーザ認証プロトコル

セットアップ手順

(1)simカードのスロットへの装着(表裏に注意、電極が下、隅切が手前)

(2)/dev/ttyACM3

APN so-net.jp
user nuro
PW nuro
>nmcli connection add type gsm ifname ttyACM3 apn so-net.jp user nuro password nuro
→Connection 'gsm-ttyACM3 (-uuid-) successfully added

(3) >nmcli connection up gsm-ttyCM3

→(約3秒後)Activated
(またはsimカードがなく失敗した時)no device found

(4) >ping www.atmark-techno.com (成功180803)

[121.101.71.135]
[219.112.224.8]

(5)モデム一覧

>mmcli -L
→1行 Fount 1 modems: /org/freedesktop/ModemManager1/Modem/0

(6)モデム情報

>mmcli -m 0
(sim情報)

(7)SMS送信→可

#export LANG="ja_JP.UTF-8"
#mmcli -m 0 --messaging-create-sms="number=090********, text='test'"
→Successfully created ... /SMS/42
#mmcli -S 42 --send
→sim0の番号(070****)よりよりSMS届く
#mmcli -m 0 --messaging-list-sms
#mmcli -s 42
→42番のメッセージを表示
 --store-in-storage="sm" sim内
 --store-in-storage="me" 3Gモジュール内

(8)電源管理:3Gの通信をnmcliで終了する前に、3G再接続サービスを停止する。

(さもないと、nmcli で終了してもすぐに再開する)
>systemctl stop connectionrecover service
>nmcli connection down gsm-ttyACM3
(電源OFF)
(電源ON)
>nmcli connection up gsn-ttyACM3
>systemctl start connection-recover.service

(9)wgetコマンド/0sim経由

ボード情報を取得し、購入製品登録を行なうp.259)
get-board-info アプリをダウンロードし実行、board-info.txtを作成
製品登録ページにアップロードする
>wget http://download.atmark-techno.com/mix/product-registration/armadillo-iot-ge/get-board-info
>chmod +x get-board-info
>./get-board-info
>ls board-info.txt
https://users.atmark-techno.com/dashboard
→購入製品登録のリンク→/products/register

(10)管理用ユーザーwarasiの追加

>adduser warasi
パスワード設定 (passwdコマンド)
sudoを許可
visudoコマンドで、/etc/sudoers.d/・・tmpを編集
#User privilege specification
root ALL=(ALL:ALL)ALL の下に
warasi ALL=(ALL:ALL)ALL を追加

warasiでログインし、
>nmcli connection up gsm-ttyACM3
→「資格権限がない」、と叱られる
>sudo nmli connection up gsm-ttyACM3
→Ok

12.simサーバー上にwarasiサイトを追加

(0)SQL2012サーバー

(1)s:\空家管理支援\warasi

\warasi_usesr
のファイル群を準備

(2)IIS設定(Warasi, Warasi/knari, Warasi/Karimono

(3) warasi\asp-cfg.txtを書き換え

->tehaishi/def.csvをポイント

(4)def.csvを修正 g:\s\,,, を s:\...に

(5)管理¥データベース作成

(6)index.asp keiji事業カウンター→warasi事業カウンターに


tdb_user.asp で
xdbname="warasi" に

サーバーにアップロードするファイルのサイズの上限について
IIS7.0/7.5ではデフォルト30MB
(最大4GBまで増量が可能)
サイト>要求のフィルタリング>機能設定の編集
最大長を30 000 000→300 000 000に

13.CRON による定時処理

(1)/etc/crontab 多くの中身あり

/etc/cron.d ファイル hogehogeしかない
/usr/share/doc/cron/examples/cron-tasks/review.sh

(2)sysctl コマンドで全サービスを見る

と、edispz-fluentdなどと並んで
cron.service も実行されている

(3) cat crontab


/cron.d/hogehoge
/etc/cron.hourly 空
/etc/cron.daily 8個あり
/etc/cron.weekly 1個
/etc/cron.monthly 空
daily
 @apt
 Absd main utils
 Bdpkg
 Cexum 4 base
 Dlighttpd
 Elogrotate
 Fman-db
 Gpasswd
weekly
 @man-db
→今一つ、わからない

>service cron status
定時処理の記録あり
/var/log/syslog に
8:17:01 armadillo CRON [26442]

CRONの設定方法は二つある
@/etc/crontab に直接記入する(rootのみ)
Actontab -l で /var/spool/cron/ユーザ名 に記入する
/etc/cron.hourly に入れたファイルは実行されない

(4)成功手順

/etc/crontab で、時間毎、日毎のスクリプトの実行を指定する。
vi で直接編集する。(念のためバックアップを作成しておく)
[試行例]
* * * * * root echo 'Hello minutes' >/mnt/test/hello.txt
13 * * * * cp /var/log/fluentd/* /mnt/sensorall
スクリプトファイルで実行することもできる。
スクリプトファイル.sh には、最初にシバンが必要
#!/bin/sh

root echo '////' はコンソールに何も出力しない
root echo '////' >/mnt/test/ はファイルを作る

(5)定時処理を行なうプログラムの作成

@system("コマンド"); //file1を作成
fopen("file1")
Ap=popen("コマンド","rt");
結果の解析(p);
Bシェルスクリプトからコマンドラインの起動
Ccrontabの中に書けるコマンド
 cp, echoなどのシェル標準コマンド
 シェルスクリプト
 分 時 日 月 曜日 コマンド
 0 * * * *  /path/example.sh
 
 分:0〜59
 時:0〜23
 日:1〜31
 月:1〜12またはjan〜dec
 曜日:0〜7?またはsun〜sat
   run-parts /etc/cron.monthly
  cron.monthlyディレクトリにある全てのファイルを実行

 わかりにくいエラーの例:
 crontab の中の定義行で*が余分にある場合
 cron.hourly の中にある0anacronファイルの中で
  START_HOURS_RANGE=6-8
  が指定されcrontabで指定した実行時刻が範囲外
 ナド
 

(5-1)CRON機能テスト用試作プログラム

@/mnt/progtest/success/light2
LED2の点灯・消灯の繰り返し
/sys/class/leds/led2/brightness をfopenし読み込む
0 なら 1 を、1 なら 0 を書き込む
A* * * * * root /mnt/progtest/success/light2
→1分毎にled2が点灯消灯を繰り返す
Bsms 送信するコマンドをpopen で発する
 popenコマンド1:SMを作成し、IDを得る
 popenコマンド2:IDを送信する
C温湿度データをcsv形式に集約する。
 fluentdサービスにより、/var/log/fluentd配下にファイルが作成される。
 但し、ログファイルの上限個数があり、リングバッファとなっている。
 そこで、当面の措置として、定時処理により、外付けUSBメモリにファイルの転送を行う。
 解析は、外部メモリに蓄積されたファイルを対象にテストプログラムを開発する。
 試作プログラムは、VS2005のTIFFソリューションのEdispZプロジェクトに作成。
 ソースコードは、./Next/Utility/Files/journal.c

(6)湿度データの抽出・集約処理

fluentd ログファイルには、複数のセンサからの報告が集約されている。 ファイル名:「sensor.タイムスタンプ_n.log」
 タイムスタンプは、年月日時で、同じ時に複数ある場合、枝番が付く
[例]2018042202_2 2018年4月22日02時の2番目
ファイルの内容:
{"device_id":"00C14F010284","data":[・・(この部分に長いデータ)
・],"node_id":"00:11:0c:1b:85:c5","timestamp":"20180422020036"}
[]の中身の例:
{"event_id":"get_human_react_count","value":"0"},
       ・・・
{"event_id":"get_humidity","value":"45.635742"},
{"event_id":"get_temperature","value":"22.112377"},
       ・・・
{"event_id":"get_door","value":"open"}
なお、初回ペアリング直後、及びセンサーの強制送信ボタンが 操作された際の報告には、電源電圧(単三二本)が含まれている。

@errorlogファイルをオープンし処理結果を記録する。

Aconnection.listファイルを開き、デバイスの一覧を取得する。
 デバイス毎に集約ファイル.csv をオープンする。
B所定のフォルダに存在する全てのサブフォルダをチェックする
 h = FindFirstFile(filemask,&nf);//最初はフォルダ自体
 if(h==(HANDLE)-1) return 0;
 for(;FindNextFile(h,&nf);){
  if(!strcmp(".",nf.cFileName)) continue;
  if(!strcmp("..",nf.cFileName)) continue;
  if(nf.dwFileAttributes == 32) continue;//ディレクトリでなくファイルの場合
  dircount++;
  subdir(dir,nf.cFileName);
 }

C一つのフォルダに含まれる全てのファイルを調べる
 h = FindFirstFile(filemask,&nf);//最初はフォルダ自体
 if(h==(HANDLE)-1) return 0;
 readlogfile(folder,nf.cFileName);
 for(;FindNextFile(h,&nf);){
  readlogfile(folder,nf.cFileName);
 }

Dreadlogfile関数で個別のログファイルを開く
 STRING data[200] を用意しておき、
 getdata関数で改行を単位とする各データの所在を格納する。

 typedef struct{
  char *FNAME;
  int HEAD;
  int LEN;
 }STRING;

 FNAMEで指定するファイルのHEAD〜LENに対象とするデータ(文字列)が存在

E個々のデータ文字列をanasdata関数で解析する
 for(idata=0;idata<ndata;idata++){
  anasdata(data[idata]);//この中で改めてfopen
 }

Fanasdata関数:JSON形式で記述されたデータの解析
 時刻情報を、年、月、日、時、分、秒に分解する。
 これを、西暦2000年1月1日からの日数(浮動小数)に変換する。
 次に、sensor2関数により、温度・湿度のデータを拾い出す。
 センサ毎のログファイルに、時刻、温度、湿度を書き出す
 (なお、検証のためデバイス名と時刻文字列も追記している)

Gsensor2関数:温湿度のデータの取得
 []で囲まれたセンサーデータの文字列を解読する。
 解読には、asensor関数を失敗するまで繰り返し適用する。
 asensor関数は、タグとデータを一つ取り出す。
 "get_temperature"タグと、"get_humidity"タグが、
 それぞれ一つづつ存在する場合のみ正しいデータと判断する
 それぞれのタグに対応づけられたデータ値を取得し引数ポインタ先に格納
 取得されたデータ文字列の前後の「”」は外す。
 正しいデータの場合には、戻り値は2である。
 なお、これらの処理の中で使用するssccanf関数の
 戻り値が不安定であることが処理を長引くしている。
 ライブラリ関数のバグや方言はコンパイラ処理系により異なるため、
 char単位で処理する原始的な関数を用意したほうが確実。

(7) マイコンの温度、電源電圧を取得する

 ゲートウェイの回路自体に、温度と電源電圧を取得する機能がある。
 一般に、コマンドライン、プログラム、シェルスクリプトは組み合わせて利用できる。
@プログラム(c)からコマンドラインを呼び出す
Aシェルスクリプトからプログラム(c)を呼び出す
シェルスクリプトは、.shという拡張子を持つ。 先頭に呪「#!/bin/sh」を持つ。
「./実行形式」という形式でプログラムを呼び出す。
Bプログラムからシェルスクリプトを呼び出す

14.複数の子機の接続(180824)

(1)複数子機間の輻輳対策

 定時処理の場合、定時間隔の定義は一つのファイルで行うため、 全てのセンサから同じ間隔で報告が行われる。 しかし、時刻の計測はセンサ側のタイマーで行われるため、 センサ毎にわずかに異なる時間間隔で報告が行われる。 複数センサーから同時に報告が行われると、 片方のセンサからの報告の取りこぼしが発生する。 この取りこぼしは、時間間隔の誤差により輻輳が解消するまで続く。 時間間隔を十分長くすることにより、輻輳の発生頻度を抑えることができる。

(2)発送頻度の最適化

 センサーから報告頻度を1時間単位とすることで、輻輳の頻度は十分小さくできる。

(3)センサ側の電源の問題

 センサ側をタイマー定時報告で運用すると、かなりの消費電流が期待できる。
 出荷時、アルカリ乾電池が標準で装備されており、数ヶ月は運用できる。
 しかし、完全放電後、水酸化カリウムの電解液が漏れ、ホルダーが緑色に腐食する。
 ・「ロングライフ」製品は大きな電力量であって液漏れとは無関係。
 ・注意書きで放電後速やかに交換するように指示している。
 ・「液漏れを起こしにくい」製品はいくつか存在する。
 マンガン乾電池を使用することにより、漏れた電解液(塩化アンモニウム)による損傷は軽減する。
 ・消費電力が少ないリモコンや時計などにはマンガン乾電池が勧奨されている。
 ・家電量販店にはもはや置かれていない。百均などではまだ販売されている。
 ニッケル水素二次電池を使用することによっても、液漏れの問題は軽減する。
 ・完全放電した状態で放置すると、容量低下する。
 以上のことから、以下の対策が必要である:
 ・定時報告が途絶えたことの検出と対応
 ・子機の電源電圧を報告させることが可能であれば有益
 ・ニッケル水素電池を使用した上で、微弱電流で充電する工夫が有用
 なお、定時報告を行なう設定ではタイマーが常時起動しているため、  電力を消費するのではないか、という懸念がある。その場合:
 ・タッチセンサ等による報告を行なうこととし、  日照など外部回路でタッチセンサを操作する方法が考えられる。

(4)スマホで培われた要素技術の単能製品化

@軽量ドローン
 199gのドローンであれば規制の対象外である。  畳むと掌サイズ。
Aサングラス型イヤホン
 蔓の中央にスピーカがある。 眼鏡型ウェアラブルは可能性がある。
B超小型カメラ
 指先サイズH=50, 20g レンズマイクボタンのみ。 洋服に付けるアクセサリ、子供の帽子に付ける。 手ぶれ補正あり。すぐスイッチを押せる。

(5)ペアリングの維持・復活

・子機の側の電源喪失による離別:電池交換により再ペアリング
(電源電圧が復帰すると、電源ボタンの操作なしに電源が入る)
 つまり、出荷時の状態は、電源ボタンにより電源をOFFにした状態
・サービスの終了による離別
 fluentdのサービスを終了することができる。

>systemctl stop edispz-fluentd.service
>systemctl stop edispz-device-app.service
>systemctl start edispz-device-app.service
>systemctl start edispz-fluentd.service

このコマンドによりサービス再起動を後、再ペアリングを行なわずに強制送信ボタンだけで報告が届く。
・ゲートウェイの予期せぬダウンによる離別
 再ペアリングを行わないと報告が届かない。
・電波事情による離別
 電波が届いた時点で報告が再開されるが、それまでの報告は消滅する。