<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Takeru O'oyama</title>
    <description>The latest articles on DEV Community by Takeru O'oyama (@tqer39).</description>
    <link>https://dev.to/tqer39</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F467112%2F6d6d24ad-6898-49c2-9ac4-ee12e5f67e96.jpg</url>
      <title>DEV Community: Takeru O'oyama</title>
      <link>https://dev.to/tqer39</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tqer39"/>
    <language>en</language>
    <item>
      <title>Setting Up Home Assistant on a Raspberry Pi 3 Model B</title>
      <dc:creator>Takeru O'oyama</dc:creator>
      <pubDate>Mon, 14 Oct 2024 06:04:23 +0000</pubDate>
      <link>https://dev.to/tqer39/setting-up-home-assistant-on-a-raspberry-pi-3-model-b-5cl4</link>
      <guid>https://dev.to/tqer39/setting-up-home-assistant-on-a-raspberry-pi-3-model-b-5cl4</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As part of my DIY smart home project, I've decided to explore Home Assistant to bridge various functionalities.&lt;br&gt;
（Click &lt;a href="https://qiita.com/tqer39/items/b88f9051330813d98b97" rel="noopener noreferrer"&gt;here&lt;/a&gt; to read the article in Japanese.）&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F311g9qbq006eiziu6aw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F311g9qbq006eiziu6aw9.png" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previously, I was running Homebridge on a Raspberry Pi. However, after moving to a new place, several changes prompted me to reconsider my setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Wi-Fi SSID changed.&lt;/li&gt;
&lt;li&gt;The number of IoT devices increased or decreased.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Given these changes, I thought about reintroducing Homebridge. But upon researching, I discovered &lt;a href="https://www.home-assistant.io/" rel="noopener noreferrer"&gt;Home Assistant&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After skimming through the Reddit post &lt;a href="https://www.reddit.com/r/homebridge/comments/saugce/homebridge_vs_home_assistant_unbiased_opinion/" rel="noopener noreferrer"&gt;Homebridge vs Home Assistant, unbiased opinion&lt;/a&gt; and its comments, I gathered the following points:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://homebridge.io/" rel="noopener noreferrer"&gt;Homebridge&lt;/a&gt; is designed primarily for use with &lt;a href="https://www.apple.com/jp/home-app/" rel="noopener noreferrer"&gt;HomeKit&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Home Assistant is not fully integrated with HomeKit.&lt;/li&gt;
&lt;li&gt;Home Assistant and Homebridge are not mutually exclusive; some people run both.&lt;/li&gt;
&lt;li&gt;Someone managed to make all Homebridge plugins work within Home Assistant.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Given the variety of setups people have, I decided it might be quicker to try Home Assistant myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Those who want to set up Home Assistant on a Raspberry Pi 3 Model B.&lt;/li&gt;
&lt;li&gt;My future self who might forget these steps after three months.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;p&gt;I'll proceed according to the &lt;a href="https://www.home-assistant.io/installation/raspberrypi" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Downloading the Installer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi 5 or Raspberry Pi 4 with power supply (Raspberry Pi 3 Model B is ok to get started, but the Model A does not have enough RAM).&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.co.jp/gp/product/B01CSFZ4JG/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;amp;psc=1" rel="noopener noreferrer"&gt;Raspberry Pi3 Model B ボード＆ケースセット 3ple Decker対応 (Element14版, Clear)-Physical Computing Lab&lt;/a&gt; Date purchased: 12/30/2017&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fa2z0oc8vr0z2e0jkc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fa2z0oc8vr0z2e0jkc0.png" alt="Raspberry Pi3 Model B ボード＆ケースセット 3ple Decker対応 (Element14版, Clear)-Physical Computing Lab" width="90" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since the Raspberry Pi 3 Model B will be used, there seems to be no problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Micro SD Card.

