raspberry pi で無線LANの設定(ステルスモード対応)

概要

raspberry pi無線LANの設定をする際、ステルスモードになっている為にGUIから設定できない場合の対応方法をメモします

やり方

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

で下記を追記

network={
    ssid="ここにSSID"
    psk=ここにプレシェアードキー
    scan_ssid=1
}

※既存のnetwork項目があったら、新たに追記でOK

radikool6でm4aからmp3へ変換するメモ

概要

radikoをタイマー録音する手法を探していてradikoolにたどり着きました。
radikool6はdockerで動くようなので早速自宅に設置してあるesxiに設置してみると、テスト版とはいえ任意の過去番組(タイムフリーによるもの)をダウンロードする事ができました。

公式サイトはこちら
blog.ez-design.net

今回はm4aからmp3に変換する手順をメモしておきます。

事前作業

コンテナに入って必要なパッケージをインストールします。

ここからホスト
$ docker exec -it radikool6_radikool_1 /bin/bash
ここからコンテナ
$ apt-get update
$ apt-get install ffmpeg libavcodec-extra57

変換作業

事前作業が済んでいれば下記のように変換できます。

ここからホスト
$ docker exec -it radikool6_radikool_1 /bin/bash
ここからコンテナ
$ cd /Radikool6/wwwroot/records/
$ ffmpeg -i xxx.m4a -ab 128k yyy.mp3

これでxxx.m4aをyyy.mp3に変換できます。オプションのabはビットレートを指定します。

あとがき

まだ超alpha版とのことですが、完成を楽しみに待っております。
できれば毎週予約機能が欲しいですw

問題1

問題

次の関数を作ってください

  • 引数で配列データ(中は文字列)を受け取る
  • 予め決められた文字列(例えば apple,orange,banana)と順序問わず等しいか判定する
  • 戻り値は0か1とする
    • 0 : 一致しない
    • 1 : 一致する

補足

  • 言語は問わない
  • 「予め決められた文字列」は関数内に定義して構わない
  • 引数で渡される配列の要素数は未定(0個かもしれない)
  • 大文字小文字は区別してもしなくても構わない

cec-clientで電源ONが効かなかった時の確認事項

概要

raspberry pi 経由でcec-clientを使ってHDMIから電源ON/OFFしたいのですが、テレビによってはうまくいかないことがありました。
今回はテレビ側の設定で解決できたので一例として投稿します。

機種

今回うまくいかなかった機種はSHARPのLC-40AE7です。

エラーの確認方法

cec-clientがインストール済みである前提で話を進めます。
テレビの電源をOFF(正確にはスタンバイ)にして下記のコマンドを実行しましょう。

$ cec-client

これで対話モードで実行されるので「waiting for input」が表示されたところで「on 0」と入力。
すると下記のメッセージが表示されました。

AQUOS LINK 'auto power on' is disabled, which prevents the TV from being powered on. To correct this, press the menu button on your remote, go to 'link operation' -> 'AQUOS LINK setup' -> 'Auto power on' and set it to 'On'

適当な和訳ですが「アクオスリンクの自動電源ONが無効だからパワーオンは防止されました。正しく行いたいなら[リンクオペレーション]->[アクオスリンクセットアップ]->[自動電源ON]の設定値をONにしてください。」と読めます。
要するにテレビ側の設定で無効化しているだけということのようですね。

対処方法

実際にテレビの設定を変えるだけで「echo 'on 0' | cec-client -s」が使えるようになりました。
なのでメーカーや機種によって「~リンク」は異なるとは思いますが、セキュリティ対策でデフォルトが自動電源ONを無効化している可能性を疑ってみるのが良いかもしれません。

おまけ

今回はスタンバイ操作はできており、ONが出来ないという中途半端な状態だったので希望をもって調査できましたが、スタンバイ操作も何も反応しない場合はそもそもCEC対応していないとか、ケーブルが古すぎ(安すぎ)で対応していないとか、そういった可能性も考慮する必要があるかもしれません。

docker-composeでflaskを手軽に試す為の小さなテンプレート

概要

小規模なAPIを作りたいと思い、調べてみるとpythonのflaskがシンプルで良さそうでした。
もちろんサーバーも小規模で良いのですがやはりdockerを使って既存サーバーに同居させる方針が良いと思い書きました。
単体で済むのでdocker-composeにする必要は無いレベルですが、起動時のオプションを気にする必要が無かったり拡張性も考慮してcompose化しております。

参考

flaskのサンプルコードを参考にさせて頂きました

qiita.com

docker-compose一式

必要なプログラムもdocker-compose.ymlも下記githubに置いてあります。
使い方もREADME.mdを合わせてごらんください。

github.com

個別ファイル

最新はgithubですが、個別に見たい場合は下記をどうぞ。

Dockerfile

FROM python:3.7-alpine3.7

ARG project_dir=/app/

