モチログ

はてなでのブログ

Intel Edison でNode-REDを使う

買ったのは良いけど、一年前くらいにLチカをして以来、放置していたので、面白そうなNode-REDをEdisonに入れてみました。
また、TI社のSensorTagを使えるようにしたいと思います。
使用しているのは、Edison+Arduino拡張ボードのKITです。

Edisonのファームウェア、OSイメージの更新

久しぶりなので、とりあえず状態を最新にする。 公式のページからインストーラをダウンロード、インストーラを起動すると、必要なソフトを入れてくれると共に、Edisonのアップデートもしてくれる。ただし、EdisonのOSイメージがちゃんと動いて、EdisonのファイルシステムがOSから見えるようになっている必要がある(マイクロUSBとUSBの間にあるスイッチがマイクロUSB側にある状態で)。インストーラの指示に従えば完了する。

インストーラがちゃんとEdisonを認識しない場合

まずいですよ。EdisonのOSイメージが壊れて正しくドライバが当たっていない可能性があります。
詰んだように感じますが、ちゃんと復旧する手段があります。

  1. Firmwareイメージのダウンロード
    1.1 上記公式のリンクから、Release 2.1 Yocto* complete image (2016-03-20現在)をダウンロード。解凍もしておく。
  2. dfu-utilのダウンロード
    2.1 Macの場合 brew install dfu-util でインストール可能です。
    2.2 Windowsの場合 フォーラムにあるダウンロードURLからダウンロード可能。それをダウンロードしたファームウェアイメージを解凍して出来たフォルダ内(flashall.batがあるフォルダ)と同じ所に置く。
  3. Windowsコマンドプロンプトや、Macのシェルで解凍したファームウェアのフォルダに移動。 Windowsの場合、.\flashall.batMacの場合、 ./flashall.shを実行する。スクリプトが待ち状態になるので、EdisonのマイクロUSB(2本とも)を接続してブートさせる。インストールが始まればあとは完了まで待つ。

Edisonの設定

起動したらrootでログイン。たしか、デフォルトではパスワード無しでログインできる。 configure_edison --setupで、Edisonの設定スクリプトを立ち上げ、パスワードと、Wifiの接続を行う。 ip aでアドレスが調べられるはずなので、sshでつながるかチェック。つながればOK。

Boot領域の拡大

今回の作業では問題になることは無いですが、デフォルトで割り当てられているBootのパーティション領域が小さいため、デフォルト以外のレポジトリを追加している状態で、不用意にopkg upgradeをすると、Boot領域が足りずOSイメージがおかしくなることがあります(2敗)。 なので、念のため、事前にBoot領域の拡大をしておきます。以下、SSHでログインしている状態での作業です。

  1. Backup boot data:

    root@edison1:~# ls -la /boot  
    root@edison1:~# mkdir /home/root/boot-bkp  
    root@edison1:~# cp -rp /boot/* /home/root/boot-bkp/  
    root@edison1:~# ls -la /home/root/boot-bkp/  
    
  2. Resize boot partition:

    root@edison1:~# umount /boot  
    root@edison1:~# mkfs.vfat -v -nboot -F16 /dev/mmcblk0p7  
    root@edison1:~# mount /boot  
    root@edison1:~# df -h /boot  
    
  3. Restore boot data:

    root@edison1:~# cp -rp /home/root/boot-bkp/* /boot  
    root@edison1:~# ls -la /boot  
    root@edison1:~# rm -r /home/root/boot-bkp  
    

パッケージの更新とインストール

とりあえず初期状態からのアップデートopkg update; opkg upgrade
その後、必要なパッケージを入れるためにレポジトリの追加を行う。
vi /etc/opkg/iotkit.confで下記レポジトリを追加

src iotdk http://iotdk.intel.com/repos/2.0/iotdk/i586/  

vi /etc/opkg/base-feeds.confで下記レポジトリを追加

src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32  

gitとsysconfig-devをインストール

opkg update; opkg install git sysconfig-dev

Node-REDのインストール

npm -g install node-red  
npm -g install --unsafe-perm node-red-node-serialport  

Node-REDの起動

