SSD Boot auf Raspberry PI4 – 8GB – 64Bit

Ich habe mich nun doch entschlossen noch einmal hass.io zu installieren und das SSD Boot des neuen Raspberry zu nutzen. Auch ist für den 8GB Rechner die 64Bit Version verpflichtend, was auch interessant werden wird bezgl. Performance.

Beschreibung des HASS Betriebssystems

https://github.com/home-assistant/operating-system

Download der HASS Releases – inkl. Beta

https://github.com/home-assistant/operating-system/releases

Meine Maßnahmen am Raspberry – nicht für HASS.IO!

Console Login: Boot Options – USB…

Hier ist schon die ältere Version des „raspi-config“ Tools zu erkennen. Die Option „Boot Options“ findet sich in der aktuellen Version hinter „Advanced Options“.

Als ich die USB Boot Option im Menü ausgewählt hatte, bekam ich die Meldung „No eeprom available – aborting“

Maßnahmen:

  1. sudo raspi-config:
    • Localisation Options: Locale: de_DE.UTF-8 UTF.8
    • Interface Options: SSH: enable
    • Update
    • Finish
  2. SSH login vom Admin Arbeitsplatz
    • sudo apt-update && sudo apt full-upgrade
    • sudo rpi-eeprom-update

Das Boot Rom sollte dann so oder neuer sein

pi@raspberrypi:~ $ sudo rpi-eeprom-update
BCM2711 detected
VL805 firmware in bootloader EEPROM
BOOTLOADER: up-to-date
CURRENT: Do 3. Sep 12:11:43 UTC 2020 (1599135103)
 LATEST: Do 3. Sep 12:11:43 UTC 2020 (1599135103)
 FW DIR: /lib/firmware/raspberrypi/bootloader/stable
VL805: up-to-date
CURRENT: 000138a1
 LATEST: 000138a1

Dann das Tool verlassen, die SD Karte herausnehmen und die Reboot Anfrage bestätigen

Raspberry PI Komponenten

Hier die Komponenten meines Raspberrys für HomeAssistant

Ich werde keine Links zu Amazon posten, aber die Artikel Beschreibungen aussagekräftig halten.

Für einen 24/7 Rechner mag ich keine SD als Massenspeicher. Hier soll eine ordentliche Lösung die Basis sein, weshalb ich bei den Raspberrys auf SSD über USB Boot setze. Wie das eingerichtet wird, beschreibe ich hier. Der Nachteil ist, dass es für diese Kombi keine schönen Gehäuse gibt. Es bleibt nur die offene Variante wie ich sie einsetze.

Alternativ gäbe es die Möglichkeit den Raspberry in ein Gehäuse zu packen und eine SSD HD mit einem USB-SATA Adapter anzuschließen.

Meine Installation besteht aus 3 Raspberrys. Wenn ihr nur einen einsetzen wollt, könnt ihr natürlich ein anderes Gehäuse wählen und braucht auch nicht das große Netzteil.

Teilename Suchbegriff m Shop
Mainboard Raspberry PI4 Model B 8GB
32GB Micro SD Karte SanDisk Ultra 32GB microSDHC Speicherkarte
Bauteile für den 4er Stack
SATA Adapter X857 mSATA SSD Shield Expansion Board for Raspberry Pi 4 
mSATA Disk Transcend Highspeed 256GB interne mSATA SSD SATA III
Gehäuse Gehäuse 4 Schichten Transparent Klar Acryl 
Netzteil Anker PowerPort Speed 5, 63W 5 Port USB Ladegerät
Micro USB Powerkabel 30cm
(für Raspberry PI3)
Anker Powerline+ Micro USB (0,3 m / 30 cm)
USB-C Power Kabel
(für Raspberry 4)
Nylon USB Type C Kabel  30cm
Bauteile mit USB-SSD Adapter
Gehäuse Bruphny Gehäuse für Raspberry Pi 4 mit 35mm Lüfter und 5V 3A USB-C Netzteil
USB 3.0 zu SATA 3 Adapter CSL – USB 3.0 zu SATA Adapter Konverter UASP
Einzelnes Netzeil BENSN 5.1V 3A Netzteil Type-C USB Kabel Stecker Ladegerät für Raspberry Pi 4
Mesh Netzwerke
USB Peitsche
(bei Einsatz mit SSD Boot)
USB 3.0 Super Speed Verlängerungskabel – USB A-Stecker zu USB A-Buchse  1m
zigbee Stick ConBee II das universelle Zigbee USB-Gateway
z-wave Stick Aeotec AEOEZW090-C Aeon Labs USB Stick
für den Komfort
Tastatur / Maus Set Perixx PERIDUO-212 DE, Mini Tastatur und Maus Set
4-fach KVM Switch GHT HDMI KVM Switch USB 4 Port,4 Fach KVM Umschalter
Sicherheit
USV APC Back-UPS ES – BE700G-GR – Unterbrechungsfreie Stromversorgung 700VA
USV APC Back-UPS BX – BX700U-GR – Unterbrechungsfreie Stromversorgung 700VA
Router, LAN, Wifi
Router AVM FRITZ! Box 7590 WLAN AC+N Router
Wifi Repeater AVM FRITZ!WLAN Mesh Repeater 2400
DECT Telefon AVM FRITZ!Fon C6
24 Port PoE Switch NETGEAR GS724TPP 24-Port Gigabit Ethernet LAN PoE
5 Port PoE Switch Netgear GS105PE Switch 5 Port Gigabit Ethernet LAN PoE
LAN Kabel Patchkabel CAT.6 verschiedene Längen

 

 

