You can read this blog in any language using google translate as follows:

Goto http://translate.google.com/
Paste URL in the box and select "Japanese for From Language" and "To Language". Then click "Translate".

English translated pages are here:
http://bit.ly/xPuXoy

你可以閱讀這個博客,在任何使用“Google”的語言翻譯

本ブログのアクセス統計: 60万アクセスを達成しました。ご訪問ありがとうございました。

60万アクセスまでの経過

2009年12月に始めた本blog。2011年7月ごろに10万アクセスを達成し、2011年12月13日には15万アクセスを達成。
その後、私も更新しておらず、アクセスは少し減りましたが、3月1日には18万アクセス。2012/4/18に20万アクセス、2012/8/21に25万アクセス、2013/1/18に30万アクセス、2013/12/17に40万アクセスを達成しました。しばらく見ていなかったら、2015/5/1に50万2584アクセスになっていました。またまた、しばらく更新しないうちに、2017/6/11に60万7197アクセスになっていました。2018/7/7 .. おお七夕 .. には63万0656アクセスになっていました。久しぶりに更新しました。

2017年10月2日月曜日

PICで作ったBinary Clock

Crowd Funding に、2進数表示の時計があったので、PIC 16F1827と、フルカラーLED 7つ、および時計用の32.768kHzの水晶発振子。あとは、モード設定用のタクトスイッチ(赤、黄色、青)を使って作ってみました。

最初、実験用にdelay関数を使って無限ループでLEDが適当に点灯するプログラムを作り。
動作確認後、32.768kHzで0.5秒間隔で正確に割り込んで、時計変数を更新する仕様にしました。

PIC Kit3のプログラマと製作したBinary Clock

コンデジのLiIon電池と充電器パーツで電池駆動にしました。
コンデジのLiIon電池と充電器パーツで電池駆動にしました。

配線面 - 耐熱ラッピングワイヤをはんだ付け

配線面 - 耐熱ラッピングワイヤをはんだ付け


表示モードと時計モードのスペック
   
Easy, Auto1, Auto2, Pro1, Pro2のモードを作りました。

  1. Auto1モードでは、時=赤・分=緑・秒=青が0.5秒ずつ切り替わって順番に示されます。
  2.    Pro2モードでは、時=赤、分=緑、秒=青が加色混合され同時に表示されます。結果、上写真右下のような色になります。
  3. 7bitで2進で示すモードと、3bit, 4bitのBCD (2進化10進数)で示すモードとあります。BCDのほうが初心者向けでしょうが、それでも、時・分・秒を加色混合すると、読めません!!
 以下、Pro2モードの動画です。時・分・秒が加色混合されるので、多分、何時か.. すらもわからないと思います。Pro1として時・分だけの加色混合モードもあります。電源アダプタは余ったAUポイントで貰った、ガラケーのアダプタが5V出力だったので再利用しています。


以下Auto1モードの動画です。BCD(2進化10進数)表示モードです。
 5時45分頃というのがわかると思います。


セットアップモードと各種モードの説明

回路図: 3色LEDをダイナミック点灯をかけています。

ダイナミック点灯は2msで切り替えます。
  1. 初めPICのクロックを500kHzにしましたが、あまり最適化されていないプログラム(300行ぐらいでしょうか..) というのもあり、結構ちらつくので、8MHzにしたところ問題はなくなりました。
  2. PICはクロック発信回路を内蔵し、時計用水晶発振子を直付けできるので、回路は簡単です。PICのプログラマ PIC Kit3から5Vを供給して、プログラムをしつつ動かしていたのですが、時計割り込みがかかりませんでした。
    1. 割り込み動作なので、XIDE 付属のsimulator でも問題は不明
    2. クリスタルのつながるT1OSO, T1CKIは、それぞれPICのプログラム信号 ICSD (データ), ICSC (クロック)で、PIC Kit3の負荷につながるので、これをつけたままでは水晶発振子が発信していなかったのが原因でした。
    3. 水晶発振子には68pF (指定では33pFですが)でGNDに繋いでいます。PIC Kitの案内には、ICSD, ICSCにはキャパシタは繋がないこととありますが、この程度のキャパシタでは問題はないようです。なしでは、水晶発振子が動かないでしょう。。
  3. タクトスイッチはPICのWUPモードで内部pull upしたのですが、どうも誤動作するので、10k Ohmのpull upを3本追加しています。
  4. MAC OS-XではUSB接続のPIC Kit3が認識できないので、win10に移したのですが、こちらは、日本語のfolder/file名がコンパイル時に認識できなかったり、日本語文字コードが化ける(UTF-8のMacと、S-JISのwinで違うし。。)ので、ファイル・フォルダ名・コメント等は全部英語が無難に思います。
  5. プログラムはCで400行程度。PICのプログラムメモリ利用率は20%ぐらい。
  6. XC8ではPICのconfigurationは#pragmaで記述。(生成支援ツールもあります)
  7. そのほかのレジスタは、マクロとして定義されているので、入出力は極めて簡単。
  8. 12 bit命令の8bit PICは直接指定できるプログラム・メモリ空間が小さいのですが、Cで書けば、全く気にしないで書けます。
  9. その他、X IDEやXC8のCコンパイラは1行に、セミコロンで区切った複数文が書けない、intが16 bit、enumが使えない、など、若干違いがありそうです。