ホームディレクトリに移動して node-redと実行すると、$HOME/.node-redにデフォルトのファイルが作成され、node-redが起動します。
別のPCのウェブブラウザでhttp://edisonのIPアドレス:1880でNode-REDのページが表示されればOK。
EdisonのNode-redをCtrl-Cで終了し、cd ~/.node-redに移動し、下記コマンド

npm install node-red-node-sensortag  
npm install node-red-node-intel-gpio  
npm install node-red-contrib-grove-sensros-edison  

SensorTag以外にも入れていますが、GPIOやGroveのセンサーを扱えるようになるものを入れています。
node-redで再度Node-REDを立ち上げ、ウェブブラウザで再読込したら左のFlowアイコンの下の方が増えていれば成功です。

Node-REDがEdison起動時に自動で実行されるよう設定

pm2を入れるのが良さそうです(参照)。
インストールと設定は下記

npm -g install pm2  
pm2 start /usr/bin/node-red -- -v  
pm2 save  
pm2 startup systemd  

エラーでるので下記コマンド

pm2 dump && systemctl daemon-reload && systemctl enable pm2 && systemctl start pm2  

Edisonではちゃんと動かないので、下記ファイルを変更
/etc/systemd/system/pm2.serviceを書き換え

ExecStart=/bin/su root -c 'pm2 resurrect'  
ExecReload=/bin/su root -c 'pm2 reload all'  
ExecStop=/bin/su root -c 'pm2 dump'  
ExecStop=/bin/su root -c 'pm2 delete all'  
ExecStop=/bin/su root -c 'pm2 kill'  

systemdでrestartするのがめんどくさいので、再起動。うまく行かない場合、上記pm2 start...と、pm2 save, pm2 dump...のコマンドをやってみるとうまくいくかもしれません。うろ覚え。

pm2コマンドの簡単な使い方

指定したプロセスには今回node-redを指定しています。
pm2でマネージしているプロセス一覧: pm2 list
指定したプロセスの情報表示:pm2 info node-red
指定したプロセスの実行時のログ出力を見る:pm2 logs node-red
指定したプロセスの再起動:pm2 restart node-red

SensorTagを使えるようにBLEを有効にする

下記コマンドを実行

/usr/sbin/rfkill unblock bluetooth  
/usr/bin/hciconfig hci0 up  

Edison起動時に有効にするために/etc/rc.localを作成して、下記内容を書く。

#!bin/sh  
/usr/sbin/rfkill unblock bluetooth  
/usr/bin/hciconfig hci0 up  
exit 0  

実行権限をつける
chmod 755 /etc/rc.local

終わりに

肝心のNode-REDでSensorTagの情報をとる部分が力尽きたので、次回以降にまわします。

M2Xにあげた温度湿度データをHubotに返答させる

slack + Hubotにはまっていて、とりあえずM2Xのデータを取得するスクリプトを作ってみた。
githubにあげたので、このhubot-temp-hum.coffeeをhubotのscriptsディレクトリ以下に置けば起動時に読み込んでくれるはず。
環境変数の設定項目はREADME.mdにあるように下記の4つ。

  • export HUBOT_M2X_KEY=your_m2x_key
  • export HUBOT_M2X_DEVID=your_m2x_device_id
  • export HUBOT_M2X_TEMP=your_temp_stream_id
  • export HUBOT_M2X_HUM=your_hum_stream_id

よく考えたら、tempとhumを分けて返答するようにしてるけど、同時にしても良かったと思った。

ESP-WROOM-02で温湿度センサー情報をAT&T M2Xに投稿するシステム

R0019191-1

前回でファームウェアを書き換えてATコマンドで動作を確認したのは良い物の、使い道を決められるほったらかしにしていたので、ここはえいやと適当にセンサー情報をWebにあげるシステムを作ってみた。

構成

下記構成で作成をした。細かい部品等はそのうち回路図をアップしようと思っています。

  • ESP-WROOM-02 + ESP-WROOM-02用2.54mmピッチ変換基板(AE-ESP-WROOM-02)
  • HT7733A (3.3V昇圧用)
  • DHT22 (DHT11より精度の良いらしい温湿度センサ)
  • 単4電池2本
  • aitendo ミニ基板 P-32x32mm 1枚
  • ALTOIDS缶 (ケース)

