My Review of the MacBook Pro 13″ (2020) with Apple Silicon

Introduction

After careful considerations and watching a lot of YouTube videos about the new Macs with Apple Silicon hardware, I’ve decided to order myself a shiny new MacBook Pro 13″ with 16GB RAM and 512GB SSD. I could compare it to my works MacBook Pro 16″ as well as my older MacBook Pro 15″ from mid 2014 and I must say, I’m really impressed.

General Things

The hardware is just great. I like the overall form factor and its small size compared to my wife’s MacBook Air 13″ 2015. The MacBooks internal speaker sound reasonable, but cannot compare to the awesome sound of the MacBook Pro 16″. But since I don’t use the internal speaker that often, I can live with the current quality.

The temperature of the MacBook is always cold, regardless of the current workload. This means, you cannot use it anymore to warm your hands in winter but also its totally quiet, even when it has an internal fan! This is a huge plus, as I’m finally having a quiet desktop again!

Another thing I like is the instant on/wakeup. This machine feels like it is an iPad. That also affects the battery life which is just crazy and unparalleled. If you’ll attach a screen it will turn on immediately. There’s no fade to black first.

M1 compatible apps

Apple Silicon is using arm64 as new architecture compared to Intel. That means all existing Intel Mac Software is run in Rosetta 2, the emulation layer for software which is only compiled for the Intel architecture. There’s already a huge list of supported software. Some apps are not working and even Homebrew has its ongoing issues, but is already useable.

Software left to check at a later time

Docker preview is already available for Apple Silicon, but is not a final stable version.

LuLu Firewall for outgoing connections is currently compiled for the Intel architecture. However, there’s already work going on in that area and I’m looking forward to it.

Visual Studio Code – Insiders available for Apple Silicon, but not a final stable version. Crashes since its last update and I’ve replaced it with the Intel version again.

Thunderbird is still compiled for Intel, whereby Firefox is already available for Apple Silicon.

StarCraft 2 is still compiled for Intel, whereby World of Warcraft is already available for Apple Silicon. Works in FullHD on external screen without sync on low Settings but high texture settings around 60-80 FPS.

Other Software I use but which is still compiled for Intel:

  • TextMate
  • Tunnelblick
  • Jdownloader 2
  • Spotify
  • Logitech Options

Using Safari as new default browser

I’ve read somewhere that Safari is so much faster on Apple Silicon compared to Chrome, so I’ve decided to use Safari as my new default browser for the time being. However, as it turns out, this was only true until Google published an Apple silicon version of Chrome enabling much faster performance.

I’ve upgraded my 1Password license from 6 to 7. This enabled the extension in Safari again, as my previous 1Password 6 license was not supported anymore.

There’s a new webfiltering extension used in Safari > 14. My Adblocker needed  updates to support this. I’m currently using Wipr from the App Store for 1,99$

Wipr’s looking good so far. It filters even most of the YouTube ads, leaving only from time to time a “Skip ad” but without content.

Issues so far

External Screen was not recognized

This is a thing I’ve witnessed on almost all my Macs I’ve used in combination with Thunderbolt docks. I’m using my Macs in Clamshell mode and only rely on wakeup by typing on external keyboard or clicking on my mouse. The Mac did not wake up and I did not have any picture visible on the screen. However, once I’ve opened the MacBook it waked instantly up and detected all external hardware including the screen.

Internal Screen resolution is wrong

The MacBook Pro wakes up after it was connected via USB-C to an external monitor with WQHD resolution. The screen flickers a little bit and the displayed resolution doesn’t fit the screen. Changing the Display options in System Settings doesn’t change this behaviour and the right side of the desktop is invisible as well as the lower part. If I take a screenshot, it will show all details. Looks like this is a Big Sur problem with external wide screens.

Bluetooth connectivity

This seems to be a well known bug. I’ve connected a Magic Trackpad and it keeps on disconnecting, regardless the real distance to the MacBook Pro. You can manually disconnect, but it will try to reconnect, even when it isn’t touched and will show a lot of annoying system notifications.

Howto control a Xiaomi Robot Vacuum without app using Valetudo

I’ve tinkered before with my Xiaomi Robot Vacuum but returned to the official Xiaomi app since the existing solutions felt uncomfortable. I even worked on adding Mac support for the dustcloud software but stopped using the rooted firmware.

A few days ago I’ve read about Valetudo. Valetudo is a web interface to the Xiaomi robot being self hosted on the robot. It allows easy extraction of the necessary control token and stops the robot from reporting cleaning and location data to Xiaomi. There’s also support for MQTT so that you can integrate it into existing home automation systems.