WORKDIR $project_dir

RUN pip install flask

CMD ["python", "main.py"]

main.py

from flask import Flask, jsonify, request
import json
app = Flask(__name__)

@app.route("/", methods=['GET'])
def hello():
    return "route get. Hello!"

@app.route('/reply', methods=['POST'])
def reply():
    data = json.loads(request.data)
    answer = "route post. keyword is %s!\n" % data["keyword"]
    result = {
      "Content-Type": "application/json",
      "Answer":{"Text": answer}
    }
    # return answer
    return jsonify(result)

if __name__ == "__main__":
    app.run(host='0.0.0.0',port=5001,debug=True)

docker-compose.yml

version: '3.3'

services:
  webapi:
    build: ./flask
    ports:
      - "5001:5001"
    volumes:
      - ./app:/app
    restart: always

raspberry pi と AB Shutter3(bluetoothボタン) の連携

概要

  • raspberry pi を扱うにあたり、できるだけ簡易なアクションで操作したい
  • ダイソーで300円のbluetoothボタン「AB Shutter3」と連携させてコマンド実行させる仕組みを構築する

参考

qiita.com

github.com

連携前の注意点

AB shutter3 は購入時にお試し用のボタン電池が付いていますが新しいものに絶対替えた方が良いです。
というのも私が電池をケチって替えなかった為に数時間無駄にした為です。 どういう問題が起きるかというと、ペアリングは出来るのにボタンを押した時のイベントが拾えないという中途半端な状態になりました。

bluetoothペアリング作業

# 必要に応じて
$ sudo apt-get install bluetooth

$ sudo hciconfig hci0 down
$ sudo hciconfig hci0 up
$ sudo bluetoothctl
[bluetooth]$ power on
[bluetooth]$ scan on
# ここでペアリング状態(AB shutter3 は電源ONにするだけ)にする
# 検知すると「[NEW] Device XX:XX:XX:XX:XX:XX AB Shutter3」と表示されるのでMACアドレスをメモして
[bluetooth]$ pair XX:XX:XX:XX:XX:XX
[AB Shutter3            ]$ trust XX:XX:XX:XX:XX:XX
[AB Shutter3            ]$ quit

イベントが拾えているか確認(必須ではない、オプション)

$ sudo apt-get install evtest

$ sudo evtest
# 「Select the device event number [*-*] :」と聞かれるので「AB Shutter3」の番号を入力する
# 後はボタンを押してキーイベントが拾えていればOK
# ここで拾えない場合は電池を交換してみるとうまくいくかもしれない

こんな感じ

Event: type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e9
Event: type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1
Event: -------------- SYN_REPORT ------------
Event: type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e9
Event: type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0
Event: -------------- SYN_REPORT ------------

bluebuttonのインストール

$ sudo apt-get install ruby
$ sudo gem install bluebutton

設定ファイルの準備

$ vi ~/.config/bluebutton
keyup=echo UP
keydown=echo DOWN
longup=echo LONG UP
longdown=echo LONG DOWN

お試し実行

$ sudo bluebutton -c ~/.config/bluebutton

iosボタンとandroidボタンを区別する

現行のプログラムでは2つあるボタンの区別は出来ておらず、アップかダウンか、長押しアップか長押しダウンかを判定できる。
諸事情でiosボタン(大きい方のボタン)とandroidボタン(小さいほうのボタン)を区別したかったのでプログラムを少し変更。

github.com

変更点は下記のコミット分だけ

https://github.com/miya15/bluebutton/commit/e2b9b4e475c71886a7b3bf41691f6a022c94c4de

gem化はしていないのでやってみたい方は下記(環境によってパスは異なる場合がありますが)に個別にコピーしてください。

  • /var/lib/gems/2.3.0/gems/bluebutton-0.2.1/lib/bluebutton.rb
  • /var/lib/gems/2.3.0/gems/bluebutton-0.2.1/bin/bluebutton
$ vi ~/.config/bluebutton
# ※下記が追加できるようになる
# 注意:反応するタイミングはボタンを離した時です
pushandroid=echo PUSH android
pushios=echo PUSH ios

docomo1980

最近ドコモのCMが1,980円で使えるという体で流れていますけど、ずいぶんと条件が多いなぁ~という印象。

一般的な家族構成を対象にしたものかもしれませんが、3人で分割した場合の想定であること、5GBを分け合う、かつ特定の機種(docomo with)に限定したお話。

キャリア側の都合に縛られたくないから、このパターンは我が家には合わないです。

サポート用のショップの維持とか色々費用がかかるのは分かりますが、すでにライフライン化しつつある通信費用は抑えたいものです。

MVNOの帯域も随分と狭められている印象があり、そのあたりが平等になっていけばもう少し一般人が嬉しい価格に落ち着いていくのではないかと思いました。

(ブログと言うよりツイート的な思いつき投稿でした~)