2019/08/19

SORACOM LTE-M Button for Enterpriseで位置情報を取得してみた

SORACOM LTE-M Button for Enterpriseで位置情報が取得してみた

ボタンを押すとFunk経由でAWS Lambdaを呼び出してみる

以下、Lambdaのコード
From __future__ import print_function 
import boto3
import os
import json
import logging
import dateutil.parser
from datetime import datetime, timedelta
import xml.etree.ElementTree as ET
import urllib.request

logger = logging.getLogger()
logger.setLevel(logging.INFO)
ses = boto3.client('ses')
from_address = "送信元のメールアドレス"
to_address = []
to_address.append("送信先メールアドレス")

def lambda_handler(event, context):
    clickType = event["clickTypeName"]
    batteryLevel = event["batteryLevel"]
    lat = context.client_context.custom["location"]["lat"]
    lon = context.client_context.custom["location"]["lon"]
    imsi = context.client_context.custom['imsi']

    apiUrl = 'https://map.yahooapis.jp/geoapi/V1/reverseGeoCoder?lat=' + str(lat) + '&lon=' + str(lon) + '&appid=' + os.environ['yahooMapApi']
    response = urllib.request.Request(apiUrl)
    with urllib.request.urlopen(response) as res:
        data = res.read()
    root = ET.fromstring(data)
    titl = root[1][0][1].text
    
    mapUrl = 'http://maps.google.co.jp/maps?q=' + str(lat) + ',' + str(lon)
    body = "\n" + titl + " にいます\n" + mapUrl

    ts = datetime.now() + timedelta(hours=9)
    ts = ts.strftime('%Y/%m/%d %H:%M:%S')

    if (clickType == 'SINGLE'):
        subject = 'SINGLE'
        body = str(ts) + body
    elif (clickType == 'DOUBLE'):
        subject = 'DOUBLE'
        body = str(ts) + body
    elif (clickType == 'LONG'):
        subject = 'LONG'
        body = str(ts) + body
    else:
        subject = 'failed'
        body = 'failed'

    ses.send_email(Source=from_address,
                   Destination={'ToAddresses': to_address},
                   Message={'Subject': {'Data': subject}, 'Body': {'Text': {'Data': body}}})

2019/05/12

iPadでSIMの携帯基地局情報を使った位置取得

iPadだとiPhoneと違って設定画面に直接APN情報を入力できるからキャリア以外のSIMを使うときはプロファイル入れるのが面倒なのでAPN情報を設定画面に直接入力しちゃうんだよね

SORACOM AirはAPIやメタデータで接続している携帯基地局の情報を取得できるので試してみたんだけど...
iPadにSORACOMのSIM入れても何故かradioTypeがGSMってなってしまうのです...
国内用SORACOM AirだとradioTypeはLTEとなってないと携帯基地局の情報を取得できないのです

MR04LNにSORACOMのSIM入れたときはradioTypeがLTEになってたんだけど、iPadだと同じAPIをたたいてもradioTypeがGSMとなってしまうので携帯基地局の情報を取れないものだと思い込んでだんだ

ふと素直にSORACOMのプロファイルをiPadにインストールしてみたら、何事もなかったかのようにradioTypeがLTEとなって携帯基地局の情報を取得できました
その代わり?Webコンソールからは何故か携帯基地局からの位置取得ができなくなってしまいました…
なんで?

う~ん、何だか違う気がする...
外出先でモバイルルーターに一回接続したらまたradioTypeがGSMになっちゃった...
モバイルルーターを切断してモバイル通信をオンオフしてもradioTypeがGSMのままだ...
結局再起動させないとradioTypeがLTEとして認識しなかった

そもそもSORACOM AirをiPadに入れていろいろ触ってみるというのが間違ってるか...

GCPで仮想サーバー立ててiPad mini5で接続してみた

GCPでサーバーを立ててみた
Webのコンソールからポチポチポチとクリックして、鍵を入れて作成ボタンをクリックすればサーバー起動です
お手軽な時代なんだなぁ…
iPad mini5からBlinkで接続…接続…
ん?すぐにBlinkのコンソールに戻ってしまいSSHで接続できない…何故?
試しにWindowsからSSHしてみると、あっさり接続できた…
うーん、困った
DebianでもCentOSでも何故かiPad側のBlinkからは接続できないんだ…
しょうがないのでBlinkを再インストールして接続してみたら、あっさり接続できた
バックアップから復元した時になんかおかしくなっちゃったのかなぁ??
GCPはUSリージョンのmicroインスタンスならAlways Freeだからお金ない子には嬉しいです
でもデータの下り転送量は1G以降は課金されるらしいんだよね…
VPNサーバー立ててziproxy入れてモバイル回線のデータ節約しようと思ってたんだけど、下り側の転送量によっては想像より課金されちゃうのかな?
いや、それよりもziproxyってhttpsはダメなんだね
そっかーhttpsのサイトの場合は一度復号化しないといけないのか…
ドコモのギガホにした方が色々考えなくて楽なのかな…

