Raspberry Pi 定期的にサーバーにJSONをアップロード。
在席情報を教えてくれるボットを作った。
Raspberry PiでProbe Requestを取って、MACアドレスを収集。
それを5分ごとにサーバーにあげる。最初cronが動かなかったが、設定漏れだった。
cronでも、カレントパスをちゃんと意識する必要がある。ちょっとうっかりしてた、、、。
ログインしてないとスケジュールタスクも実行してくれないみたいなので、自動ログインもするように設定。
Raspberry Piのログインを簡単にする設定(自動ログイン、デスクトップ表示) | そう いう わけさ
Mongooseでのあれこれ。(メモ)
Mongooseで列を指定したらエラーになった。
Mongooseで特定のフィールドだけ出そうと思って、引数に「この列は表示、この列は非表示」ってやってたらエラーが出た。表示するフィールドだけ、または表示しないフィールドだけという指定の仕方しか許されていないらしい。
Mongooseで1件のデータを更新する、なければInsert
upsertはないけど、findOneAndUpdateで同じことが出来るらしい。これが出来るとすごく楽。
Insert-or-Update with MongoDB and Mongoose
findOneAndUpdateでエラーが起きる、、、。Mongo2.4を使っているからか、、、。MongoDBをアップグレードすればと書いてあるけど、OpenShiftで公式カートリッジがない。個人の作ったカートリッジがあるっぽい。
Raspberry Pi で詰んだかと思った。常時稼働のプログラムを起動プロセスで実行、、、終わらない。
Raspberry PiでWi-Fiパケットをとるシステムを作っている。常時稼働のプログラムを作ったが、どうもいつの間にか落ちている。夜帰る時まではOK。翌朝来ると、しれっと再起動している。参考にしたアプリでもその辺りをinit.dで毎回起動するようにしていた。
同じように起動時にプログラムを実行させたい。Linuxではinit.dを使うのが通常らしい。Raspberry Piではrc.localに起動時に実行したいプログラムを書くことによってスタートアッププログラムを実行できる。
Linuxのスタートアップの処理についてはこの辺りが分かりやすかった。
ただ、そこに大きな落とし穴が、、、。
rc.localの記述の最後に & を書き忘れていた。これを書くとバックグラウンドで実行をしてくれるらしい。逆に言うと、書かないと終わるまで待つ、つまり待ちぼうけ。
終わりの見えない黒画面。とりあえず電源を落として、深呼吸してググル。
どうも、起動時にShift押しっぱなしで、BIOSみたいな画面に入り、起動オプションをいじって、スタートアップの手前で止めて、rc.localを編集すればいいらしい。
助かりました!!
皆さん本当にありがとうございました。
Python __init__ __enter__ __exit__
Linux 権限入門(メモ)
Linux今までほとんど触ったことなくて、権限についてもあまり意識していなかったけど、他のブログでさらっと紹介されていて、分かってなかったなぁと思ったので、ちょっとググった。
理解した範囲で簡単にまとめますが、多分下に紹介する記事やブログの方が分かりやすいです。
Linuxでは所有者、グループ、その他のユーザーの3種類のユーザーがいる。
それぞれのユーザータイプに読み取り、書き込み、実行の3種類の権限がある。
それらが、ls -l でファイル一覧出したときの、-rwxとかの文字列になる。
これを数字で表すと、1:実行、2:書き込み、4:読み取りに対応している。
これは数字を足して表すことも出来るので、chmod 777 target_file というコマンドを実行することも出来る。所有者、グループ、その他のユーザー全てが読み取り、書き込み、実行が出来るというもの。
Linuxコマンド集 - 【 chmod 】 ファイルやディレクトリのアクセス権を変更する:ITpro
勉強になりました。ありがとうございました。
IoT LinkIt ONEを使う。Lチカ。
IoTの機器をオススメされたので、ちょっと試してみた。最終的にはお天気の情報をサーバーに上げてほこほこするつもり。
進められたのが、LinkIt ONEというIoT機器。Raspberry PiとArduinoで比べるとArduinoに近い感じ。エディタもArduinoだし。この機器の特徴は通信が強いんじゃないかと。Wi-Fiアンテナ、GPS、GSMアンテナがついてて、SIMカードを入れれば通信ができる。
導入手順はこのサイトに従ってやるとほぼうまく行く。
Get Started on Windows - LinkIt ONE Resources
途中アップデートがうまく行かなかったので、Aruduinoエディタを再起動するとうまく行った。
で、サイトに従ってLチカを試す。失敗。
BUILTIN_LEDが定義されていないというエラーが出る。
→他のサンプルを見てみると、書き方はpinModeという関数の引数として、数値型の値:光らせたいLEDの番号を渡すようになっているらしい。
コードをちょっと直して、
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino model, check
the Technical Specs of your board at https://www.arduino.cc/en/Main/Products
This example code is in the public domain.modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
*/int LED_BUILTIN = 0; // the PWM pin the LED is attached to
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
これでLチカできた!
今日のコード(2017/01/29) Linuxシェル。
Raspberry Piをセンサーとして使うおもちゃを作ってるのだが、23時間たつとサービスが止まっている。再起動がかかっているのか、なにか別のことが起きてるのか不明、、、。
参考にしたコード一式を確認すると、やはりこれに対する考慮がされている。Raspberry Piのサービスは定期的に再起動して、init.dで起動時にサービスを再度実行している。
というわけで、シェルもちゃんと書けるようになりたい。今日は、ループで10回echoをするコードを書いた。コピペ。
で、Shellの1行目はおまじないと思ってたら、ちゃんと役割があると知ってびつくり。
このサイトが一番イメージとして分かりやすかった。