Python – RS485 + Modbus UART 半雙工切換傳送、接收教學

RS485

雙線、半雙工,如果使用的是 TTL, UART 這類的訊號轉換器,需要自己控制傳送、接收切換,切換的好不好是關鍵

Modbus

RS485 大多使用 Modbus RTU,格式如下

Name Length (bits) Function
Start 28 At least 3½ character times of silence (mark condition)
Address 8 Station address
Function 8 Indicates the function code; e.g., read coils/holding registers
Data n × 8 Data + length will be filled depending on the message type
CRC 16 Cyclic redundancy check
End 28 At least 3½ character times of silence between frames

CRC 參考資源

Modbus 通訊第一個程式門檻就是計算 CRC,這裡有大大寫好的可以直接套用

原始範例

list 陣列版

Python 使用 list 資料型態程式會比較靈活,因此實務上使用都是直接使用 list

完整的 Modbus 範例

RS485 為半雙工通訊,讀取、寫入必須自己根據字元數計算後控制模式,時序控制非常重要,不能使用 .flush(),那是全雙工用的功能

192 total views, 1 views today

MariaDB – 斷電資料庫無法啟動修復過程

MariaDB 版本 10.3.25 其他版本相關指令、操作不保證成功

當遇到 MariaDB 資料庫毀損時,Hoyo 使用了以下步驟恢復運作,此方法使用的是重建 mysql 資料庫的方式,使用者的資料庫必須有備份,等重建完成之後再恢復使用者帳號以及匯入資料庫備份

這個方法可行是可行,不過 mysql_secure_installation 這個指令需要人工干涉,所以要將流程自動化還需要調整

以下自動化參考了 /usr/bin/mysql_secure_installation 內作法

指定 mysql 執行時帳號、密碼

.my.cnf

資料庫整理

刪除匿名帳號以及 test 資料庫,接下來就是自己的使用者帳號以及資料庫

fix.sql

重建及匯入

fix.sh

  1. 將資料庫停止服務
  2. 刪除整個資料庫目錄
  3. 執行 mysql_install_db 不能加參數,Hoyo 測試的結果是增加參數就無法正常執行
  4. 啟動資料庫服務
  5. 修改 root 密碼
  6. 將剛剛編輯的 fix.sql 匯入
  7. 解壓縮原先備份資料庫
  8. 將備份資料庫匯入

308 total views, no views today

使用 SSH 當作跳板瀏覽網頁

參考

Linux 電腦普遍沒有 UI 顯示而採用 SSH 這類的遠端管理方式,這篇介紹的是連到 SSH Server 後以此為跳台瀏覽網頁,說不清楚請看以下架構圖


