MAC に Node-RED をインストールする


Node-RED は、ハードウェアデバイス、API、オンラインサービスなどを接続するためのツールです。
ボックスを接続する形式のグラフィックなツールです。
言語は JavaScript です。

Linux、Mac、Windows 環境で動作します。
IBM Bluemix、Amazon Web Services Microsoft Azure などのクラウド環境でも動作します。
node.js が必要です。

MAC へのインストール
(1) node のインストール
brew で node をインストールする

(2) node-red のインストール

$ npm install -g node-red

動作確認
Creating your first flow を試してみます。

flow
20161011_nodered_flow

結果
unixtime 形式の時刻が文字列に変換される
20161011_nodered_debug_1 20161011_nodered_debug_2


さくらの IoT Platform β


20161005_sakura_iot_beta

10月5日に、 さくらの IoT Platform の β サービスが発表されました。
通信モジュールの価格は、特価 4980円 です。
早速、ポッチしました。
さくらの IoT オンラインショップ

さくらインターネット – 『さくらのIoT Platform β』発表会
ASCII – モジュールと利用料で1万円切ったさくらのIoT Platform βがスタート
@IT – さくらのIoT Platformはベータを11月1日に開始、通信モジュールは4980円
Impress – 「さくらインターネット、「さくらのIoT Platform β」の申し込み受付を開始


さくらの夕べ IoT特別編


20161004_sakura_lt

10月1日、さくらインターネットで開催された 「さくらの夕べ IoT特別編」に参加しました。
さくらの IoT Platform の α版ユーザーが15名ほどが集まりました。

さくらインターネットから、11月開始されるβ版の説明がありました。
通信モジュールは小型化さて、α版の半分くらいになります。
写真撮影は不可という条件で、実物を見せてもらいました。
機能としてファイル転送が追加されたり、サービスとしてデータ保存のサービスが追加されるとのことです。
α版は無料でしたが、β版の通信モジュールは、有料で配布されます。
来週のCEATECで正式発表するそうです。

tsumugs から、Sharing Key というスマートロックが紹介されました。
さくらの IoTを採用した理由として、WiFiやBluetoothなどの通信手段の代わりに、3G/LTE回線を格安で使用できるためとのこと。
WiFiやBluetoothでは、空室物件にもインターネット環境を用意しておいたり、なぜか接続できなかったというトラブルが、ある程度避けられない。
そのため、スマートロックは賃貸物件にはほとんど使用されていないそうです。
賃貸物件のカギがスマートロックになると、何が起こる? 開発企業を独占取材

大阪の 共立電子 から、トイレの個室ドアにセンサーを取り付けて空き状況がわかる 「IoToilet」が紹介されました。
共立電子では、お客さんさんからの要望もあり、IoT に関するさまざまなアイデアを試行しているそうです。

テクニカルライターの大澤文孝さんから、ZigBee 搭載の TWE-Lite と組み合わせて、インターネットに温度データをアップロードした事例が紹介されました。
雑誌i/O に掲載したそうです。

私から、自作のセンサーボードと組み合わせた温度・湿度・気圧などの観測システムを紹介しました。
さくら IoT で温度・湿度を観測する

当日の様子は、私の事例も含めて、ASCIIのサイトに掲載されました。
発表直前β版もチラ見せ!「さくらのIoT」ユーザーのLT大会


gmail 経由でメール送信できない


Python などのプログラムで、メール送信すると、認証エラーになります。
これは、gmail のセキュリティが強化されたためです。
プログラム側で対応するのが、正当な対処だと思いますが。
暫定的に、gmail 側のセキュリティを弱くします。

「安全性の低いアプリ」にて、「安全性の低いアプリのアクセス」を「オンにする」にします。
20160905_gmail_auth

参考
安全性の低いアプリがアカウントにアクセスするのを許可する
クライアントでユーザー名とパスワードが受け入れられない


Python gmail 経由でメール送信する


Python にて gmail サーバー経由でメール送信するプログラム

import smtplib
from email.mime.text import MIMEText

def sendmail(from_addr, to_addr, subject, body):
	GMAIL_HOST = "smtp.gmail.com"
	GMAIL_PORT = 465
	GMAIL_USER = "ユーザ名"
	GMAIL_PASS = "パスワード"
	msg = MIMEText(body)
	msg['Subject'] = subject
	msg['From'] = from_addr
	msg['To'] = to_addr
	smtp = smtplib.SMTP_SSL(GMAIL_HOST, GMAIL_PORT)
	smtp.login(GMAIL_USER, GMAIL_PASS)
	smtp.sendmail(from_addr, [to_addr], msg.as_string())
	smtp.close()

# main
SUBJECT = "タイトル"
BODY = "本文"
FROM = "送信元メールアドレス"
TO = "送信先メールアドレス"
sendmail(FROM, TO, SUBJECT, BODY)

参考
Gmailで簡単にメール送信


Python メール送信


Python でメール送信するプログラム

import smtplib
from email.mime.text import MIMEText

def sendmail(from_addr, to_addr, subject, body):
	msg = MIMEText(body)
	msg['Subject'] = subject
	msg['From'] = from_addr
	msg['To'] = to_addr
	smtp = smtplib.SMTP()
	smtp.connect()
	smtp.sendmail(from_addr, [to_addr], msg.as_string())
	smtp.close()

# main
SUBJECT = "タイトル"
BODY = "本文"
FROM = "送信元メールアドレス"
TO = "送信先メールアドレス"
sendmail(FROM, TO, SUBJECT, BODY)

ネットにある例だと、connect() がなかったが、必要みたいです。

参考
メール送信 – Python入門から応用までの学習サイト


Debian メール送信


Debian の STMPサーバーは exim4 です。
デフォルト設定では、メール送信は自サーバー内だけです。