AT&T M2X

センサーデバイスの情報をどこにあげれば良いのかを調べたところ、AT&TのM2Xというのが良さそうだったので使ってみた。
Developerプランだと10デバイスまで登録出来て、1デバイスあたり100,000回/月投稿出来て無料の様子。
その他のプランの料金についてはPricing参照。

AT&T M2Xでの流れ

  1. アカウント作成 メールアドレスと名前、パスワードを入力すれば確認メールが来た GitHubのアカウントでログイン出来るらしい (やってない)
  2. バイスの登録 ログイン後の画面でCreate Newとかで作成出来たと思う。1デバイスに複数の情報 (Stream) を投稿出来る
    2.1. 今回はESP-WROOM-02というデバイス名に、esp-temp, esp-humというStreamを作成し、ここに温度と湿度を投稿する
  3. 投稿にはDevice IDとAPI Keyが必要になる。この情報をDevice作成後、Deviceの画面にわかりやすく出てくる
  4. HTTP PUTで情報を投稿する
  5. 投稿したデータが管理画面に表示される

とこんな感じ。

ESP-WROOM-02Arduinoスケッチ

Arduino IDEESP-WROOM-02を扱うために必要なファイルをGitHubesp8266/Arduinoから取得。
説明に従って、Arduino IDEにインストールしておく。
DHT22はIO12pinに接続している。また、Deep-sleepからの復帰のためにIO16をリセットピンに接続している。 AT&T M2Xへの投稿は、Streamを作成した際に出てくるサンプルcurlコマンドのパケットをWiresharkで確認してそれを使用した。
動作は下記流れになっている

  • 起動 -> WiFi接続 -> DHT22から温度と湿度取得 -> M2Xに投稿 -> Deep-Sleepに入る(5分)-> 起動に戻る

Arduinoソースコードは下記ソースコードを使わせてもらった。

下記 .inoファイルになる
適宜ssid, password, m2xKey, tempurl, humurlについてはそれぞれの環境に合わせて書き換える必要がある。

/*
 *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
 *
 *  You need to get streamId and privateKey at data.sparkfun.com and paste them
 *  below. Or just customize this script to talk to other HTTP servers.
 *
 */
#include <ESP8266WiFi.h>
#include "DHT.h"

#define DHTPIN 12     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT22   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = "WIFI-NO-SSID";
const char* password = "WIFI-NO-PASSWORD";

const char* host = "api-m2x.att.com";
const char* m2xKey = "M2X-NO-KEY";
// We now create a URI for the request
String tempurl = "/v2/devices/DEVICE_ID/streams/STREAM-NO-NAME/value";
String humurl = "/v2/devices/DEVICE_ID/streams/STREAM-NO-NAME/value";

void setup() {
  Serial.begin(115200);
  delay(1000);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println("DHT22 test!");
  dht.begin();
}

void loop() {
  delay(2000);

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  Serial.print("Requesting URL: ");
  Serial.println(tempurl);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C\n");

  // This will send the request to the server
  client.print(String("PUT ") + tempurl + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: curl/7.43.0\r\n" +
               "Accept: */*\r\n" +
               "X-M2X-KEY: " + m2xKey + "\r\n" +
               "Content-Type: application/json\r\n" +
               "Content-Length: 20\r\n\r\n" +
               "{ \"value\": \""+ String(t,2) +"\" }");

  delay(1000);

  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");

  client.print(String("PUT ") + humurl + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: curl/7.43.0\r\n" +
               "Accept: */*\r\n" +
               "X-M2X-KEY: " + m2xKey + "\r\n" +
               "Content-Type: application/json\r\n" +
               "Content-Length: 20\r\n\r\n" +
               "{ \"value\": \""+ String(h,2) +"\" }");
   delay(1000);

   // Read all the lines of the reply from server and print them to Serial
   while(client.available()){
     String line = client.readStringUntil('\r');
     Serial.print(line);
   }

   Serial.println();
   Serial.println("closing connection");

  //1:μ秒での復帰までのタイマー時間設定  2:復帰するきっかけの設定(モード設定)
  ESP.deepSleep(300 * 1000 * 1000 , WAKE_RF_DEFAULT);

  //deepsleepモード移行までのダミー命令
  delay(1000);

}

