2022年1月1日 星期六

Sonoff Basic R2 1.3刷Tasmota

從網拍上買兩個Sonoff Basic R2,想要接臥室的嵌燈。使用ESPhome透過網頁界面把韌體刷入後,接上電源發現沒動作,LED也不會亮,改用Tasmota用網頁界面刷韌體也是同樣的情況。

之後在網路上搜尋找到有人使用同樣硬體版本的R2刷入韌體可以使用,他是用esptool這個指令界面工具去刷,參數部份特別指定刷入模式使用dout (Dual Output),我也用同樣的指令刷入後就可以正常運作了。

2021年8月23日 星期一

讓Win10在連入Samba 4 Server時,會出現登入身份驗證畫面

這次的情況是使用者用Windows 10去連安裝在Ubuntu 20.04上頭Samba 4,不會出現身份驗證畫面,這樣就無法使用Samba分享的家目錄。如果是換成Windows 7以前的版本則會。

在網路上搜尋許久,最終找到這個問題的解答。

Ubuntu版本的Samba設定檔,預設會把map to guest指定為Bad User,只要改成never或註解這行,就會強制驗證使用者。

2020年1月27日 星期一

解決使用IPv6時,無法連上isthereanydeal.com的問題(EdgeRouter X)

使用環境:中華電信光世代100M/40M,使用Ubnt EdgeRouter X(ER-X)設置IPv6 Dual Stack
症狀:isthereanydeal.com可以正確解析到正確的v6 IP,Ping也沒有問題,但是用瀏覽器開啟總是會顯示連線失敗,查Google得到以下結果

建議使用SSH登入ER-X,然後修改防火牆設定
admin@er-x:~$ configure
[edit]
admin@er-x# set firewall options mss-clamp6 mss 1432
[edit]
admin@er-x# commit
[edit]
admin@er-x# save
Saving configuration to '/config/config.boot'...
Done
[edit]

以上設定僅適用家用型光世代,如果是固定制光世代,可能會有不同的mss值。

參考來源:
https://community.ui.com/questions/IPv6-mss-clamp6-setting-optimization/dfa1b7e1-e92e-4ab9-902f-580725d2e653
https://community.ui.com/questions/BUG-REPORT-Mss-clamping-creates-buggy-IPtables-rules/f373f88f-ff35-4984-b879-63f114f2b6ad

2019年11月13日 星期三

如何在Django正確使用ManifestStaticFilesStorage這個功能


假設Django專案目錄在/home/myproj。在settings.py要設定
# 靜態檔案對應的URL
STATIC_URL = '/static/'
# 靜態檔案放置的位置,這裡就等於/home/myproj/static
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 放置其他靜態檔案的路徑,把css/js等檔案放在這,以下的設置等於/home/myproj/staticfile
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "staticfile"),
)
# 使用ManifestStaticFilesStorage作為靜態檔案處理方式
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

 在正式運行的伺服器執行
./manage.py collectstatic -v 3
會看到css跟js等檔案都複製到static目錄,並產生附加hash值的檔案。
...
Post-processed 'css/bootstrap.min.css' as 'css/bootstrap.min.a15c2ac3234a.css'
...
每次更動這些檔案後都要執行collectstatic,否則會出錯。

在基礎樣板載入靜態檔案要使用{% load static %}與{% static 'css/bootstrap.min.css' %}來載入靜態檔案。

在Nginx關於靜態檔案目錄的設置
...
location /static {
        alias /home/myproj/static;
    }
...

如果把css/js等檔案放在STATIC_ROOT裡頭,那麼執行collectstatic就不會產生附加hash值的檔案,瀏覽網站就會跳出500錯誤。錯誤Log會有ValueError: Missing staticfiles manifest entry for .... 的訊息。

2019年8月19日 星期一

使用pytz為datetime物件加上時區的注意事項

使用Python的datetime產生的物件是不會包含時區資訊的,在網路上搜尋加上時區的方式,一般都是建議用pytz,大概類似以下的作法。
import datetime
import pytz

mytz = pytz.timezone('Asia/Taipei')
mytime = datetime.datetime.now().replace(tzinfo=mytz)

print(mytime)
2019-08-19 14:56:50.450396+08:06
結果的確會顯示時區,不過好像哪裡怪怪的?台北所在的時區應該是+08:00,怎麼會變成+08:06,多加了六分鐘?

pytz的文件在開頭有提到,因為與Python內建的tzinfo API有實做上的差異,如果要顯示當地的時區,需使用localize()這個方法,範例如下。
import datetime
import pytz

mytz = pytz.timezone('Asia/Taipei')
mytime = mytz.localize(datetime.datetime.now())

print(mytime)

2019-08-19 14:56:50.450396+08:00
這樣就會顯示正確的時區。