テストに使ったランダム点灯をデモモードとして残しました。Upを押しながら、Modeを押すと、出入りできます。デモモードでは、Mode, Up, Downのタクトスイッチそれぞれを押すと、赤・緑・青の点灯が抑制されたり、されなかったりを制御できます。

以下ビデオです。


プログラムに先立ち、I/Oピンの使い方、Configuration、変数名・関数名をexcelで仕様化しました。

が、例によって書いているうちに、変数名・関数名は変わりました。
作りながら考えるのがプログラミングの醍醐味でしょうね。

参考資料)
  1. 電子工作のための PIC16F1ファミリ活用ガイドブック 大型本 – 2013/4/11
    後閑 哲也 (著) 3,456円  http://amzn.to/2xJjKAZ  ー がわかりやすいです。
    ただ、コンパイラやツールが若干古く、以下関連リンクを参照する必要があります。
    タイマ割り込みの設定は、この本では、16F1937について説明があり、ところによっては16F1527だったりしますが、今回使った16F1827でも、ほとんど同じでした。



関連リンク)
  1. PIC 16F活用本作者のページ: http://www.picfun.com/ いろいろ情報あり。
  2. Configurationの説明あたり http://www.picfun.com/p818frame.html
  3.  XC8のconfigurationは自動生成して #pragma configをつかう http://www.picfun.com/bookmntU.html
  4. PIC 16F1827 と他のPICは若干違うので、そこは、PICの英語仕様書をダウンロードして確認のこと。

2017年8月4日金曜日

ICチップを埋め込んで個人認証する条件??

個人認証は難しい。
ICチップを埋め込んで認証するのには、「牛や豚などの家畜じゃあるまいし」という拒否感もある。最近以下のようなニュースもあり、賛否両論である。

News Week: 2017年8月1日(火) 米国企業で初、従業員の体内へのマイクロチップの埋め込みを実施   http://www.newsweekjapan.jp/stories/world/2017/08/post-8107_1.php 
 より以下に写真。右手の甲にマイクロチップを埋め込み、入退場、自動販売機の精算等ができる


右手の甲に埋め込まれるRFIDチップ

認証している場面(冒頭記事にある紹介ビデオより)

記事中にある懸念・課題は

  1. セキュリティ)チップは暗号化されているというが本当に安全か?
  2. プライバシー)常時監視されるおそれがある
  3. 人体への安全性)