ESP-WROOM-02のファームウェア書き換え on MAC

ESP-WROOM-02が流行っているようなので、試しに使ってみたけど、案の定色々躓いたのでそのメモ。 21352682501_e5a2e19b18_m

使用したパーツ

  • ESP-WROOM-02(秋月で550円で購入)
  • ESP-WROOM-02ブレークアウトボード(aitendoで120円で購入)
  • 10KΩの抵抗x5
  • タクトスイッチ2個(無くてもできる)
  • ブレットボード適宜
  • FT234X UART接続用(秋月で600円で購入)
  • 3.3Vブレットボード電源モジュール(こちらを使用)

ちなみに秋月でESP-WROOM-02を買って、その後aitendoでブレークアウトボードを買いに行ったら、セールでESP-WROOM-02が500円だった……   電源は3.3V3端子レギュレーターを使ってFT234Xの5Vを変換しても良いと思われる。持ってなかったので、手持ちのものを使用した。

使用したソフト

  • シリアル通信用のソフト:CoolTerm

WindowsではTeraTerm Pro派だけど、Macではシリアル通信を使っていなかったので良いツールを今回しらべてみた。
Screenコマンドでターミナルから使うという手もあったけど、ファームウェア書き換え失敗時のエラーメッセージが文字化けしたり、接続が落ちたりした後の接続が不安定になったりしたのでやめた。 SerialToolsというのを最初に試したが、Disconnect時やボードレート変更時に50%位の確立でアプリが落ちるのでやめた。
現状CoolTermが良かった。

ESP-WROOM-02の接続

基本的に参考にしたサイト1に従って接続。ただし、LCDに接続しないので、AE AQM0802の部分には接続せず。
UART接続なので、TXDとRXD、RXDとTXDを接続するのに、何も考えず適当に接続してたので、TXDとTXD, RXDとRXDを接続しててびっくりした。
ちゃんと確認しよう。

ファームウェアの書き換え

ESP-WROOM-02について調べているときに、どこかにファームウェアが古いとwifiが不安定という記述を見て、ファームウェアを書き換えたいと思ったので、まずファームウェアを書き換える事にした。 ファームウェアのダウンロードはここに最新のバージョンが載せられている。今回は1.3.0_15_08_08を使用した。 書き換えツールはここからgit cloneした。

$ git clone https://github.com/themadinventor/esptool
$ cd esptool
$ python setup.py install

なんか関係のあるライブラリもインストールしてくれるみたい。ただ、esptool.pyがパスのあるところにコピーされているようにみえるけど、うまく実行されなかったので、コマンド打つ場所にコピーして使った。 ファームウェアのzipファイルを解凍し、esp_iot_sdk_v1.3.0/binにesptool.pyをコピー。

$ cp esptool.py ../esp_iot_sdk_v1.3.0/bin

上記esp_iot_sdkのパスは適宜置き換えて。 あとはESP-WROOM-02ファームウェア書き換えモードにして、ファームウェア書き換えのコマンドを打てば書き換えができる。 ファームウェア書き換えモードの仕方は参考にしたサイト1にあるように、SW1をおしながらSW2を押し、SW1をおしたまま、SW2を放します。その後SW1も放して大丈夫です。 これでファームウェア書き換えモードになっているので、ファームウェア書き換えコマンドを打ってファームウェアを書き換えます。2つ目のコマンドは長いですが、1行です。

$ cd ../esp_iot_sdk_v1.3.0/bin
$ ./esptool.py -p /dev/tty.各自のデバイス名に置き換えてください write_flash -ff 26m -fm qio -fs 32m 0x00000 boot_v1.4(b1).bin 0x01000 at/user1.1024.new.2.bin 0x7e000 blank.bin 0xfe000 blank.bin

下記メッセージが出たら、書き換えは成功しているはずです。

