大量 3306 TIME_WAIT 的邪道解法

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

出現大量的 TIME_WAIT 大概長這樣

通常 Google 找到的資料是這樣

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

207 total views, 4 views today

需量預測

參考

公式

  • P = 時間 t 時之累計電力量
  • Δt = 標本時間
  • ΔP = 標本時間內增加電力增加量
  • t = 開始測量時間

範例

假設有一個穩定的 100kW 負載,於某需量區間 4 分量測,取前一分鐘為標本時間

100kW = 100 度(kWh) ,需量區間  = 100 / 4 = 25 (每 15 分鐘一個結算)

每分鐘電度約等於 25 /15 = 1.667

P = 1.667 * 4 = 6.668

Δt =1

ΔP = 1.667

6.668 + (1.667/1) * (15-4)

= 6.668 + (1.667) * 11

= 6.668 + 18.337

= 25.005 kWh * 4 = 100.02 kW

由此得知此需量預測公式是準確的

LaTeX

80 total views, 2 views today

PHP 7 – OpCache

結論

  1. 主要作用在提昇 PHP 執行效能,以及簡易的程式加密
  2. 使用 OpCode 加密可以保護程式邏輯,不能保護「程式內的字串」

php.ini

  • opcache.enable=1 ; 啟用 OpCache
  • opcache.save_comments=0 ; 關閉 comments
  • opcache.file_cache=/opt/Server/OpCache ; 設定 OpCache Cache 路徑
  • opcache.validate_timestamps=0 ; 關閉檔案更新檢查,配合下面的程式保護
  • opcache.revalidate_freq=0 ; 檔案更新檢查時間
  • opcache.max_accelerated_files=4000 ; 最大 cache 檔案數,需要大於總 .php 數量

重新啟動 apache2 服務

保護程式作法

先將所有 .php 檔案編譯成 OpCache 之後就可以將 .php 原始碼檔案清空或是填入不相關內容

使用 PHP 官網範例稍加修改,將 require_once 替換為 opcache_compile_file(),官網有針對兩者之間的差異說明,請根據實際情況選用

在網路根目錄執行以下執行即可將所有 .php 檔案內容清空

更新

因為使用了禁用時間戳檢查,以及將原始碼清空,因此更新時,必須由開發主機提供 .php.bin 檔,OpCache 檔案皆是 www-data 使用者權限,可以使用 tar 打包及還原

.php.bin 檔案更新後,必須使用 opcache_reset() 或 opcache_invalidate() 來啟用新的 .php.bin 檔

計算 php 檔案數量

OpCache 長相

節錄內容

Preload

PHP 7.4 增加了 opcache.preload & opcache.preload_user 參數,因為原始碼後來會清空,因此不適用此參數

225 total views, no views today

MQTT – 使用 Let’s Encrypt SSL + EMQ X 建構 SSL WebSocket

原理

  • 網站的證書和 MQTT (WebSocket) 的證書必須一致
  • Let’s Encrypt 證書檔案必須讓 emqx 帳號有讀取權限

編輯emqx.conf

  • 請自行替換 {web url} 為你的網域
  • .ssl. 是 MQTT使用;.wss. 是 WebSocket 使用

Let’s Encrypt 證書檔案權限

要讓 emqx 可以讀取 Let’s Encrypt 產生的證書,最大的問題就是目錄和檔案的讀取權限。

預設的權限大多是只有 root 使用者可以讀,最方便的方式是將 /etc/letsencrypt 的 archive & live 的其他人讀取開放

可以使用一般使用者讀取證書檔案測試,如果沒問題就可以重啟 emqx 服務

HTML

在使用上和沒有 SSL 差別不到,注意 mqtt.connect() 的通訊協定是 wss:// 以及 port 的設定即可。

網路上可能會找到有關 MQTT.js 證書相關的設定,不過那些設定並沒有什麼卵用,因為當網站是 https:// 時瀏覽器就會檢查如果是同網站就需要使用相同證書,不同網站就會發生跨網站的相關錯誤,當然現在也是不能和 http 混用

在 F12 console 下如果沒有看到錯誤恭喜已經成功了。

157 total views, no views today

WT32-ETH01 – Web Bluetooth

使用 demo 參照 sample 互相驗證較容易搞懂,UUID 必須使用完整格式

運作條件

  1. 網頁必須 HTTPS
  2. 手機瀏覽器版本必須符合 Browser compatibility

範例:使用 Web Bluetooth 控制 WT32-ETH01 上的 LED

HTML

Arduino

演示

配對時,什麼可以選擇的時機很迷,控制的 LED 是右側的綠色 LED

問題

BLE notify 最長只能 20 bytes

140 total views, no views today

WT32-ETH01 – MicroPython 開發環境

準備開發環境

  1. 安裝 Python3
  2. 安裝 pip
  3. 下載 uPyCraft
  4. 測試你的第一支 LED 閃爍程式

考慮到需要 LAN 因此下載了 esp32-idf3-20210202-v1.14.bin 這個 firmware

通訊測試確認

可以使用 PuTTY 這類可以使用 COM 通訊軟體,使用 115200

Thonny IDE 開發環境

選擇 Thonny 不選 uPyCraft 是因為 uPyCraft 簡單過頭了

