About this

このサイトの目的

  • 長年開発し続けているIOTハウスのハードやソフトについて
  • 今まで経験してきたコンピュータや周辺機器、ネットワーク、IT昔話
  • 親が子供を褒め育てる環境へのヒントになればと思っています。
    • 子供が実験や遊び学んだ物が実用化->親が喜ぶ->親が子供を褒める->子供が褒めてもらう為に更に学び工夫する->親が子供を褒める->子供が育つ->社会が育つ

著者

  • kujiranodanna:くじらのだんな、昔からコンピュータで外部機器を制御したいと思っている人
  • 大昔1970年代コンピュータ周辺機器やネットワーク機器メンテナンス、ネットワークエンジニア、IT専門学校非常勤講師、大学非常勤講師(情報基礎)、近年はビル管理、現在は隠居生活
  • Raspberry Piや古いPCとLinuxを使いIOTハウスの開発と実践をしている人

実践IOTハウスとは

  • 家電の自動化、防犯、防災、音声応答、監視制御システムです
  • IOTハウスのIOTは(Input Output Things)入力と出力で何か出来ればIOTと思っています、Internet無くてもイベントや定時処理が出来ます
  • 古いPCや初期型Raspberry Piを捨てないで下さい、IOTハウスで活躍の場を与えましょう
  • shell script、C、javascriptで構築され全てブラウザで操作出来ます
    • 出先から部屋の温度を確認してクーラー運転する
    • 夕方外が暗くなると玄関や部屋の明かりを点ける
    • 明け方に外の湿度を元に家庭菜園の水やりをする
    • 防犯センサーがはたらくと動画をメールする
    • 決まった時間に音楽を鳴らす
    • 火災感知器が発報するとメールと電話(ワンギリ)で知らせる
    • 外気湿度を元に床下換気扇を間欠運転させる
    • 初期型Raspberry PiもIOTハウスで活躍
    • 古いノートPCをIOTハウスで復活
    • 子供が実験や遊び学んだ物がIOTハウスで実用化
  • homebridge-alexaを追加導入、Alexaアプリで家電を音声操作
  • homebridge-gshを追加導入、Google Homeで家電を音声操作
  • 机の奥へ仕舞い込んだや古いノートPCを復活させホームエレクトロニクス&ホームセキュリティを実現しよう

https://iot-house.jpn.org
実践IOTハウス

空気環境の監視

温度、湿度、IAQなどアナログ値をスライス、1分単位で規定値の上下限値を超えたらアクション、空気環境の監視を自動化出来ます

  • DIO Settingsタブで空気環境のスライスを設定、必要に応じて上下限値を超えたらアクション・・・今回は警報アナウンスとlinenotifyで通知
sound.png
  • Sound Settingsタブで事前に「温度が設定値を超えました対処して下さい」など音声ファイルを用意アップロードしておきます
sound.png
  • Auto_Processタブで条件を設定、自動化はLinuxのcronを使います
    • 温度が規定値より上昇したら毎分固定メッセージをアナウンス設定・・・事前に作成した音声ファイル「温度が設定値を超えました対処して下さい」を再生
    • 湿度が規定値より上昇したら毎分固定メッセージをアナウンス設定・・・「湿度が設定値を超えました対処して下さい」
    • IAQが規定値より上昇したら毎分固定メッセージをアナウンス設定・・・「空気が汚れています直ちに対処して下さい」
    • これらは標準のWEB GUIで設定できます
auto.png
  • ここからは標準で作成されたスクリプトを温度、湿度、空気質の値を音声変換とlinenotifyで通知するように変更します
    スクリプトは/www/remote-hand/tmp/以下auto_act0,auto_act1,auto_act2