Raspberry PI USB Probleme bei SSD Boot


Wenn ein Raspberry PI4 mit SSD Boot über USB3 betrieben wird gibt es das Problem, dass direkt an die anderen USB Ports angeschlossene Sticks für zwave und zigbee nicht funktionieren.

Ich hatte dieses Phänomen sowohl beiden Sticks.

Es ist zwingend notwendig die USB Sticks an einer Peitsche anzuschließen.

Direkt am PI kommt kein Signal durch.

Dieses Bild hat ein leeres Alt-Attribut. Der Dateiname ist zwave-zigbee-an-peitsche.jpeg

Ich habe „deleyCON 1m USB 3.0 Super Speed Verlängerungskabel – USB A-Stecker zu USB A-Buchse“ bei Amazon hierfür eingesetzt.

Installation OpenZwave Gateway

Ich verwende nun den Z-Stick Gen5 von Aeontec.

Vormals hatte ich den Stick von Sigma Designs im Einsatz, weil ich dachte vom zwave Entwickler selbst wird es wohl der Beste sein 🙁 Falsch gedacht.

Seit ich nun den Aeontec Stick verwende habe ich keinerlei Entfernungsprobleme mehr. Ich komme mit dem Signal anstandslos 2 Stockwerke nach oben. Daran war früher nicht zu denken.

Jetzt habe ich den Wechsel nicht gemacht, weil ich Probleme hatte, sondern weil der Sigma Design Stick nicht auf der Kompatibilitätsliste für das OZW Gateway steht und ich dieses einsetzen wollte. So hat sich nun aus der „Will ich haben“ Motivation heraus auch dieses problem gelöst.

Ein weiterer großer Effekt nach dem Umstieg auf das OZW Gateway ist der Start von HomeAssistant. Der geht nun deutlich schneller, da ja kein zwave Gateway mehr gestartet wird! Das ist ein großer Vorteil vor allem für übergeordnete Anbindungen wie Apple Homekit oder Google Home wo es darauf ankommt, dass alle zu repräsentierenden Geräte auch verfügbar sind.

Für die OZW beta Integration in HomeAssistant muss das ozw-gateway installiert werden. Dies geschieht vor der Konfiguration der „ozw beta“ Integration in HA.

Hier bei mir wieder als Docker Container auf dem Raspberry. Ich habe mich im übrigen dagegen entschieden die Gateways auf unterschiedliche Raspberry zu verteilen. Sie laufen alle auf dem Raspberry PI4. Bislang sehe ich keine Probleme in dieser Konfiguration. Falls es doch einmal dazu kommen würde lässt sich dies durch die Docker Technology sehr einfach ändern und auf einen anderen Raspberry migrieren.

Zuerst muss der Device Pfad für den Stick ermittelt werden. Hierzu das Gleiche Vorgehen wie bei conbee.

/dev/serial/by-id/usb-0658_0200-if00

Verzeichnis für OZW Gateway anlegen