工具 → 選項 → 直譯器

安裝或更新韌體

燒錄時請參考「ESP – ESP-12F & ESP8266 & ESP-32 燒錄指南」將 IO0 接地,EN 短接地

LED for WT32 (其他的 ESP 差別只在於預設的LED 腳位不同)

參考資源

159 total views, no views today

ESP – ESP-12F & ESP8266 & ESP-32 燒錄指南

準備工具

根據晶片以及開發板情況不同,可能需要 3.3V 供電的 USB to TTL,另一種 4 pin 就只提供 5V 供電,使用上要注意

3.3V USB to TTL

DataSheet

Hoyo 使用的 ESP32 模組是包含 Ethernet 的 WT32-ETH01 ,沒有內建 USB to TTL,ESP8266 則是產品化因此無法使用 NodeMCU 這類有內建 USB to TTL 的開發板。

有關如何燒錄上傳 DataSheet 其實都有說明,網路上 Google 的資料大多數都是不合用,例如使用了多餘的腳位控制,或是需要額外的控制電路,有可能是使用場景不同導致。

至少看 Hoyo 的資料可以保障可執行以及線路都是最精簡的

ESP-12F (ESP8266MOD) 燒錄硬體準備

  1. 3.3V 供電
  2. 接地
  3. RX -> TX
  4. TX -> RX
  5. IO0 -> 接地
  6. TTL USB 接上 USB
  7. RST 短接地
  8. 開始燒錄上傳

正常使用,IO0 斷開,RST 短接地重啟

ESP8266MOD 燒錄接線

ESP32 燒錄硬體準備

  1. 5V 供電
  2. 接地
  3. RX -> TX
  4. TX -> RX
  5. IO0 -> 接地
  6. EN 短接地
  7. 開始燒錄上傳

正常使用,IO0 斷開,EN 短接地重啟

WT32-ETH01 正面

ESP32 EN 接地使用按鈕

ESP-12F (ESP8266MOD) 燒錄軟體

圖形介面

ESPTool.py 指令介面

  1. 安裝 Python 3 (Download Python | Python.org)
  2. 安裝 pip
  3. 安裝 serial module
  4. 安裝 pyserial module

安裝 pip

下載 get-pip.py (https://bootstrap.pypa.io/get-pip.py)

安裝 serial & pyserial module

ESPTool.py

上傳

下載

Arduino 的上傳

ESP-12F 和 ESP32 在使用 esptool.py 上並沒有很大的差異

讀取 MAC Address

其他參考資源

Data

183 total views, 1 views today

HOYO 的 2020 回顧

公司

  • 富邦銀行的 BEMS 案子褲子都脫了,什麼都沒看到。還好都不會浪費以後還用的到…
  • 使用 ESP8266 進行一些 RS485 Modbus 的通訊測試,在一些特定應用場合異常好用
  • 接手一個外包廠商花了一年半進度還做不到 50% 的需量網頁版系統,自己從頭到尾花了 3 個月就上線使用
  • 因為富邦銀行案子需求開始使用 NanoPi 開發通訊硬體,增加了 Python 以及 Linux 的熟練度
  • 年底的時候因為「班班有冷氣」政策,所有冷氣、電錶相關廠商雞飛狗跳,我們也不例外
  • 開始嘗試使用 MQTT 這個大家都已經用爛的通訊方式,並且花了 3 天將公司提的需量 APP做了一個產品

個人

  • 過年的時候終於嘗試了瓦斯爐韓式烤肉,好吃又好玩
  • 暑假的時候一家人去了日月潭、九族文化村,台灣 369 遊樂園終於湊齊了
  • 又是公司出差才第一次去宜蘭,實在是又窮又宅,主要是窮,有錢就到處玩樂了
  • 因為國慶煙火在台南,而且在安平,終於第一次看了台灣的國慶煙火
  • 因為又窮又宅,所以嘗試了使用壓克力顏料進行創作,好玩是好玩就是收捨麻煩
  • 受到神奇 YouTube 演算法,被安麗了一堆健身影片之後開始進行 168 斷食,以及在家做簡單的鍛鍊,

2020 代表字

健康、健身、我們下次健

922 total views, 1 views today

ESP8266 – RS485 Modbus 通訊

MAX485

最後的腳位對應為

SoftwareSerial

因為使用了 UART 轉 RS485 小板,因此只要設定好鮑率、傳送的資料及計算 CRC 即可

CRC

以 {0x01, 0x03, 0x00, 0x00, 0x00, 0x02} 為例,算出來應該是 0xC4, 0x0B 才對

硬體接線

正面

背面

程式範例

運行結果

注意事項

  • 如果選擇的 GPIO 會影響燒錄,那重新開機也會影響程式運作,必須先斷開開機完成才會運作,所以還是需要另外選不會影響的腳位。

387 total views, 2 views today

PHP – MQTT

參考資源

除了上述資源外,一開始其實使用的是 php-mqtt/client 這個,不過軟體太肥,使用麻煩效能也差,才又找了 phpMQTT 使用

範例程式

主要是在網頁上執行 publish() 發送,因此只需要可連線,可發送即可

SSL 範例

241 total views, 2 views today