I followed the instructions on creating a rooted firmware and found a few problems and want to share my solution:

  • The firmware builder creates a firmware package along with SSH keys supplied during the build process. I could not login using those SSH keys and required the SSH key directly from the ~/.ssh folder of the user.
  • Flashing inside a VirtualBox Ubuntu VM doesn’t work, even when you use a bridged network interface. You maybe able to request the device token but the flash command always fail.
  • Flashing the robot may fail, if it isn’t completely reset to its default. You can reset the robot to factory default by pressing the home and reset button until you hear the chinese voice.
  • You should flash the robot while it is inside its charging station.
  • If you’re using a Mac, you can install python3 and the required python packages. This will allow you to flash the firmware directly from your mac.
  • Keep your machine close to the robot during the flashing process, because it might otherwise timeout.
  • Since I’m using a chinese version of the robot, I only hear the chinese voice. In this case you’ll need to convert the robot to a european version following these instructions. Once the robot is rebooted you’ll hear the english translation and can verify this from the Valetudo interface.

Now you’re ready to use Valetudo. I’ve added a link to the Valetudo homepage on my smartphone. It replaces now the Xiaomi app while it still provides access to the cleaning map, the maintenance hours for replacing parts as well as automated clean up plans. All in all its a really nice piece of software!

DIY HomeKit with Raspberry Pi and Xiaomi Robot Vacuum

Inspired by tweets of Steven Troughten-Smith, people started to experiment with Raspberry Pi’s as DIY HomeBridge devices. One of them is Wojtek Pietrusiewicz. He wrote a nice article which I used as base for this post.

Introduction

I own a Xiaomi Robot Vacuum. This robot can be controlled by the Xiaomi app, however, I don’t like it very much. The idea is to control this robot over HomeKit. To use HomeKit, I use an old Raspberry Pi 1B. The software will be HomeBridge.

Setting up the Pi

Installation and Configuration of Raspbian

Use Etcher to write the image to the SD card. Remount that SD card and add a file called „ssh“ in the root of the mounted partition. This will enable SSH from the beginning so that you can login directly to the Pi. I don’t want to attach a screen or keyboard to that machine so it will only be reachable over the network. Now boot your Pi from this SD card.

Identify the Pi’s IP (e.g. by looking at the network overview in your router). Now connect to that IP with user „pi“. The default password is „raspberry“. Please change the password now with passwd and assign a new user password.

Update everything with apt:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get clean
sudo reboot

 

Install nodejs 8.9.4

According to Wojtek only this version works currently with HomeBridge. I did not test any other version so I’m just describing what I did on my machine:

  1. Download nodejs for the PI into your users homefolder, e.g. with wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-armv6l.tar.xz
  2. Unpack the file with tar -xvf node-v8.9.4-linux-armv6l.tar.xz
  3. cd node-v8.9.4-linux-armv61
  4. sudo cp -R * /usr/local/
  5. add export PATH=$PATH:/usr/local/bin to e.g. ~/.bashrc
  6. node should be now available

Install HomeBridge

  1. Install the necessary libraries: sudo apt-get install libavahi-compat-libdnssd-dev
  2. Install HomeBridge with npm: sudo npm install -g --unsafe-perm homebridge
  3. open /etc/default/homebridge and safe it with this content:
    # Defaults / Configuration options for homebridge
    # The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
    HOMEBRIDGE_OPTS=-U /var/homebridge
     
    # If you uncomment the following line, homebridge will log more 
    # You can display this via systemd's journalctl: journalctl -f -u homebridge
    # DEBUG=*
  4. open /etc/systemd/system/homebridge.service and safe it with this content:
    [Unit]
    Description=Node.js HomeKit Server 
    After=syslog.target network-online.target
     
    [Service]
    Type=simple
    User=homebridge
    EnvironmentFile=/etc/default/homebridge
    ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
    Restart=on-failure
    RestartSec=10
    KillMode=process
     
    [Install]
    WantedBy=multi-user.target
  5. sudo useradd --system homebridge
    sudo mkdir /var/homebridge
    cp /usr/local/lib/node_modules/homebridge/config-sample.json ~/.homebridge/config.json