auto_act.png auto_act0.png 温度が規定値を超えたら音声ファイル作成、スピーカー搭載ホストiot001.localとiot002f.localへ転送・アナウンスとlinenotify通知するスクリプト/www/remote-hand/tmp/auto_act0を編集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
if [ ENABLE = "DISABLE" ];then
exit
elif [ "1" != -1 ];then
[ -e /www/remote-hand/tmp/.di_read_data ] && . /www/remote-hand/tmp/.di_read_data
[ -z "${di[17]}" ] && exit
[ "${di[17]}" = "-1" ] && exit
[ "${di[17]}" != "1" ] && exit
fi
if [ 19 -gt 7 -a 19 -lt 14 ];then
/usr/local/bin/pepoirkitpost
elif [ 19 -gt 13 -a 19 -lt 17 ];then
/usr/local/bin/pepotocoshelp 2
elif [ 19 -gt 16 -a 19 -lt 27 ];then
DIR=/www/remote-hand/tmp
OPENJTALK=/usr/bin/open_jtalk
TAKMIVOICE="/var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/takumi/takumi_normal.htsvoice"
USEVOICE=${TAKMIVOICE}
VOICE_PITCH=0.7
prog=iot002_auto_act0
VROOMTEMP=$DIR/${prog}_vtemp.wav
[ -e $VROOMTEMP ] && exit
ROOMNAME="部屋"
tTEMPROOM=$(cat /www/remote-hand/.di_read_data.json| jq -r .gpio_i2c.temp)
[ -z "$tTEMPROOM" -o "$tTEMPROOM" = "1" -o "$tTEMPROOM" = "null" ] && exit
TEMPROOM=$(echo $tTEMPROOM| awk '{gsub(/[^0-9\.]+/,"",$0);printf $0}')
svc -d /www/pepolinux/iaqvoice/
TALK=${ROOMNAME}"の温度が"${TEMPROOM}"度で設定値を超えました、直ちに対処して下さい"
WGETMAIL=/usr/local/bin/pepolinemsgsend
SUBJECT=$prog
$WGETMAIL $SUBJECT++$TALK
echo -en $TALK |$OPENJTALK -r $VOICE_PITCH -x $USEVOICE -ow $VROOMTEMP
/usr/local/bin/pepocurlupload iot001.local $VROOMTEMP
msleep 10000
/usr/local/bin/pepocurlupload iot02f.local $VROOMTEMP
msleep 10000
/usr/local/bin/pepocurlupload iot001.local $VROOMTEMP
msleep 10000
/usr/local/bin/pepocurlupload iot02f.local $VROOMTEMP
# /usr/bin/aplay $VROOMTEMP
msleep 10000
rm $VROOMTEMP
svc -u /www/pepolinux/iaqvoice/
# /usr/local/bin/peposound 2
elif [ 19 -lt 8 ];then
/usr/local/bin/pepodioctl 19 2
fi
auto_act1.png 湿度が規定値を超えたら音声ファイル作成、スピーカー搭載ホストiot001.localとiot002f.localへ転送・アナウンスとlinenotify通知するスクリプト/www/remote-hand/tmp/auto_act1を編集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
if [ ENABLE = "DISABLE" ];then
exit
elif [ "1" != -1 ];then
[ -e /www/remote-hand/tmp/.di_read_data ] && . /www/remote-hand/tmp/.di_read_data
[ -z "${di[18]}" ] && exit
[ "${di[18]}" = "-1" ] && exit
[ "${di[18]}" != "1" ] && exit
fi
if [ 20 -gt 7 -a 20 -lt 14 ];then
/usr/local/bin/pepoirkitpost
elif [ 20 -gt 13 -a 20 -lt 17 ];then
/usr/local/bin/pepotocoshelp 3
elif [ 20 -gt 16 -a 20 -lt 27 ];then
DIR=/www/remote-hand/tmp
OPENJTALK=/usr/bin/open_jtalk
TAKMIVOICE="/var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/takumi/takumi_normal.htsvoice"
USEVOICE=${TAKMIVOICE}
VOICE_PITCH=0.7
prog=iot002_auto_act1
VROOMHUM=$DIR/${prog}_vhum.wav
[ -e $VROOMHUM ] && exit
ROOMNAME="部屋"
tHUMROOM=$(cat /www/remote-hand/.di_read_data.json| jq -r .gpio_i2c.hum)
[ -z "$tHUMROOM" -o "$tHUMROOM" = "1" -o "$tHUMROOM" = "null" ] && exit
HUMROOM=$(echo $tHUMROOM| awk '{gsub(/[^0-9\.]+/,"",$0);printf $0}')
svc -d /www/pepolinux/iaqvoice/
TALK=${ROOMNAME}"の湿度が"${HUMROOM}"%で設定値を超えました、直ちに対処して下さい"
WGETMAIL=/usr/local/bin/pepolinemsgsend
SUBJECT=$prog
$WGETMAIL $SUBJECT++$TALK
echo -en $TALK |$OPENJTALK -r $VOICE_PITCH -x $USEVOICE -ow $VROOMHUM
/usr/local/bin/pepocurlupload iot001.local $VROOMHUM
# /usr/bin/aplay $VROOMHUM
msleep 10000
/usr/local/bin/pepocurlupload iot02f.local $VROOMHUM
msleep 10000
/usr/local/bin/pepocurlupload iot001.local $VROOMHUM
msleep 10000
/usr/local/bin/pepocurlupload iot02f.local $VROOMHUM
msleep 10000
rm $VROOMHUM
svc -u /www/pepolinux/iaqvoice/
# /usr/local/bin/peposound 3
elif [ 20 -lt 8 ];then
/usr/local/bin/pepodioctl 20 3
fi
auto_act2.png IAQが規定値を超えたら音声ファイル作成、スピーカー搭載ホストiot001.localとiot002f.localへ転送・アナウンスとlinenotify通知するスクリプト/www/remote-hand/tmp/auto_act2を編集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
if [ ENABLE = "DISABLE" ];then
exit
elif [ "1" != -1 ];then
[ -e /www/remote-hand/tmp/.di_read_data ] && . /www/remote-hand/tmp/.di_read_data
[ -z "${di[23]}" ] && exit
[ "${di[23]}" = "-1" ] && exit
[ "${di[23]}" != "1" ] && exit
fi
if [ 21 -gt 7 -a 21 -lt 14 ];then
/usr/local/bin/pepoirkitpost
elif [ 21 -gt 13 -a 21 -lt 17 ];then
/usr/local/bin/pepotocoshelp 4
elif [ 21 -gt 16 -a 21 -lt 27 ];then
DIR=/www/remote-hand/tmp
OPENJTALK=/usr/bin/open_jtalk
TAKMIVOICE="/var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/takumi/takumi_normal.htsvoice"
USEVOICE=${TAKMIVOICE}
VOICE_PITCH=0.7
prog=iot002_auto_act2
VROOMIAQ=$DIR/${prog}_viaq.wav
[ -e $VROOMIAQ ] && exit
ROOMNAME="部屋"
tIAQROOM=$(cat /www/remote-hand/.di_read_data.json| jq -r .gpio_i2c.iaq)
[ -z "$tIAQROOM" -o "$tIAQROOM" = "1" -o "$tIAQROOM" = "null" ] && exit
IAQROOM=$(echo $tIAQROOM| awk '{gsub(/[^0-9\.]+/,"",$0);printf $0}')
svc -d /www/pepolinux/iaqvoice/
TALK=${ROOMNAME}"の空気が"${IAQROOM}"で設定値を超えました、直ちに対処して下さい"
WGETMAIL=/usr/local/bin/pepolinemsgsend
SUBJECT=$prog
$WGETMAIL $SUBJECT++$TALK
echo -en $TALK |$OPENJTALK -r $VOICE_PITCH -x $USEVOICE -ow $VROOMIAQ
/usr/local/bin/pepocurlupload iot001.local $VROOMIAQ
# /usr/bin/aplay $VROOMIAQ
msleep 10000
/usr/local/bin/pepocurlupload iot02f.local $VROOMIAQ
msleep 10000
/usr/local/bin/pepocurlupload iot001.local $VROOMIAQ
msleep 10000
/usr/local/bin/pepocurlupload iot02f.local $VROOMIAQ
msleep 10000
rm $VROOMIAQ
svc -u /www/pepolinux/iaqvoice/
# /usr/local/bin/peposound 4
elif [ 21 -lt 8 ];then
/usr/local/bin/pepodioctl 21 4
fi
  • linenotifyで通知する