sudo mkdir -p /usr/share/ozw
sudo chown -R pi:docker /usr/share/ozw 
sudo chmod 775 /usr/share/ozw

OZW Gateway installieren

ich habe mich für die Installationsvariante inklusive Admin GUI entschieden. Damit habe ich den vollen Zugriff auf das zwave Netzwerk, da die Integration in HomeAssistant noch beta ist und es dort noch nicht alle Features gibt.

Der Network Key wir auf dem Raspberry generiert. Er wird zwingend für Secure Bindings benötigt.

cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g'

Die IP Adresse der MQTT_SERVER Variablen muss angepasst werden.

docker run -it -d \
    --security-opt seccomp=unconfined \
    --device=/dev/serial/by-id/usb-0658_0200-if00 \
    -v $PWD/ozw:/opt/ozw/config \
    -e MQTT_SERVER="10.100.200.102" \ 
    -e USB_PATH=/dev/serial/by-id/usb-0658_0200-if00 \
    -e OZW_NETWORK_KEY="0xA4, 0x25, 0x2D, 0x39, 0x1A, 0x5D, 0x9E, 0x61, 0xA7, 0xFA, 0x67, 0x9E, 0x61, 0x5D, 0xAA, 0x39 \
    -p 1983:1983 \   
    -p 5901:5901 \
    -p 7800:7800 \
    openzwave/ozwdaemon:allinone-latest

Überprüfung der Installation

Aufruf des VNC Desktops über einen VNC Viewer

Admin Oberfläche

Aufruf mit dem integrierten VNC over HTTP

http://<ip adresse>:7800

„Basic Web Based VNC Client“

„Standard Web Based VNC Client“

Leider ist es bei allen Ansichten so, dass sich die Auflösung der Anzeige nicht verändern lässt. Es bleibt also nur das Scrollen im Admin Panel.

Installation MQTT Broker

Der MQTT Broker ist nicht unbedingt ein MUSS, ich habe ihn aber wegen dem OZW Gateway installiert. 

Da ich bislang kein MQTT einsetze, bleibt es vorerst auch bei der reinen Installation – keine spezielle Konfiguration!

Verzeichnis für mosquitto anlegen

sudo mkdir -p /usr/share/mosquitto
sudo chown -R pi:docker /usr/share/mosquitto 
sudo chmod 775 /usr/share/mosquitto

mosquitto MQTT Broker installieren

docker run -it -d \
-p 1883:1883 \
-p 9001:9001 \
--name mosquitto  \

-v /usr/share/docker/mosquitto/config:/mosquitto/config \
-v /usr/share/docker/mosquitto/data:/mosquitto/data \
-v /usr/share/docker/mosquitto/log:/mosquitto/log \
eclipse-mosquitto

Installation deConz / Phoscon zigbee Gateway

Der große Vorteil des conbee Sticks mit seiner Applikation ist, dass auch nicht Philips Hue Geräte konfiguriert werden können.

Ich benutze unterschiedliche Hersteller:

  • Philips Hue – Lampen
  • tint – Lampen von Müller Licht, gibt es immer mal wieder bei Aldi
  • innr – Lampen
  • Aquara Sensoren und Taster

Auf der Homepage von Dresden Elektronik findet sich ein Artikel zur Installation

Vor der Installation muss der conbee II Stick am Raspberry angesteckt sein. Die richtige Schnittstelle fiindet sich auf der console:

ls -l /dev/ttyA*

lsusb

ls -l /dev/serial/by-id/

Ich neige dazu anstatt „/dev/ttyACM1“ den Pfad aus Device by ID zu wählen. Der Vorteil ist, dass sich dieser auch bei einem Reboot nicht verändert.

/dev/serial/by-id/usb-dresden_elektronik_ingenieurtechnik_GmbH_ConBee_II_DE2154123-if00

Verzeichnis für deConz anlegen

sudo mkdir -p /usr/share/deconz 
sudo chown -R pi:docker /usr/share/deconz
sudo chmod 775 /usr/share/deconz

Docker Container starten

docker run -d \ 
--name=deconz \
--net=host \
--restart=always \
-v /etc/localtime:/etc/localtime:ro \
-v /usr/share/deconz:/root/.local/share/dresden-elektronik/deCONZ \
--device=/dev/ttyACM1 \
marthoc/deconz

Installation überprüfen