個人認証の難しさ)
  1. 認証(Authentification)の根拠問題)
    1. 戸籍謄本・抄本、米国で言うBirth Certificate には顔写真がなく、悪意を持って引き出して他人になりすますことができる。
      会社やweb siteの認証につかわれるhttpsも、公開鍵暗号が使われるが認証局がその公開鍵を管理することで、正当性を認証するが、認証局への登録の正当性、認証局の信頼性が課題になる。以下の参考記事のような事件も起きている。

      参考記事): https://japan.cnet.com/article/35104053/ 
      グーグル、中国の認証局WoSignの証明書を拒否へ--「Chrome 61」から Charlie Osborne (CNET News) 2017年07月11日 
  2. ID盗難問題)
    1. 電子的な盗難: 電池不要な受動式で安価な非接触方式としてICタグがあるが、wikipedia: ICタグ: http://bit.ly/2fciOx9 にあるようにこれはEPCコードという固有のIDを送って判別する。したがって、コードを盗む悪意の端末にかざしたり、盗聴されると簡単にIDが盗まれうる。
      Suica(方式はFelica: https://ja.wikipedia.org/wiki/FeliCa ) や、それとMiFare (https://ja.wikipedia.org/wiki/MIFARE ) を統合した最新のNFCカード方式( http://www.orangetags.co.jp/what_felica.html )などでは、チャレンジレスポンス方式で、秘密鍵がもれなくなっていたり、通信が暗号化されている模様。
    2. 物理的な盗難: 手の甲の所定位置に埋め込むとわかっていれば、薬で本人を眠らせて、チップを抜き取りなりすます犯罪もおきえる。
  3. プライバシー問題)
    1. 個人が特定できる、かつ、非接触・受動式ということは、政府や企業が受信器をおけば、どこに誰が居るかつねに監視できる。これを、懸念する人がおおい。
対策)そこで、上記の各点に対して対策を考えてみた。後ほど説明を追加するが、まずは簡単に列挙する。

  1. 認証)子供が生まれた時に、一生使えるIC鍵を埋め込む。米国でいうSocial Security CardをID化して埋め込むようなもの。。この番号は一生変わらない。
  2. ID盗難問題)
    1. 電子的:十分な暗号長を持った、公開鍵暗号を用いたチャレンジレスポンス認証とする。秘密鍵は絶対にチップ外にでないので、電子的な盗難は非常に困難にできうる(後述)
    2. 物理的 :誕生時に手の甲など所定の位置にある、主鍵と、人によって場所が異なり、埋め込んだ医者しか知らない、認証鍵(それも複数)の両方を埋め込む。
      入国審査や警察、入場チェック等信頼できる組織にチェック機をおき、主鍵のIDと認証鍵のIDの一致をチェックする。これらのIDが一致しなければ犯罪の可能性ありということで、物理盗難の抑止力とする。
  3. 冗長性)
    1. 右手の甲、左手の甲とか主鍵を複数場所に埋め込んで、故障時に備える。
  4. プライバシ)
    1. 主鍵単体では認証できないことにする。
      1. 主鍵は、ペアになっている活性化鍵と通信できないと、認証を行わない。活性化鍵は10cmとか近接距離に置かれ、これも受信センサから電源供給される方式にする。
      2. 活性化鍵は、たとえば、指輪や腕時計型の端末に入れる。
        1. このIDは、秘密鍵と違って漏れても、主鍵がなければ役に立たないので、電子データ(ファイル)で引き渡しても安全であり、貰ったデータに対して、ユーザが自分の好みにあった、端末、指輪、スマートウォッチ等を選択できる。
        2. 政府・勤務先に活性化鍵が漏れると、プライバシ管理を自分以外ができてしまう。ただし、政府や企業は、特定の活性化鍵がだれに対応するのか管理しないとならない。これは、活性化鍵を盗むと同時に顔認証に登録して、主鍵との関係を保存できてしまう。ともあれ、企業や政府が要請しても、安易に活性化鍵を出さないように、意識づけないとならない。
      3. 活性化鍵をoffにしておけば、プライバシーは漏れない。指輪型であれば指輪を外すなりすればよく、スマートウォッチ型であれば、手をかざしたときのみonになるとかすればよい。
      4. 将来的には、自分の意思で直接認証をコントロール(必要なときだけon)したい。筋電位等やBMI(Brain Machine Interface)が使えると思う。
チャレンジレスポンス認証・公開鍵認証とは)
 今後記載

実装例)
 複数例を今後記載予定