&lt;ul&gt;
&lt;li&gt;Ideally get one that is Application Class 2. Check for the label A2 on the card. Application Class 2 cards perform better especially on small read and write operations and are better suited to host applications.&lt;/li&gt;
&lt;li&gt;Make sure to use a card that provides at least 32 GB.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.co.jp/gp/product/B06XSV23T1/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;amp;psc=1" rel="noopener noreferrer"&gt;Samsung microSDカード 32GB EVO Plus Class10 UHS-I対応 スマホ カメラ向け (最大読出速度95MB/s:最大書込速度20MB/s)&lt;/a&gt; Date purchased: 12/30/2017&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34xgd0ylgrxfos9pfkzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34xgd0ylgrxfos9pfkzs.png" alt="Samsung microSDカード 32GB EVO Plus Class10 UHS-I対応 スマホ カメラ向け (最大読出速度95MB/s:最大書込速度20MB/s)" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think I bought this with this Raspberry Pi when I bought it. Maybe a little more capacity? &lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;SD Card reader. This is already part of most laptops, but you can purchase a standalone USB adapter if you don’t have one. The brand doesn’t matter, just pick the cheapest.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.amazon.co.jp/gp/product/B006T9B6R2/ref=ppx_yo_dt_b_search_asin_image?ie=UTF8&amp;amp;psc=1" rel="noopener noreferrer"&gt;Anker 8-in-1 USB 3.0 ポータブルカードリーダー【microSDXC / microSDHC / microSD / MMC / RS-MMC / UHS-Iカード用】&lt;/a&gt; Date purchased: 2/8/2020 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjcivb9ibsprvt7kde1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjcivb9ibsprvt7kde1s.png" width="800" height="1116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(I think I bought this to move data from the SD card I used in my old digital camera...)&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Ethernet cable. Required for installation. After installation, Home Assistant can work with Wi-Fi, but an Ethernet connection is more reliable and highly recommended.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;This uses a LAM cable that was lying around at home, as appropriate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember to ensure you’re using an appropriate power supply with your Raspberry Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer’s handsets. USB ports on your computer also will not supply enough power and must not be used.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm not sure if it's an AC adapter for a phone or a PC power supply, so I thought it would be safer to have a dedicated power supply.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.co.jp/gp/product/B01N8ZIJL8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&amp;amp;psc=1" rel="noopener noreferrer"&gt;Raspberry Pi用電源セット(5V 3.0A)－Pi3フル負荷検証済&lt;/a&gt; Date purchased: 1/16/2020&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82g0vc3c71t60u4ldifk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82g0vc3c71t60u4ldifk.png" alt="Raspberry Pi用電源セット(5V 3.0A)－Pi3フル負荷検証済" width="115" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I thought I could use this power supply set that I had bought with the Raspberry Pi.&lt;/p&gt;

&lt;p&gt;When I continue reading &lt;a href="https://www.home-assistant.io/installation/raspberrypi#install-home-assistant-operating-system" rel="noopener noreferrer"&gt;Install Home Assistant Operating System&lt;/a&gt;, it seems that the installer can be easily created with Raspberry Pi Imager. Since I am working on Ubuntu right now, I downloaded it from &lt;a href="https://www.raspberrypi.com/software/" rel="noopener noreferrer"&gt;software&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dulvpafq6drjyujwm8r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dulvpafq6drjyujwm8r.png" alt="Download for Ubuntu for x86" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9j65fqh4h7pssuq9clc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9j65fqh4h7pssuq9clc4.png" alt="Installer startup" width="800" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5j5scaca96fbd008qgaa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5j5scaca96fbd008qgaa.png" alt="installer" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh924c7k38bq9a5g6e9aq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh924c7k38bq9a5g6e9aq.png" alt="installer" width="559" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Home Assistant
&lt;/h2&gt;