(https://www.tunnelsup.com/how-to-create-ssh-tunnels/)

PuTTY

Session 一樣寫入連線主機的 IP & Port

Conection → SSH → Tunnels 增加本機常駐的 port ,Destination 選擇 Dynamic

plink (a command-line interface to the PuTTY back ends)

如果使用 plink 就可以使用指令執行,不需要開啟 GUI

FoxyProxy

為了讓瀏覽器可以快速切換 Proxy 環境或是增加可切換功能,可以使用 FoxyProxy 外掛套件,Chrom & FireFox 皆支援,basic 版本以 Hoyo 的需求就夠用了

手動設定勾選 SOCKS proxy,address : localhost,port 9005,也就是上面 -D 參數設定數字

使用時,點擊 FoxyProxy 圖示進行切換至 Use proxy Default for all URLs 即可使用 ssh tunnel 通道

344 total views, no views today

Linux – ZeroConfNetworking

Windows 設定 DHCP 時,沒有 DHCP 服務時會自己產生一個 169.254.x.x 的 IP,Linux 遇到沒有 DHCP 服務除了開機不斷重試浪費時間之外,失敗後什麼 IP 都沒有,導致臨時要使用 IP 連線都沒有辦法。

Linux 該如何在使用 DHCP 卻沒有 DHCP 分配 IP 的情況還可以像 Windows 產生一組 IP ?

參考資源

Windows 使用的是 Zero-configuration networking (zeroconf) 技術, RFC3927 ,Apple Bonjour 也是相同的技術

安裝

Hoyo 在 DietPi 上測試時是裝 avahi-autoipd,網路上大多是教安裝 avahi-daemon,實際裝過不知道用途為何

avahi-autoipd 安裝完就完成了,預設設定有一些問題不過問題不大可以正常使用,Hoyo 是打算就這樣使用

實際使用

沒有 DHCP

接上網路線或是 DHCP 恢復後

eth0:avahi 網路會消失

設定檔

/etc/dhcp/dhclient-enter-hooks.d/avahi-autoipd

問題

登入時需要 Ctrl + C 中斷

203 total views, no views today

CentOS 7 – 在 CentOS7 安裝 Python3.8.4

參考

安裝

事前準備

如果有安裝舊版先移除,sqlite 要先安裝,否則 python3 裝完還需要重新 make 才能添加

模組安裝

264 total views, no views today

Hoyo 教你串 OAuth – Google 登入

JavaScript 登入

參考資源

使用 JavaScript 的好處是程式處理的份量較少,壞處是容易受瀏覽器影響

OAuth 2.0 用戶端 ID

從程式需求看來需要一個 client_id 也就是 OAuth 用戶端 ID,請按照路徑:建立憑證 → OAuth 用戶端 ID

完整程式範例

頁面載入時必須先執行 startApp() 進行登入按鈕初始化,然後指定的 id (GoogleLogin) 就會點擊才有功能

PHP 後端登入

參考資源

使用後台處理

流程

  1. 註冊 Google 會員帳號
  2. 進入 https://console.cloud.google.com/
  3. 登入連結 https://accounts.google.com/o/oauth2/auth?
  4. 使用者同意後取得 code
  5. 拿 code 去換 access_token, https://accounts.google.com/o/oauth2/token , Google 回傳的是 json 格式
  6. 將 json decode 後,使用 https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= 進行解讀

 

 

和 Facebook 不同的是,Google Plus 在用 code 換 access_token 時,使用 HTTP POST 丟值過去

 

 

148 total views, no views today

伏地挺身 – 100 下 100 天

結束感想

漫長的 100 天總算完成了,總數超過 10000 多一點點,中間無法執行缺的次數都有另外補上。

這種長時間的運動企劃最怕的就是受傷,後期右手腕有點受傷,撐著時用力不當就會痛,就只能將重心偏左來規避。

做了一萬次伏地挺身才對這個動作有一些理解,難怪健身需要教練,重點就是調整動作有效率也不會運動傷害,最後也不能做拍手伏地挺身,做到兩萬次的時候再試試看好了

126 total views, no views today

CentOS 7 – 使用 Liberoffice 將 Office 轉換 PDF

參考

安裝、中文化設定

檢查語系設定

套用

轉換

首先依據來源文件安裝對應程式,例如試算表 calc

從網頁執行

除了需要設定一個網頁 apache 可以寫入的目錄外,還要注意 SELinux 是否已經關閉

Windows CLI

147 total views, no views today

Linux – SD 壽命寫入控制

為了控制 SD 卡寫入次數限制達到最佳使用壽命,所以 Hoyo 先將自己開發的程式另外一個分割區,再把原系統分割區設定為唯讀,只要確定程式分割區所有的寫入動作皆在預想之下,如此就可以達到目的。

得知最近有被寫入的檔案

使用前記得校時

找出最近一個小時內有被寫入的檔案

  • -mtime 檔案有修改,單位:天
  • -mmin 檔案有修改,單位:分鐘

修正後

記憶體檔案

為什麼要排除 /proc /run /sys ? 首先可以看一下 df 資訊

可以知道系統預設掛載了很多 tmpfs 也就是使用記憶體的路徑,除了記憶體之外也有很多虛擬的檔案資訊,例如 /proc /sys ,這些路徑當然也是要排除

資料庫

原先使用 SQLite,使用前先將檔案複製到記憶體再從記憶體存取,當需要異動資料時再從記憶體複製到 SD 卡,這樣從邏輯也是控制了寫入,不過後來遇到頻繁遇到資料庫毀損以及最嚴重的 database disk image is malformed 問題,就改成使用 JSON 當作資料的儲存載體,當然需要犧牲一些系統功能,不過在這種應用穩定以及將問題可控制才是最重要的

(後來找到了 TinyDB 這種好像也是使用 JSON 為載體的資料儲存方式)

489 total views, 1 views today

大量 3306 TIME_WAIT 的邪道解法

不知道會不會衍生其他問題,有後續狀況再更新

出現大量的 TIME_WAIT 大概長這樣

通常 Google 找到的資料是這樣

會噴 cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory 錯誤,而且問題沒有改善,可以得知關鍵就是 tcp_tw_recycle 這個參數,只好繼續找答案

  • sysctl -p 設定啟用

418 total views, no views today