2021年4月27日火曜日

LEZYNEの位置情報をLINEに送ってみた

event_note4月 27, 2021 editBy shamu_shamu forumNo comments


 ライド時の位置情報を生存確認も含めて家族などに報告する際に毎度位置情報を送信していましたが、少々面倒なので何か良い方法が無いか調べていました。

どうやらLEZYNEには現在位置情報をトラッキングする機能が付いているみたいでこれを利用できないか考えた所LINEにメッセージを送って受け取る側が好きな時に見れるという便利?な方法をやってみました。

LEZYNEから送信できるのはメールのみなので、これをLINEに転送する設定をするだけのお手軽?な方法です。

事前準備として

  • LINEが使える(PCログインが出来るように)
  • googleのサービスとgmailを使うのでアカウントを用意
  • PCを使う
まず「LINE Notify」 https://notify-bot.line.me/ja/にログイン※PCログインを許可しておきます。終わったらオフにしても大丈夫

次にマイページをクリックしトークンを発行するをクリック


「トークン名を記入して下さい」の場所に分かりやすいタイトルを入力
ここでは位置情報とかでいいかと思います。

次に送信したいグループを選択(個人に送りたい場合は相手にここまでの作業をお願いするしかない?のでグループを作った方が相手に迷惑が掛からなそうです)
最後に「発行する」をクリックするとトークンが発行されるのでメモ帳などにコピペ



ここからはgoogleのサービス https://script.google.com/homeを利用します。
ログイン出来たら下記をコピペ
※2021/12/23今まで気付かなかったけど何故か時間取得が1か月ズレていたのでここを参考に訂正しました。

var lineToken = "xxxxx"; //LINE notify token
var words = ""//検索したい文字をスペースで区切って入れてください (例)あああ いいい ううう
var f_body = 1//0:通知に本文を表示させない、1:通知に本文を表示させる
var interval = 1//何分前からの新着メールを確認する?


function send_line(Me){
 var payload = {'message' :   Me};
 var options ={
   "method"  : "post",
   "payload" : payload,
   "headers" : {"Authorization" : "Bearer "lineToken}  
 };
 UrlFetchApp.fetch("https://notify-api.line.me/api/notify"options);
}


function fetchContactMail() {
 //取得間隔
 var now_timeMath.floor(new Date().getTime() / 1000) ;//現在時刻を変換
 var time_term = now_time - ((60 * interval) + 3); //秒にして+3秒しておく
 
 //検索条件指定
  var strTerms = '(label:位置情報 subject:{' + words + '} is:unread after:'time_term + ')';
 
 //取得
 var myThreads = GmailApp.search(strTerms);
 var myMsgs = GmailApp.getMessagesForThreads(myThreads);
 var valMsgs = [];
 for(var i = 0i < myMsgs.length;i++){
   valMsgs[i] = " " + (myMsgs[i].slice(-1)[0].getDate().getMonth() + 1) + "/"myMsgs[i].slice(-1)[0].getDate().getDate() 
    + " " + myMsgs[i].slice(-1)[0].getDate().getHours() + ":" + myMsgs[i].slice(-1)[0].getDate().getMinutes() 
    //+ "\n[from]" + myMsgs[i].slice(-1)[0].getFrom()
    //+ "\n" + myMsgs[i].slice(-1)[0].getSubject()
   
   if(f_body == 1){
     //valMsgs[i] = valMsgs[i] + "\n\n[Message]\n"+ myMsgs[i].slice(-1)[0].getPlainBody();
     valMsgs[i] = valMsgs[i] + "\n\n[↓のURLクリックしてちょ]\n"myMsgs[i].slice(-1)[0].getBody().slice(1104,1317);
   }
 }
 
 return valMsgs;
}


function main() {
 new_Me = fetchContactMail()
 if(new_Me.length > 0){
   for(var i = new_Me.length-1i >= 0i--){
     send_line(new_Me[i])
   }
 }
}

変更する箇所は「var lineToken = "xxxxx"; //LINE notify token」の"xxxxx"を先程発行されたトークンの物に差替え。
LEZYNEから届くメールの本文が必要なのでvar f_body = 0;」 「var f_body = 1;」に変更するだけ。
次に保存ボタンをクリックしてデバッグの右にある部分を「main」に変更。
最後に実行を押して1分以内に登録したgmailにメールを何でもいいからテスト送信して受信出来ればOK!(※上記のコードはgmailのフィルタを使って”位置情報"とラベルを付けたもののみ届く内容となっているのでlabel:位置情報を削除すれば全部届くはず?です

トリガーの設定やコード等はこちらのページを参考にさせて頂いたので細かい事はわかりませんが読めば好みにカスタムできるかと思います。私はgmailに届いたLEZYNEの件名でラベル(位置情報)を作ってそのラベルが付いたメッセージだけをLINEに飛ばすようにしました。

後はLINEから届いたメッセージのURLを受け取った側が開けばほぼリアルタイムで位置情報を取得出来るという流れです。(上記コードのgetBody().slice(1104,1317)の部分が多分必要なURLで文字数1104から213文字を抽出してます)

※メールのレイアウトが変更になったみたいで上記コードの

getBody().slice(7492,7674)

の182文字に変更しました。

※またたまメールのレイアウトが変更(2022.12現在)になったみたいで上記コードの

getBody().slice(7492,7698)

の206文字に変更しました。


遊びに行ってるんだから毎回ちゃんと送れ!って突っ込みがありそうですが、集中している時は正直面倒だし連絡が途絶えて心配な時も勝手に見れるのでお互いに良いと個人的に感じております。※LEZYNEのアプリで追跡をオフにすればメッセージは届かないはずです。

※☆※☆※☆以下はAmazonのリンクです。クリックして頂ければ幸いです※☆※☆※☆

LEZYNE(レザイン) 2.7インチ超 大画面 ! 48時間バッテリー サイクルコンピューター [メガXL GPS サイクルコンピュータ]


※2024年5月現在ですが正直アップデートも無いしサイコン事業辞めちゃう?位に思っているので、何でも良いけど他メーカーのGPSサイコンの方がオススメです。

0 comments:

コメントを投稿

お気軽にコメント下さい