1. スマートウォッチ型の活性化鍵と主鍵を用いた場合

  1. 認証端末が自分の公開鍵と秘密鍵で暗号化したランダム番号を活性化鍵に送る
    (注: シーケンスのあいだじゅう、このランダム番号を公開鍵・秘密鍵で暗号化してやりとりする。すなわち、データを盗聴して、同じデータを再生して偽証しようとしても、やりとりごとに違うランダム番号を正当な方法で暗号化していなければ、偽証できない。)
  2. 活性化鍵は、認証局に公開鍵を確認して、端末が誰かを確認。しつつ、受信したランダム番号を端末の公開鍵で解読(端末以外は公開鍵に対応した秘密鍵がないはずなので、これで端末が本物であることが認証できる)。そしてどの端末の認証リクエストを受けたのか記録する。
  3. 活性化鍵は、活性化用の秘密鍵・公開鍵のペアと、主鍵の公開鍵を持っている。
    活性化秘密鍵で端末から受け取って解読したランダム番号を暗号化して、主鍵の公開鍵とともに端末に送る。
    暗号化通信には、認証のための主鍵の公開鍵が必要で、それは、この操作で提供される。これが、次のstep4で本人認証にもなる。
  4. 端末は、主鍵の公開鍵を認証局に送って、主鍵を持っている本人を認証する。
    端末は主鍵の公開鍵で、先に使ったランダム番号+質問状を暗号化して、活性化鍵から受け取った活性化秘密鍵で暗号化されたランダム番号と共に、主鍵に送る。
  5. 主鍵は、活性化公開鍵と主鍵の秘密鍵・公開鍵のペアを持っている。
    1. 活性化公開鍵で活性化鍵が活性化秘密鍵で暗号化したランダム番号を解読する。
    2. 主鍵秘密鍵で、端末が送った ランダム番号+質問状を解読する。
    3. 上記1,2のランダム番号が一致しないときは、不正リクエストとして無視。(つまり、活性化鍵が本物でない)
    4. 3をクリアした場合には、質問状に対して答えを書き、さらに受け取ったランダム番号をつけて、主鍵の秘密鍵で暗号化して、端末に送信する。
  6. 端末は受け取った、暗号を主鍵の公開鍵で解読し、ランダム番号が一致した場合に、質問状の答えを確認する。
随想)
 もう3-4年前にFacebookで議論して、出た課題への対策を考えたまま眠らせていたのですが、実際に手に埋め込んだ冒頭記事がでてきたので思い出しました。

 特許にしてひと財産.... とも思ったのですが、この程度のことは既に考えている人がいそう、専門家ならなおさら、、ですし、こういう一般例は公知にしてパテント・トロール http://bit.ly/2faJ2QG をブロックして、具体的な実装を考えて苦労した人にこそ特許を与えるのが良いとも思います。
 まだまだ、いろいろ考えないとならないこともありますし、考えるのも面白そうです。大きなビジネスにするには施策も必要ですし、これも面白そうです。
 もしも真面目にビジネスされたい方がいれば、連絡してください。大企業で社内政治に巻き込まれるのは歓迎しませんが。。ww


2017年7月10日月曜日

LinuxサーバにMySQLを設定した

以下に投稿した機能を拡張するために、MySQLを家庭内ゲートウェイであるLinuxサーバに立ち上げて、RaspberryPI等、家庭内IoTシステムからremote accessして、データを共有できるようにした。

2017年6月12日月曜日

 目次)MySQL化の理由は最後の背景で説明する。
  1. MySQLのinstall
  2. remoteアクセスの設定
    1. 設定ファイルの変更
    2. RasperryPiからのアクセス実験
    3. rootではアクセスできない
  3. Databaseの移動
    1. RAID (mdadm)のpartitionへの移動 (堅牢化)
    2.  Apparmor (CentOSでいう、SELinux) の無効化
  4. おまけ)MySQL workbench on Mac OS-X
  5. 背景
    1. microSDカードの書き込み寿命
    2. 対策
      1. USB HDDの利用
      2. MySQLなどremote databaseの利用

MySQLのinstall)
 Ubuntu 16.04 LTSなので、

2016-11-17 Ubuntu 16.04 LTSにMySQLをインストールする 
の通りに aptでinstallして、設定をすれば、まずはlocal machineで使えるようになった。上記にある、サンプルのtest_dbも、この通り動いた。

