站內搜尋:Yahoo搜尋的結果,如果沒有給完整的網址,請在站內再搜尋一次!

2019-07-31

使用Python smtplib 透過GMail的SMTP傳送中文編碼(UTF8 / base64)的電子郵件

郵件發送的程式碼

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
#from email.mime.image import MIMEImage
from email.header import Header

zUser="login_account@gmail.com"
zPass="LoginPassword"
zFrom="郵件通知<Sender@bod.idv.tw>"
zTo=["Receiver@gmail.com"]
#多個收件人
#zTo=['[addr1@mailserver]','[addr2@mailserver]',...]
#mail with name : toName<addr@mailserver>
#mail to many : toName1<addr1@mailserver>;toName2<addr2@mailserver>;...
#
#使用Header物件對中文內容進行utf-8和Base64進行編碼
zSubject = '測試中文標題 郵件發送 utf8/base64 編碼'
zSubject=Header(zSubject, 'utf-8').encode()

#組合郵件物件 MIMEMultipart
#郵件標題、送件人,收件人,發送日期
oMsg = MIMEMultipart('mixed')
oMsg['Subject'] = zSubject
oMsg['From'] = zFrom
##多個收件人 ['[addr1@mailserver]','[addr2@mailserver]',...]
##可用join將列表轉換為用;為間隔的字串
oMsg['To'] = ";".join(zTo)
oMsg['Date']='2019-07-31'

##郵件內容(純文字:plain)
#zText = "Line 1 : 中文第1行\nLine 2 : 中文第2行\nLine 3 : 中文第3行\n"
#zText = MIMEText(zText,'plain', 'utf-8')
#oMsg.attach(zText)

##郵件內容(HTML)
zHtml = """
<html><head></head>
  <body>
    <p>中文內容測試<br>連結網址 : <a href="http://books.bod.idv.tw">bod-idv-tw的網址</a></p>
  </body>
</html>
"""
zHtml = MIMEText(zHtml,'html', 'utf-8')
#把HTML郵件內容,包成.html檔案,附為電子郵件的附件
#zHtml["Content-Disposition"] = 'attachment; filename="mailContent.html"'
oMsg.attach(zHtml)

#傳送郵件
oSmtp=smtplib.SMTP('smtp.gmail.com',587)
oSmtp.starttls()
oSmtp.ehlo()
oSmtp.login(zUser,zPass)
oSmtp.sendmail(zFrom, zTo, oMsg.as_string())
oSmtp.quit()

參考資料: https://www.itread01.com/content/1543857361.html

使用Anaconda Navigator安裝 Python的開發工具VS code

讓Anaconda Navigator來協助開發環境(environment)、模組(package)的管理,是一件愉快的事!
之前已經使用過Jupyter Noteboks、Thonny、Spyder ...等,總有一些功能不能盡如人意,試試VS code,感覺令人滿意。
  • AutoCompletion (IntelliSense ) / 自動補全 / 自動完成  / 輸入提示 ...,例如:
    import sys
    from PyQt5 import QtWidgets
    oApp=QtWidgets.QApplication(sys.argv)
    oWidget=QtWidgets.QWidget()
    ##以上Jupyter Noteboks、Thonny、Spyder 都還可以順利使用 AutoCompletion
    oWidget.resize(300,100)
    ##上面這一行,輸入oWidget. 後,
    ##Jupyter Noteboks、Thonny、Spyder...
    ##通通無法帶出提示,知道有多少方法、屬性的選項,
    ##真的記不了那麼多啦...
    ##但是 VS code 可以辦到...
  • Code Folding / 程式碼折疊
    習慣了使用NotePad++的程式碼摺疊功能後,沒有這個功能可以用,會忽然手足無措,尤其是在面對Python用「縮排」的作法取代其他程式語言用 { } 來表示函式、控制敘述...的執行範圍,沒有明顯的 end of def / if / for/ while ... 的標示,程式的辨識很容易混淆,又開始懷念 notepad++ 了 ...
    Notepad++ 的 Code Folding / 程式碼折疊

    Notepad++ 的 Code Folding / 程式碼折疊
VS code滿足了當前我最需要的功能:AutoCompletion(IntelliSense)、Code Folding不用就太可惜了,用Anaconda Navigator安裝VS Code超簡單的 ...

  • Anaconda Navigator → Home,可以查看那些基於Anaconda的應用程式已經安裝?有哪些準備Ready的程式可以安裝?
  • 安裝完成後,「Install」鈕,變成「Launch」鈕,按下Launch就可以開始用了...

2019-07-30

SQLite3的管理工具程式:sqlite_tools, SQLiteStudio, SQLiteBrowser

