SORACOM UG 信州を通じてWebエンジニアが農業と関わってます!
こんにちは! SORACOM Advent Calendar 2018 9日目 担当のchinoppyこと知野です。
Webエンジニアが、SORACOM UG 信州を通じて、農業と関わり、そこでSORACOMを使用してシステム構築等おこなったお話しです。
本業もあり、動ける範囲での構築だったので、エラー処理などちょっと怪しいところもありますが、、、便利なサービス/機能/ライブラリなどを使ってなるべく「つくらない」こともとりいれながらやってみましたので、そのあたりで使用したものなども紹介していきたいと思います!(だいたいはみんな知っているものばかりかもしれませんが、、、)
なお、この内容は SORACOM UG 信州 #5 、 SORACOM UG 農業活用コミュニティ #1 で私が発表したものをあわせたような内容になってます!
【目次】
きっかけ
今年3月に開催された SORACOM UG 信州 #3 に参加し、懇親会も参加してくださった農業従事者の浦野さんから
- 農業仲間からハウス内の環境データ収集をしたい!
- できればスマホで遠隔監視もしたい
と要望をうけ、
- センサ/ハード側(以降、IoTボックスと記載)はできる
- でもクラウド側/Webの知識がなくどうやっていけばよいかわからない
とお話しがあり、私も含め、クラウド/Web側の知識はあるので、SORACOM UG 信州のひとつの企画としてサポートしていこうと決定しました!
私の担当は
- ハード側の制御プログラム(一部)
- クラウド/Web側
ですので、このあたりを中心に書いていきます!
IoTボックス
浦野さんが作成したIoTボックスのこと
仕様等
- 3G対応データ通信端末 AK-020を使用
- もちろんSIMは「SORACOM Air」
- Raspberry Pi 3 Model Bを使用
- 収集データ
- 気温(2地点)
- 湿度
- 地温
- 葉音
- 日射量
- 土壌水分(pF)
制御プログラム
- 言語:Python3
- 主な処理(★が私が担当分)
送信処理について
Pythonのライブラリの「requests」を使用して、SORACOM Funnel経由で、AWS IoTへ送信してます。
db_manager = SqliteDbManager() with db_manager.transaction() as session_pq: # 再送信データを取得 send_data_obj = SendData() send_data_list = send_data_obj.get_retry_data(session_pq) send_data_list.append(payload_str) for d in send_data_list: try: res = requests.post('http://funnel.soracom.io', data=d, headers=headers, timeout=5) res.raise_for_status() except Exception as e: # 未送信データを保存 entry = SendData(payload=d) session_pq.add(entry)
これを直接、AWS IoTへ送信するとなると、
- 証明書をラズパイに置かないといけない
- AWS IoT Device SDK for Pythonがあるが、もっと処理が複雑になってしまう
ことなどあり、SORACOM Airを使用することにより、requests一発で送信できるのは本当に便利!
Tips
最初、Funnelに送信すると以下のエラーが発生
Response:400 message:Failed to get credentials for OP0063709878, aws-iot"
全然、わからず寝る前にソラコム・サポートへ問い合わせ(リクエストを送信)。
次の日に丁寧な返信があり、無事解決(TT)
SIMグループにSORACOM Beamの設定もあったことが原因だったもよう。最初はSORACOM Beamを使用しようと思ったけど、途中でSORACOM Funnelにかえたので、設定が残っていた。。。
新しくSIMグループを作成、そこでSORACOM Funnelを設定。無事、送信できました!
迅速なご対応ありがとうございました!(TT)
クラウド(IoTボックス→データ保存のあたり)
こんな構成になってます
SORACOM
SORACOM FunnleとSORACOM Gateの「Public Gate機能」を使用してます。
SORACOM Funnel
AWS IoTへ送信してます
Public Gate機能
Mitsuyoshi Okiさんに教えていただいた便利機能です!
メンテンナス時に、この機能を利用して、自宅→ハウスのRaspberry Piに接続してメンテナンス等しています
SORACOMが用意しているVPGを利用して、デバイス間通信が可能です
ただし、Public Gate は他のSORACOMユーザと VPG を共用するモデルになっていて、他のユーザの所有する SORACOM Air SIM からもお客様のデバイスに対する通信が可能となるため、デバイスへの意図しないアクセスを防ぐためにセキュリティ対策を十分に行ってください。(こちらのデバイスのセキュリティ対策から抜粋)
こんな感じで
- 接続したいSIM同士を同じグループにする
- SORACOM Air for Cellular設定で「ON」にする
- SIM詳細のIPアドレスに接続!
もし、接続できない場合は、セッションの切断してみましょう。
★ご注意
- 指定の料金が発生しますので、使用するとき以外はOFFにしておくことをおすすめします(VPG料金表 参照)
- OFFにした後も、セッションの切断をしておいたほうがよいそうです(セッションが残っていると課金となってしまっている場合がある)
AWS
AWS IoT、DynamoDB
AWS IoTのルールを使用して、DynamoDBへ送信データを書き込んでいます
これもノンプログラミングで書き込みできて便利!
CloudWatch、Lambda、S3
毎朝9時にLambdaを実行して、DynamoDBへ書き込んだデータを前日1日分ずつファイルに出力し保存(バックアップ)するようにしてます
クラウド/Web(AWS⇔Webあたり)
構成はこんな感じ
AWS
API Gateway
API Gateway、LambdaでDynamoDBからデータを取得できるようにしました
ちなみに
AWS側の構築では、「serverless framework」を使用してます
AWSコンソールからいちいち、ポチポチサービスの設定などする必要がなく、便利ですね
- 毎日9時(JST)にLambdaを実行
functions: output_dynamodb_to_s3: handler: handler.output_dynamodb_to_s3 description: DynamoDB to S3 events: - schedule: cron(0 0 ? * * *)
- S3、DynamoDBあたりの設定
resources: Resources: [Name]: Type: AWS::S3::Bucket Properties: BucketName: [バケット名] [Name]: Type: AWS::DynamoDB::Table Properties: TableName: [テーブル名] AttributeDefinitions: - AttributeName: imsi AttributeType: S - AttributeName: timestamp AttributeType: N KeySchema: - AttributeName: imsi KeyType: HASH - AttributeName: timestamp KeyType: RANGE ProvisionedThroughput: ReadCapacityUnits: 3 WriteCapacityUnits: 3
Web
herokuにdjangoをデプロイして、IoTボックスから取得したデータを表示するようにしました
herokuもいちいちサーバ構築せず、Webページを公開できて便利!
画面構成
CSVダウンロードもできますw
グラフ部分
Chart.jsを使ってます
表示させるデータをリストにして、渡すだけで、きれいなグラフを描けて便利!
項目の定義と「data」に表示したいデータのリストを指定
var ctx = document.getElementById("id-chart").getContext('2d'); var chart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: '温度1', data: dataTemp1, backgroundColor: 'rgba(0, 0, 0, 0)', borderColor: 'rgba(255, 99, 132, 1)', borderWidth: 1 }, { label: '湿度', data: dataHumi, backgroundColor: 'rgba(0, 0, 0, 0)', borderColor: 'rgba(2, 99, 132, 1)', borderWidth: 1 }, { ・・・
絞り込みの表示などもデフォルトでできるので、うれしい!上の項目をクリックすることにより選択可能(これは、浦野さんに言われて気がつきましたw)
表部分
Data Tables for jQueryを使用してます。
これも、Chart.jsのように項目を定義して表示するデータを渡せば、表ができて便利!
検索、ソート機能、ページングがデフォルトでついている!
コスト
今のところ、600円/月〜800円/月程度
- 内訳
今後
SORACOM UG
この企画のことも含め今年でた課題などまた話しあっていきながら、本業もあるので、私のできる範囲で今後もゆる〜く関わっていきたいと思いますw
使いたい、試したい、活用したいSORACOMのサービス
SORACOM Beam
まだ、SORACOMを使ってのAWS Shadowを使ったことないので試したいと思っています。。。
SORACOM Inventory
こちらもAWS IoTでのデバイス管理(Just In Timeなど)は多少触ったことがあるので、SORACOMを使った場合、どのようになるか興味があります。
SORACOM Lagoon
今回、構築したようなシステムを簡単に構築できるSORACOM Lagoonというサービスもあるので、すぐ可視化したい、プロトタイピングのときや、すぐユーザにみせたいときなど、最適なサービスもあるので、活用したいです!
最後に
正直、今年のはじめにここまで関わるとは思っていませんでした(^^;
この企画等、紹介できなかったことがたくさんあり、そしてたくさんのひとが関わっています。今、振り返ってみると、誰一人かけても実現していなかったんだなぁっと、すごく感じています。
このような、それぞれの得意分野でお互い補いながらできたことが、とてもうれしいですね。
本当に、SORACOM UG等を通じて、私に関わっていただいた方々に本当に感謝感謝です(TT)
来年もよろしくお願いします!
それでは、明日の zoe6120 さんにバトンタッチです!
Greengrass試してみたよ(chino × Greengrass)
AWS Greengrassを試してみようと思い、以下開発者ガイドに沿ってやってみたときの備忘録
【目次】
環境
- 自端末
- デバイス
- Raspberry Pi 3 Model B
- OS
- Raspbian Jessie
やってみた感想など
- Raspberry Pi のセットアップのやり方も書いてあり驚き!
- Amazon EC2 インスタンスのセットアップがあったが、用途が理解できていない【要復習!】
- Greengrass Core ソフトウェアをRaspberry Piへインストールするところが手間取ってしまった
- でもインストール完了できれば、AWSコンソールからデプロイなどでき、ほぼRaspberry Piを触ることがなくなりそう
- Lambdaで書いたソースがRaspberry Piで実行できることに驚き!
- AWS IoT デバイス SDKより、AWS Greengrass コア SDKの方が簡単にpublishできた
Greengrass BlackBeltオンラインセミナー
こちら、すごく勉強になります
- 一部内容を抜粋
- LambdaはGreengrass用のLambdaを使用する
- このLambdaには、long-liveモードという実行し続けられるモードがある
- Python3系は非対応(TT)
- LambdaはGreengrass用のLambdaを使用する
はまったところなど
sqlite3のインストール時
モジュール 1: Greengrass の環境設定 - AWS Greengrass
上記ページの「8.これで、AWS Greengrass の Raspberry Pi を・・・」の部分
- エラー
pi@chinopi:~/greengrass $ sudo apt-get install sqlite3 Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: sqlite3 : Depends: libsqlite3-0 (= 3.7.13-1+deb7u4) but 3.8.7.1-1+deb8u2 is to be installed E: Unable to correct problems, you have held broken packages. pi@chinopi:~/greengrass $
- 解決策
pi@chinopi:~/greengrass $ sudo apt-get install libsqlite3-0=3.7.13-1+deb7u4 Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: libsqlite3-dev The following packages will be DOWNGRADED: libsqlite3-0 0 upgraded, 0 newly installed, 1 downgraded, 1 to remove and 99 not upgraded. Need to get 415 kB of archives. After this operation, 1,403 kB disk space will be freed. Do you want to continue? [Y/n] Y Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libsqlite3-0 armhf 3.7.13-1+deb7u4 [415 kB] Fetched 415 kB in 5s (70.1 kB/s) (Reading database ... 187757 files and directories currently installed.) Removing libsqlite3-dev:armhf (3.8.7.1-1+deb8u2) ... dpkg: warning: downgrading libsqlite3-0:armhf from 3.8.7.1-1+deb8u2 to 3.7.13-1+deb7u4 (Reading database ... 187746 files and directories currently installed.) Preparing to unpack .../libsqlite3-0_3.7.13-1+deb7u4_armhf.deb ... Unpacking libsqlite3-0:armhf (3.7.13-1+deb7u4) over (3.8.7.1-1+deb8u2) ... Setting up libsqlite3-0:armhf (3.7.13-1+deb7u4) ... Processing triggers for libc-bin (2.19-18+deb8u10) ... pi@chinopi:~/greengrass $
デバイスでAWS Greengrass起動時
- エラー
pi@chinopi:/greengrass/ggc/packages/1.5.0 $ sudo ./greengrassd start Setting up greengrass daemon Validating hardlink/softlink protection Validating execution environment Found cgroup subsystem: cpuset Found cgroup subsystem: cpu Found cgroup subsystem: cpuacct Found cgroup subsystem: blkio Found cgroup subsystem: devices Found cgroup subsystem: freezer Found cgroup subsystem: net_cls Starting greengrass daemon Greengrass daemon 3824 failed to start [2018-04-14T11:02:57.600941406Z] Failed to invoke PutLogEvents on local Cloudwatch, logGroup: /GreengrassSystem/certmanager, error: RequestError: send request failed caused by: Post http://localhost:8000/2016-11-01/cloudwatch/logs/: dial tcp 127.0.0.1:8000: getsockopt: connection refused, response: { } [2018-04-14T11:02:57.768114857Z] Failed to invoke PutLogEvents on local Cloudwatch, logGroup: /GreengrassSystem/syncmanager, error: RequestError: send request failed caused by: Post http://localhost:8000/2016-11-01/cloudwatch/logs/: dial tcp 127.0.0.1:8000: getsockopt: connection refused, response: { } ・・・・・・
- 解決策
https://forums.aws.amazon.com/thread.jspa?threadID=264348
上記を参考に、デバイス側で以下コマンドを実行
$ sudo apt-get install --reinstall raspberrypi-bootloader raspberrypi-kernel
SORACOM Technology Camp 2018 参加記録
先月の26日に開催された SORACOM Technology Camp 2018 の参加記録です。
technology-camp2018.soracom.jp
「 トラックB IoT つないだ、その後に 〜be connected 〜 」側の発表を聞いていました。
試作から量産へ意識することや、デバイス管理、セキュリティなど、自分が知りたかったこと、知らなかったことなど、すごく勉強になりました!
あと、サービスごとの繋がりもみえてきて、こちらも勉強になりました。
今後、勉強していくうえで、振り返りたいセッションを中心に書いていきます!
★全スライド、発表等は @ko2a さんがまとめてくれたこちらをどうぞ!
ありがとうございます!
B1. SORACOM を API で 256 倍使いこなす方法
www.slideshare.net
「邪眼」の小熊さんのセッションです
パケットをみていると怪しい箇所がみえてくるそうです
すごい!
- APIでできること、APIの特徴など基本的なことから実際にコンソールで試しながらのセッションでした
- SORACOM APIを呼び出しているUser Agentの円グラフなど興味深かったですw
- イベントハンドラー、メタデータの詳細はみる
- SIM注文のAPIのテストは SORACOM API Sandbox が便利
B2. 通信モジュール内蔵デバイス制作のための心構え
www.slideshare.net
高橋さんとSeeedの坪井さんのセッションです
ソフトのエンジニアとしては普段、触れることのないことばかりですごく刺激になりました!
- seeedさんの製造サービスはいつになるかわからないけど注文してみたい
- 試作と量産は違う!
- Seeedさんはノウハウがいる!
- リフロー時の注意点:捨て板、間隔、部品感の距離
- 量産に役立つ試作!
- 調達できない部品を使うのは工作!
- 再現性が大事!
- 既にPoCができている=実現可能なモノ
- 予算感($20,000〜)
- Seeedさんはノウハウがいる!
- アフターフォロー
- 利用シーンを意識する
- 設置環境
- セルラー通信は「手軽」だが「確実」ではない
- 「無線」は「線が無い」ことを意識する
- 有線ではない!
- 事例:
- 冬は通信できるのに夏になると通信できなくなる
- →樹木に葉が茂る→葉の水分が電波を通しにくい
- →乾燥剤いれる
- 毎日同じ時間に通信できないことがある
- →フェリーが通り、乗船者がいるため通信量が増えた
- 冬は通信できるのに夏になると通信できなくなる
B3. SORACOMで実現するデバイス管理
www.slideshare.net
今井さんのセッションです
デバイス管理については、今回一番知りたかったこと
実例とケーススタディの部分がワークフロー形式でわかりやすく勉強になりました
- SORACOMの各種APIは「SIM(IMSI)」に対して行う
- →このため、デバイスごとにSIMを挿したほうがよい
- デバイスとSIMのひも付け
- Beamなら自動でできる!
- デバイスの初期設定&動作確認
- 利用開始
- イベントハンドラを使ってSIMが利用開始されたら→別のサービス(Lambdaなど)に通知などできる!
- 証明書や鍵の安全な交換
- 暗号化用の鍵となる
- AWS IoTのクライアント証明書
- Beam
- Endorse(※これはまた詳しいことを調べよう)
- 設定値やフェームウェアの更新
- Lightweight M2M(SORACOM Inventory)
- 異常を防ぐには
- 用途以外の利用を制約する
- IMEIロック
- 閉域網を利用
- 用途以外の利用を検知する
- パケットを監視
- Junction(Mirroring)
- パケットを監視
- 用途以外の利用を制約する
B4. 後手に回りがちなIoTセキュリティをどうすべきなのか
www.slideshare.net
java好きな片山さんと、福島さんのセッションです
- Mirai http://techfactory.itmedia.co.jp/tf/articles/1704/13/news010.html
- 設計時からセキュリティのことを考える!
- 費用対効果の観点も必要
- 前提として盗まれてもよい構成にしておく!
- SORACOM にビルドインされた機能をつかう
- 閉域網での接続
- 通信の監視/検知
- デバイス側の認証/認可
- IMSI、IMEIを紐付けて、別の通信モジュールを使わせなくする!
- プライベートガーデン
- Beam以外の通信を制限するなどに利用できる
- SORACOMアカウントの保護
- MFA機能
- デバイス自体の保護
- 参考:Platform Security Architecture(PSA)
- 今後は必要不可欠になりそう
それと「SORACOM UG Tokyo #10 / SORACOM Technology Camp 夜の部!!」
以前、SORACOM UG 信州 #2 に参加してくださった ぼへぼへ さんと会えるというびっくりがあったり
SORACOM UGのアイコンができましたー
作:くろにゃんこたん
それと @ko2a さんがUG 信州の活動報告をしてくれました(>_<)
ぜひ、また参加したいです!
ありがとうございました(>_<)
Raspberry Pi設定メモ
自分のRaspberry Piにした設定等を残しておくメモ(随時更新)
- 環境
- MacでRasbianインストール
- Raspbianインストール後にssh接続
- GrovePiをインストール
- wifi
- 固定IPアドレス設定
- NTPサーバの変更
- timezon
- RAM領域を作成
- ログ関連
- cron
- SQLAlchemyのインストール
- SORACOM Airの設定
- systemd
環境
- Raspberry Pi 3 Model B
- Debian 8.0(コードネーム: jessie)
MacでRasbianインストール
Raspbianインストール後にssh接続
- キーボード、ディスプレイがない場合は、SDカードをPCに接続し、「/boot」配下に「ssh」を配置
- SDカードをRaspberry Piにいれ、起動
- LANケーブルを接続して以下で接続
$ ssh pi@raspberrypi.local
- 公開鍵認証を設定
- ホスト名はデフォルトの「raspberrypi」
# 自PC $ ssh-keygen -t rsa $ $ scp ~/.ssh/id_rsa.pub pi@raspberrypi.local:/home/pi $ vi ~/.ssh/config # 以下を追加 Host raspberrypi HostName raspberrypi.local user pi IdentityFile ~/.ssh/id_rsa # Raspberry PI $ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys # 自PCからログイン! $ ssh raspberrypi
GrovePiをインストール
# gitをインストール $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install git $ cd # clone $ git clone https://github.com/DexterInd/GrovePi.git # install $ cd GrovePi/Script $ sudo curl -kL dexterindustries.com/update_grovepi | bash $ sudo shutdown -r now $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- 04 -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- $ # Firmwareアップデート $ cd GrovePi/Firmware $ sudo ./firmware_update.sh
wifi
sudo sh -c 'wpa_passphrase SSID PASS >> /etc/wpa_supplicant/wpa_supplicant.conf'
固定IPアドレス設定
$ sudo vi /etc/dhcpcd.conf # 以下を追加し保存 interface eth0 static ip_address=192.168.0.10/24 # static routers=192.168.0.1 # static domain_name_servers=8.8.8.8
https://qiita.com/MarieKawasuji/items/b088ffb252a92eee8f5d
network のIFはこちらを変更
$ sudo vi /etc/network/interfaces
NTPサーバの変更
$ cd /etc/systemd/ $ pwd /etc/systemd $ ls -la total 44 drwxr-xr-x 5 root root 4096 Sep 7 14:47 . drwxr-xr-x 83 root root 4096 Sep 7 16:38 .. -rw-r--r-- 1 root root 1014 Jul 5 20:31 journald.conf -rw-r--r-- 1 root root 1022 Jul 5 20:31 logind.conf drwxr-xr-x 2 root root 4096 Sep 7 14:59 network -rw-r--r-- 1 root root 642 Jul 5 20:31 resolved.conf drwxr-xr-x 16 root root 4096 Sep 7 15:13 system -rw-r--r-- 1 root root 1601 Jul 5 20:31 system.conf -rw-r--r-- 1 root root 607 Jul 5 20:31 timesyncd.conf drwxr-xr-x 2 root root 4096 Jul 5 20:31 user -rw-r--r-- 1 root root 1130 Jul 5 20:31 user.conf $ sudo vi timesyncd.conf 【timesyncd.conf】 ・「NTP」「FallbackNTP」をアンコメントし、以下の内容とする [Time] NTP=ntp.nict.jp FallbackNTP=0.jp.pool.ntp.org 1.jp.pool.ntp.org 2.jp.pool.ntp.org 3.jp.pool.ntp.org
timezon
$ timedatectl status Local time: Thu 2017-09-07 16:55:40 UTC Universal time: Thu 2017-09-07 16:55:40 UTC RTC time: n/a Time zone: Etc/UTC (UTC, +0000) Network time on: yes NTP synchronized: no RTC in local TZ: no # Network time on が「no」の場合は同期を有効にする $ timedatectl set-ntp true # timezone の変更 $ timedatectl list-timezones | grep Asia/Tokyo Asia/Tokyo $ sudo timedatectl set-timezone Asia/Tokyo $ timedatectl status Local time: Fri 2017-09-08 01:59:33 JST Universal time: Thu 2017-09-07 16:59:33 UTC RTC time: n/a Time zone: Asia/Tokyo (JST, +0900) Network time on: yes NTP synchronized: no RTC in local TZ: no
RAM領域を作成
# 現状(変更前)を確認 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 30G 8.9G 20G 32% / devtmpfs 426M 0 426M 0% /dev tmpfs 430M 0 430M 0% /dev/shm tmpfs 430M 6.0M 425M 2% /run tmpfs 5.0M 8.0K 5.0M 1% /run/lock tmpfs 430M 0 430M 0% /sys/fs/cgroup /dev/mmcblk0p1 63M 22M 42M 35% /boot tmpfs 86M 0 86M 0% /run/user/1000 $ # fstabを変更 $ sudo vi /etc/fstab # 以下4行を追加し保存 #### ramdisk tmpfs /tmp tmpfs defaults,size=32m 0 0 tmpfs /var/tmp tmpfs defaults,size=16m 0 0 tmpfs /var/log tmpfs defaults,size=32m 0 0 # 設定を反映のため再起動 $ sudo shutdown -r now # 「/var/log」「/var/tmp」「/tmp」が「tmpfs」になっていることを確認 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 30G 8.9G 20G 32% / devtmpfs 426M 0 426M 0% /dev tmpfs 430M 0 430M 0% /dev/shm tmpfs 430M 6.0M 425M 2% /run tmpfs 5.0M 8.0K 5.0M 1% /run/lock tmpfs 430M 0 430M 0% /sys/fs/cgroup tmpfs 32M 196K 32M 1% /var/log tmpfs 16M 0 16M 0% /var/tmp tmpfs 32M 8.0K 32M 1% /tmp /dev/mmcblk0p1 63M 22M 42M 35% /boot tmpfs 86M 0 86M 0% /run/user/1000 $
ログ関連
Raspberry Pi(Raspbian)にやっといたほうがいい設定(マイクロSDカードの延命:swapやlog)
cron
# 1分ごとに実行 $ crontab -e # 以下を追加し保存 */1 * * * * python3 /home/pi/test.py
SQLAlchemyのインストール
SQLAlchemy - The Database Toolkit for Python
pipでインストールするとエラーとなってしまいできなかったので、ディストリビューションを使用してインストールしたときのメモ
# Pythonの仮想環境へインストールする場合はactivateしておく $ cd /usr/local/src # ファイルをダウンロード $ sudo curl -L -O https://files.pythonhosted.org/packages/da/ef/f10a6892f8ff3c1fec1c25699a7379d1f72f291c8fa40b71c31cab3f779e/SQLAlchemy-1.2.6.tar.gz $ $ sudo tar zxvf SQLAlchemy-1.2.6.tar.gz $ cd SQLAlchemy-1.2.6/ # インストール $ python setup.py install # 確認 $ pip freeze | grep SQLAlchemy SQLAlchemy==1.2.6 $
SORACOM Airの設定
wvdial
https://dev.soracom.io/jp/start/device_setting/#raspi_usbdev.soracom.io
pppd
もしAK-020以外のUSBも挿して認識されない場合
AK-020 と他の USB デバイスを Raspberry Pi に取り付けると、AK-020 が認識されない
systemd
# serviceファイル $ /etc/systemd/system/xxx.service # 起動 $ sudo systemctl start xxx # 状態確認 $ sudo systemctl status xxx # 自動起動設定 $ sudo systemctl enable xxx
SORACOM UG 信州 #2 とIoTの開発してみたよ
この記事は SORACOM Advent Calendar 2017 の17日目の記事です。
長野市にあるGEEKLAB.NAGANOというコミュニティスペースで管理やってますー
記事の内容について
昨日(12/16)、GEEKLAB.NAGANOで開催された「SORACOM UG 信州 #2」のことと、私が発表したIoTの開発のLTの内容を書きます!
SORACOM UG 信州 #2
前回の伊那開催からの2回目です!
SORACOM カラーでお出迎えです!
今回も
- SORACOM テクノロジー・エバンジェリスト "max" こと松下 享平さん
- 中信からSORACOM UG 信州の発起人 @ko2a さん
がきてくれましたー! 本当に遠いところありがとうございます。
オープニング
サンタ姿の発起人 @ko2aさんから
このあと、暑くて帽子脱いじゃいますがw
あついんだよ!!! https://t.co/OJmx5h68Mu
— こにゃ (@kuroneko_ko2a) 2017年12月16日
SORACOM 松下さんから
[IoT時代を生き抜くエンジニアに必要な技術とは](https://www.slideshare.net/SORACOM/soracom-ug-2-iot?utm_content=buffer4e490&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer
例えがわかりやすくて、すごく勉強になりました!
「アイディア次第で勝負ができる環境が整っている」ってところはすごく実感してます。
それと、「器用貧乏」って言葉、ぐさっときました。。。
- 新たな価値を生み出して収益増加
- IoTってこの「新たな価値を生み出す」ってところ大事!
- アイディア次第で勝負ができる環境が整っている
- 本当にそう思います
- エンジニアならSuicaの論文は読んだ方がよい
異種統合型情報サービスシステムにおける自律分散アシュアランス技術の研究 | 東京工業大学附属図書館 学位論文データベース
- ピピンアットマーク
- これ知らなかったです・・・(^^;
- ハードウェアはサービスの部品の一つへ。価値は(見かけ上)限りなくゼロへ⇒ハードウェアは囲い込みに必要
- クラウドエンジニアは生産性志向、ハードウェアエンジニアはH/W制約志向
- デバイスの「クラウド・ファースト」化
- 200msの壁
- 人間の歴史の中で、何かをはじめるのに今ほど最高の時はない
- エッジ側でやることと、クラウドでやることを見極めてシンプルに実装する
深センに(弾丸で)行ってきたよ
- 香港から深センへの交通手段
- 電車(だいたいこれ)
- フェリー(たいだいこれ)
- バス(難易度:高)
- リモ(相乗りタクシー)
- オススメの交通手段:リモ
- ドライブスルー感覚で国境を超えられる!
- 注意!
- シールなくすと乗れなくなるので失くさないでね
- 定員(6名)揃わないと出発しない(朝ならだいたいすぐ集まるみたい)
- WeChat Pay(必需品)したい場合はご連絡を!
Wio LTE ハンズオン
松下さん、UG 信州のフォローをもらいながら、Wio LTEハンズオン資料を進めました。
キット
アンテナをつけるときはヒヤヒヤしました(^^;
無事装着完了!
みなさん、だいたいSORACOM Harvestのところまでは行けました(^^ でも、会場の位置的な問題か、なかなかオンラインにならず・・・またぎーらぼで試してみます(>_<)
LT発表
トップバッターは「ぼへぼへ」さんから
- ソラコムデビューで学んだこと
2番手つとめさせていただきましたー
- IoTの開発をしてみたよ
- 3分の1を話したところでタイムアップ・・・
- (そのまま話してしまいましたが・・・次は5分で収めます!(>_<))
3番手は「くろにゃんこたん」さんから
- センサースケーリングの話
4番手は「kobayutapon」さんから
- そんなデータで大丈夫か
- センシングデータを公開することで罰せられる可能性があるのは知らなかった((((;゚Д゚))))ガクガクブルブル
- マイナスの気温を測るのがすごく難しいということを知れました
クロージング
クロージングも発起人の@ko2aさんから。次回は2月〜3月中旬くらいですが、あくまでも予定ですー
ちなみに、松下さんのお話し、LTのお話しを聞いて、本当に技術、知識的にまだまだ未熟なところばかりだなぁっといつもながらに感じました・・・
いつも勉強になっています!(^^;
記念撮影
いつもの記念撮影!今回も「S」マーク+「SORACOM Beeeeeeeeeeeam」
やばいSの字がちゃんとできていなかった・・・すみません(TT)
IoTの開発をしてみたよ
私が発表したLTのことを書いていきます!こまかな技術ややり方のことは、順々にQiitaに投稿していきます。
それと、まだまだ未熟なところばかりなので、こんなよいもの、技術ありますよってありましたら教えてください(>_<)
内容について
念願のIoT関係の開発をしましたので、その時に使った技術、ものなどをざっくりと紹介していきます!
ちなみにSORACOMのことが少なくごめんなさいです。。。
これから開発しようとしているひとなどの参考になれば幸いです!
まずは構成と私の担当
遠隔地にある機器の状態や機器の周りの状況をセンシングしてAWSにアップするものです。
私が担当したのは、「Raspberry Pi」とAWS部分
ハードについて
- Raspberry Pi
- センサー
- レーザセンサ
- 温度センサ
- カメラ(可視光・赤外線)
- 通信モジュール
- SORACOM EC21-J
- SIM
- SORACOM A・・・ではないです(TT)
- でも疎通時に使用しました!
- コンソールでひと目でオンラインになったことが確認できて、わかりやすかったです!
- Arduino
クラウド
使用したサービス
使用したパターンなど
こちらがすごく参考になりました!
www.slideshare.net
ラージデータアップロードパターン(P36)
- 撮影した画像のアップロードに使用
- こちらの記事も参考にさせていただきました!
デバイスの証明書登録(P45)
- デバイス数が多くなるため、自動登録できるようにしました
モノの自動登録(これは自作)
センサデータなどの保存
- これはAWS IoTのルールでDynamoDBへ保存
一日中、AWSを触れて幸せでした( ´∀`)
ソフト
- Raspberry Pi
- OS
- Raspbian Jessie Lite
- システム化
- Systemd
- 言語:Python
- 使用した便利なライブラリ等を紹介していきます!
- AWS関連
- シリアル通信:pySerial
- カメラ関連:PiCamera
- ビット演算(これはライブラリではないですが・・・)
- ログ関連:logging
- 「TimedRotatingFileHandler」を使えば数行でログファイルのローテーションができちゃいます!
- 設定ファイル:configparser
- iniファイルを簡単に読み書きできます!
- コマンド関連:subprocess
- こんな↓感じでPythonからコマンド実行できます!
- subprocess.run(["ls", "-l"])
- DB関連:sqlite3
- 未送信データなどの保存用として使いました!
- OS
本当にいろいろと便利なものがあり、開発中はずっと感動していました
松下さんの言っていた「アイディア次第で勝負ができる環境が整った」と実感しました。
SORACOM Wio LTEも含めて、これからもいろいろ試していきます!
退屈なことをやらせてみた(Chino × Selenium)
サイトのSSL化対応があって、全ページで混合コンテンツ(Mixed Content)にならないことを確認しないといけなかった。。。
単純に「テストめんどくさいなぁ〜」って思ってSeleniumにやらせてみた話。
※本当に単純なことですが・・・(^^;
やらせてみたこと
- テキストからURLを読み込む(1行に1URL)
- ページをひらく(ブラウザはChrome)
- Developer Tools の「Console」に出力されるメッセージをprint
を繰り返し。これで、printされたメッセージに内に「Mixed Content」が出力されていなければOK!
こんなこともやらせてみた
- 一応ログインもできる
- インプットファイルでログインページのURLの次の行を以下とするとログイン
- login,[アカウント],[パスワード]
- ※でも入力対象の要素が固定指定なのでいまいち・・・
- リンクのクリックもさせてみた
- インプットファイルで以下とするとクリック
- ◯,[URL],[クリックするリンクテキストorクラス名]
いまいちですけどソースはこちら
テストはあまり好きではないけど、何かツール使ったりすると、
- その分時間短縮になるし
- ツールのこと知れるし
- コード書けるし
テストへのモチベーションがあがりますねー
参考サイト等
SORACOM UG 信州 #1(Chino × SORACOM UG)
昨日(9/23)、伊那で開催されたSORACOM UG 信州 #1 に参加しました!
SORACOM Airを使ったハンズオンをRaspberry Piを使ってやるということで、ホコリをかぶっているRaspberry Piをまた触るきっかけにしたいという思いもあり(^^
【目次】
会場
会場はADSL実証実験20周年を迎える伊那市の伊那市有線放送 いなあいネットさん。
SORACOMさんから
発起人
- 沖さん
- CoderDojo安曇野にも関わったり本当にいろいろと考えたり、している方。私はinahackでお知り合いになりましたー
- 橋本さん
- 鄭さん
- この方もいろいろしている方。本当にいろいろ。いろいろなことに通じていて、いろいろなことの黒幕らしい・・・( ̄ー ̄)
- 宮下さん
- 小穴さん
参加者
全員ではないですが、いろいろな方がいましたよw
- 上田から原チャリで参加したおじいちゃん
- イベント当日の朝5時くらいに「LPWA」などのキーワードで検索し、本イベントをみつけ参加
- 富山から参加の会社員の方
- なおさんが送っているDMメール?が送られてきて、「SORACOMってどんなものが」と思い参加したそうですw
- 市議の方
- 急遽、市議の方がきて、一緒にハンズオンしました。Raspberry Pi、超音波センサ、SORACOM使ってました。
ハンズオン
沖さん、maxさんのお話しのあと、
- Raspberry Pi
- SORACOM Air
- 超音波センサ
SORACOMのサービスは以下を使用し、ハンズオンしましたー
- SORACOM Beam
- SORACOM Harvest
ハンズオン資料はこちら
SORACOM bootcampという、技術者向けオンラインセミナーもあるそうです!うれしい(^^
LoRaWAN™ | SORACOM Bootcamp - YouTube
- ハンズオンの様子
- 超音波センサ + Harvest
ってことで
・・・次の日、キタ━━━━(゚∀゚)━━━━!!
そして、早速、ほこりをかぶっていたchinopi(Chino の Raspberry Pi)に装着
まだ、設定などしていないので、SORACOM Airで通信していませんが。。。少しずつだと思いますが、触っていきますー
maxさん、なおさん、沖さん、橋本さん、参加者の方ありがとうございました。ハンズオンを通して、SORACOMのサービスなど理解深まりました(^^ お疲れ様でした!次は◯ーらぼで開催予定です!
そうそう、最後に「SORACOM Beeeeeeeeeeeeam」で記念撮影しましたー