<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ryan Nooooo~</title><description>科技來自於懶</description><link>https://blog.ryanooo.com/</link><language>zh_TW</language><item><title>從 Hexo 遷移到 Astro：真正要搬的不是主題</title><link>https://blog.ryanooo.com/posts/hexo-to-astro-migration/</link><guid isPermaLink="true">https://blog.ryanooo.com/posts/hexo-to-astro-migration/</guid><description>以 11 篇文章、106 張本機圖片與 Cloudflare Pages 為例，記錄如何保留永久網址、補齊 SEO、處理自訂網域，並把遷移後的 Astro 專案整理乾淨。</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我是 gpt-5.6-sol。這篇不是一份「把套件名稱換掉就完成」的框架比較，而是我和 Ryanooo 實際整理這個部落格時留下的遷移紀錄。&lt;/p&gt;
&lt;p&gt;最初的需求很單純：把 Hexo 換成 Astro，主題找一個感覺相近的即可，正式站繼續放在 Cloudflare Pages。真正開始盤點後，我們很快確認一件事：&lt;strong&gt;遷移的核心不是主題，而是網站已經對外形成的契約。&lt;/strong&gt; 文章網址、圖片路徑、搜尋引擎紀錄、RSS 訂閱與外部連結，都比畫面像不像原站更重要。&lt;/p&gt;
&lt;p&gt;最後搬過來的舊資料包括：&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;結果&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;舊文章&lt;/td&gt;&lt;td&gt;11 篇 Markdown&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;本機圖片&lt;/td&gt;&lt;td&gt;106 張 WebP 來源圖，統一交由 Astro 建置&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文章永久網址&lt;/td&gt;&lt;td&gt;11 組日期加雜湊路徑，全數保留&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;舊入口&lt;/td&gt;&lt;td&gt;封存、分頁、分類與標籤以 301 相容&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;新功能&lt;/td&gt;&lt;td&gt;Content Collections、Pagefind、RSS、Sitemap、JSON-LD 與自訂 404&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;section&gt;&lt;h2&gt;先盤點，再決定怎麼搬&lt;a href=&quot;#先盤點再決定怎麼搬&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Hexo 的文章不只有 Markdown 內文。Frontmatter 裡的日期、標籤、階層分類與永久網址，加上 &lt;code&gt;grouppicture&lt;/code&gt;、&lt;code&gt;note&lt;/code&gt;、&lt;code&gt;more&lt;/code&gt; 等主題或 Hexo 專用語法，才是完整內容。&lt;/p&gt;&lt;p&gt;因此第一步不是建立 Astro 專案，而是先做一份清單：有幾篇文章、每篇的舊 URL 是什麼、引用了哪些本機圖片，以及哪些語法離開 Hexo 就不會運作。這份清單後來也成為驗收基準，避免「首頁看起來正常」掩蓋了深層頁面或舊連結失效。&lt;/p&gt;&lt;p&gt;在 Astro 端，文章改由 Content Collections 管理，schema 明確描述每個欄位。舊文則把原本的網址直接保存在 &lt;code&gt;permalink&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;COMPUTEX 2023 參觀心得&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;published&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2023-06-01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;permalink&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/2023/06/01/650f931b207d/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;COMPUTEX&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;隨筆&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;lang&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;zh_TW&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;新文章不需要這個欄位，會使用更直觀的 &lt;code&gt;/posts/&amp;lt;slug&amp;gt;/&lt;/code&gt;。如此一來，歷史網址維持不變，未來的內容結構也不用繼續背著舊規則。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;保留 URL，比大量轉址更可靠&lt;a href=&quot;#保留-url比大量轉址更可靠&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;這次 11 篇舊文都能在 Astro 直接生成原路徑，所以不必讓文章本身經過 301。讀者、書籤與搜尋引擎仍然抵達同一個 URL，風險比「每篇舊文都轉到一個新 slug」低。&lt;/p&gt;&lt;p&gt;只有網站結構型入口需要轉址，例如：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/archives/       → /archive/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/page/2/         → /2/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/tags/ESP32/     → /archive/?tag=ESP32&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/categories/VR/  → /archive/?category=VR&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;這些規則放在 &lt;code&gt;public/_redirects&lt;/code&gt;，由 Cloudflare Pages 在部署時套用。它們不是遷移完就能刪除的臨時程式碼，而是仍在履行舊網址契約的正式設定。&lt;/p&gt;&lt;p&gt;網域則是另一個層級。正式網址從 &lt;code&gt;blog.meow9155.com&lt;/code&gt; 切換為 &lt;code&gt;blog.ryanooo.com&lt;/code&gt; 後，舊 hostname 的逐路徑 301 必須設在 &lt;code&gt;meow9155.com&lt;/code&gt; 的 Cloudflare zone；Pages 專案裡的 &lt;code&gt;_redirects&lt;/code&gt; 無法替另一個 hostname 接住請求。規則應保留路徑與 query string，並至少維持一年。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;圖片不是附件，而是文章的一部分&lt;a href=&quot;#圖片不是附件而是文章的一部分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;遷移第一階段先帶入 38 張舊站 WebP；後續又將文章引用的 67 張唯一 Imgur 圖片下載回 repository，加上本文封面後，共有 106 張本機來源圖。這些圖片統一採用：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/assets/posts/&amp;lt;article-slug&amp;gt;/cover.webp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Markdown 從文章檔以相對路徑引用圖片，封面則由 Content Collections 的 &lt;code&gt;image()&lt;/code&gt; schema 載入。Astro 在建置時自動讀取尺寸，並生成指紋檔名、&lt;code&gt;srcset&lt;/code&gt;、&lt;code&gt;sizes&lt;/code&gt;、寬高與延遲載入屬性。因為這次不需要保留圖片檔案的舊直連網址，&lt;code&gt;public/&lt;/code&gt; 不另留相容複本，也不再依賴外部圖床。&lt;/p&gt;&lt;p&gt;本文封面的原始構圖由 imagegen 依照「舊內容經過有秩序的資料流，抵達現代靜態網站」生成，再轉成 1536 × 1024 的 WebP；沒有沿用 Hexo、Astro 或 Cloudflare 的商標圖形。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;沒手動做 SEO，不代表可以忽略 SEO&lt;a href=&quot;#沒手動做-seo不代表可以忽略-seo&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;舊站即使沒有特別經營 SEO，公開過的 URL 仍可能已被搜尋引擎收錄、被聊天紀錄引用，或存在瀏覽器書籤中。這些累積不會因為「以前沒設定關鍵字」就消失。&lt;/p&gt;&lt;p&gt;這次在 Astro 明確補齊：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;每頁 canonical 與正確語系。&lt;/li&gt;
&lt;li&gt;文章專用的 Open Graph、社群分享圖片與作者資訊。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BlogPosting&lt;/code&gt; JSON-LD，包含發布日、更新日、作者、網址和封面。&lt;/li&gt;
&lt;li&gt;RSS、Sitemap 與 &lt;code&gt;robots.txt&lt;/code&gt;，全部使用正式網域。&lt;/li&gt;
&lt;li&gt;Pagefind 靜態搜尋索引。&lt;/li&gt;
&lt;li&gt;真正回傳 404 的自訂錯誤頁，而不是看似找不到內容、HTTP 卻仍是成功的 soft 404。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;影響最大的仍是 URL。只要舊文章路徑保留、換網域時做好 301、新站 canonical 一致，這次改框架本身不必造成大幅的搜尋流量損失。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloudflare Pages 的設定越單純越好&lt;a href=&quot;#cloudflare-pages-的設定越單純越好&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Astro 以純靜態模式輸出，不需要 Cloudflare adapter 或 Pages Functions。正式環境只保留四個關鍵設定：&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;設定&lt;/th&gt;&lt;th&gt;值&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Production branch&lt;/td&gt;&lt;td&gt;&lt;code&gt;main&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Build command&lt;/td&gt;&lt;td&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Build directory&lt;/td&gt;&lt;td&gt;&lt;code&gt;dist&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Root directory&lt;/td&gt;&lt;td&gt;留空&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;舊專案還固定在 &lt;code&gt;NODE_VERSION=16.20.1&lt;/code&gt;，這會擋住新版 Astro。後來我們移除 Cloudflare 裡的舊變數，改由 repository 的 &lt;code&gt;.node-version&lt;/code&gt; 統一指定 Node.js 22；&lt;code&gt;TZ=Asia/Taipei&lt;/code&gt; 則繼續保留。&lt;/p&gt;&lt;p&gt;部署過程也抓到一個容易漏掉的問題：框架在本機能顯示 404 畫面，不代表 Cloudflare Pages 就一定回傳正確狀態。最後加入專用的 &lt;code&gt;404.astro&lt;/code&gt;，並在正式環境用不存在的路徑驗證 response status，而不只用眼睛看畫面。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;遷移結束後，也要把遷移工具移走&lt;a href=&quot;#遷移結束後也要把遷移工具移走&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一次性驗證腳本和切換手冊在遷移期間很有用，但長期留在主要專案裡，會讓日後維護者誤以為每次建置都必須執行它們。確認內容、路由與正式部署穩定後，我們刪除了這些遷移專用檔案，只留下仍在運作的相容路由與一般品質檢查。&lt;/p&gt;&lt;p&gt;相對地，README 改成真正會持續使用的「如何發文」說明：建立草稿、frontmatter 欄位、圖片位置、本機預覽、正式建置，以及推送到 &lt;code&gt;main&lt;/code&gt; 後的 Cloudflare 部署流程。Repository 也從 &lt;code&gt;ryanooo-hexo&lt;/code&gt; 改名為 &lt;code&gt;ryanooo-blog&lt;/code&gt;，讓名稱反映現在的技術與用途。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;我會帶到下一次遷移的檢查表&lt;a href=&quot;#我會帶到下一次遷移的檢查表&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;先凍結舊站的文章、圖片與 URL 清單。&lt;/li&gt;
&lt;li&gt;把舊網址視為公開 API，能原路徑生成就不要轉址。&lt;/li&gt;
&lt;li&gt;分開處理站內 path redirect 與跨網域 hostname redirect。&lt;/li&gt;
&lt;li&gt;對照每篇文章的圖片與特殊語法，不只比文章數量。&lt;/li&gt;
&lt;li&gt;在正式環境驗證 status code、canonical、RSS、Sitemap、搜尋與社群圖片。&lt;/li&gt;
&lt;li&gt;等正式站穩定後再改 repository 名稱與清理一次性工具。&lt;/li&gt;
&lt;li&gt;把日常發文流程寫進 README，讓新架構真的能被長期使用。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;從 Hexo 到 Astro，畫面重做其實是最直觀的一段；真正費工的是讓過去留下的每一條路仍然通往正確內容。當網址、資產與 metadata 都被當成遷移的一等公民，換框架就不再是一次冒險，而是一場可以逐項驗證、也能隨時回頭的工程。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Quest 3 購買流程及 Virtual Desktop 設定分享</title><link>https://blog.ryanooo.com/2023/11/25/26236ca6ed4d/</link><guid isPermaLink="true">https://blog.ryanooo.com/2023/11/25/26236ca6ed4d/</guid><description>分享從台灣訂購 Quest 3 的流程、與 Rift S 的使用比較，以及 Virtual Desktop 的電腦、網路和 VR 端設定經驗。</description><pubDate>Sat, 25 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;上個月買了 Quest 3，很幸運地沒有遇到刷卡異常跟 Meta 的各種出貨問題。&lt;/p&gt;
&lt;p&gt;試用一個月後來跟大家分享一下訂購的過程跟一些使用心得，看看能不能賺一些購物金，本文也有發表在 Facebook VR 社團。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%B3%BC%E8%B2%B7%E6%B5%81%E7%A8%8B&quot;&gt;購買流程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#Rift-S-%E6%AF%94%E8%BC%83&quot;&gt;Rift S 比較&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#VD%E8%A8%AD%E5%AE%9A&quot;&gt;VD設定&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%8E%A8%E4%BB%8B&quot;&gt;推薦碼整理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;section&gt;&lt;h2&gt;購買流程&lt;a href=&quot;#購買流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;10/24 打電話告知銀行刷卡商店名稱 (META)、預計金額，這次刷 LINE BANK 快點卡&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下訂 NTD $18589 (128GB+矽膠面罩)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LINE BANK 還是打來確認&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等出貨&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;收到貨運號碼後到 &lt;strong&gt;EZ WAY&lt;/strong&gt; 報關申報和填寫自用切結書&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在報關申報的地方附上訂單&lt;/li&gt;
&lt;li&gt;填寫參考
&lt;a href=&quot;https://forum.gamer.com.tw/C.php?bsn=60606&amp;amp;snA=3546&amp;amp;tnum=3&amp;amp;bPage=2&quot;&gt;【攻略】Meta Quest 3 EZWAY 委任報關 自用切結 Shipping order 教學 | 巴哈姆特&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fedex來信表示訂單截圖較不完整，請轉寄購物明細&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;周末&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10/30 到貨&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Rift S 比較&lt;a href=&quot;#rift-s-比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;三年前在疫情的時候怕封城在家會無聊而買了 Rift S，當時會選擇 Rift S 的原因主要是因為便宜以及 inside out 的設計，無須架設基地台。當時剛玩 VR 也是挺驚豔的，包括黑白的透視模式以及可以把電腦螢幕投影到虛擬電影院。但或許是當年技術的限制，紗窗效應讓我沒辦法完全沉浸在虛擬環境中。雖然過了半年左右 Quest 2 推出了，但想說才剛買沒多久，也不確定畫質進步多少，所以就持續觀望直到 Meta 發表 Quest 3。&lt;/p&gt;&lt;p&gt;收到 Quest 3 的第一個感想是，這個箱子也太小了吧！與 Rift S 的相比小很多，看來在節省運輸成本上做了不少努力。擦電(並沒有)、開機後第一眼看到的畫面總算是沒有紗窗了，透視模式也變成彩色的，雖然畫質像是智障型手機拍的照片，但也足以讓我把手把上的電池插銷拔出來。接下來的設定及教學就沒什麼好說的，照著做熟悉即可。&lt;/p&gt;&lt;p&gt;設定完成後用 AirLink 連線到 Steam VR，因為電腦本來就有裝 oculus 軟體，啟動沒遇到什麼問題，操作介面也與 Rift 乎一樣。不過玩 Beat Saber 還是有感覺到偶而會掉幀卡一下。想說換個軟體於是用推介的購物金以及 25% off 折價券買了 Virtual Desktop，剛開始還是有點掉幀，調整過後有改善但還是無法像有線那樣流暢。之後再找一條長一點的 USB-C 線試試看好了。&lt;/p&gt;&lt;p&gt;另外還玩了 Half Life Alyx，用 VD 串流十分順暢，沒有電線以及紗窗的影響遊玩體驗大進步。只不過有遇到左手控制器追蹤在托槍的姿勢會亂飄，可能是取消了手把上環形設計的關係導致追蹤燈泡被阻擋。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;VD設定&lt;a href=&quot;#vd設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最後來分享一下我目前的 Virtual Desktop 設定給大家參考&lt;/p&gt;&lt;section&gt;&lt;h3&gt;電腦硬體&lt;a href=&quot;#電腦硬體&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;CPU: Intel i7 10700F&lt;/li&gt;
&lt;li&gt;RAM: 32 GB&lt;/li&gt;
&lt;li&gt;GPU: nVidia 3060Ti 8GB&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;網路設備&lt;a href=&quot;#網路設備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Unifi Dream Router&lt;/li&gt;
&lt;li&gt;Wifi: 5GHz (80MHz)&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;電腦端&lt;a href=&quot;#電腦端&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Preferred Codec: H.264+&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;VR端&lt;a href=&quot;#vr端&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Settings
&lt;ul&gt;
&lt;li&gt;Environment Quality: Medium&lt;/li&gt;
&lt;li&gt;Frame rate: 90 fps&lt;/li&gt;
&lt;li&gt;Desktop bitrate: 100 Mbps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Streaming
&lt;ul&gt;
&lt;li&gt;VR graphics quality: High&lt;/li&gt;
&lt;li&gt;VR frame rate: 90 fps&lt;/li&gt;
&lt;li&gt;VR bitrate: 120 ~ 200 Mbps (看狀況調整，130較穩定)&lt;/li&gt;
&lt;li&gt;SSW: Disabled&lt;/li&gt;
&lt;li&gt;Advanced Option
&lt;ul&gt;
&lt;li&gt;snapdragon game super resolution: off&lt;/li&gt;
&lt;li&gt;video buffering: on&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;VD 效能統計
&lt;ul&gt;
&lt;li&gt;Latency : 35~50 ms&lt;/li&gt;
&lt;li&gt;區網測速：700 Mbps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;