SQLite可以經由程式(Python, Java, C#, C, C++ ...)操作執行來產生檔案資料庫,操作使用資料庫內的資料表、資料...等,但一定會遇到,需要直接先建立、修改、刪除、修改資料庫、資料表資料欄位、資料內容...的狀況,這時候有個工具程式可以用的話,可以避免很多麻煩。
  1. SQLite官網的command-line 管理工具,不需安裝
    https://www.sqlite.org/download.html
    sqlite-tools-win32-x86-3290000.zip (目前的版本 3.29.0),包含sqlite3.exe, sqldiff.exe, sqlite3_analyzer.exe,其中sqlite3.exe,使用.help指令,可以查看相關操作指令
  2. SQLiteStudio圖形介面、功能強大,portable免安裝
    網址:https://sqlitestudio.pl/index.rvt
    https://sqlitestudio.pl/index.rvt?act=download
    https://sqlitestudio.pl/files/sqlitestudio3/complete/win32/SQLiteStudio-3.2.1.zip

    可以透過圖形介面的程式管理(新增、修改、刪除、查詢)Structure / Data / Constraints / Indexes / Triggers / DDL
  3. DB Browser for SQLite
    官網:https://sqlitebrowser.org/
    下載:https://sqlitebrowser.org/dl/

2019-07-26

在Thonny安裝PyQt5 及 pyqt5-tools 建立python開發視窗程式的環境


  1. Thonny的官網(Python IDE for beginners):https://thonny.org/ 
  2. 下載取得Thonny:https://github.com/thonny/thonny/releases/tag/v3.1.2  
  3. 要安裝的環境:Win 10 home ,已安裝Anaconda3,並已在環境變數的系統變數Path中,設定在Anaconda3中執行Python相關程式的相關路徑:
    C:\ProgramData\Anaconda3
    C:\ProgramData\Anaconda3\Library\mingw-w64\bin
    C:\ProgramData\Anaconda3\Library\usr\bin
    C:\ProgramData\Anaconda3\Library\bin
    C:\ProgramData\Anaconda3\Scripts
  4. 因為Thonny的安裝,包含獨立專屬的Python,因此不會使用到Anaconda的Python版本
  5. 在Thonny安裝Python視窗程式開發環境的步驟:
    1. Tools → Manage packages...
    2. 在文字方塊中輸入:PyQt5 → 『Find package from PyPi』
    3. 安裝PyQt5,按下『Install』
    4. 完成安裝。已安裝的模組已包含PyQt5,這次安裝的版本是 5.13.0
    5. 準備安裝pyqt5-tools,安裝pyqt5-tools的需求是必須在安裝click及python-dotenv,pyqt5必須是5.11.3版。
      不管目前是否符合安裝pyqt5-tools,還是按下『Install』
    6. pyqt5-tools完成安裝。
      確認已自動安裝click, python-dotenv模組。
      pyqt5的版本一自動調整為5.11.3版。
    7. 確認一下pyqt5-tools是否安裝成功?
      使用以下程式碼,測試視窗程式是否OK?
      import sys
      from PyQt5 import QtWidgets, QtCore
      oApp=QtWidgets.QApplication(sys.argv)
      oWidget=QtWidgets.QWidget()
      oWidget.resize(250,100)
      oWidget.setWindowTitle("Hello PyQt5")
      oWidget.show()
      sys.exit(oApp.exec_())
    8. pyqt5-tools的安裝位置是:
      C:\Users\Hannibal\AppData\Roaming\Python\Python37\site-packages
      把 C:\Users\Hannibal\AppData\Roaming\Python\Python37\site-packages\pyqt5_tools\designer.exe 的捷徑,建立在桌面上,以便開啟UI設計的程式。
  6. 當Anaconda3 和 Thonny同時安裝時,不管哪一個先安裝,在Thonny透過 Tools → Manage packages...安裝模組後,在漫遊目錄下的Python目錄,會導致Anaconda3 Navigator、spyder...等程式無法執行,解決的方法:
    將漫遊目錄: C:\Users\Hannibal(使用者代號)\AppData\Roaming 下的 Python目錄改名,例如:PythonXXX,下一次要用Thonny時,再將目錄名稱改回。
  7. Thonny的PyQt5及pyqt5-tools模組安裝OK後,再加上pyqt5-tools所提供的designer.exe,就可以進入另一階段的Python視窗程式設計了...
    Thonny處裡程式碼(codes),UI介面設計由designer.exe負責,MVC的味道跑出來了 ...

2019-07-23

Anaconda Python模組管理(Package) : 使用 Anaconda Navigator 更新、安裝模組

  1. 開啟Anaconda Navigator
  2. 選擇『Environment』
    點擊『』,先把環境選取的區塊收起來
    在Anaconda Package區塊中,
    模組Package選項:installed / Not installed / Updatable / Selected / All,選擇:All
    在package搜尋文字方塊中,輸入搜尋標的,例如:pyinstaller
  3. 『Apply』安裝

2019-07-22

Toshiba Satellite C640 重新安裝 Win 10 的工作清單


  1. Toshiba Satellite C640的硬體環境:
    • 2011年份
    • Intel Pentium B940@2.00GHz * 2,64位元,記憶體4GB。
    • 原硬碟已更換為256GB SSD,R/W DVD/CD 光碟機繼續使用。
    • 觸控板,外加藍芽滑鼠。
    • 網卡:Qualcomm Atheros AR8152,無線:Qualcomm Atheros AR9002WB-1NG
  2. 作業系統歷程:
    • 隨機:win 7 home prem
    • 升級安裝 win 10 home
    • 本次重新安裝 win 10 home 版次 1903 (ISO檔中有三個選項:家用 / 教育 / 專業,就按照原先取得的授權選擇家用版)
  3. 重安裝歷程:
    • 原win 10 按住 shift 再執行關機。 (清除快速開機的快取)
    • win 10 ISO image 燒錄至USB,一直無法成功開機進入安裝程式。
    • 將win 10 ISO image 燒錄至DVD,成功完成安裝。
      清除所所SSD上原先從舊硬碟GHOST過來的分割,清除四個分割整理成一個未分割的SSD,讓win 10安裝程式自行分割安裝。
  4. 相關硬體驅動及設定的確認:
    • 裝置管理員確認所有硬體均可正常驅動。
    • 手動新增藍芽滑鼠DWIRAY 型號:MB288 ,成功。
    • 電源選項,設定:選擇『選擇蓋上螢幕時的行為』,『當我關閉筆記電腦螢幕時』,『電池使用中』或『一般電源』都選取『不進行動作』。
      (開機後關上螢幕,丟到一旁遠端遙控使用。
    • 選擇關閉顯示器的時機:電池→1分鐘,一般電源→3分鐘
    • 變更電腦休眠的時間:電池→30分鐘,一般電源→永不
  5. 桌面基本需求建立:
    • 命令提示字元(System32\cmd.exe):加到工作列
    • 剪取工具(System32\SnippingTool.exe):加到工具列
    • 小畫家(System32\mspaint.exe):加到工具列
    • 筆記本(System32\notepad.exe):加到工具列
  6. 安裝Anaconda3:
    • https://www.anaconda.com/  
    • 安裝的版本:Anaconda2-2019.03-Windows-x86_86.exe
    • 安裝選項:
      Install for : All Users
      Destination Folder : C:\ProgramData\Anaconda3
      (勾選)Add Anaconda to the system PATH environment variable
      Not recommended . Instead, open Anaconda with the Windows Start menu and select "Anaconda(64-bit)". This "add to PATH option makes Anaconda get found before previously installed software, but may cause problems requiring you to uninstall and reinstall Anaconda.
      (勾選)Register Anaconda as the system Python 3.7
      This will allow other programs, such as python Tools for Visual Studio, PyCharm, Wing IDE, PyDev, and MSI binary packages, to automatically detect Anaconda as the primary Python 3.7 on the system.
    • 安裝前後環境變數的變化:
      控制台→系統及安全性→系統:進階系統設定:『進階』分頁:環境變數:
      安裝前:
      • 使用者變數:
        Ondrive : C:\Users\Hannibal\OneDrive
        Path: %USERPROFILE%\AppData\Local\MicroSoft\WindowsApps
        TEMP:%USERPROFILE%\AppData\Local\Temp
        TMP:%USERPROFILE%\AppData\Local\Temp
      • 系統變數:
        ComSpec: %SystemRoot%\system32\cmd.exe
        DriverData : C:\Windows\System32\Drivers\DriverData
        NUMBER_OF_PROCESSORS : 2
        OS : Windows_NT
        Path : %SystemRoot%\System32; %SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerPowerShell\v1.0\;%SYSTEMROOT%\System32\OpenSSH\
        PATHEXT : .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.WSH;.MSC
        PROCESSOR_ARCHITECTURE : AMD64
        PROCESSOR_IDENTIFIER : Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
        PROCESSOR_LEVEL : 6
        PROCESSOR_REVISION : 2a07
        PSModulePath: %ProgramFiles%\WindowsPowerShell\Modules;%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules
        TEMP : C:\Windows\TEMP
        TMP : C:\Windows\TEMP
        USERNAME : SYSTEM
        windir : C:\Windows
      • 安裝後環境變數的變化:
        使用者變數:沒改變
        系統變數:Path中增加了→
        c:\ProgramData\Anaconda3
        c:\ProgramData\Anaconda3\Library\mingw-w64\bin
        c:\ProgramData\Anaconda3\Library\usr\bin
        c:\ProgramData\Anaconda3\Library\bin
      • c:\ProgramData\Anaconda3\Scripts
      • Anaconda and JetBrains are working together to bring you Anaconda-powered environments tightly integrated in the PyCharm IDE.
        PyCharm for Anacondas is avaiable at : https://www.anaconda.com/pycharm 
      • Learn more about Anaconda Cloud : https://anaconda.org 
      • Learn how to get started with Anaconda :   http://docs.anaconda.com/anaconda/user-guide/getting-started 
      • 將Anaconda Navigator, Jupyter Notebook, Spyder 三個程式捷徑放到桌面,方便使用。
  7. 其他需要安裝的軟體:
    • 7-zip : 取自 sourceforge.net
    • Google Chrome 瀏覽器
    • 安裝VNC server,使用tightVNC 
      • https://www.tightvnc.com/downloads 
      • 安裝選項:
        Setup Type : Complete
        (勾選)Associate .vnc files with TightVNC Viewer
        (勾選)Register TightVNC Server as a system service
        (勾選)Configure system to allow services simulate Ctrl+Alt+Del
        Password for Remote Access
        Administrative Password
      • 確認TightVNC服務已啟動

2019-07-20

在樹莓派 RaspBerry Pi 下,用Python當開發工具,用SQLite3儲存資料,用SQLiteBrowser協助資料管理

工作環境:

  • RaspBerry Pi 3 Mode B+
  • 作業系統:版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19)
在Python測試連接SQLite3的使用:
  • Buster版本的Python環境,SQLite3已經是Ready的狀態
  • 用以下的程式測試,在Python使用SQLite是OK的
    使用Python sqlite3模組建立資料庫連線,如果所指定的資料庫不存在,Python便會自動建立產生該資料庫檔案

在樹莓派安裝sqlitebrowser
  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install sqlite3
  • sudo apt-get install sqlitebrowser

參考資料:

2019-07-19

python List 串列資料的函數方法演練

strList=list("abc")
print(strList)       
>>>['a','b','c']

aList=[]
aList.append([1,2,3])       #利用append將資料加入List串列
aList.append([2,3,4])
print(aList)           
>>>[1,2,3],[2,3,4]]

