見出し画像

Node-REDでobnizを動かしてみた


盛岡市に移って早2年になります

大変恥ずかしい話ですが、いまだにゴミ収集の日付と曜日に迷ってしまうことが結構あります…💦


いきなり弁明しますが、さすがに毎週の可燃ごみの曜日くらいはわかります!


一覧表は入居時に渡されましたが、これがまた分かりにくい

盛岡市第一地区ゴミ収集表

情報量が多すぎて、一瞬で見る気が失せます

そして指定曜日と第何何曜日が混じっていて把握する気が失せます


ボタンポチっ 「明日はxxごみの収集日です」 みたいな感じを目指して

試みました


ゴミ収集指図表


LINEで起動メッセージを送り、起動させる

手間と思考するコストを省くことが出来たと思います


使った素材


手作り感がすごい…

■ キーホルダーを吊るしていたコルクボード
■ 汎用のピン
■ 100均で買ったセロテープ
■ 太すぎて歯間に入らない歯間ブラシ(キャップ付き)
■ obnizスターターキット
■ よくわからない譜面台?のようなもの
■ 長めのUSBケーブル

新たに買ったものはセロテープのみ!(なお合計金額を出すと真顔になります)


Node-REDの図


全体図

全体の図

LINEから起動メッセージを送る ➡ 特定のメッセージか判断 ➡ GSheetからゴミ収集曜日の情報を送る ➡ 情報に基づいてobnizを動かす


GSheet中身

設定シート

設定シート

関数を使ってゴミ収集の曜日や指定日を判別出来るようにしたシートです
毎度のごとくGSheetを使っていますが、つまるところ関数が使えるのが強い

設定シートの関数 

//セルB1:明日の日付
=today()+1

//セルB2:明日の曜日
=text(B1,"ddd")

//セルB3:月初日
=EOMONTH(B1,-1)+1

//セルB4以降:隔週指定曜日 第3火曜日等々
=IF(WEEKDAY($B$3)>3,(7-(WEEKDAY($B$3)-3))+$B$3,3-WEEKDAY($B$3)+$B$3)

読込シート

1行のみ

設定シートの明日の日付からゴミ収集の種類判定をしています

読込シートの関数

//セルB1:明日の日付からゴミ収集指図判定
=if(or('設定シート'!B2="月",'設定シート'!B2="木"),"可燃ごみ",if('設定シート'!B2="金","プラスチック",IFERROR(VLOOKUP('設定シート'!B1,'設定シート'!B4:C8,2,false),"なし")))


obniz function ノード

ノードの追加はobnizで検索すると出てきます

このように

今回はobniz functionノードを使っています

黒塗りの部分にobnizIDを入力

自分のobnizIDを設定しましょう
初期化はお好みで

コードの詳細は以下にあります

obnizにやらせたいことを書きましょう

obniz function ノード

var string = msg.payload[0][1];
var servo = obniz.wired("ServoMotor", { gnd: 2, vcc: 1, signal: 0 });
if(string=="可燃ごみ"){
    servo.angle(180);
    obniz.wait(1000);
    servo.angle(50);
}else if(string=="不燃ごみ"){
    servo.angle(180);
    obniz.wait(1000);
    servo.angle(20);
}else if(string=="瓶缶ペット"){
    servo.angle(180);
    obniz.wait(1000);
    servo.angle(90);
}else if(string=="古紙"){
    servo.angle(180);
    obniz.wait(1000);
    servo.angle(130);
}else if(string=="プラスチック"){
    servo.angle(180);
    obniz.wait(1000);
    servo.angle(160);
}else{
    servo.angle(180);
}

GSheetから送られてきたpayloadの情報によって処理を分岐させてます

最初に初期角度へ戻してから指定の角度へ動かしています
(同じ指定だった場合でも動作確認が取れるように)


あるべき姿として描いていたもの


LINEからの起動というのは次善の策でしかありませんでした

本当は時間での自動起動で、置物として置いていても役割を持たせられる状態にしたかった

cronノードを使う想定だった

CRONノードを使って定期定時での自動実行をさせたかった

herokuサーバーの無料契約の為、30分経つとサーバーがスリープしてしまい
接続が途切れるため、断念…


参考にさせていただいたサイト様



過去に書いた記事リンク



最近の悩みは 適切なネタを素早く探せない ことです

これがかなり苦しい…

この記事が気に入ったらサポートをしてみませんか?