offset \ˈȯf-ˌset\ noun

a force or influence that makes an opposing force ineffective or less effective

Dishwasher Uplift

We opted for a kitchen from IKEA because it's easily designed (their online tool is a serious advantage in the kitchen design space) and readily available. Considering the amount of money that we'd have to cash out for the whole kitchen (appliances and units) and the aesthetic choices (which of them are integrated and which of them are not), the available space (it's not a big kitchen) and immovable items (combi boiler, plumbing), the tradeoffs had to be made.

We'll have a dream kitchen one day, but right now we're doing the best we can with what we have. And we're doing it great! For instance, I mentioned the trouble of getting the tiles done and how we opted to do them ourselves in the end. We arranged the warm and cool tile patterns for where the fridge or an oven are. What I'd really like is a fiber optic cable running below the tiles or the tile pattern spilling into the living room floor instead of a sharp delineation, but it will have to wait for another place.


/media/images/tiles.jpg

Some of the big appliances are freestanding (the fridge and the washing machine) and most of them are integrated (oven, induction stove top, dishwasher, extractor fan) or hidden in a cupboard (combi boiler).

Some of them are smart (washing machine, oven, induction stovetop, combi boiler via thermostat), and some are dumb (fridge, dishwasher, extractor fan, faucet (can you imagine it's possible to have that one smart as well?)).

We have an LED strip installed below the top elements to illuminate the worktop. It's a sound reactive WLED capable contraption powered by a QuinLED board that I installed myself. I resorted to WAGO connectors so I don't have to solder and it works great. As in the previous apartment, I put the motion sensor under the top elements so the lights turn on when there's motion in the kitchen. I also use them for visual notifications. When doors open, when some of the appliances finish their program, etc. I'll have to explain the visual notification interface one day.


/media/images/wled.jpg

My OCD tendencies kick in more often than not and I'd really like to have all of the appliances smart, but I can't complain about the first world problems. It is what it is.

The smart appliances are powered by Home Connect. We wanted the connected extractor fan, but it wouldn't look nice if it's not built in and I don't see the option right now. We also wanted a Bosch dishwasher, an integrated unit, but IKEA doesn't have the standard doors or slot for it. Even if you get an adapter for your unit, which you can, anecdotal evidence says that the IKEA cabinet doors for the integrated unit are too heavy and wreck the dishwasher eventually. This is one of the tradeoffs we had to go with. We wanted an integrated dishwasher so a unit from IKEA is what we have right now. It is as dumb as they come, but it works.

Until we dare to get an integrated smart one (or give up for the freestanding one), I was thinking about how to get the basic information of the dishwasher status.

Looking at the smart washing machine that even shows the impeller state for the water pump and has an auto dosing mechanism for the detergents (my parents would say it's science fiction), the dishwasher pales in comparison. I would be happy to have the dishwasher at least show the state when it's running. I don't need to remotely start it, but when I'm away in a different room and waiting for the dishes to be ready so I can start preparing lunch, it would be great if we could be notified.

Unfortunately, it doesn't even beep when it's done.

I was initially thinking to have an NFC tag. With the companion app, scan it with your phone and it will set the state as running in the Home Assistant. Countdown for a certain amount of time switch it to idle. This would mostly work for the fixed times of the programs if nothing goes wrong and I'd be happy with it. We had the NFC powered solution for the dumb washing machine in the old apartment after all. The dishwasher has an automatic program and can stop when it thinks it's done so the time is variable. I wanted to avail of that capability and had to continue workshopping the solution.

Fortunately, it opens the door when it's done.

This gives me an additional parameter I can work with. The dishwasher door has a gap deep enough to fit a narrow open/close PARASOLL Ikea sensor and it's not visible. Connecting it to the door was the first step, but I had to know if it's consuming power.


/media/images/parasoll-device.jpg

As a side-note, there are solutions that use the vibration sensor to see when it's running, but I am not optimistic about that one. The dishwasher would have to be vibrating reliably for that.

A little too late I saw that IKEA has INSPELNING line of energy monitoring plugs that is frequently out of stock due to a high demand. It's Zigbee, the same as the PARASOLL and it needs the Zigbee hub. We have the official Home Assistant dongle for this so it's not a problem. The solution is almost identical to the one I set up so whichever hardware someone wants to go with, it's a possibility.

Some time ago, we ordered the Tapo P110 smart plug and it arrived, but it was stuck in the drawer until I got around to figure this out. It's WiFi and doesn't need a hub, but the sensors it exposes are pretty much the same ones as the INSPELNING. The only difference is that it initially has to get paired through the app with a phone.

While the plug can be used to remotely enable the power flow, the dishwasher can't be started that way. I didn't need that capability. I still need to load it up and I can set the delay, but the nature of the energy monitoring plug is such that it would give me the status on the energy usage of the appliance in real-time. This is good.

On a side-note, I'm running low on space on the phone so I had to clean up some old photos and consolidate them. I have to work on backing it up properly, too. The phone is due an upgrade as well, but it works so far. I had to free up the storage first because the app that can pair the plug is heavy and takes up valuable space.

Anyway, after the plug got paired and subsequently added to the local WiFi network using the app, I made the IP of the plug static, as usual, and then added the Home Assistant integration for TP-Link devices. I named the plug appropriately, added it to the adequate room and then I had to do some thinking.

The plug is shown as a device with several entities. The one that interests me is the current_consumption sensor. Regarding the open/close sensor, it is the second part of the puzzle.


/media/images/tapo.png

I had the dishwasher run normally with the plug monitoring the energy usage so I can inspect the historical data. The insights I got were this:

  1. On the automatic program that it says up to 2:50, it finished within 2:30 in that run.
  2. When it idles, then the consumption shows between 0 and 0.4W.
  3. When the display is active, but the door still opened, it fluctuates between 2.6W and 2.9W,
  4. When it's running there are several states
    1. it can climb to an around 2000W if the heater is on,
    2. or lower in 7W to 70W ballpark if the pump is on or possibly the spinners,
    3. or even lower to 2W to 3W if it's just steaming the plates.

If the dishwasher doors are closed and it has the power consumption of over 3W for at least a minute, then I consider it running. This happens immediately after the program starts running.

It's not ideal and I can expect false positives. At one point, the usage drops below 3W. By that logic, it would mean that the dishwasher stopped, but it didn't really. To compensate, if the status has been set to running, and the door is still closed, it remains as running, despite the usage dip.

That's why that open/close sensor is important in this case. While I can figure out the high consumption state, it's not important to me. I need to know if it's running or not. I differentiate two idle states. One is when the doors are open, the other when they're not. This is important for the automation later on.

When the program is done, the dishwasher will open automatically, but it will still consume approximately 2.7W because the display is still on counting down for approximately fifteen minutes until the plates cool off. The light below the dishwasher door is also on.

After the countdown finishes, everything turns off and the consumption goes to 0W to 0.4W again.

It can be interacted with immediately when the doors open so it's good enough for me to get a peeler out or something simple.

Ultimately, I ended up with a template sensor defined in the configuration.yaml because it can define the icons dynamically:

template:
  - sensor:
    - name: "Dishwasher"
      unique_id: dishwasher
      state: >
        {% set power = states('sensor.dishwasher_current_consumption') | float(0) %}
        {% set door = states('binary_sensor.ikea_of_sweden_parasoll_door_window_sensor_opening_2') %}
        {% set duration = 60 %}
        {% if door == 'on' %}
          Idle (door open)
        {% elif power >= 3 and door == 'off' %}
          Running
        {% elif is_state('sensor.dishwasher', 'Running') and door == 'off' %}
          Running
        {% elif power < 3 %}
          Idle (standby)
        {% else %}
          Unknown
        {% endif %}
      icon: >
        {% if is_state('sensor.dishwasher', 'Running') %}
          mdi:dishwasher
        {% else %}
          mdi:dishwasher-off
        {% endif %}

Now I needed to get the sensor connected to an automation. This was simple enough through the visual interface, but yaml config looks similar to this:

alias: Dishwasher Finished
description: ""
triggers:
  - entity_id:
      - sensor.dishwasher
    trigger: state
    from: Running
    to: Idle (door open)
conditions: []
actions:
  - action: notify.mobile_app_fp3
    data:
      message: Dishwasher finished! Time to unload it.
      title: Dishwasher Finished
mode: single

After the appliance finishes, I send a notification. What I didn't show is a whole set of different notifications to simplify things, but there's the visual one that will blink those WLED lights.

I can also add the plug to the energy monitoring dashboard, but since I didn't wire up the whole apartment to it, there is not a lot of use for that. Maybe if the power starts acting up, I can make a notification that something's wrong with the machine, but that is a potential problem for a future me, if at all.

LEGO Remote Controlled Ambient Lighting

While working for the genetic sequencing company across the Atlantic, I got nudged into the world of LEGO, so now I know some of the lingo like alt-bricks, MOCs and whatnots. We had a workshop once for a team building and it was great. It got me to rethink all the bricks and what one can do with them.

Some time ago, one friend gifted us LEGO Bonsai model. I liked how it came with two style choices. You could do the standard green leaf tree and you could have it blossom in pinkish colors for the spring. They reused frogs as a flower bud element in pink color. It is a great hack. They also provided some inspiration in the manual should one wish to go into the MOC territory. There are some amazing trees out there. I especially love the Bonsai tree by Marius Herrmann since the bark is wonderfully executed. Maybe one day I dare to do something like that if we ever get to have more bricks in our apartment.

Soon afterwards, I had the standard Bonsai on our shelf. One of our cats, Tenzin, managed to climb the shelf and knock it over. It warned us that no models should be in the reach of them, but that said, they won't do things deliberately or clumsily. They are always curious and will accidentally knock over things trying to squeeze into small spaces, which was the case here. One of the bricks got severely dented when the structure underwent rapid unscheduled disassembly on the resin floor below. We were unlucky. I had to replace it with the same one and LEGO can provide replacement bricks for that purpose. Not so cheap, but possible.

When moving into another apartment we took our models with us, but this time we'd be smarter. We bought some Billy units from IKEA and put glass doors onto them. One of the bookcases is now serving as a bar shelf because I like making cocktails. There are various kits, bottles, glasses, utensils... might even put in a book or two on cocktail making. It's a display case after all and having that Bonsai in was perfect. No cats to mess it up and it looks cute. Most of our apartment is green, so the green leafy style was assembled for it.

Some time before we got our LEGO models placed in their designated nooks, Vesna told me that there's this thing in the LEGO world where people augment their sets with LED powered bricks to get some fancy lighting on them. It looked awesome based on the pictures we saw, so we put a kit for the Bonsai in the wishlist and some weeks later, bought the kit for the leafy green style. It stayed in the box waiting for us to move and for me to find time to wire it up, but I managed to do it. Not perfectly. There are wires, but it adds to the charm. It can definitely be more tightly wrapped if one wants to hide the wires completely.

The set is powered by 3 AA batteries and it has a manual switch. The kit is connected to the power unit by USB A. I had it wired up like that for some time. It looks amazing for the nightly ambient lighting, but I was lazy to get up each time and turn it on. Since I have a universal remote that can power the devices on and off, I was thinking there had to be a way to have it work remotely as well. Sure enough, a bit of looking up online revealed that there's an RF remote switch that starts at 3.6V from QIACHIP. Which is roughly 3 AA batteries that are rechargable (1.2 are those, but the standard ones are 1.5, times three, of course). It would be enough. I got the RF kit off of Amazon and also opted for USB Type A sockets to make life easier for me. No soldering. Just wiring up and using a small screwdriver to secure the wires in place.

The components arrived and I managed to wire them up according to the layout diagrams. I powered the system up, it lit up. I used the provided RF remote to make the buttons work the way I wanted and it was also working as expected. I didn't have issues with the instructions or the components themselves. The whole process was a breeze.

Soon afterwards I learned that the 3 AA batteries won't really pay off in the long run because I'd have to charge them more often than I'd like. My thought process went something like this: 4.5V... The smartphones are usually powered by 5V which is close enough. Would a powerbank work? It's able to connect to the USB after all. I had one lying around and sure enough, when I attached it, it had no problems powering the kit.


/media/images/lego-remote-controlled-lighting.jpg

The story doesn't end here. The universal remote we have is a Broadlink RM4 Pro unit which means it connects to the WiFi. Sure enough, you can use the remote standalone and learn the command that way, which I did, but I seldom use it directly from the Broadlink app in my smartphone.

I have the remote integration enabled in our Home Assistant instance. So to continue the process, I used the developer tools to learn the command with learn_command:

action: remote.learn_command
target:
  entity_id:
    - remote.broadlink_rm4_pro
data:
  command_type: rf
  command: power
  device: bonsai

And with it, I have the send_command ready. I exposed it in the script called Toggle Bonsai.

action: remote.send_command
data:
  command: power
  device: bonsai
target:
  entity_id: remote.broadlink_rm4_pro

If the kit is on, it will turn it off and if it's off, it'll turn it on. Nothing special.

Then I made a helper Template of a type Switch.


/media/images/ha-template-switch-lego.png

But it wouldn't display nicely in the interface. So I made it a type of Light and it worked beautifully.


/media/images/ha-helpers-lego.png

Because it can be exposed to a voice assistant, I did exactly that.



Now that all the great things are showcased, I can say what doesn't work. I can't know the state of the device unless I have some other external sensor. I have to manually sync the state if it ever gets out of sync, but I don't see that happening that often. I also don't need to preserve the state between restarts so it's also OK. As long as the instance is alive. I'm golden. More than often it's on powerbank dying but it's not a big annoyance as getting up and flipping the switch manually.

2024 Recap

Last year was... peculiar. I only had two posts in 2024, but I can explain. Some big things happened.

  1. I got a job,
  2. we upsized and had to invest time, money and energy into renovating the new place,
  3. I quit that job from the first point.

The year started with lazying about on the New Year's. I got the passport that I applied for in December and it arrived in January. I guess I'm a Paddy now.

Vesna had a surprise party for her birthday and all of our friends gathered to celebrate it. It was a blast, but we hope it is out of the way now. One thing off of the checklist. Sneaking around is not fun.

Ever since October 2023, we were engaged into bidding for a bigger place. Cats really showed us that the apartment we were in was too small. It was a long procedure to secure the mortgage since I was unemployed, the cash flow was weaker and the various explanations of funds were required. Being formal here, I don't understand their money laundering department. If they ask for previous six months of statements, OK, but they are really pushing it when they go back several years wanting to know where the money came from. We never cheated or hacked the system. Not funding any terrorist organizations, but oftentimes I felt like we were being treated like one. The money history is the salary from working an honest job. Sure, they will add up all the balances and reach the same conclusion, but the time they take to resolve the thing is frustrating to say the least. We were giving our data within the same day, and their response would be two weeks later. Crazy stuff. Either ask for everything in the beginning and be done with it, or don't make up rules as you go.

We were deciding what to get for the new apartment, but it was all in the air since we didn't get the keys until 29th of February. Then it was proper planning and measuring.

The new apartment is in the same building, but it's over 50% bigger. It was seemingly very well maintained because it was an owner occupied property, but we hit severe roadblocks in refurbishing it.

Snow fell the beginning of March and we took the cats outside to see the snow for the first time. They were confused, but curious which is fine. It was lovely to see them going around the environment they are equipped to be in, considering their long fur.

As for the job hunt, I got either rejections or folks ignoring the application. I had a couple of interviews, but we didn't click. Looking for a job is bad. Due to the massive layoffs in the IT industry, I was often competing with around three hundred candidates. With the generative AI thrown in the mix, the productivity increases, which means less people are needed to work. The society didn't really keep up with the reduced need for the workforce, generative AI displacing jobs. I can tell for sure that you can throw things at the generative AI prompt, but you need to know if the answers are OK. I'm trying Prompt Driven Development and I have to correct it almost every time. It is an intense autocomplete, after all, but a very, very good one. I can program quicker.

I landed a job within spacetech industry before we got the keys, in February as well, and it seemed like a great thing.

It really helped that I was interested in the area. The projects I did before like Solar Projector (which was parsing AES and DSCOVR data, and I retired it when I moved away from Digital Ocean to the self-hosted solution) or unreleased GIS projects (one for a map of the local graveyard in Croatia, which was a vanilla PostGIS experiment, and the other for the map of agricultural fields made with Sentinel-2) helped here. I knew what I was talking about and had a pretty good hunch of what they would work on.

I would be doing what I liked and in an area that was great. It was going great for a while, not as streamlined as the bioinformatics job before it, but interesting nevertheless and ripe with opportunities to explore that specific area of industry. I was even writing a post detailing how great this development is, but, alas, it didn't last because by late September, it started to go sour and my best intentions of publishing something good got thrown out of the window.

On the first company get-together, it was announced to start the RTO process the following week which made no sense since everyone was remote from a different country. I was a bit sad because except me, nobody pushed back. It started to smell back then and there. Within a few weeks, micromanagement kicked in. Time was wasted several hours a week on unnecessary meetings. The estimates were reasonable, but the expectations were not. We're all seniors and know what we're talking about and how some tasks take time to complete and how some problems are not as easy, or impossible to solve. Something that would take months was expected in days.

It culminated in a communication ban between team members and we were expected to answer directly to the upper management. I said I couldn't work like that. I think others did, too. The communication ban was imposed on planning, checking up, brainstorming, code reviews... You name it. It was particularly hard in a system where each layer depends on another. How is the front-end supposed to implement design that it can't talk about or get the data from the back-end if they don't know how it will look like? I was talked over during that meeting and I tried to convince myself it would blow over the following weekend. Come Monday, I learnt that people started quitting and in the same day, the whole team, then me, too, quit our positions.

Like I said, it could not have been handled better since we tried to clear up the understanding for weeks, but it fell on deaf ears. I wish it didn't end up like that, but there I was. Unemployed again, thinking that this time it would be better. What I talked about earlier still stands. The job market is not yet healthy and while I had some promising interviews, I think the hiring process is utterly broken. After over a decade in the industry, I'd expect I wouldn't need to solve brain teasers like I'm in the university again, where I aced, BTW, but I'm getting tired.

Agency work, telco networks, healthtech, genetic sequencing, spacetech... but the industry is jumping on trends. It was blockchain for a while, but right now it's the generative AI which still creates the technological unemployment, but I should have the upper hand since my university was exactly about that. We'll see if I can catch up. I am already dabbling in the current state of affairs, fancy new libraries and ways of working.

So back to the apartment. We paid a hefty sum and, while the place looked like it was immediately available for moving in, things we couldn't have foreseen started to creep in and we had to renovate. Regarding the whole picture, we decided to remove the wardrobes and install a single built in one. The floors below the removed wardrobes were non-existent. The kitchen was also made up of various units and old appliances that were very worn out. It had to go. We refreshed the balconies, painstakingly removed the remaining old floors and had the resin floor installed in all the rooms. In the kitchen we fought a battle with the tile installer who did such a poor job (no dividers, no levelers) that we wasted time, money and energy. We had to do the tiling ourselves in the end, ripping out the badly installed new tiles in the process. We would not have done it if we hadn't gone online, to Reddit, and asked around if we were the only ones who thought the job was poorly done. I felt so bad about the whole thing, but it was supposed to be a place where we would live in for a while and we wanted it to look decent, if not great.

So the floors were done, the wardrobe got installed and then the walls and woodwork. We got all the walls repainted, fixed up since they're plasterboard and had some acoustic panels installed. In the process we realized how some walls were not perfectly aligned and were off the angles. This is something we can't get to grips with - how a relatively new build can be broken because of poor workmanship. One of the radiators was drooping and we had to have it reinstalled on new hinges where the plumbers broke the water pipe in the process and we ended up airing the place for days over the summer.

We opted for a kitchen (plus installation) from IKEA and I installed the lighting (WLED capable) under elements myself. I'll have to revisit this and write about the building blocks. It's reactive to the other parts of the smart home, mainly in the notification area. The plumbing in the kitchen was also a job that was so badly done that I don't know how qualified people can do such a terrible job. I keep repeating myself, but, sadly, it's how it is. The electricity was not ideal either. We even managed to get our mail stolen, the parcel contained the oven switch for the kitchen. It's no wonder I didn't write anything since this thing consumed so much energy and left us in such a sorry mental state (not to mention the physical exhaustion with cuts and bruises from hammering and hurt spine), but we pushed on.

Eventually we got the place from the keys on 29th of February to the condition where we could move in on October 16th which we did and left the small apartment in a state ready to be fixed up and rented out. Our troubles didn't end since our bathtub broke and we had to have the drain replaced and now there's a gaping hole on the side of it that I need to close up with a panel. We didn't have the will to continue more in 2024, especially with the prospect of having to do the other apartment as well. We went to Croatia to visit families and remind ourselves that Ireland was still a good choice.

What I learned in the process is that it's not a bad thing to do all of those things myself. It's not rocket science, but for someone who didn't know anything, it took time and money to figure things out. I can tile now if nothing. We can tile now. Vesna and I are doing all of these things ourselves and are not shying away from the physical labor even though we're both dealing with software. It's great to have a partner who you can rely on completely, both for physical labor and emotional support. I can't stress this enough and hope she is aware of my thoughts about this.

We live in the new place now with our two cat friends and, while we still have no curtains which is a crazy story with the badly done walls, the bathtub hole is there, the heating acting up somewhat, the shelving not done, the small bathroom is a warehouse, the place looks and feels like home and it can only get better. We plan to install a catio eventually, but that will be a project for another time.

Trips:

  • Croatia, to visit families
  • France (Tillé), for a small layover
  • Hungary (Budapest, Pilisszántó), to visit a friend's birthplace and have some fun in the local waterpark
  • Spain (Alicante, El Castell de Guadalest, Benidorm), for a much needed vacation
  • UK, Scotland (Glasgow), for a WorldCon, an SF convention
  • Croatia again, on my own since I had a dental emergency
  • Poland (Poznan), my work trip, Vesna didn't join and I'm sad about it
  • France (Tillé), for a long layover and coming back to Ireland to make it to a concert
  • Croatia, to visit families
  • Latvia (Riga), flight from Dublin for an exploratory visit
  • Estonia (Tallinn), for some reason they are very discriminatory, but high tech in the capital
  • Finland (Helsinki), meeting up with a friend who is a curator and her partner who were visiting from Croatia
  • Croatia, again, winter holidays, had to leave Tenzin and Kida with friends

Domestic travel:

  • Donadea forest park with friends
  • Co. Galway, for a series of stag events like puzzle solving, obstacle course, whiskey tasting tour
  • Greystones, beach visit
  • Kilkenny, attending a wedding where I sewed the buttons for suspenders on my trousers and Vesna was a bridesmaid
  • Limerick, for a concert
  • Donadea forest park with the same pair of friends, redux
  • Galway, to visit the cat that the same pair of friends were getting and to see the neighboring castle
  • Sigginstown Castle in Co. Wexford, for playing D&D in a castle and make some fond memories of this

Shows:

Books:

Video games finished:

Video games played:

Things we bought:

  • a lot of things we needed when renovating
  • kitchen appliances (washing machine, induction stove and oven by Bosch for smart home)
  • two more cameras for covering our apartment blindspots by Reolink
  • a crowbar for ripping out the old floor and wardrobes
  • electric sander (before we got into the Einhell ecosystem)
  • door stoppers
  • Netatmo smart valves for the radiators
  • shelves
  • multi-tool for ripping out the floors (got into Einhell ecosystem with their battery)
  • small foldable trolley that did wonders when moving
  • some clothes for the wedding
  • kettle, carpet, glasses
  • window vacuum cleaner from Einhell
  • cat grooming equipment
  • tiling equipment including the electric tile cutter that we should really sell
  • flooring and Nanoleaf hexagonal lights
  • cabinets and wardrobes
  • kitchen electricity elements (and the whole kitchen from IKEA)
  • loads of cat toys and scratchers
  • induction coffee pot
  • endoscopic camera (for checking out behind the drywall)
  • frother wand
  • equipment for LED under the kitchen elements, pliers, wago...
  • loads of tools for fixing things up ourselves like drill, jigsaw, vice
  • Samsung Galaxy Tab A9+ for Vesna's D&D IRL games
  • medicine cabinet for the bathroom
  • HexClad induction wok and pan protectors
  • handheld vacuum cleaner
  • PC parts (NZXT case and AIO, Asus Thor PSU)
  • hangers, labels, kitchen shelves
  • starlight projector
  • glass hangers and platters for the drinks cabinet
  • mushroom kit (Lion's mane that turned out working well)
  • strainers
  • some Sonos speakers
  • kitchen utensils
  • metal stickers and spice holders
  • plates, containers, dispensers
  • more chargers and cables
  • mud race equipment
  • some electronics for a small project I'll write about
  • Hygge board game

Things we sold:

  • a lot of things we didn't need when renovating
  • small fridge
  • washing machine, pretty much leftovers from the old occupier

Other important events:

  • went axe throwing for Vesna's birthday, prepped her a nice surprise party
  • ghost bus tour in Dublin (there are still places to see in our city)
  • silversmithing course where our friends' group hammered into existence silver fidget rings
  • Aurora Borealis crept up all the way from the cold north to us and we took some wonderful photos
  • Stella cinemas luxury experience
  • friends from Croatia visited and we're sorry it happened while the new place was not done yet, raw concrete floors and all
  • another friend visit for a concert
  • fixing the PC where it finally turned out that the CPU broke the PSU so it had to be replaced, but the Intel CPU is Intel's 13th gen that has a manufacturing defect and I've lost my faith in them. It works underclocked, but I'll switch to AMD when able
  • went to a cocktail-making workshop for my birthday party, also got some ideas, cocktail making is slowly becoming a thing in my life, I like to make some for our friends
  • didn't go to Turf warrior mud race but bought wetsuits for it, hopefully they will be used for other activities
  • LEGO play, I'll write about it
  • generative AI project on cocktail making that is slowly becoming a thing I'll open source
  • blog update with some Webmention things, but need to improve a bit. So far nothing visible
  • got into our building management board

And that's pretty much it. Eventful year, but let's not repeat it :D

NFC Tags in Home Automation

The current Zemismart curtain roller started to act up and I was to do the whole reset with a pin and a button, but my manual was in a box in our storage so I had to retrieve it like Conan the Barbarian. I had to shuffle other boxes and stuff to get to the one I needed. This just made me realize that our physical storage space could use some more love. I thought it would be a great idea to put an NFC tag near the curtain to have a link to the scanned manual instead. Get rid of all the paper forms and have a digital storage of things would free up the space. I already use Syncthing for the photos for the PhotoPrism so I might as well do a self-hosted document storage system to manage general files, too. For that, I opted to use dufs. It's simple and it works. I mounted a folder from my external drive into the configuration of dufs, added the credentials and left it in the local network. After all, I don't need this service exposed to the whole world to see. I added the whole thing into my existing compose file on the Raspberry Pi. It is something like this:

dufs:
  image: sigoden/dufs
  ports:
    - 5000:5000
  volumes:
    - /path/to/host/folder:/data
  command: ["/data", "-A", "-a", "user:pass@/:rw"]

Of course, you'd need to adjust where necessary for your system. With static file serving in place, I scanned the manual and uploaded the resulting file to the dufs.

I did the same for the washer/dryer, but it was easier for it. I found three manuals online and uploaded them in a single folder. I could eventually write the folder URL to the tag instead. One piece of the puzzle was in place. Moving on to the NFC one.

When discussing my solution with friends, they asked a few questions about the NFC itself. I answered them as best as I could:

  1. Do the NFC tags require batteries?

    No, they're just a chip and an antenna in a small form. When exposed to the RF field, they emit the data. They do not require batteries which is cool. The reading happens when the reader and the tag are in a close proximity of each other.

  2. Could you do the same with QR code if you're scanning with your phone?

    Yes, you could embed the data and this is wonderful. WeChat and Revolut even function with payments reading the QR codes since you only need a camera. Almost all smartphones have a camera, and while majority of phones do have NFC, it's not as ubiquitous as the camera. When you create a tag in Home Assistant, you get a QR code, but can also write it to an NFC chip. I had the QR code for one automation already and I also use one currently for WiFi credential listing in the apartment as well, but in my experience, scanning QR codes requires more work from the user and more time is spent, whereas NFC scanning happens almost instantly.

  3. You could call automations by just clicking a shortcut on your phone.

    Yes, I could, and I do for some of the things. Curtain control mostly. But then you have to set up phone shortcuts as well.

  4. You can tell your smart speaker to execute an automation, right?

    I can, and I do. A smart speaker leaves a lot to be desired, though, at least the Nest Mini I have. It mishears the command or ignores it for some reason or says it did things, but it didn't... It even asked me to clean my room myself once instead of sending the vacuum cleaner there. Can you imagine?

  5. What do your cats have to do with that technology?

    Nothing except having the same acronym. NFC = Near Field Communication, NFC = Norwegian Forest Cat

Last year I bought a box of NFC NTAG 215 tags and started using them in various circumstances. I gave some to friends as well so they can experiment if they wanted to. While reworking the dashboard for the Home Assistant instance, I made the tabs for each room of the apartment and in each room I opened a markdown card describing what NFC tags I had in each room (or in general) and what they were used for.

  • on the keychain:

    holds the URL of the OffSetLab

  • on the cork board:

    has 7 tags and acts as a dashboard for controlling the lights and sounds for the D&D session

  • on the projector:

    toggles projector, speakers, PS4 on/off state and lowers the motorized projector screen (for some reason, HDMI CEC is not powering on all the devices so I have to trigger them each separately)

  • on the washing machine (two tags):

    triggers a notification in 8:05 hours from the moment of scanning. This is the exact time the washing machine cotton 40 °C and cupboard dry takes to finish. I might have a smart washing machine one day so I would not be limited to the manual notification of that single program

    contains the link to the folder with manuals for the washer/dryer

  • below the kitchen hanging cupboard:

    calls Roborock to clean up the kitchen. This is useful when the surfaces are cleaned up and crumbs thrown on the floor

  • on the apartment door:

    WiFi connection information for the apartment. There's a QR code next to it as well. When guests arrive and ask for a WiFi access, this is how they get it

  • on the hooded litterbox:

    turns off the notification annoyer to clean the litterboxes

  • on the side of the mirror next to the bathtub:

    toggles a scene which dims the lightbulb, changes its colour to warm and turns on the fan

  • on the blue box in the storage:

    sends a notification to the phone that scanned it with a list of items in the box (I should change this to a proper link to a list)

  • on the window

    contains the link to the manual for the roller curtain motor

Vesna particularly loves the physical dashboard with NFC tags I made for our D&D sessions. They start playing ambiental music from Spotify playlists on the speakers and manipulate the lights as well as one that turns off everything that was running for the session. I started up the Inkscape, added one inch diameter circle, only border, no fill and placed the icon from Material Design Icons inside it. I printed it on the sticky paper and cut it out to be on the NFC tag. Then I put the tags onto the hexagonal cork board and gave it to Vesna to play with the dashboard since she's our resident dungeon mistress (not that kind, you perverts).


/media/images/ha-dnd-dashboard.jpg

Setting up the NFC tags is quite easy:

  1. Take an NFC tag and have it ready
  2. Open Home Assistant app on your NFC enabled phone
  3. In Home Assistant, open the hamburger menu, pick Tags, click Add Tag, name it and press create and write (you don't have to enter tag ID)
  4. Press the robot head icon for the created tag, this creates the automation that triggers When a tag is scanned
  5. Create the automation according to your needs

/media/images/ha-app-tags.png

Alternatively to the Home Assistant app, you can use NFC Tools app, go to Write -> Add a record, pick a type of the record and follow the instructions. This is useful for having the tag with other data like links, WiFi credentials, automating phone behaviour with Tasker... in essence, things that are not exclusive to Home Assistant.

Automations in the house are either:

  • togglers whose action is Conditionally execute an action and default to another action which is using a simple IF-THEN-ELSE construct to check for a certain device state (off or on) and execute a script. This enables me to activate things or deactivate them

  • use the same thing as above, but check which device triggered it. IF part is: Test if template renders a value equal to true:

    {{ trigger.event.data.device_id == "my device app id taken from device's URL" }}
    

    THEN is Call a service: 'Notifications: Send a notification via mobile_app' (depending on the device, I have two actions for two devices here so it's going to two different mobile_app instances). No ELSE.

  • directly Call a service (usually execute a script or send a command to a device) or Delay for, then Call a service (in the case of the washing machine tag)

Annoyer silencing is a bit complex, so I'll explain it as best as I can with an example for my litter box cleaning routine. It comprises of one helper and three automations to accomplish the entire workflow:


/media/images/ha-helpers.png
  1. Under Settings, Devices and services, there is a Helpers tab. I use the toggle type which is esentially an input boolean. It can be either true or false. I called it "Litterbox Cleaned".

  2. I have an automation that triggers every half an hour, three times. It's active in the morning, in the afternoon and in the evening. Annoying, right? I call it "Litter Boxes Notification". It checks if the "Litterbox Cleaned" is Off, and only then does actions that are:

    1. Call a service 'Notifications: Send a notification via mobile_app' with the message: "Clean the litter boxes." and data:

      actions:
        - action: SILENCE
          title: Silence
      

      This means that the notification on the phone will have a button that can be pressed and the specified action triggers.

    2. Text-to-speech (TTS) 'Say a TTS message with cloud' (I edit this one in YAML because I use a template to give some personality to the responses):

      service: tts.cloud_say
      metadata: {}
      data:
        cache: false
        entity_id: media_player.my_nest_speaker
        message: >-
          {{ ["Clean the litter boxes.", "Please clean the litter boxes.", "Clean the fucking litter boxes.", "Roses are red, violets are blue, clean the damn litter boxes, so I don't bother you.", "Did you clean the litter boxes?"] | random }}
      
  3. Manual interventions are then another automation that I call "Tag Litterbox 1 is scanned" and it has two triggers:

    1. When a tag is scanned (the one I physically put on the litter box)

    2. When mobile_app_notification_action event is fired. Event data is action: SILENCE which means I pressed the silence button on the notification from the step 2.1.

      And two actions:

      1. Call a service 'Input boolean: Turn on' on Litterbox Cleaned

      2. Call a service 'Notifications: Send a notification via mobile_app' (I edit this one in YAML because I use a template to timestamp the silencing):

        service: notify.mobile_app_fp3
        data:
          message: Litterboxes cleaned at {{ now().strftime("%-I:%M %p (%d-%m-%y)") }}.
        
  4. The last automation I call "Turn Off Litterbox Input" and it triggers on the time as well, five minutes after the last notification in the series. The automation from step 2 triggers on 10:00, 10:30, 11:00, and this one triggers on 11:05. It has the action Call a service 'Input boolean: Turn off' on Litterbox Cleaned. This makes the helper have a value of false and it's idempotent so there's no worry if it's already off. This action primes the annoyer for the next series of annoying that will start in the afternoon (again, automation from step 2).


/media/images/ha-automation-lbn.png
/media/images/ha-automation-lb1is.png
/media/images/ha-automation-tolbi.png

I use Nabu Casa cloud connection for the convenience of accessing the instance outside my network, to integrate with voice assistants easily and to financially support Home Assistant development. I think this is a good thing. With it, I'm able to have tts.cloud_say, but you could also use tts.google_translate_say if you have a different setup.

This was a long overdue article (and it's long, too) so I hope it's useful for whomever is reading this, but it will be useful to me so I remember how I did stuff. Poking around the Home Assistant is not a scary experience and it can be very fun.

2023 Recap

The year started like usual. Recap writing and checking out the New Year's resolutions. We quickly tried to get back into the routine that we sorely missed for a month, but as it turned out, 2023 was great in the first half, however, very bad in the second one. My writing halved due to the general lethargy since I got laid off and some other things got to occupy our life at the same time. Considering those, this year should see us wrap up some things we set in motion and propel us into new directions. Aside from being laid off, getting the cats and the citizenship are the most important events. Here's the recap:

Trips:

  • Luxembourg (Luxembourg proper, a weekend getaway to see the city, we were pleasantly surprised because it was really beautiful)
  • Croatia (Zagreb and Slavonija as usual, to see our families)
  • Spain (Madrid layover and sleepover)
  • Panama (Panama City and the Canal itself, monkey islands in the Canal)
  • Mexico (Cancún, Tulum, Yucatán riviera, Chichén Itzá)
  • USA (Florida, Orlando, Universal Studios amusement park - a jumping off point to the next set of countries below)
  • US Virgin Islands (St. Thomas, basically this is a USA territory, not a standalone country)
  • Antigua and Barbuda (St. John's)
  • Sint Maarten (Philipsburg, this is a part of the Netherlands)
  • Collectivity of Saint Martin (Marigot, this is a part of France, the previous one and this one are both on the same island: Saint Martin)
  • Commonwealth of Puerto Rico (San Juan, another USA overseas territory and they're not sure how to resolve the political situation, I think there was a referendum on them wishing to become a new state)
  • Dominican Republic (San Felipe de Puerto Plata)
  • USA (Orlando, Florida, again, since it was a round trip across the Caribbean, but this time we saw the Kennedy Space Center)
  • USA (New York for work)
  • UK (London for a day trip)
  • Spain (Málaga, a day long layover, Spain is really wonderful)
  • Croatia (Slavonija and Zagreb to see families and friends)

/media/images/atlantis.jpg

Domestic travel:

  • Great Sugar Loaf (again, climbing this 501m mountain)
  • Portadown (pizza and pottery course)
  • Killarney (citizenship ceremony)
  • Leixlip (kayak course)
  • Belfast (for a trip with friends)
  • Kircubbin (family expansion)
  • Celbridge (friends got a place there so we visit frequently)
  • Enniskerry (a friend has a place there so we visited)
  • Glendalough (again, with another set of family members)

Shows:

Books:

Things we bought:

  • LEGO sets (we were gifted Bonsai Tree and quickly complemented it with Flower Bouquet and Horizon Forbidden West: Tallneck)
  • A charging gadget for USB devices (we're getting low on sockets in the apartment so having a charging hub was a life saver)
  • More climbing equipment (shoes and harnesses)
  • SteamDeck
  • SteamDeck dock
  • Insect net for the balcony
  • Some fitness equipment for training the fingers for climbing
  • Some cable organizing solutions and boxes
  • FireAngel smoke alarm to replace the old broken one (also thinking about the automation of it)
  • NFC tags for improving the automation at home (annoying notifications and NFC scans to silence them, calling vacuum to the kitchen, WiFi credentials, activating scenes, delaying notification for stupid devices like washing machine)
  • Paper shredder (because we got sick and tired of figuring out how to anonymize the incoming mail for recycling)
  • Netatmo weather station (that has since shown us that the air quality can get bad in the apartment)
  • Bathroom cupboard
  • Tons of pet related equipment including smart fountain and feeders by Petkit
  • A set of Ikea KALLAX frames (to replace what we sold)
  • Additional KALLAX inserts
  • A small handheld vacuum cleaner
  • Aqara FP2 presence sensor (for zone automation, but it's currently underutilized)
  • Another dehumidifier model to complement the existing one in another room (they run for a couple of hours each day with smart outlets controlling them)
  • Graphics card (the old one is giving up on us, and it was the last component to buy since the whole PC died last winter. That said, not sure the new one works as expected)
  • Picture frames (we attended a fluorescent painting course)
  • More cocktail equipment
  • Fake elven ears for a Halloween costume :)
  • Raspberry PI 5 (but it is not established yet)
  • A bluetooth mouse for the SteamDeck
  • A set of wireless headphones (because Kida keeps eating the wired ones)

Things we sold:

  • Ikea MALM small chest
  • Ikea MALM big chest
  • Fit Bounce trampoline (we're sad this is gone, but we needed some space, considering)

Other important events:

  • Sequenced our DNA
  • Got laid off
  • Became an Irish citizen, did the ceremony, got the cert, got the passport
  • Had a massive amount of vaccines due to travel, then Covid vaccine again
  • Saw a lot of places and touched a Moon rock
  • Finished a kayaking course so we can kayak with confidence
  • Threw away all the boxes of the devices whose warranty expired
  • Expanded our small family to include Tenzin and Kida and bought a whole lot of cat stuff
  • Did all the necessary things at the vet for Tenzin and Kida but we kinda need to get checked ourselves this year
  • Automated cat drinking and feeding solutions
  • Overhauled Home Assistant instance
  • Went to a drink&paint course
  • Finished Subnautica again
  • Sold things we were not using
  • Taught cats some tricks
  • Assembled cat trees
  • Sister and her family finally visited
  • Changed wheels on my office chair
  • Upped my cocktail game with a book on D&D cocktails gifted by a friend
  • Joined IndieWeb community and slowly reworking the web with HTMX and webmentions
  • Cats had to be spayed and neutered so it was a number of sleepless nights
  • Halloween costume party
  • Little birthday party in an old arcade machines pub
  • Added Homer into the Raspberry to have a visible list of all our Docker containers
  • Planted flowers around the neighborhood, waiting for Spring to see the results