print(aList[0])          #取出指定位置的資料
>>>[1,2,3]
print(aList[-1])         #取出最後一個資料
>>>[2,3,4]

aList.append([3,4,5])   #append附加資料
print(aList[-1])         #查看最後一筆資料
>>>[3,4,5]
print(aList)             #查看串列資料
>>>[[1,2,3],[2,3,4],[3,4,5]]

print(aList.count([1,2,3]))        #資料是[1,2,3]的有一項
>>>1
print(aList.count(3))              #資料是3的有0項
>>>0

bList=[[1,1,1],[2,2,2]]   #extend, 將串列bList附加到串列aList後面
aList.extend(bList)
print(aList)           
>>>[[1,2,3],[2,3,4],[3,4,5],[1,1,1],[2,2,2]]

print(len(aList))        #目前串列aList共有5項資料
>>>5

del aList[4]             #刪除串列aList位置4的資料
print(aList)             #
>>>[[1,2,3],[2,3,4],[3,4,5],[1,1,1]]
del aList[3]            #刪除串列aList位置3的資料
print(aList)             #
>>>[[1,2,3],[2,3,4],[3,4,5]]

cList=aList+bList   #將串列aList 加上 串列 bList,成為串列 cList
print(cList)             #
>>>[[1,2,3],[2,3,4],[3,4,5],[1,1,1],[2,2,2]]

