透過NB-IoT電信模組取得NTP網路時間,以Python為例
我在「透過NB-IoT電信模組發送MQTT訊息」說到有些 NB-IoT 模組只提供最基本的 TCP/UDP 封包傳輸指令,不提供 MQTT 等應用協定的傳輸指令。大部份 NB-IoT 模組的也沒有 NTP 指令 (查詢網路時間) 。
本文說明在這種情形之下,取得網路時間的經驗。
我在「透過NB-IoT電信模組發送MQTT訊息」說到有些 NB-IoT 模組只提供最基本的 TCP/UDP 封包傳輸指令,不提供 MQTT 等應用協定的傳輸指令。大部份 NB-IoT 模組的也沒有 NTP 指令 (查詢網路時間) 。
本文說明在這種情形之下,取得網路時間的經驗。
NB-IoT 或 LTE-M 都是 3GPP 電信組織針對 IoT 應用制訂的低功耗廣域無線電技術(LPWAN)。NB-IoT 資料透過 LTE/4G 電信網路傳遞。簡單說就是和 LTE/4G 共用基地台。你的手機收得到 LTE/4G 訊號的地方,你的 IoT 裝置就能使用 NB-IoT 電信模組發送資料。而 NB-IoT 模組也可以直接插一般 LTE/4G SIM 卡使用,只是資費比 NB-IoT 貴。
我在前公司接觸過兩家廠商的 NB-IoT 模組,一為 u-blox 的 SARA-N/SARA-R4系列,另一為 SIMCOM 的 SIM7000系列。因為是公司產品,不是我的著作權,所以不能公開程式碼。但可以說使用經驗,以及如何透過 NB-IoT 模組的 AT 指令發送原始的 MQTT 封包。
.NET 平台可以使用套件 System.Net.Mqtt 設計 MQTT 用戶端程式。從套件的名稱空間可知,這是 .NET 平台正式的 MQTT 套件。由微軟旗下的 xamarin 團隊負責開發,專案托管於 System.Net.Mqtt 專案。
MQTT 概觀請看 一、在 Debian 8 安裝 mosquitto。
本文範例使用 C# 語言撰寫。並且說明三點使用須知:
朋友前兩天問了個 C# 語法問題:
問個蠢問題
`public static byte[] xxxxxxxx(this short x)`
這種場合this的用意是甚麼?
第一眼,我的想法是「很像 Python 的語法」。
事實上,打從 C++ 開始,我用過的 OOPL 的 method call ,其隱含的意義都是 method(this)
。
表面上,我們寫成 個體.method()
,但實際上,編譯器是弄成 method(個體)
。「個體」 是函數方法隱含的第一個參數。因為這樣,這個函數才知道操作對象是哪個東西。
CommonGateway 是我多年前設計的迷你框架。我最初用它實作 RESTful API 項目,並沒有放太多用於網頁設計的內容。最近兩年用它設計一些網站專案。為了方便工作,增加了兩項關於網頁設計的功能:
多年前,我寫了一個 PHP 框架 CommonGateway。我一直都用這個迷你框架實作 RESTful API 。只不過,以往都是用在區網內專案,或者 OpenData/OpenAPI 的案子,所以一直都沒想過用戶認證授權的功能。
直到去年,我接了一個案子。案子要求用戶經認證授權後才能存取 API。所以我參考之前使用 ASP.NET Core 的經驗,為 CommonGateway 增加了一個 @authorize 的註記,用於註記控制項或控制項方法是否要求用戶授權。
本文說明以 CommonGateway 框架設計 RESTful API 或網站時,如何使用認證授權功能。
我從過去用到 Promise 的 Web 前端開發案中,挑出兩個具有泛用性的應用函數,作為實際範例。若是不了解 Promise 基礎觀念,請先看「ECMAScript/JavaScript 6 - Promise 學習六步 」。
Promise 的應用函數:
Promise 是 ECMAScript 6 訂出的語言規範,用於延遲運算 (deferring) 的場合。 正式說明太難解釋了,所以我根據這兩年的使用經驗,決定換一種比較白話的講法。 ECMAScript 6 的 Promise 就是一種跳躍語法(goto),但不會執行到它這一行就立即跳躍,而是先上個標記,延至程式區塊結束才跳躍。 Promise 是延遲式跳躍。
雖然現在年輕人可能從來沒用過跳躍(goto) ,但應該不妨礙各位理解跳躍是什麼。 就連 JavaScript 也保留了一部份跳躍語法,那就是 label。
本文將按下列六步,逐步說明 Promise 的使用概念與實例:
我只整理數值、序號、文字和日期這四種類型。至於 BINARY, BIT, MONEY, 地理位置, XML 等通用性太低的類型,則不使用。
下列是個人使用的資料庫系統,按個人喜好程度排列:
近日開始放置 Google AdSense 廣告。在文章頂端以及結尾處,各放一個廣告。
文章的標籤也做了調整,現在標籤是用 google adsense 搜尋。
希望可以彌補我的 domain name 註冊費。
《關於我轉生變成史萊姆這檔事》是一套日本輕小說,並有動畫與漫畫改編。
故事中有個由矮人所建立的武裝大國德瓦崗,由於矮人擅長礦業和工藝品製造,所以矮人王國所鑄造的矮人金幣純度足,還有特殊魔法附上的防偽功能,這功能同時確保金幣外觀長久不損壞。世界諸國自古以來就以矮人金幣作為國際上貿易使用的貨幣。
主角建立的新興國家,因為主角推導了許多新興事業和技術,財富快速增長,漸漸成為世界的經濟中心。由於市面上流通的金幣不敷使用,主角想要自行鑄造矮人金幣,但卻被臣子們否決。說是有防偽設計,私鑄的不被市場接受。主角只好繼續收集矮人金幣。
作者在這段劇情中,打算描寫金幣數量和貿易戰之類的劇情。
我覺得作者自己都不懂貨幣史。他把「矮人金幣」當「美金」,用現代貨幣戰爭內容在寫這些劇情。
No.3178179
古代不論官話還是方言,都和書面文字對不起來,語言和文字是分開的
寫文章有專門文法,大家都學過,叫做文言文
所以之後才有白話文運動
2022-10-07 更新內容:
繼「行列30字碼表添加一級簡碼」之後,我還是想把二級簡碼合併進來。但因為二級簡碼和特別碼重複衝突的狀況不可避免,我決定以特別碼為優先。所以合併進來的二級簡碼不保證每個字的位置都符合規定。
合併結果中,有九成以上的二級簡碼字,會出現在候選字清單的正確位置上。不到一成的重複字,位置有所挪動。
另外,我在處理二級簡碼過程中,發現來源的 array30.txt 中有錯誤編碼,已刪除那些錯誤。
我手上有一份磁碟映像 (disk image),它是從 SD 記憶卡或硬碟直接 dd 複製而來。 如果我需要修改磁碟映像的檔案系統內某個檔案的內容,我該怎麼做?
最笨的方法是把磁碟映像寫回記憶卡或硬碟,修改內容後,再重新做一個磁碟映像。 最好的方法則是利用 Linux 的 loop 設備 (loop device) 功能,把磁碟映像當成一個磁碟設備,直接掛載起來。 基本步驟如下:
同理,你也能直接編輯磁碟映像的分割區。
我使用 Debian 虛擬機的習慣是啟動後保持在文字環境。先登入文字終端機環境,再視需要執行 startx 進入桌面環境。
但我安裝 Debian 10 後,執行 startx 會失敗。依程式訊息查看 ~/.local/share/xorg/Xorg.0.log ,錯誤重點如下:
Fatal server error:
[ ...] (EE) xf86OpenConsole: Cannot not open virtual console ? (Permission denied)
解法是編輯 /etc/X11/Xwrapper.config ,加入一行:
needs_root_rights=yes
編輯 Xwrapper.config 時,你會看到檔案內容中提示更動此檔後,必須執行dpkg-reconfigure xserver-xorg-legacy 變更 X 服務組態。存檔後照做。一般用戶就能執行 startx 了。
透過 dm (Desktop Manager) 登入桌面環境的使用者,不必動上面的東西。
自從 Windows 10 增加 Windows 子系統 Linux 版 (WSL, Windows Subsystem Linux) 功能後,我已經很長一段時間都在用 WSL 跑 Debian 了。 這次要不是想裝一套純 Debian 10 虛擬機,還不知道 VirtualBox 6 現在這麼多毛病。 我不清楚是不是因為虛擬化功能愈來愈複雜,才導致 VirtualBox 6 的適應性變差。
host 系統: Windows 10 Home 64bit.
fcitx-table-array30 所採用的字根表中,包含行列30特別碼以及1996年新增特別碼。但不含一、二級簡碼和 w 特殊符號。
一級簡碼的使用率實在很高,沒它很難用。所以我將以前設計 TouchIME 時整理的行列30簡碼表拿出來,與 fcitx-table-array30 的字根合併。 All the data file is now in public domain.
不過我在合併過程中,發現一些問題,所以我最後只加入一級簡碼,放棄二級簡碼。
我正在試驗「添加二級簡碼」。 但因有一部份二級簡碼字被迫挪動位置,所以我可能不會把它當正式結果。(2022-10-07更新: 加入二級簡碼很順手,建議使用)
我更新了 Debian 安裝筆記中,關於 fcitx 的說明內容。 因為 hime 輸入法引擎在 KDE 的某些軟體中,看不到選字區。所以改用 fcitx 輸入法引擎。 同時發現筆記中的插圖連結失效,順便修正。
一共更新以下三篇:
廢話不多說,我是 Android 手機用戶,但我不想用「疾管家官方 LINE 帳號」這個方法通報。實在不夠快。
我一向都用「趨勢科技 QR Code 掃描器」。 「安全、免費、零廣告,QR 碼和二維條碼掃描」。真的沒廣告,也不用網路。
這個 App 也可以 5 步驟完成簡訊實聯制,第二次之後只要 3 步驟。
備註:微軟的 Microsoft Lens 或 Google 的 Google Lens 這兩個 App 一樣免費、無廣告。同樣5步驟完成實聯制。只是它們太肥了,啟動慢。