Node-RED でグラフ表示をする


Node-RED のグラフ機能として、
Google Chart のノードが提供されています。

他には、下記のようなサービスと連携することでグラフ表示ができるようです。
dashing
freeboard
pubnub
atlasboard

インストール

$ npm install  -g node-red-contrib-googlechart

確認
線グラフを表示します。
データは、Google Chart のもの を使いました。

flow
20161012_nodered_flow

chart の設定
20161012_nodered_chart_setting

function ノードにて、グラフのデータを用意する

msg.payload = [
{Day:1,  Galaxy:37.8, Avengers:80.8, Transformers:41.8},
{Day:2,  Galaxy:30.9, Avengers:69.5, Transformers:32.4},
{Day:3,  Galaxy:25.4,   Avengers:57, Transformers:25.7},
{Day:4,  Galaxy:11.7, Avengers:18.8, Transformers:10.5},
{Day:5,  Galaxy:11.9, Avengers:17.6, Transformers:10.4},
{Day:6,   Galaxy:8.8, Avengers:13.6,  Transformers:7.7},
{Day:7,   Galaxy:7.6, Avengers:12.3,  Transformers:9.6},
{Day:8,  Galaxy:12.3, Avengers:29.2, Transformers:10.6},
{Day:9,  Galaxy:16.9, Avengers:42.9, Transformers:14.8},
{Day:10, Galaxy:12.8, Avengers:30.9, Transformers:11.6},
{Day:11,  Galaxy:5.3,  Avengers:7.9,  Transformers:4.7},
{Day:12,  Galaxy:6.6,  Avengers:8.4,  Transformers:5.2},
{Day:13,  Galaxy:4.8,  Avengers:6.3,  Transformers:3.6},
{Day:14,  Galaxy:4.2,  Avengers:6.2,  Transformers:3.4}
];
return msg;

結果
20161012_nodered_chart

参考
Node-REDで線グラフ
見えるNode-RED!


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


WiFi アクセス ポイントから位置情報を検索する


WiFi アクセス ポイントから位置情報 (緯度経度) を検索するには、
Google Maps Geolocation API を使用します。

まず、APIキーを取得します。
次に、サンプルを試します。

$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"

下記のような位置情報が返ってきます。
米国のGoogle本社のそばですね。

{ 
  "location": {
  "lat": 37.4248297,
  "lng": -122.07346549999998
 },
 "accuracy": 1145.0
}

20160620_geo_goole

手軽に試せるように Python コードを作成します。
作成したコードは Github で公開しました。

サンプルのMACアドレスで、実行します。

$ python geo_wifi.py 01:23:45:67:89:AB 01:23:45:67:89:AC

35.4437078 139.6380256 4093.0

Chromeブラウザに地図が表示されます。
なぜか、横浜市役所です。
20160621_geolocation

さて本番
家で拾えるWifiのMACアドレスを試すと、
う〜ん自宅の近くが表示されますね。(^^;

参考
Wi-FiのMACアドレスはもはや住所と考えるしかない
linux のコマンドラインから、wi-fi の情報をつかって位置情報を得る


MAC airport コマンド


MAC には WiFi の管理を行う airport というコマンドがあります。

実体はここ
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport

airport scan

SSID BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
AirPortxxxx **** -36  1       Y  JP WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP) 
L02F_xxxx **** -37  40      Y  -- WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP) 
BUFFALO-xxxx **** -79  6       Y  -- WPA(PSK/AES/AES) WPA2(PSK/AES/AES) 
aterm-xxxx **** -84  4       Y  JP WPA(PSK/AES/AES) WPA2(PSK/AES/AES) 

参考
airport – the Little Known Command Line Wireless Utility
Managing WIFI connections using the Mac OSX terminal command line


MAC の Python で Chrome を開く


Python で Chrome を開くには、Selenium と ChromeDriver を使用します。
Selenium は、ブラウザを自動化するツールです。WebDriver API を有しています。
ChromeDriver は、Chrome ブラウザのために WebDriver のプロトコルを実装するスタンドアロンサーバーです。

インストール
Selenium のインストール

$ pip install selenium

ChromeDriver のインストール
chromedriver_mac32.zip をダウンロードする。
解凍した chromedriver をbin ディレクトリに置く。

$ wget http://chromedriver.storage.googleapis.com/2.22/chromedriver_mac32.zip
$ unzip chromedriver_mac32.zip
$ cp chromedriver /usr/local/bin/ 

確認
test.py

import time
from selenium import webdriver
driver = webdriver.Chrome('/usr/local/bin/chromedriver')
driver.get('http://www.google.com/xhtml');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()

下記のような 「ChromeDriver」 の検索画面が表示される
20160620_chrome_driver


MAC Book Air の 有線LAN


MAC Book Air で有線LANを使うには、変換アダプタが必要です。
いくつか試してみました。

(1) Apple Thunderbolt – Ethernetアダプタ
Apple 純正なので、ケーブルを挿すだけで、つながります。

(2) USB – Ethernet アダプタ
(2−1) BUFFALO LUA3-U2-ATX
ケーブルを挿すだけで、つながりました。

(2−2) BUFFALO LUA4-U3-AGT
USB3.0 対応、Giga イーサ 対応です。
MAC用のドライバー をインストールしたら、 つながりました。


MAC で hello.c をARMバイナリにクロスコンパイルする


(1) Ubuntuの環境をつくる
MAC で Ubuntu を動かす (VirtualBox)

以降、Ubuntu環境です
(2) ARMの開発環境をインストールする

$ sudo apt-get install g++-arm-linux-gnueabihf