cList.reverse()       #reverse : 將串列內容反向排序       
print(cList)             #
>>>[[2,2,2],[1,1,1],[3,4,5],[2,3,4],[1,2,3]]

cList.sort()             #sort不指定參數,設設為增排序
print(cList)             #
>>>[[1,1,1],[1,2,3],[2,2,2],[2,3,4],[3,4,5]]

cList.sort(key=lambda aList:aList[2],reverse=True)
print(cList)             #以資料項中的第2項進行反向排序
>>>[[3,4,5],[2,3,4],[1,2,3],[2,2,2],[1,1,1]]

dList=[[9,9,9]]       #重銃三次 dList的內容
print(dList*3)           #
>>>[[9,9,9],[9,9,9],[9,9,9]]

print([1,2,3] in aList)  #aList中,是否有[1,2,3]這項資料
>>>True

print(cList.index([1,1,1]))  #[1,1,1]在cList的哪個位置?
>>>4

aList.insert(1,[2,2,2])    #在aList的位置1,insert插入[2,2,2]
print(aList)             #
>>>[[1,2,3],[2,2,2],[2,3,4],[3,4,5]]

print(aList[1])          #位置1的資料
>>>[2,2,2]
print(aList[1:3])        #位置1(含)到位置3(不含)的資料
>>>[[2,2,2],[2,3,4]]
print(aList[1:])         #位置1起的所有資料
>>>[[2,2,2],[2,3,4],[3,4,5]]