auto_act_line.png

Alexaで空気環境を調べる

  • Alexaからラズパイに部屋の空気環境を喋らす

    • 使用するRaspberry Piは低スペックなのでリアルタイムで喋らすには無理

      • iot001.local –> Raspberry Pi Model B Plus Rev 1.2
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        pi@iot001:~ $ cat /proc/cpuinfo
        processor : 0
        model name : ARMv6-compatible processor rev 7 (v6l)
        BogoMIPS : 697.95
        Features : half thumb fastmult vfp edsp java tls
        CPU implementer : 0x41
        CPU architecture: 7
        CPU variant : 0x0
        CPU part : 0xb76
        CPU revision : 7

        Hardware : BCM2835
        Revision : 0010
        Serial : 000000006979c362
        Model : Raspberry Pi Model B Plus Rev 1.2
      • iot002.local –> Raspberry Pi Zero W Rev 1.1
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        pi@iot002:~ $ cat /proc/cpuinfo
        processor : 0
        model name : ARMv6-compatible processor rev 7 (v6l)
        BogoMIPS : 997.08
        Features : half thumb fastmult vfp edsp java tls
        CPU implementer : 0x41
        CPU architecture: 7
        CPU variant : 0x0
        CPU part : 0xb76
        CPU revision : 7

        Hardware : BCM2835
        Revision : 9000c1
        Serial : 000000002c28cc9a
        Model : Raspberry Pi Zero W Rev 1.1
    • iot002.localではBME680環境センサーから温度、湿度、気圧、IAQをpepoiothoused_voiceopen-jtalkを使い定期的に音声ファイルに変換これを要求に応じて再生

    • Alexaのボイス・コマンドでSwitchのオンオフする際にhomebridge-cmdプラグインを使う・・・/var/log/homebridge.log抜粋
      [20/05/2023, 16:22:20] [Alexa] PowerController TurnOn B8:27:EB:7D:99:CF undefined null
      [20/05/2023, 17:25:08] [床下環境] Setting power state to on
      [20/05/2023, 17:25:09] [床下環境] power function succeeded!
      [20/05/2023, 17:25:09] [床下環境]
      [20/05/2023, 17:25:09] [Alexa] PowerController TurnOn B8:27:EB:7D:99:CF undefined null

      • 床下状態教えて・・・Alexaアプリ定型アクションで「床下環境」をオンオフ
      • homebridge config.json抜粋
        {
          "accessory": "CMD",
          "name": "床下環境",
          "on_cmd": "sudo /usr/local/bin/pepoalexacmd_on iot002.local remote hand dio1high",
          "off_cmd": "sudo /usr/local/bin/pepoalexacmd_off iot002.local remote hand dio1high"
        },
      • pepoalexacmdコマンドで/usr/bin/dio1highを起動
        pepoalexacmd_onとpepoalexacmd_offへSymbolic link
        https://github.com/kujiranodanna/IOT-House/blob/master/raspberrypi/usr/local/bin/pepoalexacmd
      • /usr/bin/dio1highを確認
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        # cat /usr/bin/dio1high
        #!/bin/bash
        LOCK=/www/remote-hand/tmp/dio1high.lock
        if [ -e $LOCK ];then
        exit
        else
        echo -en $$ >$LOCK
        fi
        WGETMAIL=/usr/local/bin/peposendmail
        if [ mail_message = "mail" ];then
        WGETMAIL=/usr/local/bin/peposendmail
        SUBJECT=床下環境+dio1high
        elif [ mail_message = "mail_message" ];then
        DIR=/www/remote-hand/tmp
        tTALK=$DIR/pepoiothoused_voice_talk.wav
        TALK=$DIR/iot002_voice.wav
        if [ -e $tTALK ];then
        cp $tTALK $TALK
        /usr/local/bin/pepocurlupload iot001.local $TALK
        fi
        /usr/local/bin/pepoalexahelp
        MESSAGE=$(cat /www/remote-hand/tmp/.voice_req| awk '{sub("部屋","床下",$0);sub("質","の状態",$0);printf $0}')
        WGETMAIL=/usr/local/bin/pepolinemsgsend
        $WGETMAIL $MESSAGE
      • iot002.localはスピーカー未搭載なのでiot001.localへ音声ファイルを転送して喋ってもらう
      • pepoalexahelpでリアルタイムの空気状態を取得pepolinemsgsendでLine通知iaq_line.png