&lt;p&gt;Insert the SD Card reader with the Micro SD card into the USB port of the PC and start imager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gxrc642tgaiuvf9f13m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gxrc642tgaiuvf9f13m.png" alt="rpm imager startup" width="443" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx95dg1dqngd3bfkj1yxx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx95dg1dqngd3bfkj1yxx.png" alt="Installation Wizard" width="686" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Proceed with the installation wizard.&lt;br&gt;
Select &lt;code&gt;Home Assistant OS 13.1 (RPI 3)&lt;/code&gt; as the OS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkv5v4tt2wec8dt0cxsh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkv5v4tt2wec8dt0cxsh.png" alt="reject" width="686" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2el7sw8fcqtsdbgw5nw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2el7sw8fcqtsdbgw5nw.png" alt="exit normally" width="686" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Insert the SD card into the Raspberry Pi, turn on the power and wait for about 3 minutes, then the following screen will appear.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m8j5dtr7gpp2r0oddb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m8j5dtr7gpp2r0oddb0.png" alt="Preparing Home Assistant" width="586" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This may take 20 minutes or more&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The indicator is running all the time, so I wait, literally, 20 minutes or so with a cup of coffee.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yfxrnuw41e8hifrbjk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yfxrnuw41e8hifrbjk6.png" alt="welcome!" width="574" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a user when the user creation screen appears. The account information should be in 1Password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5aijws7656fl4uyamtjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5aijws7656fl4uyamtjg.png" alt="Cooperation for Improvement" width="562" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the data transmission policy, etc. as appropriate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fff5mqp8exk6o8llfd7ho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fff5mqp8exk6o8llfd7ho.png" alt="Compatible devices found" width="562" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It found compatible devices in the same network on its own. It's amazing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting up Wi-Fi on the Raspberry Pi
&lt;/h3&gt;

&lt;p&gt;Go to Settings &amp;gt;&amp;gt; System &amp;gt;&amp;gt; Network &amp;gt;&amp;gt; WLAN0 &amp;gt;&amp;gt; Wi-Fi and select an access point.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffng6nykdxvv2iz0p6x8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffng6nykdxvv2iz0p6x8x.png" alt="access point" width="626" height="1020"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faypkdj46ozj50otp6l29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faypkdj46ozj50otp6l29.png" alt="Network interface settings" width="618" height="679"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzlv8n1pv3u7jt8qxeiu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzlv8n1pv3u7jt8qxeiu.png" alt="Failed to change network settings" width="574" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No connection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.joshualowcock.com/guide/homeassistant-wifi-%20setup-troubleshooting-homeassistant-wifi-works/" rel="noopener noreferrer"&gt;Guide: HomeAssistant WiFi Setup / Troubleshooting HomeAssistant WiFi (Works!)&lt;/a&gt; I tried this because many people seemed to be helped by it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;connect an external monitor, keyboard, and mouse to the Raspberry Pi&lt;/li&gt;
&lt;li&gt;set up wireless in the manual
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check the name of the network interface for wireless. Default is wlan0&lt;/span&gt;
network info

&lt;span class="c"&gt;# Set up wireless in manual&lt;/span&gt;
network update &amp;lt;interface_name&amp;gt; &lt;span class="nt"&gt;--ipv4-method&lt;/span&gt; auto &lt;span class="nt"&gt;--ipv6-method&lt;/span&gt; auto &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--wifi-auth&lt;/span&gt; wpa-psk &lt;span class="nt"&gt;--wifi-mode&lt;/span&gt; infrastructure &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--wifi-ssid&lt;/span&gt; &amp;lt;WiFi_network&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--wifi-psk&lt;/span&gt; &amp;lt;WiFi_password&amp;gt;

&lt;span class="c"&gt;# Check network connection status again&lt;/span&gt;
network info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Return to PC and check wlan0 configuration status.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl57umv5j68jdlcnjp0pn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl57umv5j68jdlcnjp0pn.png" alt="wlan0" width="631" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since it was connected properly, unplug the wired LAN from the Raspberry Pi.&lt;br&gt;
Go to Settings &amp;gt;&amp;gt; System and reboot from there as the power button appears in the upper right corner of the screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eo02suqn6jj4e7vetbf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eo02suqn6jj4e7vetbf.png" alt="power button" width="69" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrlrapd2g3w5rnx8yvd6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrlrapd2g3w5rnx8yvd6.png" alt="Reboot" width="541" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F228dy2ozkbx2jsup594q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F228dy2ozkbx2jsup594q.png" alt="Confirm reboot" width="555" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The setup itself went smoothly, but I had a hard time setting up the Wi-Fi.&lt;br&gt;
I'd like to link with Amazon Alexa Skill and Homekit, so I'm going to proceed as is.&lt;/p&gt;