aList.pop()              #pop移除最後一項資料(預設為最後一個 index=-1)
print(aList)             #
>>>[[1,2,3],[2,2,2],[2,3,4]]
aList.pop(1)           #pop移除位置1的資料
print(aList)             #
>>>[[1,2,3],[2,3,4]]

aList.remove([2,3,4])   #remove移除[2,3,4]這個資料項目
print(aList)             #
>>>[[1,2,3],[2,2,2],[2,3,4]]

2019-07-17

在樹莓派 RaspBerry Pi 下,用Python 執行 CURL 指令,發送 LINE Notify即時通知

工作環境:
  • RaspBerry Pi 3 Mode B+
  • 作業系統:版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19)
  • 透過LINE接收其他網站服務通知,與網站服務連動完成後,LINE所提供的官方帳號「LINE Notify」將會傳送通知。不僅可與多個服務連動,也可透過LINE群組接收通知。
  • 現有可用的可連動服務
  • 當然也可以根據自己的需求,自行開發自己的服務需求
    • 取得通知服務的Token(發行存取權杖),必須先用註冊的電子郵件帳號 / 密碼,登入以下網址:
      https://notify-bot.line.me/my/
    • 點擊『發行權杖』
      輸入權杖名稱
      選取通知對象,可以是自己(1對1聊天接收LINE Notify的通知)或已參加的群組

    • 取得已發行的權杖
      若離開此頁面,將不會再顯示新發行的權杖。 離開頁面前,請先複製權杖。
    • 邀請好友中的『LINE Notify』加入所選取的通知群組(這個範例的群組是:★LuckyFullHouse★幸運滿屋★)。
  • 在樹莓派使用 cURL指令,傳送通知給Line Notify對應的通知對象
    • 甚麼是 cURL ?
      Curl 是一個在 Linux 上用來透過 HTTP Protocol 定義存取網路資源的協定,讓我們可以使用 client / server 模式來取得網路資源)下載和上傳檔案的指令(比起 wget 只能下載強大許多)。
    • curl的選用參數
      -X/--request [GET|POST|PUT|DELETE|PATCH]  使用指定的 http method 來發出 http request
      -H/--header  設定 request 裡所攜帶的 header
      -i/--include   在 output 顯示 response 的 header
      -d/--data       攜帶 HTTP POST Data
      -v/--verbose 輸出更多的訊息方便 debug
      -u/--user       攜帶使用者帳號、密碼
      -b/--cookie   攜帶 cookie(可以是參數或是檔案位置)
    • 使用 curl 傳送通知給Line Notify對應通知對象的指令格式:
      • 文字訊息內容:
        curl -i -X POST -H 'Authorization: Bearer <權杖碼>' -d 'message=<文字訊息內容>' https://notify-api.line.me/api/notify
      • 包含圖片的通知內容:
        curl -i -X POST -H 'Authorization: Bearer <權杖碼>' -d 'message=<文字訊息>' https://notify-api.line.me/api/notify -d 'stickerPackageId=1' -d ' stickerId=407'
      • stickerPackageId 及 stickerId 的代號,可以參閱:
        https://devdocs.line.me/files/sticker_list.pdf  
      • 如果沒得可以執行 curl 的主機,可以用online curl
        https://onlinecurl.com/  
      • LINE Notify的參考文件: https://notify-bot.line.me/doc/en/ 
使用Python搭配 curl 發送 Line Notify :
  • 參考程式碼:
    import os
    zToken='***TheTokenCode***'
    zMsg='2882國泰金目前股價=41.3'
    zCmd="curl -i -X POST -H "
    zCmd=zCmd+"'Authorization: Bearer " + zToken + "' "
    zCmd=zCmd+"-d 'message=" + zMsg + "' "
    zCmd=zCmd+"https://notify-api.line.me/api/notify"
    os.system(zCmd)
  • 執行結果:
    HTTP/1.1 200
    Server: nginx
    Date: Wed, 17 Jul 2019 09:08:31 GMT
    Content-Type: application/json;charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Keep-Alive: timeout=3
    X-RateLimit-Limit: 1000
    X-RateLimit-ImageLimit: 50
    X-RateLimit-Remaining: 998
    X-RateLimit-ImageRemaining: 50
    X-RateLimit-Reset: 1563357895

    {"status":200,"message":"ok"}
  • 發送的通知內容:

參考資料:

2019-07-16

在樹莓派 RaspBerry Pi 執行排程Python程式 (cron / crontab)

工作環境:

  • RaspBerry Pi 3 Mode B+
  • 作業系統:版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19)
樹莓派排程工作的編輯:
  1. 如何進入排程工作的編輯?
    (要用預設登入帳號pi的身分執行,所以不要sudo)
     crontab -e
  2. crontab -e的編輯器預設為nano:
    存檔:^O (ctrl-O)
    離開:^X (ctrl-X)
  3. 加入一個排程工作
    */5 * * * * python3 /home/pi/Programs/testSchedule.py > /dev/null 2>&1 
  4. 排程時間參數說明:
    (第幾分鐘 ) (幾點) (哪一天) (月份) (星期)
  5. 常用排程執行週期格式:
    • 每五分鐘執行一次:
       */5 * * * *
    • 每整點執行一次:
       0 * * * * 
    • 每天23:55執行一次:
      55 23 * * *
    • 每月1日00:05執行一次:
      5 0 1 * *
    • 每週一07:00執行一次:
      0 7 * * 1
    • 每小時的1,10,21,32,43,55
      "1,10,21,32,43,55" * * * *
    • 每月的1-3日06:10個執行一次
      10 6 1-3 * *
  6. 排程工作內容編輯後,必須重新啟動排程服務
    sudo service cron restart
用於排程的Python Script程式,須注意的事項:
  1. 用於排程的Python script程式,第一行(shebang line, #! 程式檔名)需指定,這個script要用哪個程式來執行,依照作業環境的不同,區分如下:
    • Windows:#! python3
    • OS X:#! /usr/bin/env python3
    • Linux:#! /usr/bin/python3
    • 其他Linux常見的shebang
      • #!/bin/sh→使用 sh(Bourne shell) 或其它相容 shell 執行指令碼
      • #!/bin/csh→使用 csh(C shell) 執行
      • #!/usr/bin/perl -w→使用帶警告的 Perl 執行
      • #!/usr/bin/python -O→使用具有程式碼最佳化的 Python 執行
      • #!/usr/bin/php→使用 PHP 的命令列直譯器執行
  2. 確認Python script程式的執行權限:
    • 將 .py 程式,放在 預設使用者 pi 的 home folder
    • 授予執行權限:chmod +x thePythonScript.py
    • python script排程時間指定的範例:
      每逢1月2日的03:04am 執行
      4 3 2 1 8 /home/pi/schedulePython.py

參考資料:

在樹莓派 RaspBerry Pi 使用 ssmtp + google gmail 以Python發送ASCII編碼的電子郵件

工作環境:
  • RaspBerry Pi 3 Mode B+
  • 作業系統:版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19)
