====== Homeassistant ======
Da ich Homeassistant primär rund um die Solarerzeugung und Speicherung nutze, habe ich diese Seite mal unter Solar gehangen, auch wenn ich andere Dinge damit erfasse.
===== Homeassistant auf Raspi4 mit ESXi virtualisieren =====
Um etwas die Anzahl der Raspis bei mir zu verringern und natürlich auch noch etwas Strom zu sparen, möchte ich meine HomeAssistant Instanz, die nativ auf einem Raspi4 läuft nun als VM auf einem Raspi laufen lassen.
Da ich beruflich eng an VMware gebunden bin, kommt dafür natürlich ESXi for ARM ([[https://customerconnect.vmware.com/downloads/get-download?downloadGroup=ESXI-ARM|ESXi for ARM]]) zum Einsatz.
Im folgendem möchte ich Dokumentieren, wie man aus einer HomeAssistant Instanz, die direkt auf einem Raspi (oder anderer Plattform) läuft, eine VM erstellt.
==== Vorbereitung ====
HAOS ist zum Glück recht gut für die Virtualisierung vorbereitet. Ich beschreiben den Vorgang anhand Version 11.1.
Als erstes benötigen wir die virtuelle Disk für ARM. Dazu auf Github gehen https://github.com/home-assistant/operating-system/releases/tag/11.1. Dort das File [[https://github.com/home-assistant/operating-system/releases/download/11.1/haos_generic-aarch64-11.1.vmdk.zip|haos_generic-aarch64-11.1.vmdk.zip]] herunterladen.
Als erstes wird die Datei entpackt und die umbenannt. Meine Instanz soll Homeassist heißen, deshalb bei mir //Homeassist.vmdk//.
Diese Datei wird dann in den VMFS Datastore kopiert. Die VMDK kann man aber noch nicht direkt verwenden, da die virtuelle Platte im Format für VMware Workstation ist.
Nun bauen wir den Grundstock für die zukünftige HAOS VM. Wir legen ein Verzeichnis für die VM an. Bei mir
mkdir /vmfs/volumes/localDatastore_esxi-arm/Homeassist
Nun können wir die VMDK zu einer ESXi VMDK wandeln. Dafür verwendet man vmkfstools.
cd /vmfs/volumes/localDatastore_esxi-arm/Homeassist/
vmkfstools -d thin -i /vmfs/volumes/localDatastore_esxi-arm/iso/Homeassist.vmdk Homeassist.vmdk
==== VM erstellen ====
Nun bauen wir aus der vorhanden virtuellen Disk eine komplette VM.
Als Übersicht:
* VM als Typ Linux/64Bit erstellen
* 2 vCPUs und 2GB RAM reichen
* die automatisch angelegte HD löschen, ebenso das CDROM und den SCSI uns SATA Controller
* einen NVMe Controller hinzufügen
* die konvertierte Disk hinzufügen - angehangen an den NVMe Controller
* die Netzwerkkarte an den richtigen Port hängen
* abspeichern
Hier die Schritte als Übersicht - bei Click auf die Bilder eine größere Version...
| {{:elektronik:solar:homeassistant:esxi-arm_vm_01.png?direct&200 | 1. Erstellung}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_02.png?direct&200 | 2. Gastbetriebssystemtyp}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_03.png?direct&200 | 3. Datastore Auswahl}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_04.png?direct&200 | 4. VM vor der Bearbeitung}} |
| {{:elektronik:solar:homeassistant:esxi-arm_vm_05.png?direct&200 | 5. NVMe Controller}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_06.png?direct&200 | 6. vorhanden Platte einbinden}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_07.png?direct&200 | 7. Kontroller prüfen}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_09.png?direct&200 | 9. VM nach der Bearbeitung}} |
Wenn die VM abgespeichert wurde, öffnen wir noch mal die Einstellung und vergrößern die Disk. Bei mir sollten 32GB reichen.
| {{:elektronik:solar:homeassistant:esxi-arm_vm_10.png?direct&200 | 10. Festplattengröße anpassen}} |
Somit haben wir die VM erstellt und können die VM einschalten. Es werden einige Initiale Tasks abgearbeitet.
| {{:elektronik:solar:homeassistant:esxi-arm_vm_11.png?direct&200 | 11.}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_12.png?direct&200 | 12.}} |
Diese Tasks dauern etwas, somit kann man auf der Homeassistant Seite der physischen Instanz eine Vollbackup erstellen - nächster Abschnitt...
==== Import vorbereiten und importieren====
Unter Settings->System->Backups wird ein Vollbackup erstellt.
Wann ein Vollbackup fertig ist, lese ich von der CPU Temperatur ab :-)
| {{:elektronik:solar:homeassistant:esxi-arm_vm_20.png?direct&200 | Vorbereitungstasks HAOS}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_13.png?direct&200 | Backup zieht CPU}} |
Irgendwann ist das Backup fertig und man kann es kopieren. Wenn man das SAMBA Plugin aktiv hat, kann man direkt davon das Backup ziehen. Ich habe bei mir das OneDrive AddOn intalliert. Somit werden bei mir automatische Backups erzeugt, die dann im OneDrive landen.
Das der Import läuft, sieht man schön am Diskdurchsatz. Ich habe leider den Fehler gemacht, dass die Importquelle über eine WLAN Strecke geht. Somit bleiben von dem per USB3 angebundenem M.2 Modul, auf das der Raspi mit bis zu 80MB/s schreiben kann, nur um dei 14MB/s übrig :-(
| {{:elektronik:solar:homeassistant:esxi-arm_vm_21.png?direct&200 | Ready to Import}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_22.png?direct&200 | Upload Backups}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_23.png?direct&200 | VM Disk Usage}} |
Der Import ist trotzdem schnell beendet und über die HAOS Oberfläche kann jetzt der eigentliche Restore angeschoben werden.
Die Wiederherstellung dauert etwas. dabei wird nicht mehr so viel auf der Platte rumgeschrieben, aber relativ viel CPU verballert.
| {{:elektronik:solar:homeassistant:esxi-arm_vm_24.png?direct&200 | Start Wiederherstellung}} | {{:elektronik:solar:homeassistant:esxi-arm_vm_25.png?direct&200 | Ready to Login}} |
Bei mir ist die Wiederherstellung nach einer knappen Stunde fertig. Und ich kann mich einloggen.
==== Nachbereitung ====
Nun gibt es noch ein paar Nachbereitungen. Es sind eine Menge Dienste nicht gestartet, deshalb rebooten wir die VM...
Nach einer Weile sind alle Dienste gestartet. Nun arbeiten wir aber immer noch mit der falschen IP Adresse.
Dienste, die direkt Daten an Homeassistant senden sind noch offline. Bei mir ist das alles, was mit ESPHome läuft.
MQTT funktioniert bei mir weiter, da ich einen separaten MQTT Broker habe und Homeassistant sich die Daten von dort subscribt.
Es ist an der Zeit, die physische Instanz herunterzufahren und die virtuelle Instanz mit den richtigen IP und FQDN zu konfigurieren.
Dies erfolgt unter Settings->System->Network.
In meinem Fall muss ich auch noch die Portgruppe an der Netzwerkkarte ändern, da sich bei mir Homeassistant in einem anderen Segment befindet.
Wenn alles geklappt hat, sollten aller Services wieder funktionieren.
| {{:elektronik:solar:homeassistant:esxi-arm_vm_26.png?direct&500 | Alles OK}} |
done.
----
===== Hoymiles Inverter auslesen und darstellen =====
Um Hoymiles und ähnliche Inverter per Funk auslesen zu können, gibt es zwei Open Source Projekte: AhoyDTU und openDTU.
Ich habe mich für AhoyDTU entschieden, da die initiale Inbetriebnahme total easy ist und ich die Oberfläche "schöner" finde.
https://ahoydtu.de/getting_started/
https://grafana.com/grafana/dashboards/16850-pv-power-ahoy/
https://www.printables.com/de/model/396020-ahoy-opendtu-gehause
mqtt:
sensor:
- name: 'inverter_U_AC'
state_topic: 'inverter/HM700/ch0/U_AC'
unit_of_measurement: 'V'
- name: 'inverter_I_AC'
state_topic: 'inverter/HM700/ch0/I_AC'
unit_of_measurement: 'A'
- name: 'inverter_P_AC'
state_topic: 'inverter/HM700/ch0/P_AC'
unit_of_measurement: 'W'
- name: 'inverter_F_AC'
state_topic: 'inverter/HM700/ch0/F_AC'
unit_of_measurement: 'Hz'
- name: 'inverter_P_DC'
state_topic: 'inverter/HM700/ch0/P_DC'
unit_of_measurement: 'W'
- name: 'inverter_Efficiency'
state_topic: 'inverter/HM700/ch0/Efficiency'
unit_of_measurement: '%'
- name: 'inverter_YieldDay'
state_topic: 'inverter/HM700/ch0/YieldDay'
unit_of_measurement: 'Wh'
- name: 'inverter_YieldTotal'
state_topic: 'inverter/HM700/ch0/YieldTotal'
unit_of_measurement: 'kWh'
# Pannel1
- name: 'inverter_Panel1_U_DC'
state_topic: 'inverter/HM700/ch1/U_DC'
unit_of_measurement: 'V'
- name: 'inverter_Panel1_I_DC'
state_topic: 'inverter/HM700/ch1/I_DC'
unit_of_measurement: 'A'
- name: 'inverter_Panel1_P_DC'
state_topic: 'inverter/HM700/ch1/P_DC'
unit_of_measurement: 'W'
# Pannel1
- name: 'inverter_Panel2_U_DC'
state_topic: 'inverter/HM700/ch2/U_DC'
unit_of_measurement: 'V'
- name: 'inverter_Panel2_I_DC'
state_topic: 'inverter/HM700/ch2/I_DC'
unit_of_measurement: 'A'
- name: 'inverter_Panel2_P_DC'
state_topic: 'inverter/HM700/ch2/P_DC'
unit_of_measurement: 'W'
----
===== Auto Backup =====
https://community.home-assistant.io/t/creating-a-snapshot-is-not-possible-right-now-because-the-system-is-in-freeze-state/282049/52
https://github.com/jcwillox/hass-auto-backup
----
===== Helferlein =====
==== Reverse Proxy für HA ====
https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Docker-Nginx-reverse-proxy-setup-example
https://www.freecodecamp.org/news/docker-nginx-letsencrypt-easy-secure-reverse-proxy-40165ba3aee2/
https://sitegeist.de/blog/typo3-blog/docker-compose-setup-mit-nginx-reverse-proxy.html
https://dev.to/domysee/setting-up-a-reverse-proxy-with-nginx-and-docker-compose-29jg
==== Developer->Template ====
domain:
{%- set unique_domains = states | map(attribute='domain') |list | unique | list -%}
{%- for domain in unique_domains -%}
- {{domain + "\n"}}
{%- endfor -%}
entities:
{%- for state in states -%}
- {{state.entity_id + "\n"}}
{%- endfor -%}