338,120 total views, 302 views today

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(),那是全雙工用的功能

191 total views, 3 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, 1 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, 5 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 中斷

202 total views, no views today

CentOS 7 – 在 CentOS7 安裝 Python3.8.4

參考

安裝

事前準備

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

模組安裝

264 total views, 1 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, 1 views today

伏地挺身 – 100 下 100 天

結束感想

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

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

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

126 total views, 2 views today

CentOS 7 – 使用 Liberoffice 將 Office 轉換 PDF

參考

安裝、中文化設定

檢查語系設定

套用

轉換

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

從網頁執行

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

Windows CLI

147 total views, 2 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 為載體的資料儲存方式)

488 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, 2 views today