Aufruf: http://<hostname>/pwa

Beim Ersten Aufruf wird das Admin Password angelegt.

Wenn in der „Gateway“ Übersicht die Firmware des Sticks zu sehen ist, ist die Konfiguration OK.

Installation HomeAssistant

Was benötige ich alles für mein SmartHome?

Die Frage was ich alles installieren muss, hängt maßgeblich davon ab, welche Geräte ich einsetzen möchte.

Ich bin ja heterogen unterwegs und brauche daher HomeAssistant, zigbee und zwave. Für Wifi Geräte benötigt es keine spezielle Anbindung. Die Qualität der Wifi Geräte steht und fällt natürlich mit der LAN / WLAN Infrastruktur im Haus. Diese sollte zu Beginn eines SmartHome Projektes mit mehr als einer durchschnittlichen Qualität zur Verfügung stehen. Nichts ist schlimmer als wenn Sensoren nicht melden, Aktoren nicht reagieren und die Web App auf dem Handy ruckelt oder gar nicht reagiert.

Investiert ein wenig Geld in das WLAN, es zahlt sich auf Dauer aus. Besser einen Repeater mehr als zu wenig. Meiner Meinung nach müssen es auch nicht die Top Performance Modelle sein, wichtig sit ein durchgängige Abdeckung.

Das zigbee Gateway ist in meinem Fall „deConz / Phoscon“ von Dresden Elektronk mitdem conbee II Stick.

Für zwave habe ich jetzt das OpenZwave Gateway installiert. GitHub

Als Hardware nutze ich den „Aeotec AEOEZW090-C Aeon Labs USB Stick mit eingebauter Batterie“.


Installation Raspberry

Für die Installation des linux Betriebssysteme der Beschreibung auf der Raspberry Seite folgen.

Auch für die Konfiguration des SSD Boots gib es genügend Anleitungen im Netz.

Die Docker Installation habe ich hier beschrieben.

Installation der Subsysteme

Installation deConz / phosconn für zigbee Geräte

Installation MQTT Broker

Installation OpenZwave Gateway 

Installation HomeAssistant

Es gibt meines Erachtens zwei Varianten HomeAssistant zu betrieben

  • Installation von HASS.IO als Appliance mit Administration über die GUI
  • Auf Linux in Docker und selbst verwaltet

Ich hatte früher HASS.IO in Betrieb und war damit sehr zufrieden. Dann habe ich wohl was falsch verstanden oder interpretiert. Es gab die Meldung, dass HomeAssisant Core eingestellt wird. Meine Interpretation war, dass das hass.io und den Supervisor betrifft. Daraufhin wollte ich nicht warten bis ich unsupported bin und habe auf die Docker Variante umgestellt. Zur Zeit habe ich keinen Bedarf wieder auf hass.io zurück zu wechseln, aber für die Zukunft ist der Gedanke da.

Verzeichnis für HomeAssistant anlegen

sudo mkdir -p /usr/share/homeasistant 
sudo chown -R pi:docker /usr/share/homeasistant 
sudo chmod 775 /usr/share/homeasistant

Installation des Docker Containers

docker run --init -d \
  --name="home-assistant" \
  -e "Europe/Berlin" \
  -v /usr/share/homeasistant:/config \
  --net=host \
  homeassistant/raspberrypi4-homeassistant:stable

Installation Docker

Nach vielen Versuchen mit unterschiedlichen Konfigurationen, habe mich vor 3 Jahren dazu entschieden mein SmartHome in Docker Containern zu betreiben.

Der Vorteil ist hier auf jeden Fall die Trennung der Konfiguration von der Applikation.

Das macht die Updates einfacher und die einzelnen Module lassen sich gut strukturieren. In der Zeit vor Docker hatte ich immer wieder mit Fehl Konfiguration des Linux Rechners zu tun, was dann eine Neuinstallation zur Folge hatte.

Installationsschritte

  • Update des Betriebssystem
  • Download des Installationsskriptes und Installation
  • Erlaubnis für Non Root User, Docker Kommandos auszuführen
  • Überprüfen der Docker Installation
  • Installation „Portainer“ zur Administration

Für das Tutorial nutze ich den Rechner „raspy3“ und den Benutzer „pi“

Update und Upgrade

Login auf den Rechner - ssh pi@raspy3
pi@raspy3:~ $ sudo apt-get update && sudo apt-get upgrade