Connecting...
Erasing flash...
Wrote 3072 bytes at 0x00000000 in 0.3 seconds (73.2 kbit/s)...
Erasing flash...
Wrote 263168 bytes at 0x00001000 in 28.8 seconds (73.2 kbit/s)...
Erasing flash...
Wrote 4096 bytes at 0x0007e000 in 0.4 seconds (75.9 kbit/s)...
Erasing flash...
Wrote 4096 bytes at 0x000fe000 in 0.4 seconds (75.9 kbit/s)...

Leaving...

/dev/tty.以下は各自のデバイス名に置き換えてください。 FT234X向けのFTDIドライバはApple純正(最初から入っている)と、FTDI公式のがあるようです。一応FTDI公式のページからMac OSX 10.9 and aboveの2.3をダウンロードしてインストール、再起動をしています。OSX 10.10.5 (Yosemite)で行っています。古いOSXの場合、もしかするとApple純正ドライバを無効にする必要があるかもしれません。 また、書き換えのコマンドですが、最初下記コマンドでやっていたのですが、この後のATコマンドのテストの時にうまくいきませんでした(Fatal Exception(28)が延々と表示される)

$ ./esptool.py -p /dev/tty.各自のデバイス名に置き換えてください write_flash 0x00000 boot_v1.4(b1).bin 0x01000 at/user1.1024.new.2.bin 0x7e000 blank.bin 0xfe000 blank.bin

ATコマンドのテスト

CoolTermを使います。起動したらまずOptionsから下記設定にします。

  • Serial Port
    ** Port: 各自のシリアルデバイスを選択
    ** Baudrate: 115200
    ** Data Bits: 8
    ** Parity: none
    ** Stop Bits: 1
    ** あとはデフォルトのまま
  • Terminal
    ** Terminal Mode: Line Mode (Raw Modeでも良いですが、Line Modeだとコマンド入力失敗したときにBSで修正出来るのでこちらを使っています)
    ** Enter Key Emulaton: CR+LF
    ** あとはデフォルトのまま
  • 他はデフォルトのまま

設定ができたらConnectボタンを押して、AT+GMR を打ってファームウェアのバージョン情報と"OK"が出たら成功です。

参考にしたサイト3のコマンドを参考に、家のwifiルーターに接続してみました。

AT+CWMODE=3
AT+RST
AT+CWJAP="SSID","password"

下記メッセージが出たら成功していると思われます。

WIFI CONNECTED
WIFI GOT IP
OK

IPアドレスMACアドレスの確認

AT+CIFSR

参考にしたサイト

  1. Qiita - ESP-WROOM-02 の Arduino 環境で I2C 制御
  2. Natural Days - ESP-WROOM-02使ってみる
  3. junpwire.io - ESP8266 ATコマンド一覧

python requestsでhttpsに接続時にエラーが出る件

Mac Yosemiteの環境で、タイトルのことをしたら下記エラーが出た。

requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:581)

いつぞやのTLS脆弱性があったときにサーバ側で対策されているとエラーが出るっぽい?
ググっても自分の方で対策する方法とかが出てきてて、パッケージのバージョンアップで行けると思うのになぁと思っていたら丁度良い情報が見つかった。
using requests with TLS doesn't give SNI support

最後にあるパッケージをpipで追加したらエラーが消えました

$ pip install urllib3
$ pip install pyopenssl
$ pip install ndg-httpsclient
$ pip install pyasn1

AT&T iPadデータプラン(3GB 30日 自動更新)に登録したメールアドレスが間違っていて奮闘した話

海外出張の時に、オフィスやホテル以外での通信手段が欲しかったので、せっかくUSで買ったiPad 2があるのだから使おうと思い、最初から挿してあったAT&TのSIMで契約した。
プランはタイトルの通り、3GBで30日自動更新タイプ。後で思えば、この選択の時点で間違っていた。

契約

契約については、色々なサイトで解説されているので、ここでは割愛する。 特に問題無く登録出来た。メールアドレスの入力が一カ所だけだった気がする。

使用