外部にメール送信するように、設定変更します。

# dpkg-reconfigure exim4-config

20160905_exim4_config
「local delivery only; not on a network」になっているので、
「internet site; mail is sent and received directly using SMTP」に変更する。

確認

$ echo "本文" | mail -s "タイトル" hoge@example.com

参考
電子メールを使用するためのシステム設定
debianのexim4でメールを外部に送信できるようにする
exim4の設定方法


ビットマップ・フォント まとめ


マトリックス LED で表示するときに使えるビットマップ・フォントです。
日本語の漢字を綺麗に表示するためには、12×12 くらい必要です。

12×12 および 10×10
PixelMplus (JIS第1・第2水準の漢字)

8×8
美咲フォント (JIS第1・第2水準の漢字)

6×6
6×6フォント (平仮名、片仮名)

5×5
5×5フォント (英数字)

4×4
4×4フォント (英数字)


さくら IoT のケース


さくらの IoT Platform は、さくらインターネットが提供するIoTプラットフォームサービスです。
さくら IoT の通信ボードには、外付けのアンテナをつけますが、小型同軸コネクタを使っており、そのうちに壊れるのは思うくらいヤワな感じです。
そこで、さくらの通信ボードとアンテンを固定し、Arduino と一体にしたケースを、作成しました。
素材はアクリル板で、レーザー加工機を加工しました。
加工データは Github で公開しました。

20160901_sakura_iot_case_board
20160901_sakura_iot_case_front


Scratch と OSC の連携


Scratch は、初心者向けのプログラミング言語学習環境です。
OSC (OpenSound Control) は、MIDI の代替となる電子楽器用の通信プロトコルです。

注意
Scratch の最新版は バージョン 2.0 ですが。
この記事は バージョン 1.4 について述べています。
Scratch のサイト からダウンロードできます。

Scratch と外部プログラムの連携
Scratch 1.4 には 遠隔センサー (Remote Sensors) という機能があります。

Scratch と OSC の連携
Scratch の遠隔センサーと、OSC を橋渡しする Scratch OSC Bridge (以降 Bridge と称する) というアプリがあります。
Windows、MAC、Linux で動作します。

遠隔センサーのメッセージには、broadcast と sensor-update の2種類がありますが。
Bridge では、sensor-update を OSC メッセージとしてサポートしています。
broadcast は、Scratch と Bridge との間のコマンドして使用しています。

注意
Bridge は Java SE 6 を必要とします。
MAC の場合は ダウンロード – Java for OS X 2015-001 から

動作確認1 : Scratch から OSC Server へ
Scratch にて画像をクリックすると、
OSC Server にて画像に対応する文字が表示する。
OSC Server は pyOSC を使って Python で記述しました。

設定
(1) Scratch にて to_osc.sb を起動する。
20160827_scratch_to_osc

(2) Bridge を起動する。
「Connected with Scratch」が表示される。
送信先ホスト (HOST IP-ADDRESS) はデフォルトの「127.0.0.1」のままに。
送信先ポート (OUTGOING PORT) はデフォルトの「9000」のままに。
20160827_bridge_to_osc

(3) ターミナルにて、osc_server.py を起動する。

操作
(1) Scratch の画像をクリックする。
変数 /animal に値を代入し、sensor-update メッセージを送信する。
(2) Bridge にて、OSC メッセージに変換し、送信する。
(3) OSC Server にて、OSCメッセージを受信する。
ターミナルに、値に対応する文字を表示する。
画像と数字とメッセージの対応。
ねこ : 1:cat
いぬ : 2:dog
うま : 3:horse

プログラムの工夫
Scratch では、変数の値が変わった時に、sensor-update メッセージが送信されます。
「ねこ」の画像を続けてクリックしても、最初の1回しか送信されないという不具合が生じます。
これを回避するために、変数の値を設定してから、1秒後に画像以外の数字(0)を送っています。

動作確認2 : OSC Client から Scratch へ
OSC Client にて数字を入力すると、Scratch にて猫が移動する。
OSC Client は、pyOSC を使って Python で記述しました。

設定
(1) Scratch にて from_osc.sb を起動する。
20160827_scratch_from_osc

(2) Bridge を起動する。
「Connected with Scratch」が表示される。
「NOW LISTENING TO OSC PORT」に「8000」に表示される
「RECIEVED OSC ADDRESS」と「SEND THESE OSC ADDRESS TO SCRATCH」に「/MOVE」が表示される。
20160827_bridge_to_osc

(3) ターミナルにて、osc_client.py を起動する。

操作
(1) ターミナルにて、コマンド(数字)を入力する。
OSCメッセージ「/move 数字」を送信する。
(2) Bridge にて、sensor-update メッセージに変換し、送信する。
(3) Scratch にて、変数「/move」の値が変更される。
値に応じて、画像が移動する。

コマンドは、数字1文字です。
0 : 中心に移動する
1: 左に移動する
2 : 右に移動する
3 : 上に移動する
4 : 下に移動する

プログラムの工夫
Scratch では、sensor-update メッセージを受け取った時というイベントが無いようです。
sensor-update メッセージを受け取ると、対応する変数に値が設定されます。
変数が同じ値を保持するために、右に移動するというコマンドを送ると、いつまでも右に移動し続けるという不具合が生じます。
これを回避するために、OSC Client では、コマンドの数字を送ってから、1秒後にコマンド以外の数字(−1)を送っています。
Scratch では、変数の更新を1秒間隔にすることで、コマンドが一度実行された後は何もしないという動作を実現しています。
う〜ん。もっといいう手があるかもしれない。

プログラム
作成したプログラムは Github で公開しました。

参考
Scratch OSC Bridge
Scratch OSC Bridge 用の環境のセットアップとテストの手順