建立郵件發送的需求及Python程式碼:

  1. 要有一個Google Gmail的帳號。
    (這個郵件可能是:xxx.yy@gmail.com常見的Gmail格式,也可能是一個使用G suite的自有郵件域名的郵件格式:abc@xx.yy.zz。以下的程式碼測試使用G suite自有域名郵件OK,用abc@xx.yy.zz代表,以此帳號從樹莓派發信至Gmail)
  2. 發信的Gmail帳號,須透過Google 帳號管理,將『低安全性應用程式的存取權限』設為啟用。
    https://www.google.com/settings/security/lesssecureapps 或
    https://myaccount.google.com/lesssecureapps
  3. 在樹莓派上安裝ssmtp
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install ssmtp
    ( sSMTP - Simple SMTP
    sSMTP is a simple MTA to deliver mail from a computer to a mail hub (SMTP server). sSMTP is simple and lightweight, there are no daemons or anything hogging up CPU; Just sSMTP. Unlike Exim4, sSMTP does not receive mail, expand aliases, or manage a queue. https://wiki.debian.org/sSMTP )
  4. 編輯 /etc/ssmtp/ssmtp.conf
    sudo leafpad /etc/ssmtp/ssmtp.conf
    修改為如下設定:
    # 接收系統郵件的 Email帳號(postmaster)
    root=abc.xyz@gmail.com
    # 使用 GMail 的 MTA 送信
    mailhub=smtp.gmail.com:587
    # 設定主機名稱,預設為raspberrypi
    hostname=raspberrypi
    # 發信的Gmail帳號與密碼
    AuthUser=abc@xx.yy.zz
    AuthPass=GmailPassword
    # 啟用安全加密連線
    UseSTARTTLS=YES
    UseTLS=YES
    # 輸出除錯資訊
    Debug=YES
  5. Python測試程式碼
    import smtplib
    zUser = 'abc@xx.yy.zz'
    zPass = 'GmailPassword'
    zTo = 'toAdd@gmail.com'
    zFrom = zUser
    zSubject = 'Test sendmail by Gmail + ssmtp using Python'
    zHeader = 'To: ' + zTo + '\n' + 'From: ' + zFrom + '\n' + 'Subject: ' + zSubject
    zBody = 'Body : Test sendmail by Gmail + ssmtp using Python'
    oSmtp = smtplib.SMTP('smtp.gmail.com',587)
    oSmtp.starttls()
    oSmtp.ehlo()
    oSmtp.login(zUser, zPass)
    oSmtp.sendmail(zFrom, zTo, zHeader + '\n\n' + zBody)
    oSmtp.quit()

  6. 確認toAdd@gmail.com已收到郵件,
    確認已存放至abc@xx.yy.zz 的寄件備份

參考資料:

2019-07-15

樹莓派 RaspBerry Pi 安裝文字瀏覽器 (Text Mode Browser) Lynx

  • 要安裝Lynx的工作環境
    • RaspBerry Pi 3 Mode B+
    • 作業系統:版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19)
  • 安裝步驟:
    1. 更新軟體源,獲得最新的軟體列表:
      sudo apt-get update
      或 sudo apt update
    2. 升級已安裝的軟體:
      sudo apt-get upgrade
      或 sudo apt upgrade
    3. 安裝 lynx:
      sudo apt install lynx
      (因為sudo apt-get install lynx,找不到可用的lynx可安裝,但改用sudo apt install lynx,就可以順利安裝了 ...)

  • 修改軟體源伺服器。樹莓派官方的軟體來源網站,常會遇到下載速度很慢的情況,可以參考樹莓派官方網站所提供的mirror伺服器,修改/etc/apt/sources.list的更新來源網址:
  • Raspbian Repository Mirrors:https://www.raspbian.org/RaspbianMirrors
    更新來源改為:
    deb http://free.nchc.org.tw/raspbian/raspbian buster main contrib non-free rpi
    更新來源說明:
    deb : ( dpkg格式套件庫 )
    http://free.nchc.org.tw/raspbian/raspbian : ( 協定://伺服器的位址 )
    buster : ( 發行版本代號 )
    main contrib non-free rpi : ( 啟用[選擇Debian鏡射的main contrib non-free rpi]組成元件 )
  • 編輯器修改來源後要有存檔的權限,所以要sudo開啟編輯器,例如:
    sudo leafpad /etc/apt/sources.list 或 sudo nano /etc/apt/sources.list ...
  • 之後如果要移除Lynx這個軟體
    sudo apt purge lynx

2019-07-14

樹莓派 RaspBerry Pi 中文輸入法 (新酷音輸入法)

  1. 目前樹莓派的工作環境:
    • RaspBerry Pi 3 Mode B+
    • 作業系統:版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19)
  2. 開啟LX終端機
  3. 安裝SCIM輸入法
    sudo apt-get install scim scim-tables-zh


  4. 安裝新酷音輸入法(scim-chewing)
    sudo apt-get install scim-chewing


  5. 查看SCIM輸入法的切換查看及設定
    (泛用智慧型輸入法平台:圖形介面設定工具)
    樹莓派LOGO→偏好設定→SCIM輸入法框架

    (功能切換的快速鍵)
    中英文切換:Control + Space

    (循環切換下一個輸入法的設定)
    (1).選取:放開
    (2).按一下『...』,出現『捕捉按鍵』小視窗

    (3).按下「左邊Shift」,『捕捉按鍵』小視窗自動關閉
    (4).系統會自動勾選「Shift」,文字方塊內出現「Shift_L」

    (5).按下「+」,完成組合建「Shift+Shift_L+KeyRelease」的組合

    (6).完成設定。重新啟動,才能讓設定生效。
  6. 選用中文輸入法
    樹莓派LOGO→偏好設定→SCIM輸入法框架
    輸入法引擎→全域設定
    簡體中文輸入法,全部取消
    繁體中文輸入法,只保留新酷音
    其他語文,保留英文/歐洲語文,移除內碼輸入
  7. 在VNC遠端操作的模式下,如果無法以Control + Space切換至中文輸入法,可以先開啟所要使用的軟體、編輯器,點選鍵盤圖示,選擇繁體中文,即可進入中文輸入模式。
    進入新酷音輸入法後,就可以用「Shift」切換中文、英文的輸入。



2019-07-13