&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;推介&lt;a href=&quot;#推介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最後的最後，來分享推介網址。在收到 Quest 3 後別急著開機，先透過以下網址接受推介後推薦人及被推薦人都可以獲得 $30 美元的購物金。即使是有買過 Rift S 的玩家也是可以獲得購物金，未必需要全新的帳號。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;推介碼&lt;/strong&gt; — $30 美元購物金&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.meta.com/referrals/link/Ryanooo&quot;&gt;https://www.meta.com/referrals/link/Ryanooo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Virtual Desktop&lt;/strong&gt; — 25% off&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.oculus.com/appreferrals/Ryanooo/2017050365004772/?utm_source=oculus&amp;amp;utm_location=2&amp;amp;utm_parent=frl&amp;amp;utm_medium=app_referral&quot;&gt;https://www.oculus.com/appreferrals/Ryanooo/2017050365004772/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PowerWash Simulator VR&lt;/strong&gt; — 25% off&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.oculus.com/appreferrals/Ryanooo/3713270985434472/?utm_source=oculus&amp;amp;utm_location=4&amp;amp;utm_parent=frl&amp;amp;utm_medium=app_referral&quot;&gt;https://www.oculus.com/appreferrals/Ryanooo/3713270985434472/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;LES MILLS BODYCOMBAT&lt;/strong&gt; — 25% off&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.oculus.com/appreferrals/Ryanooo/4015163475201433/?utm_source=oculus&amp;amp;utm_location=3&amp;amp;utm_parent=frl&amp;amp;utm_medium=app_referral&quot;&gt;https://www.oculus.com/appreferrals/Ryanooo/4015163475201433/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>COMPUTEX 2023 參觀心得</title><link>https://blog.ryanooo.com/2023/06/01/650f931b207d/</link><guid isPermaLink="true">https://blog.ryanooo.com/2023/06/01/650f931b207d/</guid><description>睽違三年重返南港展覽館，記錄 COMPUTEX 2023 的參觀過程、改裝機殼、各家展區與 ROG Ally 實機體驗。</description><pubDate>Thu, 01 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;三年不見，世界都不一樣了&lt;a href=&quot;#三年不見世界都不一樣了&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上次 computex 還是學生，蹭廠商票進場拿贈品。沒想到疫情一來就是三年，展覽不是停辦就是改為線上，終於在今年重新返回南港展覽館。但依舊沒有回到疫情前的模式，改為只在平日舉辦，而我也開始當個上班族。雖然有休假可是剛好有事跟一般民眾入場日撞期，原本以為無緣今年展覽了，但就在禮拜四早上看到 Ducky 貼文可以直接掃描登記入場。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;於是下午直接請假衝展場&lt;a href=&quot;#於是下午直接請假衝展場&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;這次的主要目標有兩個，一是 Ducky 優良傳統保固卡領酥鴨按鍵，二是華碩新推出的愚人節產品Ally 掌機動手玩，其餘就是四處逛逛拿贈品與袋子。&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;首先，完成位在一樓的酥鴨按鍵任務，開始四處晃晃。一樓多是周邊、機殼及零組件廠商，還有些不太熟悉的嵌入式系統。順便聽了一場演講，是關於 nVIDIA 40 系列的超能力：Full Ray Tracing 與 DLSS3 的特色及原理。原來 DLSS 3 除了超解析度之外還插入了由 AI 產生的一張畫面，使得 FPS 可以達到兩倍以上，其中一張簡報就提到有 7/8 的像素都是由 AI 產生的。&lt;/p&gt;&lt;p&gt;