USでは問題無く使い始めることが出来た。ただ、現地でiOSのアップデートをかけたせいか、それ以降SIMが認識しなくなる現象が起こった。しばらくすると使えるようになったので、熱の問題?原因不明。以降SIM接続を試していないので不明。 結局使用したデータ量は600MBだったので、1GB 3ヶ月自動更新無しのプランにしておけば問題が無かったのだ。

解約

とりあえずUSで使えたし、日本に帰ってきてから解約しようと思い、iPadの設定からログインを試みたが、ログイン出来ない。おかしい、一応メールアドレスは目視で確認していたのに。 とりあえずパスワードが忘れたときのリンクで、メールアドレス入力して、パスワード変更のメールを送ろうとするも、メールアドレスが間違っているので送れないと言うエラーが出た。
ここで、登録していたメールアドレスが間違っていたと気づく。思い返せば、怪しい空気は最初の段階から思いっきり漂っていた。

現状確認

解約にはAT&Tアカウントにログインが必要(メールアドレスとパスワード入力)なので、詰んでいる。 パスワードは間違っていないと思うので、メールアドレスを間違えて登録した。たしかに、確認のメールが届いていなかった。
契約の際に、確認画面が出て、契約したらそのままOKになったので、契約の際にはメールを受ける必要が無かった。

試行錯誤

目視で確認して間違って無さそうということなので、間違っていても1文字抜けているとか、間違って入力しているのだろうと推測し、パスワードを忘れた画面から、メールアドレスのエラーが出ないアドレスを見つけようと色々試すもうまく行かず。

最終手段

コールセンターに電話をする。一番ハードルが高い上に、国際電話だ。日本語でも電話をかけるのはすごくハードルが高いのに、英語で行うなんて。。。 一応事前に情報を仕入れておく。

パスワードを忘れたときとかのページ

Manage your DataConnect or DataConnect Pass account
iPadのデータ接続プランで、ログインID(メールアドレス)を忘れたときなどの情報が載っている。
契約情報を引っ張ってくる為にはWireless Numberと言う物が必要とのこと。
あと、電話番号も載っている。ローカル番号と、海外からかける番号の2つ。

Wireless Numberの調べ方

Display Cellular Data Number with iPad
iPadのSettings > General > AboutにあるCellular Data Numberがそれに当たるとのこと。

ログイン画面

ログインはここからできる
Landing Page
電話口でiPad操作で解約するのは大変なので、PCから作業した方が良い。

iPadの設定

向こうのオペレーターとのやりとりをスムーズにするために言語設定をEnglishにしておいた。

電話1

とりあえず海外からかける番号にかけてみた。最初は自動応答で、何々の場合は1番を、hogehogeの場合は2番を、みたいな感じで、進んでいく。わからなかったら、1とか押してさっさと人が出る様に進めるのが良いと思う。この中で10桁のモバイル番号を入れろって言われる。しかし、iPadに出ているCellular Data Numberは11桁だ。もちろん11桁入れたら認識出来ないと言われる(自動応答)。

後で気づいたけど、11桁の最初の一桁は国番号で、後の10桁がモバイル番号なのでは無いか

なんやかんやで担当者(人)につながるも、僕の英語が下手すぎてオペレーターがびっくりして混乱した様子。 一応iPadのデータコネクトで、解約したいけど、間違ったメールアドレス登録してログイン出来ないって訴えてたけど、なんかダメだった。 で、なんかわからんけどいきなりアメリカローカルのコールセンターにまわされる。しかし、時間外にかけてるので、自動応答が返ってくる。イラッとしながら、その日は心が折れ、あきらめる。

電話2

今度は朝のまだUSの午後4時くらいとかのタイミングでかける。以降はローカルの番号にかけている(もしかすると自動で海外向けサポートに回されてる可能性があるがよくわからない)。
今度はなぜか色々たらいまわしにあい(多分自動応答での選択をミスしたせい)、最終的につながり、要件を伝え、Cellular Data Numberを伝え、待つも、向こうのデータベースのメンテでロックがかかってアクセス出来ないと言われる。後1時間くらいで終わると言われ、後でかけ直すということで切った。この日も心が折れ、終了。

電話3

