<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>成果物 | 浅井のブログ</title>
	<atom:link href="https://asaino.net/category/seikabutsu/feed/" rel="self" type="application/rss+xml" />
	<link>https://asaino.net</link>
	<description></description>
	<lastBuildDate>Fri, 25 Jul 2025 06:55:29 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://asaino.net/wp-content/uploads/2025/03/sakana-150x150.png</url>
	<title>成果物 | 浅井のブログ</title>
	<link>https://asaino.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>レーザーカッターを使ってスマートロックを自作</title>
		<link>https://asaino.net/make_smartlock/</link>
					<comments>https://asaino.net/make_smartlock/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Sat, 05 Jul 2025 16:55:30 +0000</pubDate>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=1029</guid>

					<description><![CDATA[なんで？ レーザーカッターで遊びたかった。 環境 機能 いまのとこそれくらい 使ったもの 参考 鍵を回す機能の参考にさせていただいた記事です。 設計編 Autodesk Fusion を利用。学生は無料だから使ったほうが [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h5 class="wp-block-heading"><span id="toc1">なんで？</span></h5>



<p>レーザーカッターで遊びたかった。</p>



<h5 class="wp-block-heading"><span id="toc2">環境</span></h5>



<ul class="wp-block-list">
<li>取っ手と鍵が一体化した鍵</li>



<li>既存の物理鍵、サムターンの機能を残したい</li>
</ul>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="736" src="https://asaino.net/wp-content/uploads/2025/07/image-1-4-1024x736.jpg" alt="" class="wp-image-1044" style="width:500px" srcset="https://asaino.net/wp-content/uploads/2025/07/image-1-4-1024x736.jpg 1024w, https://asaino.net/wp-content/uploads/2025/07/image-1-4-300x216.jpg 300w, https://asaino.net/wp-content/uploads/2025/07/image-1-4-768x552.jpg 768w, https://asaino.net/wp-content/uploads/2025/07/image-1-4.jpg 1108w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h5 class="wp-block-heading"><span id="toc3">機能</span></h5>



<ul class="wp-block-list">
<li>スマホアプリから開け締め</li>



<li>スマホを NFC タグにタッチして開け締め</li>



<li>超音波センサに手をかざして開け締め</li>



<li>今のステータスが LED で表示</li>
</ul>



<p>いまのとこそれくらい</p>



<h5 class="wp-block-heading"><span id="toc4">使ったもの</span></h5>



<ul class="wp-block-list">
<li>WAN からアクセスできるダッシュボード: HomeAssistant</li>



<li>ESP32 と HomeAssistant の通信用: MQTT</li>



<li>ESP32 の開発: MicroPython</li>



<li>サーボモータ: </li>
</ul>



<h5 class="wp-block-heading"><span id="toc5">参考</span></h5>



<p>鍵を回す機能の参考にさせていただいた記事です。</p>



<figure class="wp-block-embed is-type-rich is-provider-hatena-blog wp-block-embed-hatena-blog"><div class="wp-block-embed__wrapper">
<iframe title="３Dプリンターを使ってスマートロックを自作する　②鍵を回す機構を考える - DreamerDreamのブログ" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdreamerdream.hateblo.jp%2Fentry%2F2022%2F09%2F22%2F180000" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe>
</div></figure>



<h5 class="wp-block-heading"><span id="toc6">設計編</span></h5>



<p>Autodesk Fusion を利用。<br>学生は無料だから使ったほうがいいと思う。<br>買ったら1万円/月くらいする。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="577" height="541" src="https://asaino.net/wp-content/uploads/2025/07/image.png" alt="" class="wp-image-1030" style="width:500px" srcset="https://asaino.net/wp-content/uploads/2025/07/image.png 577w, https://asaino.net/wp-content/uploads/2025/07/image-300x281.png 300w" sizes="(max-width: 577px) 100vw, 577px" /></figure>



<p>そうそういないだろうが、これの CAD が欲しい人がいれば、声かけてくれれば共有するよ。</p>



<h5 class="wp-block-heading"><span id="toc7">制作編</span></h5>



<p>4mm のアクリル板をレーザーカット。<br>レーザーカッターには Beambox Pro (借り物) を使い、設定は出力70%、速度4mm/s、2回切り。<br>レーザーカッターは数分から長くて20分と加工が早く、試作 ↔ 修正のループが早くて良いね。</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="1024" height="768" src="https://asaino.net/wp-content/uploads/2025/07/image-1-1-1024x768.jpg" alt="" class="wp-image-1032" style="width:500px" srcset="https://asaino.net/wp-content/uploads/2025/07/image-1-1-1024x768.jpg 1024w, https://asaino.net/wp-content/uploads/2025/07/image-1-1-300x225.jpg 300w, https://asaino.net/wp-content/uploads/2025/07/image-1-1-768x576.jpg 768w, https://asaino.net/wp-content/uploads/2025/07/image-1-1.jpg 1138w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>立体的な部品は 3D プリンターも併用。</p>



<h5 class="wp-block-heading"><span id="toc8">できたもの</span></h5>



<p>作るのが楽しすぎて写真が全然なかったんです。ごめんなさい。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="787" height="853" src="https://asaino.net/wp-content/uploads/2025/07/image-1-2.jpg" alt="" class="wp-image-1033" style="width:auto;height:500px" srcset="https://asaino.net/wp-content/uploads/2025/07/image-1-2.jpg 787w, https://asaino.net/wp-content/uploads/2025/07/image-1-2-277x300.jpg 277w, https://asaino.net/wp-content/uploads/2025/07/image-1-2-768x832.jpg 768w" sizes="(max-width: 787px) 100vw, 787px" /></figure>



<p>iPhone のオートメーションで、NFC をタッチしたら HomeAssistant の API 叩いて鍵トグルとかにして便利。</p>



<h5 class="wp-block-heading"><span id="toc9">頑張った点</span></h5>



<ul class="wp-block-list">
<li>サーボモータのトルクが足りない！<br>→ 設計を頑張って極限まで抵抗を少なくした</li>



<li>サーボモータが120度くらいしか回らない！<br>→ ギア比でなんとかした</li>



<li>サーボモータとビープで LEDC (PWM 生成素子？) を奪い合いうまく動かない<br>→ 頑張ったけど解決できず、Arduino から MicroPython に言語を変更</li>
</ul>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/make_smartlock/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ProxmoxVE への HomeAssitant のインストール</title>
		<link>https://asaino.net/ha2mox/</link>
					<comments>https://asaino.net/ha2mox/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Sat, 05 Jul 2025 16:18:37 +0000</pubDate>
				<category><![CDATA[サーバ]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=1027</guid>

					<description><![CDATA[こだわりがなければ RaspberryPi にインストールか、普通の Linux サーバに HAOS（iso イメージになった HomeAssitant）を使用すればいいと思う。 LinuxInstall Home As [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こだわりがなければ RaspberryPi にインストールか、普通の Linux サーバに HAOS（iso イメージになった HomeAssitant）を使用すればいいと思う。</p>




<a rel="noopener" href="https://www.home-assistant.io/installation/linux" title="Linux" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://www.home-assistant.io/images/default-social.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Linux</div><div class="blogcard-snippet external-blogcard-snippet">Install Home Assistant on a Linux</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.home-assistant.io/installation/linux/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.home-assistant.io</div></div></div></div></a>



<p>今回は Proxmox を使用するので、.qcow2 イメージを使用して仮想サーバを作成する。</p>




<a rel="noopener" href="https://www.home-assistant.io/installation/alternative" title="Alternative" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://www.home-assistant.io/images/default-social.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Alternative</div><div class="blogcard-snippet external-blogcard-snippet">Alternative ways to install Home Assistant</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.home-assistant.io/installation/alternative/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.home-assistant.io</div></div></div></div></a>



<h5 class="wp-block-heading"><span id="toc1">余談</span></h5>



<p>昔、普通の Linux 用の iso イメージを利用して、Proxmox 上に HAOS を構築していたのだが、完全にやり方がわからなくなってしまった。ロストテクノロジーである。<br>そのやり方では、Proxmox 側からシャットダウン指示をかけてもうまくシャットダウンされず、物理サーバのメンテナンスに手間がかかったから、べつにいいんだけど。</p>



<h5 class="wp-block-heading"><span id="toc2">手順</span></h5>



<p>Proxmox にダウンロードしてきた .qcow2 ファイルをアップロードする。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">scp &lt;ダウンロードしたhaos_ova-15.0.qcow2ファイルのPath> root@&lt;Proxmoxの ip>:/var/lib/vz/template/iso</pre>



<p>仮想サーバを作成する。設定は以下の通り。</p>



<ul class="wp-block-list">
<li>BIOS：UEFI（EFI ディスクも追加）</li>



<li>ストレージ：なし</li>



<li>SecureBoot：OFF（UEFI のメニューから設定）</li>
</ul>



<p>Proxmox の Shell から .qcow2 ファイルをディスクとして追加。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">qm importdisk 108 /var/lib/vz/template/iso/haos_ova-15.0.qcow2 local-zfs --format qcow2</pre>



<ul class="wp-block-list">
<li>VM のハードウェアから、追加した未使用のディスクを接続。</li>



<li>オプションから、さっき接続したディスクの起動順位を一番上にする。</li>
</ul>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="601" height="240" src="https://asaino.net/wp-content/uploads/2025/03/image-5.png" alt="" class="wp-image-632" style="object-fit:cover" srcset="https://asaino.net/wp-content/uploads/2025/03/image-5.png 601w, https://asaino.net/wp-content/uploads/2025/03/image-5-300x120.png 300w" sizes="(max-width: 601px) 100vw, 601px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="672" height="419" src="https://asaino.net/wp-content/uploads/2025/03/image-6.png" alt="" class="wp-image-633" srcset="https://asaino.net/wp-content/uploads/2025/03/image-6.png 672w, https://asaino.net/wp-content/uploads/2025/03/image-6-300x187.png 300w" sizes="(max-width: 672px) 100vw, 672px" /></figure>
</div>
</div>



<p>起動してしばらくしたら、WebUI 用の IP が表示される。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="731" height="450" src="https://asaino.net/wp-content/uploads/2025/03/image-4.png" alt="" class="wp-image-631" srcset="https://asaino.net/wp-content/uploads/2025/03/image-4.png 731w, https://asaino.net/wp-content/uploads/2025/03/image-4-300x185.png 300w" sizes="(max-width: 731px) 100vw, 731px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="603" height="603" src="https://asaino.net/wp-content/uploads/2025/03/image-7.png" alt="" class="wp-image-634" srcset="https://asaino.net/wp-content/uploads/2025/03/image-7.png 603w, https://asaino.net/wp-content/uploads/2025/03/image-7-300x300.png 300w, https://asaino.net/wp-content/uploads/2025/03/image-7-150x150.png 150w" sizes="(max-width: 603px) 100vw, 603px" /></figure>
</div>
</div>



<p>あとはウィザードに従って設定しましょう。</p>



<h5 class="wp-block-heading"><span id="toc3">リバースプロキシを利用する場合</span></h5>



<p>以下の記事を参考に。</p>




<a rel="noopener" href="https://community.home-assistant.io/t/reverse-proxy-using-nginx/196954" title="Reverse proxy using NGINX" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://community-assets.home-assistant.io/original/4X/5/0/e/50e585faea85010ebb16d3d466f071ef90ec1393.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Reverse proxy using NGINX</div><div class="blogcard-snippet external-blogcard-snippet">⚠ This guide has been migrated from our website and might be outdated. Feel free to edit this guide to update it, and to...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://community.home-assistant.io/t/reverse-proxy-using-nginx/196954" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">community.home-assistant.io</div></div></div></div></a>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://asaino.net/haos_revp/" title="HAOS で Nginx リバースプロキシを使用する。" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://asaino.net/wp-content/themes/cocoon-master/images/no-image-160.png" alt="" class=" internal-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">HAOS で Nginx リバースプロキシを使用する。</div><div class="blogcard-snippet internal-blogcard-snippet">基本的に、以下のサイトのとおりに構成すれば問題ない？と思う。発生したエラー以前自分用に作成したリバースプロキシ用のテンプレートを使用して、HAOS に対してサブドメインを割り当てようとしたところ、以下のようなエラー（以降、IP エラーと呼ぶ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://asaino.net" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">asaino.net</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.03.30</div></div></div></div></a>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/ha2mox/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ESP32 の MicroPython を Wi-Fi 経由で更新する WebRepl の設定</title>
		<link>https://asaino.net/webrepl/</link>
					<comments>https://asaino.net/webrepl/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Sun, 29 Jun 2025 08:58:54 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=1019</guid>

					<description><![CDATA[どんなもの？ ESP32 を MicroPython (軽量版 Python) で制御し、なおかつそのプログラムを Wi-Fi 経由で更新できる。IoT づくりで、自由度の高いプログラミングをする際の個人的最適解だと思っ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h5 class="wp-block-heading"><span id="toc1">どんなもの？</span></h5>



<p>ESP32 を MicroPython (軽量版 Python) で制御し、なおかつそのプログラムを Wi-Fi 経由で更新できる。<br>IoT づくりで、自由度の高いプログラミングをする際の個人的最適解だと思っている。</p>



<p>自由度が低くて簡単なら HomeAssistant + ESPHome？</p>



<h5 class="wp-block-heading"><span id="toc2">設定方法</span></h5>



<p>開発環境 Thonny の「実行」→「インタプリタの設定」→「Install or update MicroPython」で、使っている ESP32 を指定し、MicroPython をインストール。</p>



<p>シェルが開くので、</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import webrepl_setup</pre>



<p>を実行し、ウィザードに従って Repl をインストール。</p>



<p>ESP32 の boot に以下のようなコードを書き込む。<br>固定 IP にしておくと多分大抵の環境で便利。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
import webrepl
import network
import time
import machine

# Wi-Fi設定
SSID = '**'
PASSWORD = '**'
IP_ADDRESS = '**'
SUBNET_MASK = '**'
GATEWAY = '**'
DNS_SERVER = '**'

# Wi-Fiに接続
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
    print('Connecting to network', end='')
    sta_if.active(True)
    sta_if.ifconfig((IP_ADDRESS, SUBNET_MASK, GATEWAY, DNS_SERVER))
    sta_if.connect(SSID, PASSWORD)
    
    # 接続待ち
    while not sta_if.isconnected():
        print('.', end='')
        time.sleep(1)
        
print('Network config:', sta_if.ifconfig())

# WebREPLを開始
webrepl.start()
</pre>



<p>ESP32 側に忘れず保存しておく。</p>



<h5 class="wp-block-heading"><span id="toc3">接続方法</span></h5>



<p>Thonny の「実行」→「インタプリタの設定」→「ポートまたは WebRepl」で、さっき設定した IP とパスワードを入れる。</p>



<h5 class="wp-block-heading"><span id="toc4">注意点</span></h5>



<p>main.py としてプログラムを ESP32 に書き込むと、boot.py 終了後に実行される。<br>Repl 接続中は Thonny から実行することになる。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/webrepl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>X11 forwarding でサーバのアプリケーションの画面を転送する</title>
		<link>https://asaino.net/x11/</link>
					<comments>https://asaino.net/x11/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Mon, 16 Jun 2025 09:47:02 +0000</pubDate>
				<category><![CDATA[サーバ]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=1008</guid>

					<description><![CDATA[できること SSH 接続先サーバで動くアプリケーションの画面をリモートへ転送する。 メリット デメリット 手順 Windows なら WSL2 をインストールしておく 少しでも快適に使うため、クライアント側で圧縮の設定を [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h5 class="wp-block-heading"><span id="toc1">できること</span></h5>



<figure class="wp-block-image size-large is-resized"><a href="https://asaino.net/wp-content/uploads/2025/06/image.png"><img decoding="async" width="1024" height="891" src="https://asaino.net/wp-content/uploads/2025/06/image-1024x891.png" alt="" class="wp-image-1009" style="width:500px" srcset="https://asaino.net/wp-content/uploads/2025/06/image-1024x891.png 1024w, https://asaino.net/wp-content/uploads/2025/06/image-300x261.png 300w, https://asaino.net/wp-content/uploads/2025/06/image-768x668.png 768w, https://asaino.net/wp-content/uploads/2025/06/image.png 1170w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>SSH 接続先サーバで動くアプリケーションの画面をリモートへ転送する。</p>



<p><strong>メリット</strong></p>



<ul class="wp-block-list">
<li>アプリケーションはサーバ側で開くので、サーバ側サブネットの Web コンソールにお手軽にアクセスできる</li>



<li>処理は完全にサーバで行われるので、LAN 側のみのアクセス制限がかけられている Web コンソールにもアクセスできる<br>ex) Buffalo ルータの設定画面</li>



<li>お好みのサイズ、アス比に変更できるので、リモートデスクトップより扱いやすい</li>



<li>SSH が繋がれば安定的にアクセスできる</li>
</ul>



<p><strong>デメリット</strong></p>



<ul class="wp-block-list">
<li>リモートデスクトップと比べて低圧縮、帯域も多く使うので、レスポンスは悪い</li>
</ul>



<h5 class="wp-block-heading"><span id="toc2">手順</span></h5>



<p>Windows なら WSL2 をインストールしておく</p>



<p>少しでも快適に使うため、クライアント側で圧縮の設定をする</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Host *
    Compression yes
    TCPKeepAlive yes</pre>



<p>サーバ側に日本語のフォントパックをいれる</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo apt-get install fonts-takao-pgothic</pre>



<p>サーバ側でセキュリティの設定</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">export XAUTHORITY=/home/username/.Xauthority</pre>



<p>X11 forwarding、圧縮を有効にしてアクセス</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ssh domain -XC</pre>



<p>お好きなアプリケーションを起動</p>



<h5 class="wp-block-heading"><span id="toc3">活用例</span></h5>



<p>VPN は通らないが SSH は通るネットワーク環境や、VPN の構築、運用がめんどくさいときに、Proxmox や LAN 内のみに公開しているサイトへのアクセスに便利だと思った。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/x11/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ポート開放ができないネットワークで Web サーバをお手軽に公開する (SSH ポートフォワード) v2</title>
		<link>https://asaino.net/portforward2/</link>
					<comments>https://asaino.net/portforward2/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Wed, 21 May 2025 02:24:04 +0000</pubDate>
				<category><![CDATA[サーバ]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=932</guid>

					<description><![CDATA[前提 構成 ポート開放が可能なネットワークにあるサーバ 1 に SSH サーバを立てるポート開放ができないネットワークにある サーバ 2 から、サーバ 1 に SSH トンネルを掘るサーバ 2 に来た通信をサーバ 1 に [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h5 class="wp-block-heading"><span id="toc1">前提</span></h5>



<ul class="wp-block-list">
<li>特定のポートを公開したい</li>



<li>ポート開放ができない</li>



<li>外部に対する SSH 接続は可能なネットワークに接続している</li>



<li>ポート開放が可能なネットワーク (ex. 実家) とサーバがある<br>(なければ格安のレンタルサーバとかでも)</li>
</ul>



<h5 class="wp-block-heading"><span id="toc2">構成</span></h5>



<figure class="wp-block-image size-large is-resized"><a href="https://asaino.net/wp-content/uploads/2025/04/Scan2025-04-27_214240.jpg"><img decoding="async" width="1024" height="652" src="https://asaino.net/wp-content/uploads/2025/04/Scan2025-04-27_214240-1024x652.jpg" alt="" class="wp-image-694" style="width:500px" srcset="https://asaino.net/wp-content/uploads/2025/04/Scan2025-04-27_214240-1024x652.jpg 1024w, https://asaino.net/wp-content/uploads/2025/04/Scan2025-04-27_214240-300x191.jpg 300w, https://asaino.net/wp-content/uploads/2025/04/Scan2025-04-27_214240-768x489.jpg 768w, https://asaino.net/wp-content/uploads/2025/04/Scan2025-04-27_214240-1536x978.jpg 1536w, https://asaino.net/wp-content/uploads/2025/04/Scan2025-04-27_214240.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>ポート開放が可能なネットワークにあるサーバ 1 に SSH サーバを立てる<br>ポート開放ができないネットワークにある サーバ 2 から、サーバ 1 に SSH トンネルを掘る<br>サーバ 2 に来た通信をサーバ 1 に転送する</p>



<h5 class="wp-block-heading"><span id="toc3">設定</span></h5>



<p><strong>サーバ 2 : 通信を転送するかの設定 </strong>(<code>/etc/ssh/sshd_config</code>)</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">GatewayPorts yes
AllowTcpForwarding yes</pre>



<p>公開鍵認証もできるようにしておく。</p>



<p><strong>サーバ 1 : 起動時に自動でサーバ 2 に SSH トンネルを掘る設定</strong></p>



<p><code data-enlighter-language="generic" class="EnlighterJSRAW">portforward.sh</code></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">autossh -M 0 -N -f \
  -o ServerAliveInterval=30 \
  -o ServerAliveCountMax=3 \
  -p &lt;ssh_port> \
  -R *:&lt;forward_port>:localhost:&lt;forward_port> \
  &lt;user_name>@&lt;domain></pre>



<p>-N, -f : SSH が確立したらシェルを開かず、バックグラウンドへ潜る<br>-R : サーバ側のポートをローカルへ転送する<br>* : サーバに来た全部の IP からの通信を転送</p>



<p>実行権限を付けて実行できるか試してみる。<br>起動時に自動で接続されてほしかったら、<code data-enlighter-language="generic" class="EnlighterJSRAW">crontab -e</code> に起動時このシェルスクリプトを実行するように書いておく。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@reboot /home/&lt;user_name>/portforward.sh</pre>



<p><strong>v1 と比べて、タイムアウト他の理由で切断があったとき自動再接続するので、安定性が格段に向上。</strong></p>



<h5 class="wp-block-heading"><span id="toc4">あとがき</span></h5>



<p>レオパレスの LeoNet でサーバを公開するために編み出した術。<br>本当はできないことをするので、何かしらの問題が起こっても自己責任で。<br>もっと良くするならば、autossh とかを使って、SSH 切断時のリトライとかの設定など。</p>



<p>VPN などを使う手法もあるかと思うが (実際別案件では VPN を使用している)、特定のポートへ通信を転送するだけなら、SSH のポートフォワードのほうが楽だし同じことができると思う。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/portforward2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>使わなくなったiPhoneを監視カメラに再利用　その1</title>
		<link>https://asaino.net/datsugoku1/</link>
					<comments>https://asaino.net/datsugoku1/#comments</comments>
		
		<dc:creator><![CDATA[東久部良 和真]]></dc:creator>
		<pubDate>Fri, 28 Mar 2025 15:49:15 +0000</pubDate>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[寄稿]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=487</guid>

					<description><![CDATA[背景と目的 背面割れとディスプレイの不調から、下取りにも買取業社にも出さなかったiPhoneがある。このiPhoneを自宅用の監視カメラとして再利用することを目的とする。 動作環境 脱獄ソフトの導入 iPhoneをMac [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h5 class="wp-block-heading"><span id="toc1">背景と目的</span></h5>



<p>背面割れとディスプレイの不調から、下取りにも買取業社にも出さなかったiPhoneがある。このiPhoneを自宅用の監視カメラとして再利用することを目的とする。</p>



<h5 class="wp-block-heading"><span id="toc2">動作環境</span></h5>



<ul class="wp-block-list">
<li>Macbook Pro early 2023 (MacOS Sonoma 15.3)</li>



<li>iPhone X (iOS 14.7)</li>
</ul>



<h5 class="wp-block-heading"><span id="toc3">脱獄ソフトの導入</span></h5>



<p>iPhoneをMacで遠隔操作するために、まずiPhoneを脱獄させるソフトをmacにインストールする。私はcheckra1nというソフトでiPhoneの脱獄を行った。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis: 100%">
<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis: 100%">

<a rel="noopener" href="https://checkra.in" title="checkra1n" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://checkra.in/img/icon.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">checkra1n</div><div class="blogcard-snippet external-blogcard-snippet">Jailbreak for iPhone 5s through iPhone X, iOS 12.0 and up</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://checkra.in" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">checkra.in</div></div></div></div></a>
</div>
</div>
</div>
</div>
</div>

<p>homebrewをインストールしているならば、homebrew経由でcheckra1nをインストールすることができる。</p>

<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">% brew install checkra1n</pre>

<p>あとはウィザードの指示に従って、MacとiPhoneをUSBで接続してiPhoneの脱獄をする。</p>
<h5><span id="toc4">DFUモードに入らない、、、</span></h5>
<p>指示に従っていくとiPhoneをDFUモードに入れないといけないのだが、何度やってもiPhoneがなかなかDFUモードに入ってくれない。いろいろ調べてみると、USB-A to LightningでないとDFUモードに入らないだとか。</p>
<p>↓使っていたケーブルはUSB-C to Lightningだった。</p>
<p></p>


<a rel="noopener" href="https://amzn.asia/d/c435FpW" title="Amazon.co.jp: Anker PowerLine lll Flow USB-C &amp; &#12521;&#12452;&#12488;&#12491;&#12531;&#12464; &#12465;&#12540;&#12502;&#12523; MFi&#35469;&#35388; &#32097;&#12414;&#12394;&#12356; USB PD&#23550;&#24540; &#12471;&#12522;&#12467;&#12531;&#32032;&#26448;&#25505;&#29992; iPhone 14 / 14 Plus / 14 Pro / 14 Pro Max / 13 &#21508;&#31278;&#23550;&#24540; (0.9m &#12521;&#12452;&#12488;&#12497;&#12540;&#12503;&#12523;) : &#12497;&#12477;&#12467;&#12531;&#12539;&#21608;&#36794;&#27231;&#22120;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.asia%2Fd%2Fc435FpW?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon.co.jp: Anker PowerLine lll Flow USB-C &amp; &#12521;&#12452;&#12488;&#12491;&#12531;&#12464; &#12465;&#12540;&#12502;&#12523; MFi&#35469;&#35388; &#32097;&#12414;&#12394;&#12356; USB PD&#23550;&#24540; &#12471;&#12522;&#12467;&#12531;&#32032;&#26448;&#25505;&#29992; iPhone 14 / 14 Plus / 14 Pro / 14 Pro Max / 13 &#21508;&#31278;&#23550;&#24540; (0.9m &#12521;&#12452;&#12488;&#12497;&#12540;&#12503;&#12523;) : &#12497;&#12477;&#12467;&#12531;&#12539;&#21608;&#36794;&#27231;&#22120;</div><div class="blogcard-snippet external-blogcard-snippet">Amazon.co.jp: Anker PowerLine lll Flow USB-C &amp; ライトニング ケーブル MFi認証 絡まない USB PD対応 シリコン素材採用 iPhone 14 / 14 Plus / 14 Pro / 1...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://amzn.asia/d/c435FpW" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">amzn.asia</div></div></div></div></a>

<p>そこで、近所のダイソーに行ってUSB-A to Lightningケーブルを購入し、再度検証</p>


<a rel="noopener" href="https://jp.daisonet.com/products/4984279770399" title="ＭＦｉ認証ライトニングケーブル　１ｍ" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fjp.daisonet.com%2Fproducts%2F4984279770399?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">ＭＦｉ認証ライトニングケーブル　１ｍ</div><div class="blogcard-snippet external-blogcard-snippet">原産国：中国 材質：PVC 商品サイズ：100cm ×1.6cm ×0.9cm 内容量：1個入 種類：アソートなし ＭＦｉ認証ライトニングケーブルになります。 USBポートから充電できるスマートフォン、ゲーム機など充電可能 コネクタ形状１：...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://jp.daisonet.com/products/4984279770399" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">jp.daisonet.com</div></div></div></div></a>

<h5><span id="toc5">脱獄に成功</span></h5>
<p>再度実行するときちんとDFUモードに入り、以下図に示すようにcheckra1nによる脱獄に成功した。</p>

<figure class="wp-block-image size-large is-resized"><a href="https://asaino.net/wp-content/uploads/2025/03/IMG_7880.jpg"><img decoding="async" width="1024" height="936" class="wp-image-571" style="width: 380px;height: auto" src="https://asaino.net/wp-content/uploads/2025/03/IMG_7880-1024x936.jpg" alt="" srcset="https://asaino.net/wp-content/uploads/2025/03/IMG_7880-1024x936.jpg 1024w, https://asaino.net/wp-content/uploads/2025/03/IMG_7880-300x274.jpg 300w, https://asaino.net/wp-content/uploads/2025/03/IMG_7880-768x702.jpg 768w, https://asaino.net/wp-content/uploads/2025/03/IMG_7880-1536x1404.jpg 1536w, https://asaino.net/wp-content/uploads/2025/03/IMG_7880.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/datsugoku1/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>navidromeを用いた自分専用YoutubeMusicの構築</title>
		<link>https://asaino.net/navidrome/</link>
					<comments>https://asaino.net/navidrome/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Fri, 28 Mar 2025 07:29:38 +0000</pubDate>
				<category><![CDATA[サーバ]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=511</guid>

					<description><![CDATA[背景 普段音楽ストリーミングには YoutubeMusic を使用しているのだが、以下のような若干の不満があった。 そこで、navidrome を用いて自分専用の音楽ストリーミングサーバを立ててみる。よく見ると全部課金  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h5 class="wp-block-heading"><span id="toc1">背景</span></h5>



<p>普段音楽ストリーミングには YoutubeMusic を使用しているのだが、以下のような若干の不満があった。</p>



<ul class="wp-block-list">
<li>本来は手持ちの楽曲をアップロードし、自分専用に使用できるらしいが、アカウントを種類的にアップロードできない。</li>



<li>スマホアプリ版の YoutubeMusic では、無課金ではバックグラウンド再生できない。</li>



<li>ブラウザ版ではバックグラウンド再生できるが、かなり不安定。</li>



<li>無課金では広告がはいる。</li>
</ul>



<p>そこで、navidrome を用いて自分専用の音楽ストリーミングサーバを立ててみる。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-grey-color">よく見ると全部課金 or 設定の変更で対応できそうだね&#8230;<br>でもオンプレのほうがロマンがあるからいいんです。</mark></p>



<h5 class="wp-block-heading"><span id="toc2">手順</span></h5>



<p>公式ドキュメントが非常にわかりやすいので、インストールはこれのまま。</p>




<a rel="noopener" href="https://www.navidrome.org/docs/installation/linux" title="Linux Install" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.navidrome.org%2Fdocs%2Finstallation%2Flinux?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Linux Install</div><div class="blogcard-snippet external-blogcard-snippet">Steps to install on Ubuntu Linux (and other Debian based distros)</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.navidrome.org/docs/installation/linux/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.navidrome.org</div></div></div></div></a>



<p>参考文献では手動インストールを行っていたが、ビルド済みのバイナリを用いたインストール方法で特に問題はなかった。</p>



<p>今回は WindowsPC のエクスプローラからコピペで楽曲をアップロードしたかったため、音楽フォルダには samba ストレージをマウントし指定した。</p>



<p>また、nginx のリバースプロキシで navidrome サーバにサブドメインを与えた。</p>



<h5 class="wp-block-heading"><span id="toc3">PCクライアント</span></h5>



<p>デスクトップ版は <a href="https://github.com/jeffvli/feishin">feishin</a> を試したが、「次に再生」等の仕様が慣れず、純正の Web クライアントをメイン使いするようにした。<br>Web アプリとしてタスクバーにインストールし、独立ウィンドウとして開く。</p>



<figure class="wp-block-image size-full is-resized"><a href="https://asaino.net/wp-content/uploads/2025/03/navidrome.jpg"><img decoding="async" width="788" height="822" src="https://asaino.net/wp-content/uploads/2025/03/navidrome.jpg" alt="" class="wp-image-518" style="width:508px;height:auto" srcset="https://asaino.net/wp-content/uploads/2025/03/navidrome.jpg 788w, https://asaino.net/wp-content/uploads/2025/03/navidrome-288x300.jpg 288w, https://asaino.net/wp-content/uploads/2025/03/navidrome-768x801.jpg 768w" sizes="(max-width: 788px) 100vw, 788px" /></a></figure>



<h5 class="wp-block-heading"><span id="toc4">スマホクライアント</span></h5>



<p>navidrome の純正クライアントは、ウィンドウが一定以上小さくなったとき、画面下に再生バーを表示してくれないし、16:9 のジャケットを回す演出が許容できなかった。</p>



<figure class="wp-block-gallery has-nested-images columns-2 wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" style="border-style:none;border-width:0px">
<figure class="wp-block-image size-large"><a href="https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155622-e1743145242136.png"><img decoding="async" width="560" height="642" data-id="519" src="https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155622-e1743145242136.png" alt="" class="wp-image-519" srcset="https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155622-e1743145242136.png 560w, https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155622-e1743145242136-262x300.png 262w" sizes="(max-width: 560px) 100vw, 560px" /></a><figcaption class="wp-element-caption">「開く」って書いてる丸を押すと再生画面が開く</figcaption></figure>



<figure class="wp-block-image size-large" style="margin-right:0;margin-left:0"><a href="https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155611-e1743145265221.png"><img decoding="async" width="561" height="642" data-id="520" src="https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155611-e1743145265221.png" alt="" class="wp-image-520" srcset="https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155611-e1743145265221.png 561w, https://asaino.net/wp-content/uploads/2025/03/スクリーンショット-2025-03-28-155611-e1743145265221-262x300.png 262w" sizes="(max-width: 561px) 100vw, 561px" /></a><figcaption class="wp-element-caption">これ、回ります</figcaption></figure>
</figure>



<p>調べたらいくつかクライアントアプリの候補が出てきたが、適当に使ってみて以下に決めた。</p>




<a rel="noopener" href="https://apps.apple.com/jp/app/amperfy-music/id1530145038?platform=iphone" title="‎Amperfy Music" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/1d/db/a2/1ddba2dd-36f2-cb1b-2891-c7616b93cace/AppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-85-220.png/1200x630wa.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">‎Amperfy Music</div><div class="blogcard-snippet external-blogcard-snippet">‎Amperfy allows you to play music or podcasts from an Ampache or Subsonic server.Experience a clean, simplistic and mode...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://apps.apple.com/jp/app/amperfy-music/id1530145038" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">apps.apple.com</div></div></div></div></a>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://asaino.net/wp-content/uploads/2025/03/S__6201478_0b.jpg"><img decoding="async" width="870" height="861" data-id="538" src="https://asaino.net/wp-content/uploads/2025/03/S__6201478_0b.jpg" alt="" class="wp-image-538" srcset="https://asaino.net/wp-content/uploads/2025/03/S__6201478_0b.jpg 870w, https://asaino.net/wp-content/uploads/2025/03/S__6201478_0b-300x297.jpg 300w, https://asaino.net/wp-content/uploads/2025/03/S__6201478_0b-768x760.jpg 768w" sizes="(max-width: 870px) 100vw, 870px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://asaino.net/wp-content/uploads/2025/03/S__6201480_0b.jpg"><img decoding="async" width="870" height="465" data-id="537" src="https://asaino.net/wp-content/uploads/2025/03/S__6201480_0b.jpg" alt="" class="wp-image-537" srcset="https://asaino.net/wp-content/uploads/2025/03/S__6201480_0b.jpg 870w, https://asaino.net/wp-content/uploads/2025/03/S__6201480_0b-300x160.jpg 300w, https://asaino.net/wp-content/uploads/2025/03/S__6201480_0b-768x410.jpg 768w" sizes="(max-width: 870px) 100vw, 870px" /></a></figure>
</figure>



<h5 class="wp-block-heading"><span id="toc5">まとめ</span></h5>



<p>当初の目的、</p>



<ul class="wp-block-list">
<li>手持ちの楽曲をアップロードできる</li>



<li>バックグラウンド再生できる</li>



<li>もちろん広告は入らない</li>
</ul>



<p>音楽ストリーマが作れた。</p>



<h5 class="wp-block-heading"><span id="toc6">参考文献</span></h5>




<a rel="noopener" href="https://zenn.dev/alice37/articles/f81e1704056c4b" title="Subsonic APIサーバ（Navidrome）のススメ" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://res.cloudinary.com/zenn/image/upload/s--Jwb-oHMm--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Subsonic%2520API%25E3%2582%25B5%25E3%2583%25BC%25E3%2583%2590%25EF%25BC%2588Navidrome%25EF%25BC%2589%25E3%2581%25AE%25E3%2582%25B9%25E3%2582%25B9%25E3%2583%25A1%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Alice%2520Rose%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzlmMThmZDdjMzMuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Subsonic APIサーバ（Navidrome）のススメ</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://zenn.dev/alice37/articles/f81e1704056c4b" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">zenn.dev</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/navidrome/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>コロナエアコン（CSH-B288G）のサーミスタエラーの修理</title>
		<link>https://asaino.net/corona-airconditionar-fix/</link>
					<comments>https://asaino.net/corona-airconditionar-fix/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Thu, 27 Mar 2025 14:49:53 +0000</pubDate>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=454</guid>

					<description><![CDATA[症状 エアコン｜エラーサイン一覧自動お掃除機能付きセパレートエアコン　(Z、SP、SPKシリーズ)(S、SKシ...www.corona.co.jp コロナエアコン（CSH-B288G）の電源ランプが点灯するようになり、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h5 class="wp-block-heading"><span id="toc1">症状</span></h5>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1024" height="768" src="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-26-50_809-中.jpg" alt="" class="wp-image-457" style="width:500px" srcset="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-26-50_809-中.jpg 1024w, https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-26-50_809-中-300x225.jpg 300w, https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-26-50_809-中-768x576.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>




<a rel="noopener" href="https://www.corona.co.jp/support/error/aircon/index.html" title="エアコン｜エラーサイン一覧" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.corona.co.jp%2Fsupport%2Ferror%2Faircon%2Findex.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">エアコン｜エラーサイン一覧</div><div class="blogcard-snippet external-blogcard-snippet">自動お掃除機能付きセパレートエアコン　(Z、SP、SPKシリーズ)(S、SKシ...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.corona.co.jp/support/error/aircon/index.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.corona.co.jp</div></div></div></div></a>



<p>コロナエアコン（CSH-B288G）の電源ランプが点灯するようになり、調べてみると「室内熱交センサの異常」とのこと。</p>



<h5 class="wp-block-heading"><span id="toc2">修理</span></h5>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="1024" height="768" src="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-31-47_709.jpg" alt="" class="wp-image-458 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-31-47_709.jpg 1024w, https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-31-47_709-300x225.jpg 300w, https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-31-47_709-768x576.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure><div class="wp-block-media-text__content">
<p>とりあえず分解してみる。<br>ネジは、一番大きい外装パーツの吹き出しフラップの下側に２本と、内外渡し線のカバー用の１本。</p>
</div></div>



<div class="wp-block-media-text" style="padding-top:0;padding-bottom:0"><figure class="wp-block-media-text__media"><img decoding="async" width="576" height="609" src="https://asaino.net/wp-content/uploads/2025/03/2024-07-13_00-01-47_849-1-e1743087610260.jpg" alt="" class="wp-image-460 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2024-07-13_00-01-47_849-1-e1743087610260.jpg 576w, https://asaino.net/wp-content/uploads/2025/03/2024-07-13_00-01-47_849-1-e1743087610260-284x300.jpg 284w" sizes="(max-width: 576px) 100vw, 576px" /></figure><div class="wp-block-media-text__content">
<p>ここらへんが制御系。</p>
</div></div>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="576" height="768" src="https://asaino.net/wp-content/uploads/2025/03/2024-07-12_23-42-22_907.jpg" alt="" class="wp-image-461 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2024-07-12_23-42-22_907.jpg 576w, https://asaino.net/wp-content/uploads/2025/03/2024-07-12_23-42-22_907-225x300.jpg 225w" sizes="(max-width: 576px) 100vw, 576px" /></figure><div class="wp-block-media-text__content">
<p>ガバっと外れる。</p>
</div></div>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="576" height="768" src="https://asaino.net/wp-content/uploads/2025/03/2024-07-12_23-42-49_203.jpg" alt="" class="wp-image-464 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2024-07-12_23-42-49_203.jpg 576w, https://asaino.net/wp-content/uploads/2025/03/2024-07-12_23-42-49_203-225x300.jpg 225w" sizes="(max-width: 576px) 100vw, 576px" /></figure><div class="wp-block-media-text__content">
<p>これが「室内熱交センサ」、だと思う。</p>
</div></div>



<p>これの同機種のエアコンが宅内にあったので、このパーツを交換したところエラーが消えて正常に動くようになった。<br>ただ、これの純正交換パーツが探しても見つからなかったため、Amazonでそれっぽいパーツを買って試してみる。</p>




<a rel="noopener" href="https://www.amazon.co.jp/dp/B07MCT7STV?ref=ppx_yo2ov_dt_b_fed_asin_title" title="uxcell 温度センサー 10K NTCサーミスタプローブ 銅 感応温度 温度センサー エアコン用 全長40 cm 2個" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://m.media-amazon.com/images/I/41EDQS3YqTL._BO30,255,255,255_UF900,850_SR1910,1000,0,C_ZA15,500,900,420,420,AmazonEmber,50,4,0,0_PIRIOTHREEANDHALF-medium,BottomLeft,30,-20_QL100_.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">uxcell 温度センサー 10K NTCサーミスタプローブ 銅 感応温度 温度センサー エアコン用 全長40 cm 2個</div><div class="blogcard-snippet external-blogcard-snippet">仕様：タイプ：NTCサーミスタプローブ抵抗: 10K全長：40 cm温度範囲の測定：-30°C~+ 105°Cセンサーヘッドサイズ：25 mm x 5 mm(L*D)センサーヘッド材質：銅パッケージ内容：2 x 温度センサー 説明：1.温度...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.amazon.co.jp/dp/B07MCT7STV" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.amazon.co.jp</div></div></div></div></a>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="768" height="576" src="https://asaino.net/wp-content/uploads/2025/03/2025-01-04_16-14-47_955-e1743087441299.jpg" alt="" class="wp-image-470 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2025-01-04_16-14-47_955-e1743087441299.jpg 768w, https://asaino.net/wp-content/uploads/2025/03/2025-01-04_16-14-47_955-e1743087441299-300x225.jpg 300w" sizes="(max-width: 768px) 100vw, 768px" /></figure><div class="wp-block-media-text__content">
<p>届いたパーツ。<br>最初金属ケースが付いていないサーミスタが届いたので、返品して再注文してみたら、ちゃんと金属ケース付きが届いた。<br>でもコネクタが違う。</p>
</div></div>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="576" height="338" src="https://asaino.net/wp-content/uploads/2025/03/2025-01-04_16-28-26_972-e1743087633813.jpg" alt="" class="wp-image-471 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2025-01-04_16-28-26_972-e1743087633813.jpg 576w, https://asaino.net/wp-content/uploads/2025/03/2025-01-04_16-28-26_972-e1743087633813-300x176.jpg 300w" sizes="(max-width: 576px) 100vw, 576px" /></figure><div class="wp-block-media-text__content">
<p>ので、適当にはんだ付け。<br>このあと線が細すぎて熱収縮チューブじゃうまく保護できなかったので、マスキングテープで済ました。</p>
</div></div>



<p>繋いだらエラーが消えて動いた。<br>やったね。</p>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="1920" height="1440" src="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_17-54-05_942.jpg" alt="" class="wp-image-472 size-full"/></figure><div class="wp-block-media-text__content">
<p>金属ケースの太さが違ったので、結束バンドで固定。<br>ブログ書いてて気付いたけど、付ける場所違うね。<br>エラーが出たら直す。</p>
</div></div>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="576" height="768" src="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-12-47_501.jpg" alt="" class="wp-image-476 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-12-47_501.jpg 576w, https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-12-47_501-225x300.jpg 225w" sizes="(max-width: 576px) 100vw, 576px" /></figure><div class="wp-block-media-text__content">
<p>「この空間にこのコードの量はいらなくない！？」ってなりながら、適当に結束バンドで結線しながら格納。</p>
</div></div>



<div class="wp-block-media-text"><figure class="wp-block-media-text__media"><img decoding="async" width="1024" height="768" src="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-44-22_557.jpg" alt="" class="wp-image-477 size-full" srcset="https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-44-22_557.jpg 1024w, https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-44-22_557-300x225.jpg 300w, https://asaino.net/wp-content/uploads/2025/03/2025-03-27_18-44-22_557-768x576.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure><div class="wp-block-media-text__content">
<p>直った。</p>
</div></div>



<h5 class="wp-block-heading"><span id="toc3">最後に</span></h5>



<p>今回の成果：コード止めるやつ、ネジ１本。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/corona-airconditionar-fix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>トップページ用ウィジェットの作成</title>
		<link>https://asaino.net/top-widget/</link>
					<comments>https://asaino.net/top-widget/#comments</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 17:28:45 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=390</guid>

					<description><![CDATA[このブログの備忘録的側面が大きすぎて、他の人に自分がどんなことしてるか見てもらうのに適していなかったので、トップページを刷新。真面目に書いた記事には「成果物」カテゴリをつけて、そのカテゴリがついた記事だけ一覧表示させるウ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>このブログの備忘録的側面が大きすぎて、他の人に自分がどんなことしてるか見てもらうのに適していなかったので、トップページを刷新。<br>真面目に書いた記事には「成果物」カテゴリをつけて、そのカテゴリがついた記事だけ一覧表示させるウィジェットを作った。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-grey-color">なんかもっと王道なやり方がある気がするが、目的は達成できたのでよしとする。</mark><br>共同作成者のChatGPTには感謝申し上げます。</p>



<p>↓作ったトップページ</p>



<figure class="wp-block-image size-full is-resized"><a href="https://asaino.net/wp-content/uploads/2025/03/image.png"><img decoding="async" width="738" height="539" src="https://asaino.net/wp-content/uploads/2025/03/image.png" alt="" class="wp-image-392" style="width:435px;height:auto" srcset="https://asaino.net/wp-content/uploads/2025/03/image.png 738w, https://asaino.net/wp-content/uploads/2025/03/image-300x219.png 300w" sizes="(max-width: 738px) 100vw, 738px" /></a></figure>



<h5 class="wp-block-heading"><span id="toc1">成果物ウィジェット</span></h5>



<p>「成果物」カテゴリがついた記事を、新しい順に10件表示する。<br><code>外観 &gt; テーマファイルエディタ &gt; functions.php</code>に記載</p>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function custom_category_card_widget() {
    $args = array(
        'post_type'      => 'post',
        'posts_per_page' => 10,
        'category_name'  => 'seikabutsu',
    );
    $query = new WP_Query($args);
    // ラッパー div を追加
    $html = '&lt;div class="custom-widget">&lt;div class="custom-post-cards">';
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $link    = get_permalink();
            $title   = get_the_title();
            $date    = get_the_date('Y.n.j');
            $excerpt = get_the_excerpt();
            $excerpt = str_replace('[...]', ' ...', $excerpt);
            $thumb   = has_post_thumbnail()
                ? get_the_post_thumbnail(get_the_ID(), 'medium')
                : '&lt;img src="https://via.placeholder.com/180x180?text=No+Image" alt="No Image">';
            // カテゴリをバッジ風に出力
            $categories = get_the_category();
            $cat_labels = '';
            if (!empty($categories)) {
                foreach ($categories as $category) {
                    $cat_labels .= '&lt;span class="card-category">' . esc_html($category->name) . '&lt;/span>';
                }
            }
            $html .= '&lt;a class="custom-post-card" href="' . esc_url($link) . '">';
            $html .= '  &lt;div class="card-thumb">' . $thumb . '&lt;/div>';
            $html .= '  &lt;div class="card-meta">';
            $html .= '    &lt;div class="card-header">';
            $html .= '      &lt;div class="card-title">' . esc_html($title) . '&lt;/div>';
            $html .= '      &lt;div class="card-date">';
            $html .= '        &lt;span class="date-text">' . esc_html($date) . '&lt;/span>' . $cat_labels;
            $html .= '      &lt;/div>';
            $html .= '    &lt;/div>';
            $html .= '    &lt;div class="card-excerpt">' . esc_html($excerpt) . '&lt;/div>';
            $html .= '  &lt;/div>';
            $html .= '&lt;/a>';
        }
    } else {
        $html .= '&lt;p>該当する記事がありません&lt;/p>';
    }
    $html .= '&lt;/div>&lt;/div>'; // custom-post-cards と custom-widget の終了タグ
    wp_reset_postdata();
    return $html;
}
add_shortcode('seikabutsu_widget', 'custom_category_card_widget');</pre>



<h5 class="wp-block-heading"><span id="toc2">すべての新着記事ウィジェット</span></h5>



<pre class="EnlighterJSRAW" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function custom_category_card_widget() {
    $args = array(
        'post_type'      => 'post',
        'posts_per_page' => 10,
        'category_name'  => 'seikabutsu',
    );
    $query = new WP_Query($args);
    // ラッパー div を追加
    $html = '&lt;div class="custom-widget">&lt;div class="custom-post-cards">';
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $link    = get_permalink();
            $title   = get_the_title();
            $date    = get_the_date('Y.n.j');
            $excerpt = get_the_excerpt();
            $excerpt = str_replace('[...]', ' ...', $excerpt);
            $thumb   = has_post_thumbnail()
                ? get_the_post_thumbnail(get_the_ID(), 'medium')
                : '&lt;img src="https://via.placeholder.com/180x180?text=No+Image" alt="No Image">';
            // カテゴリをバッジ風に出力
            $categories = get_the_category();
            $cat_labels = '';
            if (!empty($categories)) {
                foreach ($categories as $category) {
                    $cat_labels .= '&lt;span class="card-category">' . esc_html($category->name) . '&lt;/span>';
                }
            }
            $html .= '&lt;a class="custom-post-card" href="' . esc_url($link) . '">';
            $html .= '  &lt;div class="card-thumb">' . $thumb . '&lt;/div>';
            $html .= '  &lt;div class="card-meta">';
            $html .= '    &lt;div class="card-header">';
            $html .= '      &lt;div class="card-title">' . esc_html($title) . '&lt;/div>';
            $html .= '      &lt;div class="card-date">';
            $html .= '        &lt;span class="date-text">' . esc_html($date) . '&lt;/span>' . $cat_labels;
            $html .= '      &lt;/div>';
            $html .= '    &lt;/div>';
            $html .= '    &lt;div class="card-excerpt">' . esc_html($excerpt) . '&lt;/div>';
            $html .= '  &lt;/div>';
            $html .= '&lt;/a>';
        }
    } else {
        $html .= '&lt;p>該当する記事がありません&lt;/p>';
    }
    $html .= '&lt;/div>&lt;/div>'; // custom-post-cards と custom-widget の終了タグ
    wp_reset_postdata();
    return $html;
}
add_shortcode('seikabutsu_widget', 'custom_category_card_widget');</pre>



<h5 class="wp-block-heading"><span id="toc3">CSS</span></h5>



<pre class="EnlighterJSRAW" data-enlighter-language="css" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">/* ■ ウィジェット全体のラッパ */
.custom-widget .custom-post-cards {
  display: flex;
  flex-direction: column;
 &amp;nbsp;gap: 0px; /* 成果物ウィジェット：カード間のスペースを小さく */
}
/* 新着記事ウィジェット専用：カード間の余白を完全になくす */
.custom-widget .custom-post-cards.new-posts {
  gap: 0 !important;
}
/* ■ 個別カードのベース（共通） */
.custom-widget .custom-post-card {
  display: flex;
  border: 1px solid #ddd;
  border-radius: 8px;
  background-color: #fff;
  text-decoration: none;
  color: inherit;
  overflow: hidden;
  padding: 12px;
}
/* 成果物ウィジェット専用（画像あり）の場合：外枠を削除し、左側の余白をなくす */
.custom-widget .custom-post-cards:not(.new-posts) .custom-post-card {
  border: none !important;
  padding-left: 0;
}
/* 成果物ウィジェット専用：画像とテキスト情報の間に余白を追加 */
.custom-widget .custom-post-card:not(.new-posts) .card-meta {
  margin-left: 20px;
}
/* ※ スマホ版ではこの余白を少し縮める */
@media (max-width: 768px) {
  .custom-widget .custom-post-card:not(.new-posts) .card-meta {
    margin-left: 10px;
  }
}
/* ■ サムネイル領域（成果物ウィジェット用） */
.custom-widget .card-thumb {
  width: 180px;
  height: 180px;
  flex-shrink: 0;
}
.custom-widget .card-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* ■ テキスト情報領域 */
.custom-widget .card-meta {
  flex: 1;
  display: flex;
  flex-direction: column;
}
/* ■ ヘッダー：タイトルと日付＋カテゴリを縦に配置 */
.custom-widget .card-header {
  display: flex;
  flex-direction: column;
  margin-bottom: 8px;
}
/* タイトル（1行目） */
.custom-widget .card-title {
  font-size: 18px;
  font-weight: bold;
  margin: 0;
}
/* 日付＋カテゴリ（2行目）、右揃え */
.custom-widget .card-date {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  margin-top: 4px;
}
.custom-widget .date-text {
  font-size: 14px;
  color: #999;
  margin-right: 12px;
}
/* ■ カテゴリバッジ */
.custom-widget .card-category {
  display: inline-block;
  font-size: 11px;
  color: #999;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0 10px;
  margin-left: 8px;
  background-color: transparent;
}
/* ■ 抜粋（成果物ウィジェット用）：文字サイズを少し小さくし、通常配置に */
.custom-widget .card-excerpt {
  font-size: 13px;
  color: #555;
  /* margin-top: auto; を削除して、通常の流れで配置 */
}
/* ■ スマホ版 */
@media (max-width: 768px) {
  .custom-widget .card-title {
    font-size: 16px;
  }
  .custom-widget .date-text {
    font-size: 13px;
  }
  .custom-widget .card-category {
    font-size: 10px;
    padding: 0 8px;
  }
  /* スマホではサムネイル画像を小さめに */
  .custom-widget .card-thumb {
    width: 100px;
    height: 100px;
  }
  /* スマホでは抜粋部分を非表示 */
  .custom-widget .card-excerpt {
    display: none;
  }
}
/* ■ 新着記事ウィジェット専用の調整 */
/* 個別カード（新着記事）の枠を削除し、カード内の余白も小さく */
.custom-widget .custom-post-card.new-posts {
  border: none;
  padding: 0px;
}</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/top-widget/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>松下電工製火災報知器SH4600の電池交換</title>
		<link>https://asaino.net/denchi_sh4600/</link>
					<comments>https://asaino.net/denchi_sh4600/#respond</comments>
		
		<dc:creator><![CDATA[浅井和久]]></dc:creator>
		<pubDate>Sun, 19 Jan 2025 07:13:02 +0000</pubDate>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[成果物]]></category>
		<guid isPermaLink="false">https://asaino.net/?p=217</guid>

					<description><![CDATA[松下電工製火災報知器SH4600が、電池残量が減っていると騒ぐようになったので、Amazonで専用電池を買って交換した。 交換用電池 【5個セット】パナソニック対応 SH284552520 交換用電池 住宅火災警報器専用 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>松下電工製火災報知器SH4600が、電池残量が減っていると騒ぐようになったので、Amazonで専用電池を買って交換した。</p>



<h5 class="wp-block-heading"><span id="toc1">交換用電池</span></h5>




<a rel="noopener" href="https://www.amazon.co.jp/dp/B085L8PTT9?ref=ppx_yo2ov_dt_b_fed_asin_title" title="【5個セット】パナソニック対応 SH284552520 交換用電池 住宅火災警報器専用リチウム電池 3V 音声 CR-AG/C25P電池対応" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://m.media-amazon.com/images/I/41MEn+0S-IL._BO30,255,255,255_UF900,850_SR1910,1000,0,C_ZA68,500,900,420,420,AmazonEmber,50,4,0,0_PIRIOFOURANDHALF-medium,BottomLeft,30,-20_QL100_.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【5個セット】パナソニック対応 SH284552520 交換用電池 住宅火災警報器専用リチウム電池 3V 音声 CR-AG/C25P電池対応</div><div class="blogcard-snippet external-blogcard-snippet">商品の説明 ■電圧：3V ■容量：2400mAh ■純正品と完全互換</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.amazon.co.jp/dp/B085L8PTT9" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.amazon.co.jp</div></div></div></div></a>



<p><p>2,990円</p></p>



<h5 class="wp-block-heading"><span id="toc2">交換</span></h5>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="1023" height="768" data-id="223" src="https://asaino.net/wp-content/uploads/2025/01/MxyjsqxnRfaemPeRcl_w4w.jpg" alt="" class="wp-image-223" srcset="https://asaino.net/wp-content/uploads/2025/01/MxyjsqxnRfaemPeRcl_w4w.jpg 1023w, https://asaino.net/wp-content/uploads/2025/01/MxyjsqxnRfaemPeRcl_w4w-300x225.jpg 300w, https://asaino.net/wp-content/uploads/2025/01/MxyjsqxnRfaemPeRcl_w4w-768x577.jpg 768w" sizes="(max-width: 1023px) 100vw, 1023px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="968" height="726" data-id="219" src="https://asaino.net/wp-content/uploads/2025/01/szSIy611Rpa8qv6kwgv2Jw-edited.jpg" alt="" class="wp-image-219" srcset="https://asaino.net/wp-content/uploads/2025/01/szSIy611Rpa8qv6kwgv2Jw-edited.jpg 968w, https://asaino.net/wp-content/uploads/2025/01/szSIy611Rpa8qv6kwgv2Jw-edited-300x225.jpg 300w, https://asaino.net/wp-content/uploads/2025/01/szSIy611Rpa8qv6kwgv2Jw-edited-768x576.jpg 768w" sizes="(max-width: 968px) 100vw, 968px" /></figure>
</figure>
]]></content:encoded>
					
					<wfw:commentRss>https://asaino.net/denchi_sh4600/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