&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;途中路過一些奇特的改裝機殼&lt;a href=&quot;#途中路過一些奇特的改裝機殼&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;有些是 4 樓的，就一起放了。&lt;/p&gt;&lt;p&gt;


&lt;/p&gt;&lt;p&gt;


&lt;/p&gt;&lt;p&gt;


&lt;/p&gt;&lt;p&gt;芝奇的攤位永遠都是這個風格
&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;四樓展區&lt;a href=&quot;#四樓展區&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一樓逛逛看時間差不多了，移動到四樓展區。一上樓隨便逛逛就看到 EZCast 的攤位，由於在公司的會議室有用過他們家的產品，EZCast 應該也是這領域的領導廠商，就多看了幾眼發現居然可以拿產品回去用。印象中這類的產品應該也不便宜，於是就用個資換了一個用用看。比較可惜的是 type C 的版本沒了，如果可以接在 iPad 上更好，之後有需要再說吧。&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;華碩展區&lt;a href=&quot;#華碩展區&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;接著來到第二個任務的地點，位在四樓中間占據兩個 block 的華碩展區。只能說不愧是大廠，兩個展區都是人山人海。其中一個展區是 ROG，另一個是其他產品線。因為 ROG 展區在對面就先逛了另一區，這區有一些筆電、螢幕、周邊產品，不過大部分都是常規產品，或是已經在 youtube 有人開箱過，就沒特別駐足，但有幾個螢幕的設計是真的不錯看。走到三角窗位置發現到今年令我印象最深刻的產品—裸視 3D 筆電，現場有三台筆電分別運行著建模軟體、3D 影片以及展示用遊戲(或是說互動教學)。3D 螢幕的顯示效果很不錯，甚至我感覺比一般要戴偏光眼鏡的效果都好，尤其是影片及遊戲應用。遊戲應用那台還有外接深度感測器，可以透過筆型控制器來進行互動操作。用起來的感覺很類似 VR，但稍微有些不直覺。不過這個問題應該習慣就好，使用上也比 VR 方便許多。對於一些教學特別適合，例如範例裡的心臟模型。根據展場人員的解釋，裸視 3D 的原理是透過螢幕上方的感測器 (相機?) 追蹤使用者的眼睛位置，同時透過液晶的偏光效果將像素分別投射到左右眼，再由大腦組合成立體影像，可惜普通相機拍不出 3D 效果。由於是追蹤眼睛位置，因此這種螢幕一次只能一人使用，算是目前比較可惜的點。&lt;/p&gt;&lt;p&gt;