Das kann ein wenig dauern. Die Abfragen für den positiven Fortgang beantworten.

Installation Docker

Zuerst das Docker Installations script laden

curl -fsSL https://get.docker.com -o get-docker.s

Das heruntergeladene Script wird dann ausgeführt

sudo sh get-docker.sh

Im Normalfall hat nur der ROOT User die Berechtigung die Container zu verwalten. Solltest Du nicht als ROOT eingeloggt sein, erhälst Du die Rechte mit dem „sudo“ Befehl.

Um das zu vereinfachen wird der gewünschte Benutzer der Gruppe docker zugefügt.

sudo usermod -aG docker <username>

Überprüfen der Docker Version

docker version

Installation Portainer

Hilfe für Portainer

Ich bin ein Freund graphischer Interfaces. So auch hier in docker.

Als Adminstrations Werkzeug ist Portainer sicher die gängigste Applikation.

Ich verwende zur Ablage der Konfigurationsdaten immer das lokale Dateisystem und keine Docker Volumes. Vielleicht ist das manchmal etwas aufwendiger, aber für mich einfacher zu administrieren.

Alle meine Docker Konfigurationen werden unter „/usr/share“ abgelegt.

sudo mkdir /usr/share/portainer

Bash Funktion

Für die Installation / Update des Portainers habe ich mir in „~/.bash_aliases“ eine Funktion geschrieben

function update_portainer {
local fileshare="/usr/share/portainer"
local container="Portainer"
local image="portainer/portainer-ce"

docker pull $image
docker container stop $container
docker rm $container

docker run -d -p 8000:8000 -p 9000:9000 --name="$container" -v /var/run/docker.sock:/var/run/docker.sock -v $fileshare:/data $image
}

Installationskommando

update_portainer

oder

docker run -d -p 8000:8000 -p 9000:9000 --name="Portainer" -v /var/run/docker.sock:/var/run/docker.sock -v Uusr/share/portainer:/data portainer/portainer-ce

Portainer aufrufen

https://<hostname>:9000

Weiterführend

Gute Tipps zum Thema Docker habe ich hier gefunden

https://phoenixnap.com/kb/docker-run-command-with-examples

Linux Basis Konfiguration

Mit der Installation des Images entsteht ein funktionaler Rechner. Was ihm jetzt noch fehlt ist das gewisse Etwas. Das was das leben mit Linux einfacher macht.

Das ist in meinen Augen eine brauchbare Konfiguration der Aliase und des VI. JA, ich bin einer derjenigen, die auf Linux mit dem VI arbeiten.

VIMRC

Hier die Auszüge meiner „~/.vimrc“ Datei.

set nocompatible
filetype indent plugin on
syntax on
colo desert
set hidden
set wildmenu
set showcmd
set hlsearch
set ignorecase
set smartcase
set backspace=indent,eol,start
set autoindent
set nostartofline
set ruler
set laststatus=2
set confirm
set visualbell
set t_vb=
set cmdheight=2
set number
set notimeout ttimeout ttimeoutlen=200
set pastetoggle=<F11>
set shiftwidth=2
set softtabstop=2
set expandtab
map Y y$
nnoremap <C-L> :nohl<CR><C-L>

Aliase

Ich bin nicht der größte Fan von „cd…“ Aliasen, aber so ein paar dann doch schon.

~/.bash_aliases

alias ag='alias | grep -i $1'
alias hg='history | grep -i $1'
alias va='vi ~/.bash_aliases && . ~/.bashrc'
alias ..='cd ..'
alias ...='cd ../..'

alias l='ls -ltra'
alias ll='ls -l'
alias la='ls -la'
alias ltra='ls -ltra'
alias lr='ls -lr'

alias cdplugins='cd /usr/lib/check_mk_agent/plugins'
alias cdconf='cd /etc/check_mk'
alias cdha='cd /usr/share/homeassistant'
alias tf='tail -f $1'
alias thl='tail -f /usr/share/homeassistant/home-assistant.log'
  • „ag“ – „alias | grep $1“ :: findet den Alais zu einem Suchbegriff
  • „hg“ – findet den Suchbegriff in der history
  • „va“ – öffnet die „~/.bash_aliases“ Datei im VI und lädt diese nach Beenden erneut. Damit stehen neue Aliase gleich zur Verfügung
  • „..“ – ein Verzeichnis zurück
  • „…“ – 2 Verzeichnisse zurück

