diff options
Diffstat (limited to 'posts/homeauto.md')
-rw-r--r-- | posts/homeauto.md | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/posts/homeauto.md b/posts/homeauto.md deleted file mode 100644 index 35d8d12..0000000 --- a/posts/homeauto.md +++ /dev/null @@ -1,248 +0,0 @@ -[meta]: <title> (My home automation adventure) -[meta]: <subtitle> (How to make your house a shitty utopia) -[meta]: <author> (Loek) -[meta]: <date> (August 17 2021) -[meta]: <tags> (home automation, raspberry pi, esp8266, cc2500, microcontrollers, software, hardware, hacking) -[meta]: <cover> (/img/homeauto.png) - -Home automation is cool, but it can also be scary. I want to try to convert my -existing bedroom lights into 'smart' lights that I can control using a home -automation system. - -I've tried two home automation systems so far: homebridge and home assistant. -Homebridge isn't really an automation system. It's meant to add unsupported -devices to *homekit*, but doesn't work with anything other than apple devices. -I've also tried (and am currently using) home assistant. It's a complete -replacement for the homekit ecosystem, and it can do basically anything, as -long as you're patient enough... - -The devices I'm going to try to automate are: - -- A random bluetooth RGB/white lamp I bought a couple years back -- An RGB strip under my bed my mom got me for christmas -- A gen 1 Philips LivingColors lamp from 2008 -- My Toshiba RAS-M10GKV-E2 air conditioning unit - -## Bluetooth RGB lamp - -This lamp is apparently another Chinese product that gets rebranded and sold -under different names. I bought mine as the "[Shada led's -light](http://leds-lightpro.com/node/4368)" (no the apostrophe isn't a typo). - -When scanning for bluetooth devices using `bluetoothctl` on Linux, it shows up -as an LE device called "Beken LED". - -I don't remember what search term I used when searching for it's bluetooth -protocol, but I landed on [this page](https://wiki.fhem.de/wiki/BEKEN_iLedBlub) -from a german website about home automation, where it's called the "BEKEN -iLedBulb". It documents which Bluetooth LE characteristics you need to write to -for the lamp to change color. - -The lamp has both [iOS](https://apps.apple.com/us/app/leds-light/id1058642950) -and -[android](https://play.google.com/store/apps/details?id=com.shada.ledslight&hl=en_US&gl=US) -apps available, though only the iOS app seemed to work. - -### Writing a homebridge plugin - -When I started out with this home automation business, I used homebridge -because I didn't know about home assistant yet. Developing plugins for -homebridge is actually pretty easy (after figuring out [how to get the plugin -to load](https://github.com/homebridge/homebridge/issues/2958)). The -documentation is pretty good, and it has typescript integration for maximum -/comfy/-ness. - -Because HomeKit doesn't support RGBW or RGBWW lights (lights that have both rgb -and dedicated white diodes), I chose to display them as seperate rgb and white -lamps inside the home app. - -[The plugin](https://www.npmjs.com/package/homebridge-beken) is pretty janky, -and requires some manual setup, but it worked very consistently for the single -week I used it for. - -### Converting the homebridge plugin to home assistant - -Now that I could control a single bulb using the home app and siri, I needed -more. The homebridge website allows for turning devices on/off, but doesn't -allow color changes. I also liked the idea of controlling the lights using my -phone, which runs android. - -Home assistant was the solution, so I went ahead and installed [home assistant -core](https://www.home-assistant.io/installation/linux#install-home-assistant-core) -on the Raspberry Pi 3B+ I'm using as a dedicated home automation hub. - -Upon opening it for the first time, I noticed it was much slower than -homebridge, but that's because it was installing a bunch of other stuff in the -background. After waiting for the background tasks to complete, I was greeted -with a very nice web interface. There were also already devices that I could -integrate immediately, like the downstairs chromecasts, and my Jellyfin server. - -Now I had to figure out how to write a plugin for home assistant. There's some -concepts in the home assistant ecosystem that I didn't quite understand, which -made searching where to start harder. - -**Integrations** are like plugins, they allow you to *integrate* an unsupported -device into home assistant. Integrations create **devices** which create -**entities** (device properties). Certain entity types can only be read (like -`sensor`), and others can also be updated / written to (lights). - -The documentation for creating entity integrations is pretty poopy, and I -mostly used other plugins on GitHub as reference material. The home assistant -plugin code is available on -[GitHub](https://github.com/lonkaars/homeassistant-beken) and [my personal git -server](https://git.pipeframe.xyz/lonkaars/homeassistant-beken/about). - -## RGB gamer bed - -I was originally planning to control this strip using IR remote emulation, but -I remembered a friend of mine still had an esp8266 laying around. So I went the -extra mile and wanted to try to create a new driver board for the strip -instead. - -### Opening the original driver - - - - - - - - - -### Making a custom driver board - -**I AM NOT AN ELECTRICIAN**. I looked on the internet, and I think this is just -a simple board with some mosfets and flash memory for storing the 6 custom -colors. The mosfets are the 3 big squares labeled Q1, Q2 and Q3. The way the -strip works is it gets +12v though the black wire, and then lights up when you -ground any combination of the red, green, and blue wires. The strip dims using -pulse width modulation. The mosfets act like an electronic switch, and control -the grounding of the colored wires. - -I'm going to salvage the mosfets, and barrel plug from the original driver -board, and resolder them on a perfboard with the esp8266 so I can control them -over WiFi. The schematic I'm using comes from -[instructables](https://www.instructables.com/WiFi-Controlled-RGB-LED-Strip-With-ESP8266/). - - - -The whole solder job was a complete massacre, and I really don't want to show -it. It does work though, but I had to buy a new soldering station because my -old soldering iron wasn't really fit for soldering small electronics. - -### Beautiful dremel work - -I wanted to use the original enclosure instead of a tupperware container this -time, so I used my dad's dremel to create holes for the esp to fit. - - - - - -As you can see I did a great job :^) - -The esp is still at the bottom of the case, but getting everything to fit -inside was so hard that I completely forgot to take pictures. So here's a -picture of the finished controller mounted under my bed using two small nails: - - - -### ESP firmware - -The firmare I wrote for the esp is available on -[GitHub](https://github.com/lonkaars/esp8266-rgbstrip) and [my git -server](https://git.pipeframe.xyz/lonkaars/esp8266-rgbstrip/about), along with -the home assistant plugin -([GitHub](https://github.com/lonkaars/hass-esp8266-rgbstrip), -[cgit](https://git.pipeframe.xyz/lonkaars/hass-esp8266-rgbstrip/about)). I used -the [espressif ESP8266_RTOS_SDK](https://github.com/espressif/ESP8266_RTOS_SDK) -toolchain with gnu make as my build system. - -It just connects to your specified wifi network under your specified hostname, -and listens on port 80 for regular http requests. Here's how to use it without -the home assistant plugin: - -```bash -# get color -curl http://hostname/ - -# set color rrggbb color (hex) -curl -X POST -d "0000ff" http://hostname/ -``` - -Some cool features this firmare has are: - -- Linearly interpolated color transitions with customizable transition and step - duration -- Brightness curve correction (makes difference in brightness more pronounced - at higher brightness levels by using a parabolic curve) - -I'm not sure if the more popular [ESPHome](https://esphome.io/) firmare has -these features, but I wanted to have a go at writing my own firmare anyways. - -### Safety - -Because the esp8266 is a pretty basic microcontroller, it doesn't use https or -ssl for encryption. To protect from people in my house wanting to control my -lights, I used the raspberry pi's onboard wifi module to create a hidden -private isolated wifi network for this, and all future IoT devices in my -bedroom. I'm using `hostapd` to create the wifi network, and `dnsmasq` for -assigning ip addresses and hostname resolution. Here's the config file for -`dnsmasq`: - -``` -no-resolv -interface=wlan0 -dhcp-range=10.0.0.1,10.0.0.16,24h -server=8.8.8.8 -``` - -And here's `hostapd`'s config file: - -```bash -# common settings -interface=wlan0 -driver=nl80211 -ssid=network_name_here -hw_mode=g -channel=1 -macaddr_acl=0 -auth_algs=1 -ignore_broadcast_ssid=1 -wpa=2 -wpa_passphrase=network_password_here -wpa_key_mgmt=WPA-PSK -rsn_pairwise=CCMP - -# raspberry pi 3b+ specific settings -ieee80211n=1 # 802.11n support -wmm_enabled=1 # QoS support -ht_capab=[HT40+][SHORT-GI-20][DSSS_CCK-40] -``` - -Very complicated stuff... - -## Philips LivingColors lamp - -[This](http://www.knutsel.org/2009/01/01/livingcolors-1st-generation/) article -describes all the research that went into reverse-engineering the lamp. - -I ordered a cc2500 wireless transmitter and receiver, but the seller cancelled -the order, and now I have to wait a while longer to get one. I'll update this -article once I've set it up though. - -## Toshiba air conditioning unit - -I created a small daughter board to connect to the raspberry pi's gpio pins, -that has an IR phototransistor and IR blaster. This is so I could record and -replay the IR messages from the remote more easily. - -I've spent a solid two days now trying to use my raspberry pi or arduino uno as -a janky logic analyzer, to capture the IR messages and get the message contents -manually, but I still haven't succeeded. I have however succeeded in frying the -IR LED by giving it +5v backwards without any protection, so that's something I -guess. I'll update this section of the article together with the Philips lamp. - - -To be continued... - |