</description>
      <category>homeassistant</category>
      <category>raspberrypi</category>
    </item>
    <item>
      <title>Getting Started with Nature Remo: Control Your Room's Lighting via Shell Script and API</title>
      <dc:creator>Takeru O'oyama</dc:creator>
      <pubDate>Sun, 06 Oct 2024 01:50:06 +0000</pubDate>
      <link>https://dev.to/tqer39/getting-started-with-nature-remo-control-your-rooms-lighting-via-shell-script-and-api-1ap8</link>
      <guid>https://dev.to/tqer39/getting-started-with-nature-remo-control-your-rooms-lighting-via-shell-script-and-api-1ap8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I recently purchased the Nature Remo 3 to build a DIY smart home and control my appliances. In this article, I'll guide you through the steps to control your room's lighting from a local shell script by interacting with the Nature Remo Cloud API.&lt;br&gt;
（Click &lt;a href="https://qiita.com/tqer39/items/d8e3f4725296f4902f85" rel="noopener noreferrer"&gt;here&lt;/a&gt; to read the article in Japanese.）&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shop.nature.global/products/nature-remo-3" rel="noopener noreferrer"&gt;Nature Remo 3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F112128%2F76211d47-ec42-eb2e-a4b6-838e909b5fa9.png" class="article-body-image-wrapper"&gt;&lt;img alt="Nature Remo 3 Product Image" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F112128%2F76211d47-ec42-eb2e-a4b6-838e909b5fa9.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Sequence Diagram
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mermaid.live/edit#pako:eNptkk9rwzAMxb-K8GmDlt3DKJSVwaCM0bS3XDRHS039J7PswSj97pPjlq10OcXW-0nvKTkqHXpSjWL6zOQ1rQwOEV3nQZ4RYzLajOgT7JgiIMM6aLSP73HR7slaaHU0Y7qVL99eivoVU44EG3KhME825L7UboEVfRlN_zC1cAuszbBPRb8JwdWT8UPnq7LYnS8WMqqBlnwPbAaPFmLJyak0vsssACy1JmbYhgP5-woLJWwdfI3r4Bz6vsqqQJTT8Aa2ET07k-Blc9ZX3VSe_-l4MQuGpaNPMVhL100v3ndjj4mAkyyFf91JuSRsZEs8Bs80BWrzlOXhGY2VFUoaNVOOokPTyzc-Fr5TaU-OOtXIa4_x0KnOn0SHOYX222vVpJhppmLIw141H2hZTnnycf47zrenH3cuwkE" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2Fpako%3AeNptkk9rwzAMxb-K8GmDlt3DKJSVwaCM0bS3XDRHS039J7PswSj97pPjlq10OcXW-0nvKTkqHXpSjWL6zOQ1rQwOEV3nQZ4RYzLajOgT7JgiIMM6aLSP73HR7slaaHU0Y7qVL99eivoVU44EG3KhME825L7UboEVfRlN_zC1cAuszbBPRb8JwdWT8UPnq7LYnS8WMqqBlnwPbAaPFmLJyak0vsssACy1JmbYhgP5-woLJWwdfI3r4Bz6vsqqQJTT8Aa2ET07k-Blc9ZX3VSe_-l4MQuGpaNPMVhL100v3ndjj4mAkyyFf91JuSRsZEs8Bs80BWrzlOXhGY2VFUoaNVOOokPTyzc-Fr5TaU-OOtXIa4_x0KnOn0SHOYX222vVpJhppmLIw141H2hZTnnycf47zrenH3cuwkE%3Ftype%3Dpng" alt="Sequence Diagram"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Anyone looking to experiment with the &lt;strong&gt;Nature Remo 3&lt;/strong&gt; API.&lt;/li&gt;
&lt;li&gt;My future self who might forget these steps after three months.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;
  
  
  Steps
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Logging In
&lt;/h2&gt;

&lt;p&gt;Access the Nature Remo API login page:&lt;br&gt;
&lt;a href="https://api.nature.global/login" rel="noopener noreferrer"&gt;https://api.nature.global/login&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fay5j85e8z7ak3o8b2woy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fay5j85e8z7ak3o8b2woy.png" alt="Nature Remo: login"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the prompts to log in with your Nature Remo account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8hp8y9t8shqmyr1fz6s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8hp8y9t8shqmyr1fz6s.png" alt="Nature Remo: inbox"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n6onc54ilds2ek5izax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n6onc54ilds2ek5izax.png" alt="Nature Remo: request access"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3hin18fx1ib8uzue59w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3hin18fx1ib8uzue59w.png" alt="Nature Remo: go"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Generating an Access Token
&lt;/h2&gt;