Setting up HomeBridge with Xiaomi Robot Vacuum

  1. sudo npm install -g homebridge-xiaomi-mi-robot-vacuum miio
  2. open ~/.homebridge/config.json and safe it with this content:
    {
     "bridge": {
     "name": "Homebridge",
     "username": "XX:XX:XX:XX:XX:XX",
     "port": 51826,
     "pin": "031-45-154"
     },
     
     "description": "HomePi Homebridge.",
     
     "accessories": [
     {
     "accessory": "MiRobotVacuum",
     "name": "Vacuum Cleaner",
     "ip": "IP_ADDRESS_OF_THE_ROBOT",
     "token": "TOKEN_RECOVERED_FROM_APP",
     "pause": true
     }
     ]
    }

    Generate a new MAC address separated by : using this website. You’ll need the IP address of your Xiaomi robot as well as the token. There are several ways to get the token. I’ve extracted mine from the iOS backup. Instead of uploading the token I’ve used this command on the token taken from the sqlite database:

    echo '0: <YOUR HEXADECIMAL STRING>' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000
    
  3. Check if everything is working by starting homebridge for the first time. It should show a QR code. If it does, cancel the process with ctrl+c

Automate HomeBridge startup

cp ~/.homebridge/config.json /var/homebridge
sudo cp -r ~/.homebridge/persist /var/homebridge
sudo chmod -R 0777 /var/homebridge
sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl start homebridge
sudo systemctl status homebridge

Adding the HomeBridge to iOS devices

  1. Install the Home app, if you’ve removed it from your device. You can reinstall it from the App store.
  2. Open the Home app and add a new device
  3. If you’ve give the app access to your camera, you can scan the QR code you’ve seen earlier. However, HomeBridge is now running as a daemon in the background so you won’t see that QR code. You can add the bridge manually by using the PIN you’ve set in the config.

Migrate from OpenElec to OSMC

I recently upgraded my ambilight clone from 50 to 104 LEDs and I’ve also updated my OpenElec installation on my Raspberry Pi B+ to 6.0.0. However, the hyperiond wasn’t able to communicate properly with Kodi so that no ambilight information was send to the LEDs: The LEDs would always be black, if I want to watch something on the Raspberry Pi.

I’ve opened an issue on github but I didn’t get  a useable response so far. The configuration and installation worked fine when I’ve connected with the iOS app or from the command line.

Today I’ve tried to use OSMC as surrogate for OpenElec and I’m really impressed: it worked almost out of the box with my old configuration. So I want to share what’s necessary to migrate from OpenElec to OSMC:

  1. Create a backup from your OpenElec .kodi folder. You’ll find this folder on OpenElec in /storage/.kodi
  2. Backup your hyperion.config.json or create a new one with HyperCon according to your setup
  3. Install OSMC on a SD card
  4. Boot from this SD card and follow the initial configuration screen
  5. Connect via SSH to OSMC. default user/password are osmc/osmc.
  6. Install hyperion according to nadnerb’s instructions. The spi part is important, since OSMC has SPI disabled by default. You’ll also want to remove the lirc line since this blocks the pins necessary for the default installation of WS2801 LEDs.
  7. Copy your hyperion.config.json to /etc. Be sure that you’ve changed the path to your effects folder from /storage/hyperion/effects to /usr/hyperion/effects
  8. Copy your .kodi folder to OSMC’s /home/osmc folder and overwrite any file
  9. Reboot and enjoy your known settings 🙂

Heos by Denon – Bluetooth dongle

I’ve recently bought a Heos HomeCinema and a Heos 1. The Heos devices are created by Denon and offer a multi room wifi speaker setup, similar to Sonos. Since Sonos did not offer a DTS compatible speakerbar for my TV, I’ve decided to give the Heos devices a try.

Its absolutely amazing how easy these devices are setup. You install the power and install an Android or iOS App on your phone. You can start the Heos app and can configure a new speaker. The speaker will be configured over a regular stereo audio cable. After this configuration step, the speaker will be available to all devices running the Heos app on your local network.

Denon currently promotes the GoPack: A battery pack for the Heos 1 and a bluetooth dongle which adds support for bluetooth connections on all Heos devices. However, Denon only sells the bluetooth adapter in combination with the battery pack. Since I don’t require the battery pack, I was wondering what kind of bluetooth dongle is required.

I’ve searched for a few weeks but finally found on amazon.com a bluetooth dongle which was used by a fellow Heos user. At the same time I tried to contact the Denon chat support and they recommended me this Bluetooth dongle. Regardless which one you’ll select, you’ll need a bluetooth 4.0 dongle with BCM20702 chipset:

HeosBluetooth_4_8

Just put the stick into the USB port of the Heos speaker:

HeosBluetooth_3_8

You can now press and hold the connect button until the Heos starts to blink green:

HeosBluetooth_6_8

The Heos is now in discovery mode and can be easily paired with your bluetooth enabled device. This also works for the Heos HomeCinema soundbar:

HeosBluetooth_7_8 HeosBluetooth_8_8