Funktionen

Um einfach Ordner und Filerechte zu ändern, habe ich eine Funktion in eingebaut. Sicher wäre das auch als Shellscript im Suchpfad gegangen, aber es war eine Übung.

function chgdirgrants {
  local dir="$1"
  local usr="$2"
  local grp="$3"
  local dir_grants=$4
  local file_grants=$5

  if [ -z "$dir" ] ; then dir="." ; fi
  if [ -z "$usr" ] ; then usr="pi" ; fi
  if [ -z "$grp" ] ; then grp="docker" ; fi
  if [ -z "$dir_grants" ] ; then dir_grants=775 ; fi
  if [ -z "$file_grants" ] ; then file_grants=664 ; fi

  if [ -z $1 ] ; then
    echo "chdirgrants is a function to change grants on a subtree"
    echo ""
    echo "chdirgrants DIRECTORY USER GROUP DIR_GRANTS FILE_GRANTS"
    echo ""
    echo "All parameters will set to default values if they are missing! keep aware of that!"
    echo ""
    echo "Default values are:"
    echo ""
    echo "DIRECTORY: \"$dir\""
    echo "USER: \"$usr\""
    echo "GROUP: \"$grp\""
    echo "DIR_GRANTS: \"$dir_grants\""
    echo "FILE_GRANTS: \"$file_grants\""
    echo ""
    return 1
  fi

  echo "Directory to edit: \"${dir}\""
  echo "User \"$usr\" get Owner"
  echo "Group \"$grp\" get Group"
  echo "Directory  Grants: \"$dir_grants\""
  echo "File Grants: \"$file_grants\""
  echo ""
  local STEP_CHOWN="sudo chown -R $usr $dir"
  local STEP_CHGRP="sudo chgrp -R $grp $dir"
  local STEP_CHMOD="sudo chmod $dir_grants $dir"
  local STEP_SUBDIRS="sudo find $dir -type d -exec sudo chmod $dir_grants {} \;"
  local STEP_SUBFILES="sudo find $dir -type f -exec sudo chmod $file_grants {} \;"

  echo "$STEP_CHOWN"
  echo "$STEP_CHGRP"
  echo "$STEP_CHMOD"
  echo "$STEP_SUBDIRS"
  echo "$STEP_SUBFILES"
  echo ""
  echo "Press 1 to go on or  Return break"

  read choice

  case $choice in
    1)
      echo go on
      ;;
    *)
      echo "Will cancel :-("
      return 1
      ;;
  esac

  eval $STEP_CHOWN
  eval $STEP_CHGRP
  eval $STEP_CHMOD
  eval $STEP_SUBDIRS
  eval $STEP_SUBFILES
}

Die 3 PIs

Ich habe meine Anwendungen auf 3 Raspberrys verteilt. Die Aufteilung geschah nach unterschiedlichen Gesichtspunkten:

  • verfügbare Hardware
  • sinnvolle Gruppierung
  • Sicherheit
  • Performance

Verfügbar hatte ich 2x RP3 B+ und einen RP4. Für einen 3er eines USB-SATA Adapter und einen für den 4er. Dazu 2 MSATA Karten.

Sinnvolle Gruppierung:

  • Infrastruktur
  • Administration
  • Smarthome

Sicherheit:

Da ich eine Certificate Authority erstellen wollte, sollte diese unbedingt auf einen eigenen Rechner. 

Infrastruktur:

Für den Zugriff von Aussen habe ich ein VPN Gateway installiert. Dass dieses weder auf dem SmartHome Rechner noch auf dem mit der CA laufen soll geben Sicherheitsaspekte vor.

Also ergab sich folgende Aufteilung:

  • raspy3 – Raspberry 3 mit SD
    • Wireguard VPN Gateway
    • SAMBA Server
  • raspy4 – Raspberry 3 mit SSD
    • Administrations Desktop 
    • Certificate Authority
  • raspy5 – Raspberry PI4 mit SSD
    • Docker
    • Homeassistant
    • deConz
    • OZW Gateway
    • Mosquitto MQTT Server

Ich installiere meine PIs immer mit dem Standard Raspberry PI OS. Download hier.