Remote Accessの設定)

  1. LinuxサーバのUFW を設定して、標準の3306ポートを開いた。
    参考)
    1. UFWの設定: http://qiita.com/yoh-nak/items/46935af3c5c4036e93b3
    2. コンソールからGUFWのほうが簡単かも:
       http://sicklylife.at-ninja.jp/memo/ubuntu1404/gufw.html
  2. ついでに /etc/sysctl.conf を書き換えてrebootしてIPv6も止めた。
    参考) http://l-w-i.net/t/ubuntu/ipv6_001.txt
  3. remote accessの設定)
    1. だが、telnet ipaddress 3306をやってもつながらない。
       /etc/mysql/mysql.conf.d/mysqld.cnf   の設定変更が必要
      bind-address           = 127.0.0.1
      でローカルマシンからしか接続できなくなっているので、これを、
      bind-address           = 0.0.0.0
      に書き換えてどこからでも接続できるようにする。
      参考)http://bit.ly/2uVx9Rl  How to allow mysql remote connections via particular interface
    2. RasperryPIからのアクセス実験

      1. rasp01 ~ $ mysql -h 192.168.0.88 -u user -p
        Enter password: 
        Welcome to the MySQL monitor.  Commands end with ; or \g.
        Your MySQL connection id is 26
        Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)

        Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
      2. :
        mysql> connect test_db;
        Reading table information for completion of table and column names
        You can turn off this feature to get a quicker startup with -A

        Connection id:    27
        Current database: test_db

        mysql> show tables;
        +-------------------+
        | Tables_in_test_db |
        +-------------------+
        | emp               |
        | lights            |
        +-------------------+
        2 rows in set (0.00 sec)

        mysql> select * from emp;
        +------+------+
        | id   | name |
        +------+------+
        |    1 | aaa  |
        |    2 | bbb  |
        +------+------+
        2 rows in set (0.00 sec)

        mysql> 
    3. ところがRasperryPIからrootでMySQLに入れない。mysladmin でやってみるとアクセス権がないとのこと。
      rasp01 ~ $ mysqladmin -h Linux02 -u root -p version
      Enter password: 
      mysqladmin: connect to server at 'Linux02' failed
      error: 'Access denied for user 'root'@'192.168.0.122' (using password: YES)'
    4. サンプルテーブルでの実験からも類推できるし、以下のようなやり方でできると書かれた webサイトもあったが。。。やり方がまずかったのか上手く行かない。mysql> grant all on *.* to 'root' identified by 'rootのパスワード';
    5. どうもlocal machine上で 管理table mysqlの設定をいじればよいらしいがよくわからない。
    6. Local MachineからMySQLにroot権限で入って見える特権データベース
      (以前、SQLite3で、壊してひどいことになった。)

      localhost以外で追加してみようとするが。。
      SQLは初心者なので、、、よくわかりません。。
  4. Databaseの移動)
    1. Quitta http://bit.ly/2uXMLnp をみて、ファイルをmdadmのpartition (/homeからのsymblic linkへ移動)
    2. が、/etc/init.d/mysql restart するとコケる。

      # journalctl -xe でみると、apparmor (CentOSでいう、SELinux)が拒絶している) 
    3.   https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 を参考に、Apparmorの設定 /etc/apparmor.d/usr.sbin.mysqld あたりを書き換えたが、なんどやっても上手く行かない。
    4. CentOSでは、SELinuxは扱いにくいので、無効化(おすすめは、http://red.ht/2uZTaP1 にあるPermissive mode) なので、Ubuntuでも無効化することにした。
    5. Grubからdisableしてrebootして、問題になくデータベースは移動した。
      しかし、Databaseを移動すると何がどうなってダメなのか不明。
    6. おまけ)rootになって # journalctl -xe をすると、Mac OS-XにインストールしたCanon printer drive (tools) のbonjure が、大量にbroadcastメッセージを出して、UFW (iptables) つまりlinuxサーバのfirewallが拒絶メッセージを出している。なんだか怪しい。。
  5. おまけ)MySQL Workbench on MacbookPro OS-X El Capitan.
    Mac OS-Xからの確認用に、
    https://www.mysql.com/jp/products/workbench/ からダウンロードした。グラフィカルにMySQLサーバに触れる。
    MySQL Workbenchでサンプルdatabase/tableの操作

  6. 背景)microSD cardの書き込み寿命
