Fixing Wi-Fi connection issue Honeywell Evohome with Ubiquiti UniFi access point

I found that my Honeywell Evohome thermostat would not properly connect to my (IoT) Wi-Fi SSID. Looking in the logs of the UniFi controller, it appeared that the thermostat was ignoring the DHCPOFFER it received from the DHCP server in the controller. The thermostat interface indeed showed that it could not get an IP address.

The solution that worked for me was to disable the BSS Transition option in the UniFi controller:

(Note that I earlier already disabled 5Ghz and enabled legacy support for this SSID. These settings might help as well, but were not the solution in this case.)

After this BSS Transition change, the thermostat was able to connect immediately. I confirmed that from two otherwise identical SSIDs, the thermostat could only connect to the one with BSS Transition disabled.

Workaround for Microsoft Teams freezing when joining a call

I ran into the issue that Microsoft Teams was freezing when joining a call (Windows 10).

The place to check the Teams logfile is %APPDATA%\Microsoft\Teams\logs.txt. In my case, just before the freezing occurred, the following line was visible:

Mon Mar 08 2021 15:46:12 GMT+0100 (Central European Standard Time) <32256> -- info -- BluetoothLE Desktop: ble:burst-scan requested

In my case, therefore, the fix was to disable Bluetooth on my Windows machine. This is not ideal and there might be better ways. However, in my case I wasn’t using Bluetooth because my headset is connected via the vendor’s Bluetooth dongle.

Blinds with Home Assistant (part two)

In the previous post, we saw how you can use Node-RED to control RF 433Mhz roller blinds via Home Assistant using a Broadlink unit.

The next step is to make it properly clickable from the Lovelace UI, without having to open a Node-RED UI.

The first step is to created an template (emulated) cover entity. In this example, I generate two entities for blinds operating on two different channels (in file configuration.yaml):

  - platform: template
        device_class: blind
        friendly_name: "Roller blinds (Bedroom)"
        unique_id: "roller_blinds_chan1"
        position_template: 50
          service: script.open_roller_blinds_chan1
          service: script.close_roller_blinds_chan1
          service: script.stop_roller_blinds_chan1
        device_class: blind
        friendly_name: "Roller blinds (Office)"
        unique_id: "roller_blinds_chan2"
        position_template: 50
          service: script.open_roller_blinds_chan2
          service: script.close_roller_blinds_chan2
          service: script.stop_roller_blinds_chan2

NB: since these roller blinds don’t provide open/closed feedback (it’s one-way communication), we use position_template: 50 to tell Home Assistant that the blind is always halfway, which means that open/close/stop buttons are always available to be pressed. Furthermore, by using unique_id, your entity will be added to the registry in Home Assistant so that you can (among other things) add it to an area.

Next, create dummy scripts for these service calls (inspiration taken from Bonanitech) in file scripts.yaml:

- open_roller_blinds_chan1:
- close_roller_blinds_chan1:
- stop_roller_blinds_chan1:
- open_roller_blinds_chan2:
- close_roller_blinds_chan2:
- stop_roller_blinds_chan2:

Now you should have roller blinds in your Lovelace that you can click but will not do anything at the moment.

Following Bonanitech’s example, we will now change our Node-RED flow to listen to these events. I had to tweak it a little bit in order to get it working, so my approach differs slightly.

The node on the top-left is an “events: all” node. Its Event Type is “call_service” (this is unchanged from Bonanitech’s example). The first switch in the flow checks on the property payload.event.service_data.entity_id and matches the condition cover.roller_blinds_chan1:

This check, however, does not yet tell us what operation was executed. For that we need to check a different field; the next switch checks property payload.event.service and has as first condition close_cover and as second condition open_cover:

This should already be enough to get you a working setup.

There is one more (unrelated) change I made since my previous post. Sometimes the RF signal doesn’t come through to the blinds the first time. Therefore, I’ve made use of the “looptimer” node to send the RF commands a couple of times in quick succession to make sure at least one signal comes through. The looptimer is the “2 Second Loop” node that you see in the above Node-RED screenshot. The self-explanatory properties I’ve configured are:

Blinds with Home Assistant

Notes to automate 25mm blinds motors in Home Assistant.

Insert the blinds in the tube and mount on the window as per instructions. Set-up the Broadlink as per the instructions. Onboard the Broadlink as an integration in Home Assistant (I’ve named mine simply Broadlink RM4pro, which may influence the entity_id in the commands below — please adjust as per the naming you use).

In Home assistant, go to Developer Tools -> Services and run:

In copy-pasteable format:

service: remote.learn_command
entity_id: remote.broadlink_rm4pro_remote
  device: roller_blinds
  command: down
  command_type: rf

After which to test:

service: remote.send_command
entity_id: remote.broadlink_rm4pro_remote
  device: roller_blinds
  command: up
  hold_secs: 1

And repeat for commands up and stop.

Then in Node-RED inside Home Assistant, you can configure the triggering of these services (so without using the Broadlink functions that are native in Node-RED). For this use a service call with contents:

In copy-pasteable format:

    "device": "roller_blinds",
    "command": "down",
    "hold_secs": 1

You can then make it look like this:

In this example, you see both a button trigger as well as a time-based trigger.

Running two copies of Freelook

I’ve been playing with Freelook recently, and it is quite a nice (Electron-based) solution for Outlook on Linux.

I found that I wanted to run multiple copies of Freelook for multiple email addresses, and one hack to achieve this is:

Edit /src/main.js:

const { app } = require('electron')
app.setPath ('userData', '/home/[USERNAME]/.config/freelook2');
const MailWindowController = require('./controller/mail-window-controller')
const TrayController = require('./controller/tray-controller')
const MenuController = require('./controller/menu-controller')
const Store = require('electron-store')

Running npm run start in this directory will now launch a new copy of Freelook with its own cookies and settings so that you can login to a different email account. It’s on the todo list to convert this hack into a configurable setting upstream, but for my current use case it works.