2018/11/12

SORACOM LTE-M Button 買ってみた!!

SORACOM LTE-M Buttonを買って遊んでみました

単純にボタンを押したらメール送信ならほぼスマホアプリのAWS 1-Clickだけで実現できました

ただ最初はボタンの1回押し、2回押し、長押しを認識してくれるか情報がなかったので、ネットで検索してAWS Enterprise IoT Buttonのサンプルコードを参考にてコードを書き加えてみました

ボタンを押した状態は「clickType」で取得できるみたいです

追加でボタンを押した時間を含めたかったんだけど、「reportTime」に入ってる時間は標準時間なので+9時間して使ってます

本当はボタンの残クリック回数を取得したかったのですが、「remainingLife」は残クリック回数か残日数の小さい方を示しているらしいのでif文で分岐することにしました
当分は残日数の方が表示され続けますね...

メールは確認用に2箇所に送信するためにボタンのイベントに入ってる「to_address」ではなく「clickType」の分岐の中で配列を作り直してます
配列を作り直したので、最後の「ses.send_email」の中の'ToAddresses'には「to_address」を直接入れてます


from __future__ import print_function
import boto3
import json
import logging
import dateutil.parser
from datetime import datetime, timedelta

logger = logging.getLogger()
logger.setLevel(logging.INFO)
ses = boto3.client('ses')

def check_email(email):
    result = ses.get_identity_verification_attributes(Identities=[email])
    attr = result['VerificationAttributes']
    if (email not in attr or attr[email]['VerificationStatus'] != 'Success'):
        logging.info('Verification email sent. Please verify it.')
        ses.verify_email_identity(EmailAddress=email)
        return False
    return True

def lambda_handler(event, context):
    logging.info('Received event: ' + json.dumps(event))

    clicktype = event['deviceEvent']['buttonClicked']['clickType']
    attributes = event['placementInfo']['attributes']
    from_address = attributes['email']
  to_address = attributes['email']

    if not check_email(from_address):
        logging.error('From email is not verified')
        return

    if not check_email(to_address):
        logging.error('To email is not verified')
        return

    dsn = event['deviceInfo']['deviceId']
    remainLife = event['deviceInfo']['remainingLife']
    lifeBatttery = int(remainLife) * 15
    lifeDays = int(remainLife) * 3.65
    if lifeBatttery <= lifeDays:
        life = str(int(round(lifeBatttery,0))) + '回'
    else:
        life = str(int(round(lifeDays,0))) + '日'
    click_type = event['deviceEvent']['buttonClicked']['clickType']
    reportTime = event['deviceEvent']['buttonClicked']['reportedTime']
    ts = datetime.strptime(reportTime[:19], "%Y-%m-%dT%H:%M:%S")
    tdelta = timedelta(hours=9)
    ts += tdelta
    
    if (clicktype == "SINGLE"):
        to_address = []
        to_address.append("test1@example")
        to_address.append("test2@example")
        subject = 'SINGLE'
        body ='SINGLE\n' + str(ts) + '\n' + life
    elif (clicktype == "DOUBLE"):
        to_address = []
        to_address.append("test1@example")
        to_address.append("test2@example")
        subject = 'DOUBLE'
        body ='DOUBLE\n' + str(ts) + '\n' + life
    elif (clicktype == "LONG"):
        to_address = []
        to_address.append("test1@example")
        to_address.append("test2@example")
        subject = 'LONG'
        body ='LONG\n' + str(ts) + '\n' + life
        
    ses.send_email(Source=from_address,
                   Destination={'ToAddresses': to_address},
                   Message={'Subject': {'Data': subject}, 'Body': {'Text': {'Data': body}}})


LONGイベントには何を設定しようかな?

2018/03/13

Jelly Pro アップデートきた!!

Jelly Proのアップデートがきました。
ネットを見ると技適が電子表示になったのが話題になってる。
けど、Amazonで買ったので印刷では技適マークが付いてるんだよね。
それより今回のバージョン20180308-1055でセキュリティパッチレベルが2018年1月5日まで適用になったのが良かったかな。
最新のセキュリティパッチ(3月分?)はPixel辺りには配信されてるんだろうから、60日遅れ位ってところかな?
googleが企業ように推奨するAndoridの要件の一つに90日以内にセキュリティパッチが適用される事ってあるから、今の所Jelly Proは比較的いいペースでセキュリティパッチが適用されてるって考えていいのかな?
http://japanese.engadget.com/2018/02/22/android-google-7-21/