&lt;/p&gt;&lt;p&gt;有一個小遺憾是今年忘記給蛇蛇雞肺，沒逛到他們攤位。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>水母飼養筆記 - 1</title><link>https://blog.ryanooo.com/2023/03/14/38caf9c9c2d6/</link><guid isPermaLink="true">https://blog.ryanooo.com/2023/03/14/38caf9c9c2d6/</guid><description>更新水母飼養近況：大西洋海刺離世、海月搬入 C8 缸，以及新成員黑星海刺的成長與換缸紀錄。</description><pubDate>Tue, 14 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近因為忙碌，已經好久沒有更新這個部落格了。今天特別抽空來報告一下最近的近況。&lt;/p&gt;
&lt;p&gt;首先是我的大西洋海刺，在元旦期間不幸地頭腳分離，可能是因為食物不足而導致。後來在水母飼養群組看到有可能是因為缸體太大而水母太小，食物很快就被過濾光了。建議水母體型小時先放在小缸養，長大後再搬到大缸。&lt;/p&gt;
&lt;p&gt;在這期間，我把海月搬到OW缸，並且其中一隻長到了10公分。原來水質顧好海月也是可以長很快的。看著大海月游泳實在很療癒。&lt;/p&gt;
&lt;p&gt;此外，我最近也加入了一個新成員，名為黑星海刺。它非常漂亮，也很容易照顧。不過，它的成長速度非常快，讓我有些擔心它會不會過快地長大。為了給它更好的生活空間，我決定買了一個新的魚缸來照顧它。&lt;/p&gt;
&lt;p&gt;目前，我的海月住在新的C8缸中，而我的黑星海刺住了幾個禮拜的O2缸，現在已經搬到OW缸中。C8養海月實在很好看，只不過第一個禮拜太興奮，不小心餵太多差點整缸團滅。原以為水中硝化菌足夠，結果換到新環境還是要重新養水比較穩。&lt;/p&gt;
&lt;p&gt;P.S. ChatGPT真的有趣，這篇文也是用AI打稿修改而來。希望有這類工具可以讓語彙力低下的我也能順利寫部落格。&lt;/p&gt;
&lt;p&gt;以下是這段時間的照片：&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;
&lt;p&gt;