もうかなりコツはつかんだということで、今日で終わらそうと意気込んで電話する。 最初の担当者にパスワードが出来ないので、ログインができないと伝え、Cellular Data Numberを伝え、待っていると、Dataプランは3GBの30日自動更新だと教えてくれて電話が終わる。違う、そうじゃ無い。
まだ心が折れる時間じゃ無い、良いところまで行ったじゃあないかと自分を励まし、再度コール。 なんだかんだで担当者につながり、最初にiPadのデータプランを解約したいけど、メールアドレスがわからないので、ログインが出来ない。メールアドレスを教えて欲しいと伝える。Cellular Data Numberは10桁のはずだとか、すったもんだありーのようやくデータを引っ張ってこれる。メールアドレスを教えてもらうことが出来た。長い道のりだった。
ちなみに、この最後の担当者の時に、日本からかけていると伝えると日本語の出来るオペレーターにつなごうとしてくれた(がなんかエラーメッセージが出てつながらず元のオペレーターに戻った)。 あと、その電話がつながった状態で、ログイン確認をして、解約しようとすると、一度エラーが出たので、くじけそうになってそっちで解約できないかを聞いたら、オペレーター側ではできないと言われる。何度かやったら解約できたので、お礼を言って電話終了。長い、不毛な戦いが終わった瞬間だった。

おわりに

こんかいの事で得た教訓は以下になる。

  • こういう面倒なことが起こるリスクがあるので、自動更新タイプの契約は結ばない
  • アカウント登録の際には絶対に確認画面のスクリーンショットを撮ること
  • Cellular Data Number以外に、登録している名前、住所を聞かれるので、それもわからない場合はかなり厳しい戦いになると思われる
  • 一度失敗してもくじけず何度もトライすればよい(電話代が代償)

Pocket vs Instapaper

これまではInstapaperをひいきにしていたけど、Pocketを使ってみてPocketにしようと思う日記。

決め手となったできごと

iPadAndroidFeedlyから送って後で読むをしていた。しかし、iOSAndroidのInstapeprアプリの同期がめっちゃ遅いのだ。
Feedlyから新規フィードの全チェック、適宜後で読むやつを送る。終わったらInstapaperを起動。同期開始、ダウンロードが遅い……という流れ。
最近雑談の中でPocketを使ってるっていう話を聞いて、そういえばPocketあったなぁ、使ってみようと思い、試してみた。
まだAndroid版しか試していないけど、Pocketに投げた段階でちょっと同期しているみたい。結構同期が早い。Instapaperに比べると早い!
Pocketに乗り換えようと決意した瞬間だった。

InstapaperとPocketとの比較

  • 有料会員の価格(2014年6月2日現在)
    • Instapaper: 1ドル/月 (3ヶ月まとめ払いだったような気がする)
    • Pocket: 4.99ドル/月 (年一括払いだとちょっと安くて44.99ドル)
  • 有料会員で出来る事
    • Instapaper:検索機能、3rdパーティーアプリでAPIが使える(昔はAndroidでInstapaperアプリを使うには有料会員しか無理だったけど、今は違う)、広告が消える、Kindleに送る機能が強化される
    • Pocket:元記事が無くなっても永久に保存される、検索機能の強化、タグのサジェスト機能
  • ちょっとした違い
    • Instapaper:記事の管理がフォルダ形式(1記事に1フォルダ対応)
    • Pocket:記事の管理がタグ形式(1記事に複数タグをつけられる)

あとがき

昔、どういう基準でInstapaperにしたのかわからないけど、たしか、Instapaperの方が保存した記事の表示の仕方が綺麗だからだった気がする。しかし、ちゃんと表示されない記事が多い(日本語だから)ので、よく考えたらあまり意味はなかったかもしれない。
ちなみに、InstapaperもPocketもExport機能があるので、これまで保存した記事をExport出来、しかもお互いにお互いのサービスのImport機能があるので、記事ごと乗り換えは可能です。
しかし、InstapaperからPocketに移したら、Archivedの記事も全部Unread状態でTOPに表示されたので、めんどくさかった。一応CtrlクリックやShiftクリックで複数選択出来るので、まとめてArchiveに送る事はできる。それでも結構時間がかかった。