Homebridge-alexa「床下状態教えて」音声コマンド・デモ

OK_Google

  • AlexaとHomebridge-Alexaが接続出来ない時バックアップ用にインストール
    • Homebridge-Alexa接続不可は時々ありそんな時の切り分けにと
      • [OK_Google机つけて]でリカバリー
    • 低スペックのRaspberry Pi Zeroへhomebridge-config-ui-xは無理
    • PowerあるPCへDocker or Homebridge Dockerをインストール
    • homebridge-config-ui-xをインストール
    • GUIでHomebridge to Google Smart Homeをインストール
    • GoogleアカウントLinkしてconfig作成
      • “platform”: “google-smarthome”,…部分をコピーしてラズパイのHomebridge configへ貼り付け
  • ラズパイへHomebridge-GSH「Homebridge to Google Smart Home」を手動インストール
    1
    # sudo npm install -g homebridge-gsh
  • 既存のラズパイHomebridge configへ”platform”: “google-smarthome”,…部分を追記
    • homebridge config.json抜粋
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
          "platforms": [
      {
      "platform": "Alexa",
      "name": "Alexa",
      "username": "okgoogle",
      "password": "abcdefg...."
      },
      {
      "name": "Google Smart Home",
      "platform": "google-smarthome",
      "token": "abcde....",
      "notice": "Keep your token a secret!"
      }
      ],
      "accessories": [
      {
      "accessory": "CMD",
      "name": "机",
      "on_cmd": "sudo /usr/local/bin/pepoalexacmd_on iot01f.local remote hand 12 1",
      "off_cmd": "sudo /usr/local/bin/pepoalexacmd_off iot01f.local remote hand 13 1"
      },
      ...

OK Google音声デモ

防犯センサーで警告

  • 予め警告用音声ファイルをアップロード防犯センサーや扉磁気センサーのイベントで再生、不審者や害獣を威嚇する
    • 音声ファイル確認とセンサー動作外エリアでも音声ファイルを再生・・・モニターや窓から不審者を確認、Alexaから防犯用音声を再生威嚇
    • 自動で作成されるスクリプトを変更すれば時間毎に警告音声や歓迎音声にも対応できる
  • 音声ファイルのアップロード
    Bluetooth speaker用に無音と防犯センサー用ファイルをアップロード
  • 無音ファイルを定期的に送出してBluetooth speakerスリープを妨げる
  • イベントによる音声ファイル再生の設定-1
    防犯センサーが働くとhigh→lowで音声ファイル2を送出
  • イベントによる音声ファイル再生の設定-2
    防犯センサーが働くとhigh→lowでモジュール・カメラ搭載デバイス「iot02f」へ「dio10low」コマンドを依頼する
  • 「iot02f」の「input10:防犯line」low→highイベント「dio10low」によるモジュール・カメラ画像をLine通知設定
  • モニターや窓から不審者を確認、Alexaで威嚇用音声
    • Alexaのボイス・コマンドでSwitchのオンオフする際にhomebridge-cmdプラグインを使う
    • 照明やライトのオンオフに使う時と同様に「防犯センサー」キーワードでリモート側スクリプトを起動させる
      • アレクサ防犯センサーオン・・・「防犯センサー」は「iot04f.local」の「/usr/bin/dio2high」コマンドでgpio2番ポートのlow→highイベントで起動され音ファイル1番を再生する
      • homebridge config.json抜粋
        {
          "accessory": "CMD",
          "name": "防犯センサー",
          "on_cmd": "sudo /usr/local/bin/pepoalexacmd_on iot04f.local remote hand dio2high",
          "off_cmd": "sudo /usr/local/bin/pepoalexacmd_off iot04f.local remote hand dio2high"
        },
        {
          "accessory": "CMD",
          "name": "ライト",
          "on_cmd": "sudo /usr/local/bin/pepoalexacmd_on iot01f.local remote hand 8 1",
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        /var/log/homebridge.log抜粋

        [21/02/2023, 16:38:59] [ライト]
        [21/02/2023, 16:38:59] [Alexa] PowerController TurnOff B8:27:EB:7D:99:CF undefined null
        [21/02/2023, 17:09:26] [防犯センサー] Setting power state to on
        [21/02/2023, 17:09:26] [防犯センサー] power function succeeded!
        [21/02/2023, 17:09:26] [防犯センサー]
        [21/02/2023, 17:09:26] [Alexa] PowerController TurnOn B8:27:EB:7D:99:CF undefined null
        [21/02/2023, 17:30:38] [ライト] Setting power state to on
        [21/02/2023, 17:30:39] [ライト] power function succeeded!
        [21/02/2023, 17:30:39] [ライト]
        [21/02/2023, 17:30:39] [Alexa] PowerController TurnOn B8:27:EB:7D:99:CF undefined null

        iot04f:# cat /usr/bin/dio2high
        #!/bin/bash
        LOCK=/www/remote-hand/tmp/dio2high.lock
        if [ -e $LOCK ];then
        exit
        else
        echo -en $$ >$LOCK
        fi
        /usr/local/bin/peposound 1
        if [ -e /www/remote-hand/tmp/.dio2high.count ];then
        ...

Homebridge-alexaと防犯センサー音声コマンドのデモ

IRKitサービス終了対策

IRKitとは

  • IRKitはネットワーク対応学習型赤外線リモコン

IRKit Home appliance operation

IOTハウスではWiFi経由でRaspberry piがIRKitからの赤外線データを読み取り、定時や入力イベント毎に送信、家電を操作します。

IRKitをRaspberry piで操作

IRKitサービス終了しましたでIRKitサービスが停止した事が起因となってか緑ランプ点滅Wifi接続ができなくなった

IRKit復活

サーバーなしでIRKitの永続的な操作でIR受信後サーバー接続なしで継続使用出来るようになります

案内の https://github.com/irkit/device/pull/6 setup説明通り http://www.adriancourreges.com/projects/irkit-web-remote/live/public/setup.html を進める・・・IRKitアプリでWifi設定が出来ないのでこのsetup.htmlを使う

①セットアップページ閲覧はhttpsでなくhttpで接続・・・ページ表示後IRKitのSSIDでWifi接続

②このまま操作するとIRKitへ接続する際パスワードが”XXXXXXXXXX”になる

③setupでwifi接続操作はスマホアプリを使わずPCブラウザで行う
 1. Obtain an API key
 パス3番へ
 2. Obtain a device key
 3. Connect to the IRKit wifi network
 IRKitパスワードはデフォルトで”XXXXXXXXXX”
  ※ コンパイル前に赤字部分を12345678みたいに変えれる
       GSwifi.cpp—> char *ret = PB(XXXX,XXXXXXXXXX, 0)
 4. Tell IRKit to join your home wifi network
 Obtain an API key欄には適当な1234567など入力又は空白でエラー表示されるが設定は出来る

④firmware更新が終わって電源再接続しても赤→無点灯、IR操作のみ青点滅1回

文鎮化IRKitから救える事が出来てオープンソース化の作者とファームウエア改造して頂いた方へ大感謝です

Raspberry piでの操作は実践IOTハウス参照して頂けたらと

  • Please check the source code below

https://github.com/kujiranodanna/IOT-House/blob/master/raspberrypi/www/remote-hand/irkit_reg.cgi

https://github.com/kujiranodanna/IOT-House/blob/master/raspberrypi/www/remote-hand/irkit_post.cgi

Open_JTalk

  • Open JTalkとは名古屋工業大学で開発された音声合成技術および同技術を応用した、日本語向けのテキストトゥスピーチ(文章読み上げ)ソフト
    標準でひらがな、カタカナ、簡単な漢字を男性声で喋らす事が出来るmeiを追加インストールする事で女性の声も喋らす事が出来ます。
    • Alexaでは文章を自由に喋らす事が出来ないのでOpen JTalkと音声ファイルmeiをインストールして使います。
    • Open JTalkはIOT-House_zeroでは荷が重いのでそこそこ能力のあるIOT-House_old_pcのiot01fへインストール
      1
      2
      3
      4
      # sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
      # wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.8/MMDAgent_Example-1.8.zip
      # unzip MMDAgent_Example-1.8.zip
      # mv MMDAgent_Example-1.8/Voice/mei /usr/share/hts-voice/
      • アレクサ子供部屋の環境教えて・・・ペットルーム(子供部屋)の温度・湿度などOpen JTalkで喋らす、Alexaアプリ定型アクションで「子供部屋の環境教えて」を作り「iot01f.local」の「dio1high」スクリプトへ依頼する。
      • pepoiaqvoiceが[.voice_req]生成、pepojsondpepojtalkを呼び出し喋らせる。
        1
        2
        # pepoiaqvoice ; cat /www/remote-hand/tmp/.voice_req
        @子供部屋の温度,29.1度,湿度,63.3%,気圧,1015ヘクトパスカル,空気の状態,15でよいです
      • homebridge config.json抜粋
        {
          "accessory": "CMD",
          "name": "環境",
          "on_cmd": "sudo /usr/local/bin/pepoalexacmd_on iot001.local remote hand dio1high",
          "off_cmd": "sudo /usr/local/bin/pepoalexacmd_off iot001.local remote hand dio1high"
        },
      • 自動生成された「dio1high」に「pepoiaqvoice」追加、外出先から部屋の空気環境を確認出来るようにLINEでも通知・・・出先から子供部屋の様子や温度を確認してAlexaにエアコン運転を依頼出来る。
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        # cat /usr/bin/dio1high
        #!/bin/bash
        WGETMAIL=/usr/local/bin/peposendmail
        if [ mail_message = "mail" ];then
        WGETMAIL=/usr/local/bin/peposendmail
        SUBJECT=部屋の環境用+dio1high
        elif [ mail_message = "mail_message" ];then
        WGETMAIL=/usr/local/bin/pepolinemsgsend
        SUBJECT=dio1high
        /usr/local/bin/pepoiaqvoice
        MESSAGE=`cat /www/remote-hand/tmp/.voice_req`
        $WGETMAIL $MESSAGE
        ...

Open JTalk音声デモ



linenotify LINENotifyで部屋の空気環境を通知します

- https://github.com/kujiranodanna/IOT-House_old_pc

AlexaボイスコマンドCMD

  • AlexaボイスコマンドCMDのTips
    • Alexaのボイス・コマンドでSwitchのオンオフする際にhomebridge-cmdプラグインを使っている・・・/var/log/homebridge.log抜粋
      [18/08/2022, 12:14:12] [照明] Setting power state to on
      [18/08/2022, 12:14:13] [照明] power function succeeded!
      [18/08/2022, 12:14:13] [照明]
      [18/08/2022, 12:14:21] [照明] Setting power state to off
      [18/08/2022, 12:14:22] [照明] power function succeeded!
      [18/08/2022, 12:14:22] [照明]
    • 照明やシーリングライトなどオンオフには学習型赤外線リモコンIRkitを使う
      • アレクサ照明つけて・・・「照明」IRデータは「iot001.local」の仮想ポート8番に登録されコマンドで「iot001.local」がIRkitへ送信する
      • homebridge config.json抜粋
        {
        “accessory”: “CMD”,
        “name”: “照明”,
        “on_cmd”: “sudo /usr/local/bin/pepoalexacmd_on iot001.local remote hand 8 1”,
        “off_cmd”: “sudo /usr/local/bin/pepoalexacmd_off iot001.local remote hand 8 1 5000”
      • アレクサ照明けして・・・オンオフが同一IRデータ、一度目はスモール点灯、二度目に消灯なので5秒後に再送信で消灯
      • pepoalexacmdコマンドを確認
        pepoalexacmd_onとpepoalexacmd_offへSymbolic link
        https://github.com/kujiranodanna/IOT-House/blob/master/raspberrypi/usr/local/bin/pepoalexacmd
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        #!/bin/bash
        .
        # ln -s pepoalexacmd ./pepoalexacmd_on; ln -s pepoalexacmd ./pepoalexacmd_off
        .
        PROG=pepoalexacmd
        CMD=$DIR/$PROG.pepocmd
        ALEXADO=/usr/local/bin/pepoalexado
        .
        cat >$CMD<<END
        #!/bin/bash
        ping -c 3 $1 >/dev/null
        $ALEXADO $1 $2 $3 $4 $5 $6
        END
        ホストネーム解決とWake upの為ping3回行いpepoalexadoをバックグランド処理
        pepoalexadoを直接叩くとホストネーム解決とWake upでAlexa側でタイムアウトになる事も
      • pepoalexadoコマンドを確認・・・リモートホストへ引数をポスト
        https://github.com/kujiranodanna/IOT-House/blob/master/raspberrypi/usr/local/bin/pepoalexado
        1
        2
        3
        4
        5
        #!/bin/bash
        .
        PROG=pepoalexado
        .
        curl -s --connect-timeout $RETRYTIME --retry $RETRY --max-filesize $GETSIZE --user-agent ${USERAGENT} --tlsv1 -k -u ${USER}:${PASSWORD} -X POST -d $data https://$RM_HOST:$PORT/$REMOTE_CGI >${WORK}
        curlのリモート・ホストネーム解決やWake upに時間が掛かりタイムアウトが発生していると思われる

Homebridge-alexaとIRkit音声コマンド・デモ

IOT-House_docker

IOT-House_dockerとは

  • IOT-House_old_pcのDocker版です。
  • IOT-House_dockerにはUbuntu 18.04 ,Ubuntu 20.04のバージョンを用意してます。
  • 実行するにはdockerのprivilegeモードでGPIOのCP2112(Silicon Laboratories社 Single-Chip HID USB to SMBus Master Bridg) Sunhayato MM-CP2122Aを動作させます。
    I2Cバスへは環境ガスセンサーBME680を接続します。
  • 実行条件
    Docker engineにはLinuxが必要、ここではUbuntu20.04デスクトップで確認しています。
    デバイスドライバーが無いWindowsとMACはCP2112の操作が出来ません。
    WindowsとMACはインターフェースをnoneとしてリモートraspberry piのIPアドレスを設定GPIOの操作します。
  • 準備
    イメージのpull
    1
    docker pull kujiranodanna/iot-house_docker:ubuntu18.04-latest
    又は
    1
    docker pull kujiranodanna/iot-house_docker:ubuntu22.04-latest
  • 実行
    1
    docker run -itd --privileged --name iot-house_docker -p 8022:22 -p 80:80 -p 443:443 kujiranodanna/iot-house_docker:ubuntuxx.xx-latest
    • もしTWE-Lite-DIPをUSBへ用意出来るなら
      1
      docker run -itd --privileged --name iot-house_docker --device=/dev/ttyUSB0:/dev/ttyUSBTWE-Lite -p 8022:22 -p 80:80 -p 443:443 kujiranodanna/iot-house_docker:ubuntuxx.xx-latest
  • 確認
    1
    2
    3
    # docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    08bf7215bed2 a54286a23d97 "/etc/rc.local_docker" 17 hours ago Up 18 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:8022->22/tcp, :::8022->22/tcp iot-house_docker
    1
    2
    3
    http://localhost
    User:remote
    Password:hand
    iot-house_docker
  • 停止
    1
    docker stop `docker ps -ql`
  • 再開
    1
    docker start `docker ps -ql`
  • コンテナ削除
    1
    docker rm `docker ps -ql`

  • ホスト側へHomebridgeHomebridge-Alexaを導入iot-house_homebridge 防犯センサーとAlexa、IOT-Houseデモ動画・・・みんなのサマーセミナー2022の8月6日土曜日1限目4階2G教室「メイドカデン!?でええやん!」授業の再現
    授業のスライド

入出力イベント設定

  1. DIO Control-1
  • 入力端子がHighからLow、またはLowからHighに変化した時に開始する動作を設定します。
  • 開始する操作を設定する2つのタブがあります。
  • 最初のタブで、操作を開始、カウンターをリセット、およびログを表示するように設定できます。
  • 送信先Addressにlinenotifyを設定するとLINEにメッセージや写真を送ることが出来ます。
    • linenotifyを使用するには事前にhttps://notify-bot.line.me/my/でline notifyアクセストークンを発行
      /etc/rc.pepo/linenotifyに設定しておく必要があります
    • Ver.0.21から「Server Control」タブでLINE Notifyにアクセストークンを設定出来ます。
DIO_Control-1 2. DIO Control-2 DIO_Control-2