如何將LineBot裝在7688上
LineBot需要裝在具有https的伺服器上,例如heroku或azure,但是每次程式有一些小修改都要重新再上傳到heroku,好像有點麻煩,如果能在本機上直接測試就方便多了。但是,本機通常在區域網路的虛擬IP內,外界根本無法識別這些IP位置,於是,就有一種伺服器,能夠幫我們在外界和本機之間建立起https的虛擬通道,並且還能給定一個domain name,讓外界可以找到並穿透進內部網路,找到內部的機器,像這些服務,可以找得到的就有ngrok以及localtunnel。
LineBot需要裝在具有https的伺服器上,例如heroku或azure,但是每次程式有一些小修改都要重新再上傳到heroku,好像有點麻煩,如果能在本機上直接測試就方便多了。但是,本機通常在區域網路的虛擬IP內,外界根本無法識別這些IP位置,於是,就有一種伺服器,能夠幫我們在外界和本機之間建立起https的虛擬通道,並且還能給定一個domain name,讓外界可以找到並穿透進內部網路,找到內部的機器,像這些服務,可以找得到的就有ngrok以及localtunnel。
但是,今天我想要把LineBot的程式放進7688 DUO裡面,ngrok沒辦法使用,但是localtunnel可以,於是,就決定用localtunnel來實作出LineBot的虛擬通道。其實要將LineBot裝進7688真的不容易:
但是,今天我想要把LineBot的程式放進7688 DUO裡面,ngrok沒辦法使用,但是localtunnel可以,於是,就決定用localtunnel來實作出LineBot的虛擬通道。其實要將LineBot裝進7688真的不容易:
1、ngrok比localtunnel穩定,但7688無法使用ngrok,只能用localtunnel,localtunnel常常會crash,且在Line上傳訊息時,有時會漏訊息。
1、ngrok比localtunnel穩定,但7688無法使用ngrok,只能用localtunnel,localtunnel常常會crash,且在Line上傳訊息時,有時會漏訊息。
2、我之前的LineBot程式都是用node.js寫的,但是,7688的node.js是0.12.7,實在太老舊了,一些LineBot要用的套件都無法裝上去。
2、我之前的LineBot程式都是用node.js寫的,但是,7688的node.js是0.12.7,實在太老舊了,一些LineBot要用的套件都無法裝上去。
3、7688上的記憶體實在太少,裝沒幾個套件,記憶體幾乎都快用完。
3、7688上的記憶體實在太少,裝沒幾個套件,記憶體幾乎都快用完。
所以,本來要用node.js開發的程式,改用python來寫,似乎還勉強能夠達成,於是,就用python實作LineBot程式,再加上localtunnel讓Line的伺服器能識別得到7688。
所以,本來要用node.js開發的程式,改用python來寫,似乎還勉強能夠達成,於是,就用python實作LineBot程式,再加上localtunnel讓Line的伺服器能識別得到7688。
一、為7688安裝localtunnel
一、為7688安裝localtunnel
首先,請將7688 duo韌體升級到最新版(0.9.4),用ssh登入7688後,執行如下指令安裝localtunnel
npm install -g localtunnel
以上安裝過程需要一段時間,而且可能會產生一些警告訊息,只怪7688上的node.js太老舊了。
localtunnel的相關使用可參閱如下網址
https://github.com/localtunnel/localtunnel
二、為python安裝需要的套件:Flask以及line-bot-sdk
二、為python安裝需要的套件:Flask以及line-bot-sdk
pip install Flask
pip install line-bot-sdk
三、在7688建立資料夾,放置python寫的LineBot程式
三、在7688建立資料夾,放置python寫的LineBot程式
cd /root
mkdir app
cd app
四、在/root/app底下建立linebot程式,檔名main.py,內容如下:
四、在/root/app底下建立linebot程式,檔名main.py,內容如下:
# coding=utf-8
import mraa
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
#這邊的port可以修改成你要想run的port
myPort=8090
#這邊會對S0這個接腳點亮或關閉LED,S0是gpio17
pin = mraa.Gpio(17)
pin.dir(mraa.DIR_OUT)
pin.write(0)
app = Flask(__name__)
#請修改以下的程式,加入自己Line的channelAccessToken以及channelSecret
line_bot_api = LineBotApi('這裡改成自己Line的channelAccessToken')
handler = WebhookHandler('這裡改成自己Line的channelSecret')
@app.route("/", methods=['POST'])
def index():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
if event.message.text==u"LED開":
pin.write(1)
line_bot_api.reply_message(event.reply_token,TextSendMessage(u"LED已開"))
elif event.message.text==u"LED關":
pin.write(0)
line_bot_api.reply_message(event.reply_token,TextSendMessage(u"LED已關"))
else:
line_bot_api.reply_message(event.reply_token,TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run(host='0.0.0.0', port= myPort)
五、請將7688的S0腳位接上一個LED燈。(若只是要單純測試LineBot能否裝上7688的話,這個LED不接也行)
五、請將7688的S0腳位接上一個LED燈。(若只是要單純測試LineBot能否裝上7688的話,這個LED不接也行)
六、先進入/root/app底下,執行以下兩列指令,第一個是執行python的LineBot程式,第二個則是執行localtunnel,讓外界和內部網路穿透,並註冊取得一個domain name。這兩行指令執行時會有點久
六、先進入/root/app底下,執行以下兩列指令,第一個是執行python的LineBot程式,第二個則是執行localtunnel,讓外界和內部網路穿透,並註冊取得一個domain name。這兩行指令執行時會有點久
python main.py &
lt --port 8090 --subdomain XXXXX &
以上第二行指令的XXXXX請改成你想要的外界識別得到的domain name,例如,如果XXXXX是abcdef的話,外界識別得到的這個7688的domain則是https://abcdef.localtunnel.me/,請注意XXXXX不要用一個很常用的,以免和別人重複,這時就得要重新執行第二行的指令,重新取得另一個domain name。
七、到Line的管理介面,https://business.line.me/zh-hant/,登入後,將上面第六個步驟取得到網址填入LineBot的Webhook URL的網址欄位內。
七、到Line的管理介面,https://business.line.me/zh-hant/,登入後,將上面第六個步驟取得到網址填入LineBot的Webhook URL的網址欄位內。
八、至此大功告成,可以開始用Line輸入任何訊息,7688也會回應並傳回Line上,或是可以讓7688執行一些開啟家電或是燈光i或是其他更有趣的工作了。
八、至此大功告成,可以開始用Line輸入任何訊息,7688也會回應並傳回Line上,或是可以讓7688執行一些開啟家電或是燈光i或是其他更有趣的工作了。