ところで桜デザインの背面カバーが発売されるみたいなんだ。
発売されたら日本のAmazonでも取り扱ってほしいなぁ。
だけどJelly Proの純正ケースは透明じゃ無いから桜デザインの背面カバー買ってもケース付けたらせっかくのデザインが見えないよね…
ケース無しで使うか、透明の純正ケース出てくれないかな〜

2018/03/08

Jelly Pro 衝動買い!!

Jelly Proを衝動買いしてしまった…
ちょっと我慢してたんだけど…
3月最初の入荷で思わずAmazonでポチッとしてしまった…

まずは大きさ比較。
想像以上に小さいです。
左 : N-01F ドコモのガラケー
中 : Jelly Pro
右 : MR04LN
折りたたみガラケーより小さい…



NichePhone-Sと比べてみた。
縦は若干長くて横幅は狭い感じ。

液晶の解像度が低いのでアプリによっては文字が滲むというか潰れるというか…
そこは大きさとのトレードオフという事で。
メールの文面とかなら気にならないと思う。

こんなに小さくてもちゃんとポケモンGoで遊べます。Skypeもできます。ポッドキャストも聞けます。
軽くて小さくて価格も安くて最近のアプリも使えて、これでもうスマホとして十分だな。
なぜ小さいスマホって開発されないんだろう?

いくつかのレビューにある通りバッテリー持ちは悪いです。
画面点けて通信させていじっていれば元々のバッテリー容量が小さすぎなのでしょうがないかな、と。
昔あったPebble Roundみたいにバッテリー保たない代わりに急速充電に対応して欲しかった。
Webを見ているとバッテリー容量を大きくして、っていう意見が目立つ気がするけど、個人的には今のバッテリー容量でいいからワイヤレス急速充電に対応してほしい。
3分充電したら80%位充電できる方が使いやすいと思うんだけど…

ソフトウェアのバージョンは、20171208_20171208-1920ってなってるんだけど…
Unihertzのフォーラムをみると、20180118_c223v37m_dfl-otaっていうのがあるんだ。
でも端末からソフトウェアアップデートを実行しても最新版ですって言われて2018年1月版のアップデートを適用できないんだ。
なんで?Amazonの日本技適版はちょっとアップデートチャンネルが違うのかな?
OSのセキュリティパッチは早く来てほしいんだけどなぁ〜
今年の半ばにはAndroid Oreの配信が予定されてるみたいだけど。
OSアップデートよりセキュリティパッチを定期的に配信してほしいです。


2018/01/19

絵文字は各社統一できないものなのかね〜

スマホはAndroid
タブレットはiPad
異なるOS間でメッセージをやり取りしていると絵文字のデザインが違いすぎて混乱するんだ。
iOSから↓の絵文字を送信して





Androidで受診すると…








絵文字のデザインって著作権かなんかで各社統一できないものなの?

2018/01/16

こんなiPad Pro用キーボード出ないかなぁ…

iPad ProのSmart Keyboard
コンセプトとしては便利なんだけど、実際iPad Proに付けて使うと色々と不満もでてくる。
サードパーティーだとSmart Connector搭載キーボードはLogicool製位しか出てないよね?
ほぼほぼApple純正Smart Keyboardだけなんだし、価格も高いんだから、もうちょっとAppleも真剣?にSmart Keyboardに取り組んでもいいんじゃないんだろうか?
で、妄想してみたけど…

キックスタンド風のSmart KeyboardはLogicool製のがあるけど、Logicoolのはケース部分がしっかり?してて結構重い。
10.5インチ用で528gってホームページに書いてあった…
iPad Airの時にあったSmart Caseみたいな感じで、でも背面側がキックスタンド風になる感じがいいな。
できればケースとキーボードで300g位の重量で収められてるとiPadの軽さが犠牲にならなくていいな…
次期iPad Pro発表と同時に新しいSmart Keyboardも開発してくれないかなぁ〜
iPad ProをPC的にアピールするには出来の良いキーボードが必要だと思うんだよなぁ〜

Moto G5s使ってます2

この間、茨城で鳴った緊急地震速報。 地震速報自体は誤報だったけど、Moto G5sでもちゃんと緊急地震速報受信できてました。 Androidの場合はメーカー側がソフトウェアを作ってないと受信できないみたいだね… Moto G5sは比較的安い海外メーカー製SIMフリースマホだけど、こういった緊急速報にも対応してくれてて助かります。 さて、去年の終わりにやっと端末アップデートが配信されました。 10月以降のセキュリティアップデート来ないなぁ〜って不安だったんだけど、暮れのアップデートで12月分のセキュリティが適用されました。 今月になってMoto X4にOreoのアップデート配信が始まったみたいなので、春までにはMoto G5sにもOreoのアップデートが来るかな? でもPixelとかには8.1が配信されてるんだよね? OSメジャーアップデートは必須じゃないけど、セキュリティアップデートは1ヶ月以内に最新版を配信してほしいなぁ…モトローラさんお願いします。 Androidの世界はOSマイナーアップデートって配信されないの?