安裝樹莓派RaspBerry Pi的作業系統

在樹莓派的官網(https://www.raspberrypi.org/),有提供許多的很多可供安裝在樹莓派上的作業系統,在Downloads頁面,官方版本Raspbian ( https://www.raspberrypi.org/downloads/raspbian/ )、官方建議的簡易安裝版NOOBS (New Out Of the Box Software) ( https://www.raspberrypi.org/downloads/noobs/ ),還有以下的版本可供選擇:
  1. RaspberryPi Desktop : https://www.raspberrypi.org/downloads/raspberry-pi-desktop/ 
  2. Ubuntu MATE : https://ubuntu-mate.org/raspberry-pi/ 
  3. Ubuntu Core : https://www.ubuntu.com/download/iot/raspberry-pi-2-3-core 
  4. Ubuntu Server : https://www.ubuntu.com/download/iot/raspberry-pi-2-3 
  5. Windows 10 IoT Core : https://docs.microsoft.com/en-us/windows/iot-core/downloads 
  6. OSMC(Open Source Media Centre) : https://osmc.tv/download/ 
  7. LibreELEC : http://libreelec.tv/ 
  8. PiNet : http://pinet.org.uk/ 
  9. RISC OS : https://www.riscosopen.org/content/downloads/raspberry-pi 
  10. Weather Station : http://downloads.raspberrypi.org/weather_station/images/weather_station-2018-01-14/ 
  11. IchigoJam RPi : https://ichigojam.github.io/RPi/ 
這次安裝選擇官方版本Raspbian:
(預計安裝在 RaspBerry Pi 3 Model B+ )
  1. 目前最新的版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19),可以有三個選項:
  2. 這次選擇Full版本:2019-06-20-raspbian-buster-full.zip
    https://downloads.raspberrypi.org/raspbian/images/raspbian-2019-06-24/2019-06-20-raspbian-buster.zip
    解壓縮取得映像檔:2019-06-20-raspbian-buster-full.img 
  3. 將影像檔寫到TF記憶卡。
    一般都建議用Win32DiskImager ( A Windows tool for writing images to USB sticks or SD/CF cards, https://sourceforge.net/projects/win32diskimager/files/ ) 將 2019-06-20-raspbian-buster-full.img 寫入TF記憶卡,我習慣用 rufus ( https://rufus.ie/ , 官網有提供可攜式portable版本 ),寫入的方式如下:
    1. 選取記憶卡的所在位置:
      確認要將映檔燒錄進記憶卡的磁碟代號位置,選錯了原記憶卡的磁碟代號,燒錄後資料就不見了...

    2. 選擇開機模式:
      選擇『磁碟或ISO映像檔(請選擇)』,接著用『選擇』,選取映像檔的所在位置。如果是舊版Rufus,要勾選『使用映像檔建立開機片』,再選取映像檔為:DD映像檔,並選取映像檔位置。

    3. 執行燒錄
      確認以上的選項正確無誤,即可『執行』燒錄。完成燒錄後,就可以將記憶卡安裝置樹莓派。

  4. 樹莓派首次開機的相關事項:
    1. 螢幕:使用HDMI介面
    2. 鍵盤、滑鼠:使用USB介面,也可以用無線的
    3. 預設的帳號是pi, 密碼是raspberry,建議更改一下密碼
    4. 網路設定:IP資料,或無線網路的SSID及密碼,目前找不到直接輸入隱藏SSID的方式,所要有可以搜尋得到的SSID。
    5. 設定中文語系(在地化)。
    6. 啟用SSH及VNC,方便在沒有使用螢幕時,可以遠端遙控。
      樹莓派LOGO→偏好設定→RaspBerry Pi設定
      『介面』頁籤:啟用SSH及VNC

      螢幕的解析度必須指定,不可以使用Default預設值由系統根據連接的螢幕解析度,來決定解析度,必須選取一個解析度來當VNC連線的解析度。設定方式如下:
      樹莓派LOGO→偏好設定→RaspBerry Pi設定
      『系統』頁籤→Resolution→選一個Default以外的解析度來當VNC連線解析度
      (如果沒有修改解析度為Default以外的解析度,樹莓派未連接螢幕的情況下,是無法順利啟動VNC server來接受VNC client的連線)

  5. 遠端連線樹莓派:
    1. Win10有SSH指令,可以使用以下方式遠端以文字模式登入樹莓派。
      登入:SSH pi@樹莓派的IP
      登出:exit

    2. 樹莓派的VNC版本是RealVNC,可以用pi這個帳號密碼進行VNC連線。
      VNC的chat / transfer files ... 等功能,在RealVNC的server 及client間,都有提供相關的功能。