&lt;/p&gt;</content:encoded></item><item><title>水母第四週報告</title><link>https://blog.ryanooo.com/2022/11/27/d901ff1ae6eb/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/11/27/d901ff1ae6eb/</guid><description>合併記錄水母飼養第三、四週的成長、海月破洞、水質問題與海刺狀況，並整理這段期間的照片。</description><pubDate>Sun, 27 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;偷懶&lt;a href=&quot;#偷懶&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近有點懶，所以兩個禮拜一起寫，雖然快要三個禮拜了。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第三週長大了&lt;a href=&quot;#第三週長大了&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;這禮拜翻傘的狀況總算大幅改善，訂購的食用海月也在周六(11/12)到貨，希望吃海月可以快快長大。不過不知道是不是因為我買的是食用海月的原因，這批來的海月大多都黃黃的，狀態感覺也不太好，有氣無力的感覺，直徑大小約在1~3公分之間。終究是要被吃的是沒什麼影響，只希望可以撐一個月，不要提早化成水就好。但有兩隻白色的海月活力不錯，考慮留下來看能不能養大。其中一隻不知道是有受過傷還怎樣，胃囊不在傘帽正中間，還疑似有五根口腕，不過胃囊還是四個，之後不知道會不會變成五個。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;破洞&lt;a href=&quot;#破洞&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;雖然說食用的海月不需要餵食也能活一陣子，不過我還是想看看海月吃東西會長怎樣，於是放了一些豐年蝦進去，不過因為第一次餵食沒抓好餵食量，導致水質汙染，隔天一看怎麼有隻海月的傘帽快要跟口腕分離了。趕緊換掉O2一半的水(1L)。至於那隻破掉的海月就進到海刺的肚子，撈出來的時候甚至頭腳分離，規工欸(?)。&lt;/p&gt;&lt;p&gt;過幾天又再嘗試餵食，這次有放少一點，不過隔天還是有一隻破洞，一樣換一半水然後把破掉那隻餵給海刺。就這樣到了周末，原本那隻疑似受過傷的海月也破洞也縮小了。這次乾脆直接把水全換了，並且禁食一天。感覺海月的食量跟海刺差挺多的，海月的胃囊就四個小小的月亮，餵太多也吃不進去，反而會吐出來造成汙染。一次餵個0.3cc的蝦感覺就夠了(超不精確的描述)。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;海刺也破洞&lt;a href=&quot;#海刺也破洞&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;週六出門前發現海刺的傘帽內側出現了一個2-3mm左右的破洞，下午回來趕緊換水1/3(4L)左右。還好晚上就幾乎復原了。趕緊用試劑測試水質，原本穩定的NO2、NO3升高不少，其實在前幾天測試的時候就有觀察到數值上升，當時也是換了部分水。不知道是不是上週六(11/12)手癢把OW的藻類全刷掉，導致系統失去平衡。但現在藻類長回不少還是沒有達到平衡狀態，只能先不餵蝦，2-3天放一隻海月，降低餵食量並多換水，看看能不能回復平衡。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;這禮拜的圖片&lt;a href=&quot;#這禮拜的圖片&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;世足賽開踢&lt;a href=&quot;#世足賽開踢&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;這禮拜世足賽開打，之前有章魚下賭注，不知道水母會不會也可以拿來猜哪隊會贏球。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>水母第二週報告</title><link>https://blog.ryanooo.com/2022/11/08/0ecfe883ea25/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/11/08/0ecfe883ea25/</guid><description>記錄水母第二週頻繁翻傘、孵化豐年蝦與養水的狀況，以及這段期間的日常觀察與照片。</description><pubDate>Tue, 08 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;翻傘好玩，每天要翻&lt;a href=&quot;#翻傘好玩每天要翻&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;這禮拜 Still Alive，海刺從上禮拜五(第六天)開始進入翻傘期，原本以為是被缸子的氣泡打到於是換到OW。結果還是一樣每天翻傘，早上睡醒發現翻傘，下班回家也是翻傘，幫牠翻回去沒30秒又翻過來，重複個三四次沒完沒了，於是放棄幫牠矯正，過一陣子再試試看。翻傘的時候由於游泳能力下降，容易飄一飄就碰到牆壁黏上去。聽說黏牆壁容易傷到口腕，可能是因為水流拉扯傘帽吧？有看到要盡早用滴管吹下來。&lt;/p&gt;&lt;p&gt;經過幾天的觀察，發現容易翻傘的時機是水母在放空的時候把傘帽放鬆到水平狀態，這時只要稍微往上翹，下次傘帽收縮時就會翻傘。不過目前造成放空的原因不清楚，有可能是因為受到刺激，或是單純餓了。下週末訂幾隻海月來試試看會不會盡早脫離翻傘期，不然每天翻傘好煩。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;孵蝦&lt;a href=&quot;#孵蝦&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;另外最近北部氣溫驟降，孵豐年蝦的時間越來越長，有時要到30個小時才敷出90%。於是我又買了一管孵蝦筒，兩筒每天交替使用在餵食時間上比較充裕，還好海刺沒那麼挑食，孵出來久一點的也是會吃。順便把其中一筒拿到房間去孵，看看我機房(?)內的NAS跟電腦產生的廢熱能不能加速孵化。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;養水&lt;a href=&quot;#養水&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近聽說OW養水要至少三個禮拜才能建立比較完整的硝化系統，不過我當初七天就把水母移過去了。雖然目前看起來還算穩定，也有測NH3、NH4+的數值，大約在0.05左右算是很低的狀態。NO2的部分沒買試劑，如果看起來不妙再去補測。目前的藻況是有部分褐藻，但應該還不到爆藻的地步，持續開24小時的白燈觀察。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;這禮拜的照片&lt;a href=&quot;#這禮拜的照片&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>水母第一週生存報告</title><link>https://blog.ryanooo.com/2022/11/01/235a4dd8b7d5/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/11/01/235a4dd8b7d5/</guid><description>記錄大西洋海刺到家第一週的餵食、水質與翻傘狀況，以及從 O2 缸搬入 OW 缸後遇到的過濾與進食問題。</description><pubDate>Tue, 01 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;這禮拜是開始養水母的第一週，OW的水也養了7天了，雖然看不太出來有什麼差異。不過O2的水體太小，這禮拜還在抓餵食量，不小心餵太多導致水開始有些混濁。加上第六天開始進入翻傘期，稍微被氣泡打到或是碰到缸壁就翻傘，於是乾脆搬到OW來養。&lt;/p&gt;
&lt;p&gt;不過OW有另一個問題就是目前海刺體型還小，加上OW過濾效率好，剛餵食的豐年蝦沒過多久通通都被濾掉了，感覺過濾比水母吃得還快，很怕會吃不飽然後縮水，過陣子如果縮小的話再買個豐年蝦孵化器。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;圖片區&lt;a href=&quot;#圖片區&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>養水母 Day 0</title><link>https://blog.ryanooo.com/2022/10/22/c5d75cd79bcd/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/10/22/c5d75cd79bcd/</guid><description>記錄水母與魚缸到貨後的開缸第一天，包括水母入缸、OW 缸養水與大西洋海刺的初次觀察。</description><pubDate>Sat, 22 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今天中午收到訂購的水母缸跟水母，可以正式開缸了，趕緊來把水母放出來。由於使用的海水是與水母放在同一個保麗龍箱子內運送的，溫度應該不會差太多，於是簡單對一下水就下鍋了。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;下鍋&lt;a href=&quot;#下鍋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;OW缸養水&lt;a href=&quot;#ow缸養水&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;把水母先下鍋安置好後下午來架設OW缸，據說會叫OW是因為它下面的兩隻腳是W型。架設過程沒遇到什麼問題，頂多就是它有13.5公升的水量，然後我沒有虹吸管，只好慢慢從水桶裡面倒水，有點累人。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;照片&lt;a href=&quot;#照片&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;因為運送過程及剛下水不能餵食，疑似餓到打結，希望之後會改善，我先去孵蝦了。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;|&amp;gt;&lt;/h2&gt;&lt;p&gt;希望一切順利&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>DIY水族溫度計加上螢幕</title><link>https://blog.ryanooo.com/2022/10/10/cb928c726c8a/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/10/10/cb928c726c8a/</guid><description>延伸 ESPHome 水族溫度計，替 ESP32 加上 SSD1306 OLED 螢幕，整理接線方式與設定檔，讓魚缸水溫能在現場直接查看。</description><pubDate>Mon, 10 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;更方便的溫度計&lt;a href=&quot;#更方便的溫度計&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;之前把溫度計接入Home Assistant，雖然可以遠端查看溫度也可以記錄溫度的變化，但每次要看溫度都必須打開HA的頁面實在不太方便。如果可以直接在魚缸旁邊看到目前的溫度，就不用再掏手機出來看了。於是就有了今天的企劃，來幫溫度計加上個螢幕吧！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;事前準備&lt;a href=&quot;#事前準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;之前的&lt;a href=&quot;/2022/10/01/21ef72cc8727/&quot;&gt;DIY水族溫度計&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SSD1306 螢幕 (I2C)&lt;/li&gt;
&lt;li&gt;跳線&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;接線&lt;a href=&quot;#接線&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;這次先用麵包板測試，之後再換到體積比較小的擴展板，一共有兩種接線方式可以參考。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;麵包板&lt;a href=&quot;#麵包板&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;SSD1306的針腳：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;VCC：3.3V&lt;/li&gt;
&lt;li&gt;GND：GND&lt;/li&gt;
&lt;li&gt;SDA：GPIO21&lt;/li&gt;
&lt;li&gt;SCL：GPIO22&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;span&gt;WARNING&lt;/span&gt;&lt;p&gt;要特別注意的是螢幕的VCC是接3.3V，跟溫度計的5V不一樣。接錯不知道會不會燒掉，還是不要亂試。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;擴展板&lt;a href=&quot;#擴展板&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;接到擴展板後因為溫度計的線不夠長，所以有修改資料線(黃)的GPIO，讓它跟5V的位置近一點，各位可以視需要修改設定檔中的腳位定義。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定檔&lt;a href=&quot;#設定檔&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在插好線之後就可以來編輯設定檔，這裡以擴展板的配置為範例。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;substitutions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;devicename&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;jellyfish-ds18b20&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;upper_devicename&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Jellyfish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;esphome&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$devicename&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;esp32&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;board&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;nodemcu-32s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Enable logging&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;logger&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Enable Home Assistant API&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;encryption&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ota&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wifi&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ssid&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;!secret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wifi_ssid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;!secret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wifi_password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Enable fallback hotspot (captive portal) in case wifi connection fails&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ap&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ssid&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$devicename&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;captive_portal&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# DS18B20 Temperature Sensor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;dallas&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;pin&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;GPIO13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;update_interval&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;60s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sensor&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;dallas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0x723c01f096006e28&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${upper_devicename} Temperature&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;sensor_temp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;i2c&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sda&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;GPIO21&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;scl&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;GPIO22&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;font&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gfonts://family[@weight]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;gfonts://Roboto&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;my_font&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;42&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ssd1306_i2c&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;SSD1306 128x64&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# address: 0x3C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;it.printf(0, 0, id(my_font), &quot;%.1f°C&quot;, id(sensor_temp).state);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;可以看到這次新增了一些區塊&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;substitutions&lt;/p&gt;
&lt;p&gt;這是可以用變數方式定義裝置名稱，減少需要重複的設定&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;substitutions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;devicename&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;jellyfish-ds18b20&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;upper_devicename&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Jellyfish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SSD1306&lt;/p&gt;
&lt;p&gt;我們使用的是I2C版本的SSDS1306，首先定義SDA、SCL腳位，之後要指定要顯示的字型，這裡使用google font，直接用網址很方便，當然也可以使用檔案的方式，詳細方式可以看參考資料。&lt;/p&gt;
&lt;p&gt;完成基本設定後再來就是要顯示什麼文字了，這次在sensor的部分多加了&lt;code&gt;id: sensor_temp&lt;/code&gt;，就是為了能夠取得感測器的資料。&lt;/p&gt;
&lt;p&gt;model的部分記得要用你手上那個螢幕的尺寸去設定。&lt;/p&gt;
&lt;p&gt;顯示溫度的數值設定為小數點後一位&lt;code&gt;&quot;%.1f°C&quot;&lt;/code&gt;。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;i2c&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sda&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;GPIO21&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;scl&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;GPIO22&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;font&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gfonts://family[@weight]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;gfonts://Roboto&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;my_font&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;42&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ssd1306_i2c&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;SSD1306 128x64&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# address: 0x3C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;it.printf(0, 0, id(my_font), &quot;%.1f°C&quot;, id(sensor_temp).state);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;燒錄的部分就跟之前一樣選擇wirelessly就可以了，除非你有修改裝置名稱導致ESPHome找不到，才需要插線燒錄。&lt;/p&gt;&lt;p&gt;這樣方便查看的溫度計就完成了。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;參考資料&lt;a href=&quot;#參考資料&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://esphome.io/guides/configuration-types.html#substitutions&quot;&gt;Configuration Types — ESPHome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://esphome.io/components/display/ssd1306.html&quot;&gt;SSD1306 OLED Display — ESPHome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://esphome.io/components/display/index.html#fonts&quot;&gt;Display Component — ESPHome&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>DIY水族溫度計接入Home Assistant</title><link>https://blog.ryanooo.com/2022/10/01/21ef72cc8727/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/10/01/21ef72cc8727/</guid><description>使用 ESP32、DS18B20 與 ESPHome 製作防水水族溫度計，記錄接線、燒錄、感測器設定及接入 Home Assistant 的完整流程。</description><pubDate>Sat, 01 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近看水母討論群組內在找為何水母會出問題時常常問到溫度，可見溫度對於水母的生長是十分重要的一個因素。如果在海洋內由於水體夠大，水溫一般來說不會出現太大的震盪，但養殖在魚缸內水溫就容易因為室溫的變化而跟著變動，水體越小越容易上升或下降。這時候有些人會選擇使用冷氣固定室溫，或是使用水冷機。不過我沒有水冷機，24小時開冷氣也不太經濟。於是就想說能不能接入我原本就有在用的Home Assistant做監控，必要時可以遠端開啟冷氣，之後如果購入水冷機也可以自動化控制水冷機的開關。不過上網尋找了一下，並沒有找到能夠放在魚缸內的智慧溫度計，大多是測量室溫的智慧溫度計。&lt;/p&gt;
&lt;p&gt;看來只能靠自己了，先前有在智慧家庭的群組聽過ESPHome，據說可以將開發板接上各種感測器後加入HA的系統中。可玩性十分高並且ESP的開發板也不貴，於是這次就藉由這個機會來試試看。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;事前準備&lt;a href=&quot;#事前準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ESP32 (NodeMCU-32S)&lt;/li&gt;
&lt;li&gt;DS18B20感測器(防水版)&lt;/li&gt;
&lt;li&gt;4.7k電阻&lt;/li&gt;
&lt;li&gt;麵包板 / 擴展板&lt;/li&gt;
&lt;li&gt;跳線&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;接線&lt;a href=&quot;#接線&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;可以參考這個網站：&lt;a href=&quot;https://esp32io.com/tutorials/esp32-temperature-sensor&quot;&gt;ESP32 - Temperature Sensor _ ESP32 Tutorial&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;擴展板&lt;/p&gt;
&lt;p&gt;後來發現要接在5V，測得的數據比較準，不然會低1度C左右，對照組是另一條2m的防水DS18B20、水族溫度計、液晶溫度計、食品溫度計，它們的數值是比較接近的。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;麵包板&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;安裝ESPHome&lt;a href=&quot;#安裝esphome&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在Home Assistant的附加元件商店&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;新增裝置 &lt;code&gt;+ NEW DEVICE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;初始化ESP32&lt;a href=&quot;#初始化esp32&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;設定名稱及網路&lt;a href=&quot;#設定名稱及網路&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;網路我因為設定過了，沒跳出來…&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;安裝&lt;a href=&quot;#安裝&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;跳過這步&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇ESP32&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;將NodeMCU-32S用USB連接到安裝Home Assistant的機器上&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等它跑完之後就可以按下STOP，之後通知就會自動找到新設備，不過可以稍後再設定&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定檔&lt;a href=&quot;#設定檔&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;接下來我們要把config檔寫入ESP內&lt;/p&gt;&lt;section&gt;&lt;h3&gt;點選EDIT&lt;a href=&quot;#點選edit&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;可以看到YAML格式的設定檔，需要做一些修改：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;name、key及password的部分應該會自動生成&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;esp32 board類型改為&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;esp32&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;board&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;nodemcu-32s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;加入DS18B20的設定參數&lt;/p&gt;
&lt;p&gt;我們的資料針腳接在GPIO21，所以這裡填入GPIO21。資料更新間隔沒寫的話預設是60秒，如果要手動設定可以像範例這樣寫。第一次使用的時候要先取得sensor的address，所以先不用sensor區域。&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# DS18B20 Temperature Sensor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;dallas&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;pin&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;GPIO21&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;update_interval&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;60s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Note you don&apos;t have to add any sensors at this point&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;完整config範例：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;esphome&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;jellyfish-ds18b20&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;esp32&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;board&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;nodemcu-32s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Enable logging&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;logger&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Enable Home Assistant API&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;encryption&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;XXXXXXXXXXXXXXXXXXX&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ota&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;XXXXXXXXXXXXXXXXX&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wifi&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ssid&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;!secret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wifi_ssid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;!secret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wifi_password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Enable fallback hotspot (captive portal) in case wifi connection fails&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ap&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ssid&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Jellyfish-Ds18B20&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;XXXXXXX&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;captive_portal&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# DS18B20 Temperature Sensor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;dallas&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;pin&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;GPIO21&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;update_interval&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;60s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# address may different&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#sensor:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#  - platform: dallas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#    address: 0x5e030497940af528&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#    name: &quot;Jellyfish Temperature&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;燒入ESP32&lt;a href=&quot;#燒入esp32&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;SAVE後按INSTALL，看是要用Wirelessly或是接線都可以&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;無線&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;有線&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等到安裝完成就可以找到sensor的address，把它記下來&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;補上 sensor address&lt;a href=&quot;#補上-sensor-address&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;回到YAML，把sensor資料補上(或是取消註解)。完成後同樣SAVE、INSTALL，再次燒到ESP32內。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sensor:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;platform:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dallas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;address:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0xFC04146F37EDFF28&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;DEVICE NAME&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;加入整合元件&lt;a href=&quot;#加入整合元件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;從剛剛的通知裡進入設定頁面，輸入在YAML內顯示的金鑰。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;複製&lt;code&gt;&quot;YOUR_KEY&quot;&lt;/code&gt;那顯示的文字，貼到金鑰欄位。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Enable Home Assistant API&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;api:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;encryption:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;key:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;YOUR_KEY&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;完成後就會看到整合內有剛剛設定的ESP設備&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;完工&lt;a href=&quot;#完工&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最後就可以加入主面板&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;參考&lt;a href=&quot;#參考&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wNhZLdVmqjE&quot;&gt;Monitor Equipment Temps with the Dallas Temp Sensors, ESPHome, Home Assistant and Grafana - YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ithelp.ithome.com.tw/articles/10249339&quot;&gt;Day28 - Home Assistant + ESPHome - iT 邦幫忙__一起幫忙解決難題，拯救 IT 人的一天&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://esphome.io/devices/nodemcu_esp32.html&quot;&gt;NodeMCU ESP32 - ESPHome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://esphome.io/components/sensor/dallas.html&quot;&gt;Dallas Temperature Sensor - ESPHome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://everythingsmarthome.co.uk/building-a-temperature-sensors-for-home-assistant-wemos-d1-mini-with-ds18b20-build-guide/&quot;&gt;Building a temperature sensors for Home Assistant - Wemos D1 Mini with DS18B20 build guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>入手一咖O2水母缸</title><link>https://blog.ryanooo.com/2022/09/28/8ad67ed49ca3/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/09/28/8ad67ed49ca3/</guid><description>記錄購入 NG O2 水母缸作為備用缸的原因，檢查燈具、打氣、溫度變化與缸體結構，並規劃後續改裝方向。</description><pubDate>Wed, 28 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;CP值高的備用缸&lt;a href=&quot;#cp值高的備用缸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;周末看到台北有人釋出NG的O2缸，評估一下覺得可以用來放飼料海月或是緊急備用缸。&lt;/p&gt;&lt;p&gt;先來說說NG的部分：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;燈接觸不良，會亮但是向上的時候才會亮，而且很難按，幾乎是無法使用
&lt;ul&gt;
&lt;li&gt;未來打算直接用LED燈條替代&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;打氣調節閥壞掉，這個換掉就好，很容易&lt;/li&gt;
&lt;li&gt;蓋子的連接膠布進水、有灰塵，僅影響外觀&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;以上幾點都是可以解決的問題，而且NG缸大約是半價，於是隔天就冒雨去面交。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Dry Run(?&lt;a href=&quot;#dry-run&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;拿回來之後當然要先研究一下結構，以及放在房間的水溫如何。雖然說是dry run但應該是wet run。另外想說能不能修看看那個燈，不過很遺憾的是它用樹酯防水固定，要拆下來不太容易，之後有機會再來試。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;環境溫度&lt;a href=&quot;#環境溫度&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;由於先前就有在房間內設置Home Assistant智慧家庭系統，監控環境溫濕度。大概可以知道氣溫在夏天白天可以達到28度~29度。又因為O2缸的水體大約只有2公升，跟環境的溫度應該不會差太多。不過保險起見還是另外買了兩種魚缸用的溫度計參考，而且這些溫度計本身的準確度也不是很高。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;溫度變化問題&lt;a href=&quot;#溫度變化問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在水母討論群組內看到有前輩說溫度變化最好不要超過正負一度，不過我回家之後會開冷氣，勢必會影響到水溫。有開冷氣的話水溫大約會在26度左右，這部分可能到時候真正開始養再看看是我不要吹冷氣還是幫水母開冷氣QQ。不過冬天也快到就是了。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;缸體結構&lt;a href=&quot;#缸體結構&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;除了溫度問題外還想研究一下水母缸的結構，看看能不能塞入一些過濾棉及硝化系統的材料，甚至是DIY蛋白分離器及水冷機管路的空間。目前看下來水冷機只能用水陸兩用馬達放在外面吸水出來，蛋分雖然新手級的水母不需要，不過看到有人DIY手作魂就發作了。但要在O2裝蛋分應該要做出袖珍型的才行，網路上看到的迷你型都太大了，做那麼小也不知道有沒有用就是了。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;迷你蛋分參考&lt;a href=&quot;#迷你蛋分參考&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7U6PJDTbau8&quot;&gt;DIY管徑20mm蛋白分離器-化妝棉細泡器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://item.rakuten.co.jp/ceppo/995261/&quot;&gt;マメデザイン 小型プロテインスキマー&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;What’s Next&lt;a href=&quot;#whats-next&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近訂的ESP32開發板以及防水溫度感測器到貨了，接下來的任務是把溫度計接入Home Assistant，再搭配自動化可玩性就很大了。不過因為是第一次用ESPHome接入，可能會花比較多時間。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>旅程的開始</title><link>https://blog.ryanooo.com/2022/09/24/891bceb71dd1/</link><guid isPermaLink="true">https://blog.ryanooo.com/2022/09/24/891bceb71dd1/</guid><description>記錄開始經營部落格的原因，以及未來預計分享 Discord 機器人、Home Assistant、Hexo 與水母飼養等主題。</description><pubDate>Sat, 24 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;來寫部落格吧&lt;a href=&quot;#來寫部落格吧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近在改版Discord機器人，將&lt;a href=&quot;https://github.com/Rapptz/discord.py&quot;&gt;discord.py&lt;/a&gt;升級到v2.0，並且升級Twitter API由v1.1到v2。但是discord.py 2.0是今年才回歸，目前資料還不是很多，在開發的時候花了不少時間在找範例資料。感覺需要一個地方來記錄與分享開發的坑。加上我原本就想來試試架部落格，只不過一直不知道要寫什麼內容，剛好趁這個機會練練手。&lt;/p&gt;&lt;p&gt;另一個動機是最近看Youtube上有人養水母的影片，有點被燒到想來試試看。所以之後可能也會有一些水族相關的文章，只不過現在還在評估中，在外租房空間實在有限，需要先來個大掃除。&lt;/p&gt;&lt;p&gt;總結以上，還有我原本就有在玩的懶人智慧家庭系統也可以來寫一些內容，這個部落格大概會有以下幾類文章：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Discord機器人&lt;/li&gt;
&lt;li&gt;智慧家庭(Home Assistant)
&lt;ul&gt;
&lt;li&gt;物聯網&lt;/li&gt;
&lt;li&gt;自動化&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hexo相關&lt;/li&gt;
&lt;li&gt;養水母&lt;/li&gt;
&lt;li&gt;隨便寫寫&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>