Makerfairを主催する米国の雑誌Makerとは比べ物にならないほど内容が詳細で充実した..日本の誇る雑誌 トラ技 2017/7月号 (CQ出版社の画面 http://bit.ly/2tO4iB3 を引用)にラズパイ特集があった。実は、CQ出版社にはバックナンバーがほとんどあって、買い逃した本も上記リンクから行けるCQ出版のweb shopの通販で送料無料で数日で届く。カード支払いも可能。

CQ出版社webのトラ技2017/7月号情報

CQ出版社webにあるトラ技2017/7月号の目次情報

その第4章が、
「数Kバイトの小データを10年間記録し続ける高信頼メモリの技術
寿命対決! コンビニSDカード vs 産業用SDカード」であり、
ラズパイで使った時のmicroSDカードの寿命を徹底評価していた。
http://bit.ly/2tO4iB3リンクから各章の1ページ目がpdfで閲覧できる。
SDカード(Flash memory)の詳細な仕組みから始まり、8GBのmicro SDカードを装着したラズパイで、4KBのファイルを1秒間に100個記録し続ける(古いのは消す)データロガーとして使ったときのmicro SDカードの寿命を算定していた。TPSM-GS1Sという産業用のSLC(Single level Cell)カードだと10年持つが、通常売られているMLCタイプの安いmicro SDカードだと18日でダメになるとのこと。(ここを特集するのは、さすが、トラ技。)
そりゃそうだ、wear levelingも適当な安価SDカードだし。。
さすがに、1秒間に100個ずつファイルを記録することもなく、1分間に1個。同じファイルへの書き込みはbufferされていると考えると、もうちょっと持つのかもしれないが、小さいファイルを更新しまくるlinux/unixのストレージが市販microSDカードというのは、いかにも心配である。
記事にある書き換え寿命の仕様(保障)値を引用すると、
SLCで10万回、p-SLCで2万回、MLCで3000回。
実効最小ではSLCで21万回、p-SLCで11.8万回、MLCで1.2万回。
 amazon.com http://amzn.to/2tNVmvM では、p-SLCの16GBのmicroSDカードが10枚 $815で、SLC 4GBのmicroSDカードが10枚 $805で売られている。---- 高い!!!!

拙blog: http://bit.ly/2sccXwe に掲載した、RaspberryPIを使ったコンセント制御。cron でアプリが1分ごとに起動して、タイマー機能を実現する作りになっている(簡単なので..) 。
機能拡張するのに状態管理をファイルでやろうと思ったが、危ない。。常時起動しているdaemonにするか、状態管理daemonと通信させるか、ちょっとやり方を考えたい。と、考えた結果、MySQLサーバを立ち上げて、今後増えるであろう、いろいろな家庭内IoT機器の情報をRelational Databaseで共有して、検索・変更を容易にすることにした。
コンセント制御では、WebベースなのでPHPを使っており、PHPにはMySQLをアクセスするライブラリもある。

Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5 (Learning Php, Mysql, Javascript, Css & Html5) 4th Edition (amazon.com http://amzn.to/2uPRBmF でベストセラーらしい。以下表紙写真)にも、PHPとMySQLの連携について書かれている。
参考になりそうなR'REILLY本


2017年6月12日月曜日

RaspberryPIを使って、コンセントを制御する。


久々に投稿します。かなりネタが溜まっているので、順次投稿し、本稿も随時加筆します。
RaspberryPI 2 modelB v1.1 を使って、電灯制御を作っている。

完成した基板とRaspberryPi (ずっと、ブレッドボード版を使っていたが..)

完成した基板
完成した基板とRaspberryPI

基板裏面とRaspberryPI
基板裏面とRaspberryPI

補足)
 リモコン信号を受信して、LEDを点滅したり止めたりするDaemon もおまけで走らせている。

方針)

  1. 他にもRaspberryPI, Raspberry PI3 BやRaspberryPI Zero W等も購入した。
    おいおい拡張したい。
  2. RaspberryPI 3B+ には、Ubuntu mateをいれ、Elecrow RPA05010R HDMI 5-Inch 800x480 TFT LCD Display with Touch Screen Monitor for Raspberry Pi B+/2B/3B をamazon.comで購入して、接続しタッチパネル操作できるようしている(以下写真)。DRAMも多いし、CPUも速い(別途投稿したい)
  3. Raspberry PI 2 modelB v1.1はRaspbian Wheezyで使っている。設定法や上記Ubuntu mateの設定法は別途記事にする。(上記、Ubuntu mateやJessieとかも入れてみたが、やはり、木の実マークのWheezyが良いかも)
  4. 電灯制御に関する記事: https://www.samkear.com/hardware/control-power-outlets-wirelessly-raspberry-pi の通りにやった。

    1. ここではEteckcity という430MHzの無線のリモコンコンセントを使う。
    2. リモコン制御はSMKNという430MHzの送受信カードセットを使う。信号はRS232Cのような、調歩式の振幅変調(1,0)コーディングではなく、パルス幅(FM)コーディングなので、RaspberryPI等のGPIOを使うのが良さそう。
      1. 以下に書いたwiringPIライブラリを使って信号を入出力するバイナリがある。
        1. 送信機で押された無線コードを表示するRFSnifferを起動して、無線コード(10進6桁から7桁)を得る。
        2. codesendというアプリにコードを与えると無線送信する。
      2. このカードも大変安い。5個入りパックの無名ブランドはもっと安い。
    3. 以下にamazon.comでの値段を掲載する。
  5. 上記では、wiringPIというパッケージを使い、GPIO (RaspberryPIシリーズの入出力ポート)を制御している。
    1.  GPIOポートの結線図:: https://projects.drogon.net/raspberry-pi/wiringpi/pins/  
    2.  例題LED点滅: http://wiringpi.com/examples/blink/
  6. 上記の点滅を改造して3色LEDの点滅アプリ (blinkRGB) を作った。root(特権ユーザで実行する必要があるが、以下のようにつかう
    1. 自動点滅: 引数なし。以下のように点滅する。
    2. 所定点滅: (R,G,B) = で所定色を指定。(1,1,1) = 7が白を示す。4が赤、0が黒など。
  7. スイッチで電灯を点滅させたいので、Eteckcity から電線を引き出した。従来、TP-Link Smart Plug w/ Energy Monitoring http://amzn.to/2scgjzr  からスイッチを引き出していたので、このプラグが入るジャックにして、コンセント部分を入れ替えて使えるようにした。


    従来のTP Linkのもの

    引き出した線が繋がる、壁スイッチ

    改造作業。TP LinkもEteckCityも、もともとスイッチがあるので、そこから線を引き出すだけ
    左: 従来のTP Link,  右: EteckCityにつけた壁スイッチへのコネクタ。
  8. RaspberryPIへ外出先からのアクセス
    1. RaspberryPIは、192.168.のローカルLANからしかみえない。
    2. Broadband routerからsshポート(安全のためport番号は規定の22番とは全然違うものにしている)をポートマッピングしている、ゲートウェイのLinuxサーバ ホスト名: Linux02 がある。
    3. Linux02は No-IPのDynamicDNSサービス(有料。そうしないと更新が面倒)を使いホスト名を与えてある。無料だったminiDNSはサービスが打ち切られた。
    4. RaspberryPIのapache2, sshdに対して、Linux02でsshトンネルを掛けて、外部からアクセスしている。sshポートが特殊なうえ、rsaのprivate鍵がないとログインできないので、ハッキングに対する安全性は高いと思う。
  9. 電灯制御のweb pageを改造している。
    1. 設定部分のファイルをJSONにして分離。
      1. 部屋・電灯の名前、受信機がないスイッチ、つながっていない受信機などが分かるアノテーションをいれた
    2. 読み込み部分とtrigger部分を分離
    3. デバッグ用表示を追加: デバッガphpdbgを使おうとphp 5.6をコンパイルしてみた。php 5.6は、phpdbgが使えるまでには至らず。
    4. タイマー設定のJSONを読み込み表示。(末尾に写真をつける)
      1. formのradio buttonでのPOSTにしたが、いちいちhtmlを読み込むのは面倒なのでJavascript化したい。
      2. スイッチの状態で色を変え、また、現在の状態をJSON (or cookie) に保存したい。
      3. 肝心のタイマーのコード(多分PHP)を完成させる。
制御画面)

現状のもの:Allでは全部のリモコンにon/off信号を送る。webからのon/offは動作している。

タイマーは、JSONの設定ファイルの時刻設定を表示。ただし、タイマーの機能をする本体はまだない。タイマーformのラジオボタンもJavascript化する予定。。

リモコンパラメータなどが入った設定JSONファイルを読み込み、表示も自動作成する。
送信ボタンだけで受信機がない行を排除した表示。つかっていないコンセントを表示しない仕様にも簡単に切り替えられる。

上記と違い、送信機にある全部の無線信号を表示させたもの。

記事のものをとりあえず動かした版、手でhtmlを改造してB1,B2,B3を追加。