2017/12/15

MotoG5Sを使ってます

Appleストアで買ったSIMフリーiPhone5SのAppleCareが先月で切れたので、スマホを新調してみました。
iPhoneはやっぱりSEでも端末価格が高額なので安価なAndroidにしてみました。
そうはいってもセキュリティは重要です。
まぁOSアップデートでセキュリティが担保される分、初期投資が高くついても長い目で見ればiPhoneの方がランニングコストは安いと言えるのかもしれないですが…
それでも先立つ資金も重要です。
おサイフケータイに対応したAndroidだとどうしても4万円以上してしまいます。
セキュリティに気を配られていそうなBlackBerryは7万円前後します…QWERTYキーボードの付いた端末はとっても憧れますが…
安価で、それでいてセキュリティパッチが比較的追随していてシンプルな端末…
そんな視点で売場を見ると…端末メーカーが独自でAndroidを弄って販売しているので、そんなシンプルな端末ほとんどない…
その結果、消去法でMotoloraのMotoG5Sを購入しました。
そこそこ安い : 税込3万円
シンプル : ほぼ素のAndroid
そこそこ月例セキュリティパッチに追随してそう : 1ヶ月遅れくらい?
MotoG5S Plusも悩んだのですが、こっちは性能が上がる分価格も上がって税込4万円位します。
4万円位になってくるとAppleでSIMフリーiPhoneSEを買った方がセキュリティ的にも長期間担保されそうだし、iPhone5Sのアプリをごっそり使えるので細かいこと考えずに単純に新しく処理能力の向上したiPhoneを使えます。
個人的にはNichePhone-SとiPad Proの組合せが持ち歩いてて楽しい気がするので、スマホは特に欲しいわけじゃないんです。
でも近所に買い物行くだけとか、ジムに行くだけの時にiPadを持ち歩くのはね…
NichePhone-Sだと緊急地震速報受信できないとか、メール使えないとか、日常生活を送る上でのちょっとした、でも結構重要な連絡やら情報受信が出来ません。
そんなちょっとした事を荷物を持たないで外出する時に済ますためにスマホの方が便利、という位置付けです。
なのでiPhoneやGalaxy、Xperiaの様な超高性能な機種は必要としてません。
極端に言えばWindowsPhoneでもBlackBerryでも絶対ダメじゃないんだけど…でも、ポケモンGOしたいんです!!
MotoG5Sは非力なCPUらしいのですが、ポケモンGOに関してはiPhone5S + iOS11よりも快適に動作します。
JoJoスマホ以来のAndroidですが、現状MotoG5Sは端末的には結構満足してます。
動作が極端に遅くなったり、挙動不審になったり、といった不安定さは今の所ありません。
欲を言うならこの品質で税込27000円位だと嬉しいです。
WindowsとMacが違う様に、AndroidもiOSとは違うからね…
どっちが極端に優れてるとか劣ってるとか無いよね…違うんだから…
唯一のAndroidの不満点はWebサイトやアプリにログインする時、iOSはExtensionで1Passwordを呼び出してIDとパスワードを入力できるんだけどNougat(Android 7.1.1)ではOSとして機能が無いみたい。
OreoだとOSとして機能が提供されるっぽいので早くOSアップデート来て欲しいなぁ~来年かな~

NichePhone-S バージョン1106版

先日バージョンアップしたNichePhone-S
バージョン末尾は1106になりました。
今の所認識している改善点は、「電池残量表示が正しくなったような気がする」です。
前のバージョンまでは電池残量表示がいい加減な気がしてて、電池減ってないなぁ~なんて思って油断して1日放置しておくと電池が空になって使えないなんて事をよくやってました。
それが今回のバージョンでは待受の状態で持ってても、電池残量のアイコン表示が減っていっているみたいなので気が付いた時に液晶を見れば電池切れのまま持ち歩くのはそこそこ回避できそうな気がします。
主に通話にしか使ってないのでその他の機能、SMS送信とか文字入力とかテザリング、Bluetooth周りの挙動はあんまり把握してないです。
ただドコモのXi契約SIMでアップデート出来たって事はテザリング周りでは大きな不具合はないんだろうなって解釈してます。
ところでNichePhone-SはOSがAndroidを使ってると思ったんだけど、これってキャリアで販売してるガラホと同じって事?
Androidである以上、OSカーネル周りで脆弱性が発見されたら無縁ではいられないと思うんだけど、ガラホの脆弱性対応ってどうなってるんだろ?
IoT機器含めネットワークに接続できる機器がいろいろ出てくるのは楽しいんだけど…売ったら売りっぱなしはやめてほしいな…