&lt;p&gt;Navigate to the access token section and generate a new token.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftulk68ywksfs9qx3yhut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftulk68ywksfs9qx3yhut.png" alt="generate a new token"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save the generated token securely, for example, in a password manager like 1Password.&lt;/p&gt;
&lt;h3&gt;
  
  
  Checking API Limits
&lt;/h3&gt;

&lt;p&gt;Before making API requests, it's essential to understand the rate limits.&lt;/p&gt;

&lt;p&gt;From the &lt;a href="https://developer.nature.global/en/" rel="noopener noreferrer"&gt;Nature Remo Developer Documentation&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;RATE LIMITS #&lt;br&gt;
If we observe more than 30 requests in 5 minutes, we throttle your requests and you’ll see 429 status codes. See following headers to check your throttling status.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X-Rate-Limit-Limit&lt;/li&gt;
&lt;li&gt;X-Rate-Limit-Reset&lt;/li&gt;
&lt;li&gt;X-Rate-Limit-Remaining&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;For personal use, this limit should suffice. Even if you exceed it during testing, you can resume after 5 minutes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Determining Which Appliance to Control
&lt;/h3&gt;

&lt;p&gt;How can we turn on or off our room's lighting?&lt;/p&gt;

&lt;p&gt;Let's look at the API specifications in the menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcff2dxy8vd0ruc95llyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcff2dxy8vd0ruc95llyw.png" alt="documentation: CLOUD API"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This opens the Swagger documentation. Let's try a simple GET request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmka816bkyhq5tw523rv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmka816bkyhq5tw523rv9.png" alt="Swagger"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_access_token_here"&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Accept: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-X&lt;/span&gt; GET &lt;span class="s2"&gt;"https://api.nature.global/1/users/me"&lt;/span&gt;

&lt;span class="c"&gt;# Result&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;:&lt;span class="s2"&gt;"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"&lt;/span&gt;,&lt;span class="s2"&gt;"nickname"&lt;/span&gt;:&lt;span class="s2"&gt;"tqer39"&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, let's get a list of registered remote configurations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Accept: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-X&lt;/span&gt; GET &lt;span class="s2"&gt;"https://api.nature.global/1/appliances"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | jq | pbcopy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command fetches the appliances and copies the formatted JSON to your clipboard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"device"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Remo3 Room"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2024-09-17T17:13:49Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"updated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2024-09-22T05:58:38Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"mac_address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xx:xx:xx:xx:xx:xx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"bt_mac_address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xx:xx:xx:xx:xx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"serial_number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XXXXXXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"firmware_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Remo/1.14.6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"temperature_offset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"humidity_offset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"IR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"nickname"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Lighting"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ico_light"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"settings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"aircon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Off"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ico_off"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Night Light"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ico_night_light"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dim"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ico_lightdown"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"On"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ico_lightup"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's try the "Off" signal for the "Lighting" appliance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Since we're updating, we'll use a &lt;code&gt;POST&lt;/code&gt; method.&lt;/li&gt;
&lt;li&gt;We have a &lt;code&gt;signalId&lt;/code&gt; from the &lt;code&gt;signals&lt;/code&gt; array.&lt;/li&gt;
&lt;li&gt;The appropriate API endpoint seems to be &lt;code&gt;POST /1/signals/{signalId}/send&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Looking at the &lt;code&gt;send&lt;/code&gt; method's &lt;code&gt;Example Value | Schema&lt;/code&gt;, it's empty &lt;code&gt;{}&lt;/code&gt;, so we likely only need the &lt;code&gt;signalId&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0ls299p2of721y66ev4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0ls299p2of721y66ev4.png" alt="send method"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;signalId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_signal_id_for_off"&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Accept: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.nature.global/1/signals/&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;signalId&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/send"&lt;/span&gt;

&lt;span class="c"&gt;# Result&lt;/span&gt;
&lt;span class="o"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It worked! :smiiley:&lt;/p&gt;

&lt;p&gt;Warning: Since this operation affects your actual room lighting, ensure you're testing with a device you can safely control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The operation worked as I had envisioned. I plan to utilize this to integrate with other services and IoT devices moving forward.&lt;/p&gt;

</description>
      <category>natureremo</category>
    </item>
  </channel>
</rss>