(3) hello.c をクロスコンパイルする
hello.c

#include <stdio.h>
int main(int argc, char *args[])
{
    printf("Hello, world!\n");
}

クロスコンパイルする

$ arm-linux-gnueabihf-gcc hello.c -o hello

実行すると、実行できないよというメッセージが出る

$ ./hello
bash: ./hello: cannot excute binary file:

(4) ARMの実行環境をインストールする

$ sudo apt-get install qemu-user qemu-user-static

環境設定する

$ update-binfmts --display qemu-arm
$ cd /lib/
$ sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 .
$ sudo ln -s /usr/arm-linux-gnueabihf/lib arm-linux-gnueabihf

実行すると、今度はOK

$ ./hello
Hello, world

(5) ラズパイで実行する
ラズパイに転送して、実行します。OKでした。

参考
Ubuntu 12.04 で hello.c をARMバイナリとしてコンパイルして実行してみる

debian – binfmt-support
binfmt_misc というカーネルモジュールは、システム管理者がファイル拡張子をベースにして各種バイナリ 形式をインタプリタに登録し、該当するファイルが実行された時には適切な インタプリタが呼び出されるようにできます。


VirtualBox ホストOSからゲストOSにアクセスする


ホストOSはMACで、からゲストOSはUbuntuです。

VirtualBox は初期状態では、NATに設定されています。
この状態では、ゲストOSからホストOSにアクセスできます。

$ ping 10.0.2.2
PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
64 bytes from 10.0.2.2: icmp_seq=1 ttl=63 time=0.164 ms

ホストOSからゲストOSにアクセスするには、「ホストオンリーネットワーク」を追加します。
VirtualBox -> ゲストOSの設定 -> ネットワーク -> アダプタ2
20160420_virtualbox_host_only

ゲストOSにて、sshをインストールする。

$ sudo apt-get install ssh

ゲストOSにて、IPアドレスを調べる。

$ Ipconfig
enp0s8    Link encap:イーサネット  ハードウェアアドレス 08:00:27:d5:17:a1  
          inetアドレス:192.168.99.100  ブロードキャスト:192.168.99.255  マスク:255.255.255.0

ホストOSからアクセスする

$ ping 192.168.99.100
PING 192.168.99.100 (192.168.99.100): 56 data bytes
64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.531 ms
$ ssh user@192.168.99.100
user@192.168.99.100's password: 
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64)

参考
VirtualBoxでホストOS<->ゲストOS間 ゲストOS->インターネット間の通信を行う方法
VirtualBox ネットワーク設定


MAC と ラズパイ をLANケーブルで直結する


20160410_mac_connection_direct

MAC と ラズパイ をLANケーブルで直結します。
MAC は、ラズパイから見ると、ルータになります。
MAC からWiFi経由で、インターネットに接続します。

ラズパイの設定
ssh接続 ができれば、特に設定はありません。

MACの設定
インターネット共有の設定が必要です。
システム環境設定 -> 共有 から
サービスに「インターネット共有」、共有する接続経路に「WiFi」、相手にコンピュータのポートに「Thnderbolt Ethernet」を設定します。
20160410_mac_share

ssh接続
MAC からラズパイに ssh で接続する

$ ssh pi@raspberrypi.local

参考
mac の、「インターネット共有」を使って Raspberry Pi と接続する (外でRaspberry-Piと接続する時などに)


ラズパイ VNC 接続


VNC (Virtual Network Computing) は、ネットワーク上の離れたコンピュータをGUIで遠隔操作するためのリモートデスクトップソフトです。
パソコンとラズパイは、ローカルネット内で有線LANかWiFiで接続します。

インストール

$ sudo apt-get install tightvncserver

設定
パスワードを設定する。ここでは「raspberry」とします。

$ tightvncserver

You will require a password to access your desktops.
Password: <==
Warning: password truncated to the length of 8.
Verify: <==   
Would you like to enter a view-only password (y/n)? y
Password: <== 
Warning: password truncated to the length of 8.
Verify:  <==  
New 'X' desktop is raspberrypi:1
Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

こちらを参考に /etc/init.d/vncboot を作成します。
作成したスクリプトを Github で公開しました。

Windows 編
UltraVNC を使用します。

インストール
UltraVNCのサイト からダウンロードします。
ダウンロードした UltraVNC_1_2_10_X64_Setup.exe をダブルクリックして、インストールします。
20160410_win_vnc_install

UltraVNC を起動します。
VNCに「raspberrypi.local:5901」を入力して、「Connect」をクリックします。
20160410_win_vnc_setting

Password に「raspberry」を入力して、「LogOn」をクリックします。
20160410_win_vnc_password

ラズパイのGUI画面が表示されます。
20160410_win_vnc_login

MAC 編
Finder から接続します。
移動 -> サーバーへ接続
20160410_mac_vnc_menu

サーバーアドレスに「vnc://raspberrypi.local:5901」を入力して、「接続」します。
20160410_mac_vnc_connect

パスワードに「raspberry」を入力して、「接続」します。
20160410_mac_vnc_password

ラズパイのGUI画面が表示されます。
20160410_mac_vnc_desktop

参考
Raspberry Piで遊ぼう [No.5:VNC接続をしよう] [Raspberry Pi]
Raspberry Piの設定【VNCサーバ(tightVNC)の設定】

参考
Raspberry Pi – VNC (VIRTUAL NETWORK COMPUTING)
CONNECTING TO A PI OVER VNC USING WINDOWS
CONNECTING TO A PI OVER VNC USING MAC OS