EVCC ist eine der beliebtesten Lösungen für das intelligente Laden von Elektroautos mit PV-Überschuss. Die neue Version bringt einige tiefgreifende Änderungen mit sich, die sowohl die Basisinstallation als auch die Konfiguration betreffen.
Einige Highlights der neuen Version:
✅ Überarbeitete Konfigurationsstruktur ✅ Verbesserte Integration in Home Assistant ✅ Erweiterte Unterstützung für verschiedene Wechselrichter und Stromtarife ✅ Neue Funktionen für mehrphasiges Laden & Batteriespeicher
Egal, ob du bereits EVCC nutzt oder gerade erst startest – diese Änderungen solltest du kennen!
🛠️ EVCC in Home Assistant 2025 installieren
Die Installation von EVCC unter Home Assistant ist einfacher geworden, erfordert aber einige Anpassungen. Hier sind die wichtigsten Schritte:
Basisinstallation und erste Konfiguration
Nach der Installation sind einige grundlegende Konfigurationsschritte erforderlich:
🔹 MQTT einrichten ( nicht zwingend notwendig ) 🔹 Ladepunkt hinzufügen und mit dem EVCC-System verbinden 🔹 PV-Anlage & Batteriespeicher konfigurieren 🔹 Dynamische Stromtarife einbinden
Migration von einer bestehenden Installation
Falls du EVCC bereits nutzt, solltest du einige Punkte beachten:
⚡ Backup der aktuellen Konfiguration ⚡ Überprüfung der YAML-Struktur (einige Parameter haben sich geändert) ⚡ Anpassung an die neuen Konfigurationsmöglichkeiten
In meinem Video zeige ich dir Schritt für Schritt, wie du EVCC installierst und die wichtigsten Änderungen übernimmst.
🚀 Fazit: Lohnt sich das Update?
Definitiv! Die neuen Funktionen machen EVCC noch leistungsfähiger und die Integration in Home Assistant wurde weiter verbessert. Besonders die neuen Einstellungen für Stromtarife, PV-Prognosen und Batteriespeicher bringen das Smart Charging auf das nächste Level.
Wenn du bereits EVCC nutzt, solltest du dich mit den Änderungen vertraut machen – und falls du gerade erst startest, ist jetzt der perfekte Zeitpunkt, um EVCC in dein Smart Home zu integrieren!
EVCC Add-on über HACS in Home Assistant installieren
EVCC kann über das Home Assistant Community Store (HACS) Add-on integriert werden. Die aktuellste Version findest du hier: 👉 EVCC HACS Add-on auf GitHub
Damit bekommst du Zugriff und Steuerungsmöglichkeiten auf EVCC Entitäten in Home Assistant. Beachte dabei meine Installationsanleitung.
In diesem Video zeige ich euch, wie ihr unter Proxmox ( LXC oder VM), oder einem separaten PC Paperless NGX einrichtet. Da es recht viele Dinge dabei zu berücksichtigen gibt, habe ich euch dafür 3 Skripte erstellt.
Installation
Backup
Restore
Mit diesen Skripten wird euch fast die gesamte Arbeit abgenommen.
Möchtest du Paperless ngx als Home Assistant Addon installieren, findest du hier eine Anleitung dazu: https://youtu.be/wCiSkHQtYEE
Wichtiger Hinweis ! Bitte unbedingt beachten!
Ich habe die Freigabenamen umbenannt. Im Video bin ich darauf nochmal kurz eingegangen. Die Freigaben heißen nun:
consume
backup
restore
D.h. , wenn unter Windows die Freigaben gemountet werden, müssen diese Freigabenamen verwendet werden !
Skript install_paperless.sh
#!/bin/bash
set -euo pipefail
# Funktion zur sicheren Passworteingabe mit Bestätigung
function prompt_for_password() {
local password password_confirm
# Falls PAPERLESS_PASSWORD eingegeben wird, zusätzliche Erklärung ausgeben
if [[ "$1" == "PAPERLESS_PASSWORD" ]]; then
echo -e "\n💡 Hinweis: Dieses Passwort wird für den Linux-Benutzer 'paperless' und den Samba-Server verwendet."
echo -e "Es wird für den Zugriff auf freigegebene Samba-Ordner benötigt.\n"
fi
while true; do
echo -e "\n🔒 Bitte geben Sie das Passwort für **$1** ein:"
read -s password
echo -e "\n🔒 Bitte bestätigen Sie das Passwort:"
read -s password_confirm
if [[ "$password" == "$password_confirm" ]]; then
echo -e "\n✅ Passwort erfolgreich gesetzt für **$1**.\n"
eval "$2='$password'"
break
else
echo -e "\n❌ Die Passwörter stimmen nicht überein. Bitte erneut eingeben.\n"
fi
done
}
# Funktion zur Eingabe des Admin-Benutzernamens mit Standardwert
function prompt_for_admin_user() {
echo -e "\n👤 Bitte geben Sie den **Admin-Benutzernamen** ein (Standard: paperless):"
read admin_user_input
ADMIN_USER="${admin_user_input:-paperless}"
echo -e "\n✅ Admin-Benutzer wurde auf **'$ADMIN_USER'** gesetzt.\n"
}
# Passwörter abfragen
prompt_for_password "PAPERLESS_PASSWORD" PAPERLESS_PASSWORD
prompt_for_admin_user
prompt_for_password "ADMIN_PASSWORD" ADMIN_PASSWORD
# Weitere Konfigurationen
SAMBA_PASSWORD="$PAPERLESS_PASSWORD"
DB_PASSWORD="paperless"
# System aktualisieren und benötigte Pakete installieren
update_and_install_dependencies() {
echo "Aktualisiere Paketliste und installiere benötigte Pakete..."
sudo apt update
sudo apt install -y apt-transport-https curl jq gnupg openssh-server samba samba-common-bin
}
# Docker-Repository hinzufügen
add_docker_repo() {
echo "Füge Docker GPG-Schlüssel und Repository hinzu..."
sudo mkdir -p /etc/apt/keyrings
if [[ ! -f /etc/apt/keyrings/docker.gpg ]]; then
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
fi
. /etc/os-release
DOCKER_REPO="deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $VERSION_CODENAME stable"
echo "$DOCKER_REPO" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
}
# Paperless-Benutzer und Gruppe anlegen
ensure_paperless_user_and_group() {
if ! getent group paperless &>/dev/null; then
echo "Erstelle Gruppe 'paperless' mit GID 1002..."
sudo groupadd -g 1002 paperless
fi
if ! id -u paperless &>/dev/null; then
echo "Erstelle Benutzer 'paperless' mit UID 1002 und GID 1002..."
sudo useradd -m -s /bin/bash -u 1002 -g paperless paperless
echo "paperless:$PAPERLESS_PASSWORD" | sudo chpasswd
fi
}
# Docker installieren
install_docker() {
if ! command -v docker &>/dev/null; then
echo "Docker wird installiert..."
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
fi
if ! groups paperless | grep -q "\bdocker\b"; then
echo "Füge Benutzer 'paperless' zur Docker-Gruppe hinzu..."
sudo usermod -aG docker paperless
fi
}
# Samba Konfiguration
configure_samba() {
# Backup der Original-Samba-Konfiguration
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo mkdir -p /data/paperless/{backup,restore}
sudo chown -R paperless:paperless /data/paperless/
sudo chmod -R 770 /data/paperless/
# Für den Share [consume] soll nur der Ordner /data/paperless/consume freigegeben werden:
if ! grep -q "^\[consume\]" /etc/samba/smb.conf; then
sudo tee -a /etc/samba/smb.conf > /dev/null <<'EOF'
[consume]
comment = Paperless Daten
path = /data/paperless/consume
browsable = yes
writable = yes
guest ok = no
create mask = 0770
directory mask = 0770
valid users = paperless
EOF
fi
# Share für Backup
if ! grep -q "^\[backup\]" /etc/samba/smb.conf; then
sudo tee -a /etc/samba/smb.conf > /dev/null <<'EOF'
[backup]
comment = Paperless Backup Daten
path = /data/paperless/backup
browsable = yes
writable = yes
guest ok = no
create mask = 0770
directory mask = 0770
valid users = paperless
EOF
fi
# Share für Restore
if ! grep -q "^\[restore\]" /etc/samba/smb.conf; then
sudo tee -a /etc/samba/smb.conf > /dev/null <<'EOF'
[restore]
comment = Paperless Restore Daten
path = /data/paperless/restore
browsable = yes
writable = yes
guest ok = no
create mask = 0770
directory mask = 0770
valid users = paperless
EOF
fi
sudo systemctl restart smbd
echo "Samba Shares [consume], [backup] und [restore] wurden konfiguriert."
(echo "$SAMBA_PASSWORD"; echo "$SAMBA_PASSWORD") | sudo smbpasswd -a paperless -s
sudo systemctl restart smbd
}
# Docker-Compose-Datei erstellen
deploy_containers() {
echo "Erstelle docker-compose.yml im Verzeichnis von 'paperless'..."
sudo mkdir -p /home/paperless
cat <<EOL | sudo tee /home/paperless/docker-compose.yml > /dev/null
services:
broker:
image: redis:7
container_name: broker
restart: unless-stopped
volumes:
- /data/paperless/redis/_data:/data
db:
image: postgres:16
container_name: db
restart: unless-stopped
volumes:
- /data/paperless/postgresql/_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: $DB_PASSWORD
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
container_name: webserver
restart: unless-stopped
depends_on:
- db
- broker
- gotenberg
- tika
ports:
- "8001:8000"
volumes:
- /data/paperless/consume:/usr/src/paperless/consume
- /data/paperless/data:/usr/src/paperless/data
- /data/paperless/media:/usr/src/paperless/media
- /data/paperless/export:/usr/src/paperless/export
environment:
PAPERLESS_ADMIN_USER: $ADMIN_USER
PAPERLESS_ADMIN_PASSWORD: $ADMIN_PASSWORD
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
PAPERLESS_OCR_LANGUAGE: deu
PAPERLESS_TIME_ZONE: Europe/Berlin
PAPERLESS_CONSUMER_ENABLE_BARCODES: "true"
PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE: "true"
PAPERLESS_CONSUMER_BARCODE_SCANNER: ZXING
PAPERLESS_EMAIL_TASK_CRON: '*/10 * * * *'
USERMAP_UID: "1002"
USERMAP_GID: "1002"
gotenberg:
image: gotenberg/gotenberg:8.8
restart: unless-stopped
command:
- "gotenberg"
- "--chromium-disable-javascript=false"
- "--chromium-allow-list=.*"
tika:
image: ghcr.io/paperless-ngx/tika:latest
container_name: tika
restart: unless-stopped
EOL
cd /home/paperless
sudo docker compose up -d
}
# Hauptprogramm
update_and_install_dependencies
add_docker_repo
ensure_paperless_user_and_group
install_docker
configure_samba
deploy_containers
sleep 60
sudo chown -R paperless:paperless /data/paperless
# Lokale IP-Adresse ermitteln
LOCAL_IP=$(hostname -I | awk '{print $1}')
echo -e "\n🚀 **Paperless ist jetzt bereit!**"
echo -e "🔗 **Zugriff im Browser:** http://$LOCAL_IP:8001\n"
echo -e "🔗 ** Bitte einmal neu booten"
Um die Scripte unter Linux vom Webserver zu laden, kannst du auch folgenden Befehl verwenden.
#!/bin/bash
# Skript: backup.sh
# Dieses Skript führt ein Backup über docker-compose aus und verschiebt anschließend die Backup-Datei(en).
echo "Starte Backup: Ein Backup wird jetzt durchgeführt..."
# Wechsel in das Verzeichnis, in dem sich die docker-compose Datei befindet
cd /home/paperless || { echo "Fehler: Verzeichnis /home/paperless nicht gefunden."; exit 1; }
# Führe den docker-compose Befehl aus
sudo docker compose exec webserver document_exporter ../export -z
# Prüfe, ob der Befehl erfolgreich war
if [ $? -eq 0 ]; then
echo "Backup erfolgreich abgeschlossen."
# Prüfen, ob das Quellverzeichnis existiert
if [ -d "/data/paperless/export" ]; then
# Sicherstellen, dass das Zielverzeichnis existiert (falls nicht, wird es angelegt)
mkdir -p /data/paperless/backup
# Prüfen, ob im Quellverzeichnis Dateien vorhanden sind
if compgen -G "/data/paperless/export/*" > /dev/null; then
echo "Verschiebe Backup-Datei(en) nach /data/paperless/backup..."
mv /data/paperless/export/* /data/paperless/backup/
if [ $? -eq 0 ]; then
echo "Datei(en) erfolgreich verschoben."
else
echo "Fehler beim Verschieben der Datei(en)."
fi
else
echo "Keine Datei(en) im Verzeichnis /data/paperless/export gefunden."
fi
else
echo "Quellverzeichnis /data/paperless/export existiert nicht."
fi
else
echo "Fehler beim Backup."
fi
Script restore.sh
#!/bin/bash
# Skript: restore.sh
# Dieses Skript stellt ein Backup wieder her.
set -e
echo "Starte Wiederherstellung: Das Backup wird nun wiederhergestellt..."
DOCKER_COMPOSE_FILE="/home/paperless/docker-compose.yml"
# Funktion zum Auskommentieren der Umgebungsvariablen in docker-compose.yml
comment_out_env_vars() {
echo "Kommentiere PAPERLESS_ADMIN_USER und PAPERLESS_ADMIN_PASSWORD in der docker-compose.yml aus..."
# Erstelle ein Backup der Datei, falls noch nicht gesichert
if [ ! -f "${DOCKER_COMPOSE_FILE}.bak" ]; then
sudo cp "$DOCKER_COMPOSE_FILE" "${DOCKER_COMPOSE_FILE}.bak"
fi
# Setze sicherheitshalber Schreibrechte
sudo chmod u+w "$DOCKER_COMPOSE_FILE"
# Füge das `#` nur hinzu, falls es noch nicht vorhanden ist
sudo sed -i 's/^\( *PAPERLESS_ADMIN_USER: \)/#\1/' "$DOCKER_COMPOSE_FILE"
sudo sed -i 's/^\( *PAPERLESS_ADMIN_PASSWORD: \)/#\1/' "$DOCKER_COMPOSE_FILE"
echo "Variablen erfolgreich auskommentiert."
}
# Variablen auskommentieren, bevor das Skript weiterläuft
comment_out_env_vars
# Verzeichnisse definieren
BACKUP_DIR="/data/paperless/restore"
EXPORT_DIR="/data/paperless/export"
DIRECTORIES_TO_DELETE=(
"/data/paperless/consume"
"/data/paperless/export"
"/data/paperless/media"
"/data/paperless/postgresql"
"/data/paperless/redis"
)
# Prüfe, ob das Backup-Verzeichnis existiert
if [ ! -d "$BACKUP_DIR" ]; then
echo "Fehler: Backup-Verzeichnis $BACKUP_DIR existiert nicht."
exit 1
fi
# Schritt 1: Docker Compose herunterfahren
echo "Wechsle in /home/paperless und fahre Docker Compose herunter..."
cd /home/paperless || { echo "Fehler: Verzeichnis /home/paperless nicht gefunden."; exit 1; }
sudo docker compose down
# Schritt 2: Lösche die angegebenen Verzeichnisse
echo "Lösche die folgenden Verzeichnisse:"
for dir in "${DIRECTORIES_TO_DELETE[@]}"; do
echo " $dir"
if [ -d "$dir" ]; then
sudo rm -rf "$dir"
echo " -> $dir gelöscht."
else
echo " -> $dir existiert nicht, überspringe..."
fi
done
# Schritt 3: Erstelle das Export-Verzeichnis neu
echo "Erstelle das Verzeichnis $EXPORT_DIR..."
sudo mkdir -p "$EXPORT_DIR"
if [ $? -ne 0 ]; then
echo "Fehler: Konnte $EXPORT_DIR nicht erstellen."
exit 1
fi
# Schritt 4: Suche nach einer Archivdatei im Backup-Verzeichnis (z. B. *.zip)
ARCHIVE_FILE=$(find "$BACKUP_DIR" -maxdepth 1 -type f -name "*.zip" | head -n 1)
if [ -z "$ARCHIVE_FILE" ]; then
echo "Fehler: Keine Archivdatei (*.zip) im Backup-Verzeichnis gefunden."
exit 1
fi
echo "Gefundene Archivdatei: $ARCHIVE_FILE"
# Schritt 5: Kopiere die Archivdatei in das Export-Verzeichnis
echo "Kopiere die Archivdatei nach $EXPORT_DIR..."
sudo cp "$ARCHIVE_FILE" "$EXPORT_DIR"
if [ $? -ne 0 ]; then
echo "Fehler beim Kopieren der Archivdatei."
exit 1
fi
# Schritt 6: Wechsel in das Export-Verzeichnis und entpacke die Archivdatei
cd "$EXPORT_DIR" || { echo "Fehler: Konnte nicht in $EXPORT_DIR wechseln."; exit 1; }
# Überprüfe, ob 'unzip' installiert ist und installiere es gegebenenfalls
if ! command -v unzip >/dev/null 2>&1; then
echo "Das Paket 'unzip' ist nicht installiert. Versuche, es zu installieren..."
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update && sudo apt-get install -y unzip
elif command -v yum >/dev/null 2>&1; then
sudo yum install -y unzip
else
echo "Kein unterstützter Paketmanager gefunden. Bitte installiere 'unzip' manuell."
exit 1
fi
fi
# Entpacken der Archivdatei
ARCHIVE_BASENAME=$(basename "$ARCHIVE_FILE")
echo "Entpacke $ARCHIVE_BASENAME..."
unzip "$ARCHIVE_BASENAME"
if [ $? -ne 0 ]; then
echo "Fehler beim Entpacken von $ARCHIVE_BASENAME."
exit 1
fi
echo "Archiv erfolgreich entpackt."
# Optional: Entferne die kopierte Archivdatei, falls sie nicht mehr benötigt wird
# sudo rm "$ARCHIVE_BASENAME"
# Schritt 7: Starte Docker Compose Container neu
echo "Wechsle zurück nach /home/paperless und starte die Container..."
cd /home/paperless || { echo "Fehler: Verzeichnis /home/paperless nicht gefunden."; exit 1; }
sudo -u paperless docker compose up -d
if [ $? -ne 0 ]; then
echo "Fehler: Docker Compose konnte nicht gestartet werden."
exit 1
fi
sudo chown -R paperless:paperless /data/paperless/consume /data/paperless/media
sudo chmod -R 775 /data/paperless/consume /data/paperless/media
sudo chown paperless:paperless /home/paperless/docker-compose.yml
sleep 60
cd /home/paperless
# Schritt 8: Führe den Importbefehl aus
echo "Führe Importbefehl aus..."
sudo docker compose exec webserver document_importer ../export
sudo chown -R paperless:paperless /data/paperless
if [ $? -eq 0 ]; then
echo "Import erfolgreich abgeschlossen."
else
echo "Fehler beim Import."
exit 1
fi
echo " Bitte einmal das System neu booten ! "
echo "---------------------------ENDE--------------------------------"
Im Video habe ich auch gezeigt, wie man einen Sensor in Home Assistant erstellt, um sich die Anzahl der Dokumente im Posteingang anzeigen zu lassen. Die Informationen dazu habe ich von Flemming´s Blog, wo einige Beispielsensoren zu finden sind. Tolle Arbeit und sehr gut erklärt.
Ein weiterer Scanner, der häufiger im Kontext mit paperless-ngx genannt wird, ist der Brother ADS-1700W. Da ich diesen allerdings nicht selber getestet habe, kann ich keine direkte Empfehlung dazu aussprechen.
Solltest du in den Scripten noch Fehler finden, kannst du mir gerne deine Korrekturen als Mail zukommen lassen. Meine Kontakdaten findest du im Impressum.
Möchtest du Sensordaten aus Home Assistant exportieren und diese in Excel oder anderen Tools weiterverarbeiten? In meinem neuesten Video zeige ich dir, wie du mit einfachen Schritten deine Daten extrahierst, speicherst und optimal aufbereitest. Dabei erhältst du praktische Tipps, die dir helfen, deine Daten in handliche Formate zu überführen – ideal für den privaten Gebrauch oder berufliche Projekte.
Lass dich von den vielfältigen Möglichkeiten inspirieren und erweitere deine Kenntnisse im Umgang mit Home Assistant. So wird der Datenexport zu einem spannenden und unkomplizierten Prozess!
Was dich im Video erwartet:
Wie du Sensordaten aus Home Assistant extrahierst 📡
Oftmals hat man den Anwendungsfall, dass man auf ein Kalenderevent triggern möchte. Sei es, dass man sich eine 📲 Benachrichtigung schicken lassen möchte, wenn ein Event ansteht, oder aber eine 🤖 Automatisierung ausgeführt werden soll. Ebenso interessant ist, wann welche 🗑️ Mülltonne an die Straße gestellt werden muss. Desto länger man drüber nachdenkt, umso mehr Anwendungsfälle fallen einem ein. 🔧 Mühsam? Nicht mit diesem Blueprint! Mit Templates und Automatisierungen in Home Assistant lässt sich das zwar umsetzen, aber heute stelle ich euch ein Blueprint vor, das euch diese Arbeit mit ein paar Klicks abnimmt. 🎁 Bonus: Ich zeige euch eine komplette Lösung für euren Müllkalender, inklusive einer Anzeige auf der Pixelclock Ulanzi TC001.
Mit EVCC und Home Assistant wird das Management deines Elektroautos einfacher als je zuvor! 🚗⚡ In diesem Video zeige ich dir, wie du EVCC mit HACS und dem passenden Add-On in Home Assistant integrieren kannst. Egal ob Ladeplanung, Energieoptimierung oder smarte Automatisierungen – mit dieser Anleitung holst du das Maximum aus deinem Smart Home heraus. Schau rein und erfahre, wie simpel die Einrichtung wirklich ist!
Wichtiger Hinweis !: Im Video habe ich an der Stelle 6:03 benannt, dass ihr die IP Eures Home Assistant Servers (mit dem Port 7070) angeben sollt. Dies ist korrekt, wenn Ihr zusätzlich das HomeAssistant EVCC Addon installiert habt. Sollte Euere EVCC Installation nicht innerhalb von Home Assistant laufen, müsst Ihr hier die Adresse, unter der die EVCC Weboberfläche bei Euch im Netzwerk zu erreichen ist, eintragen. Nochmals der Hinweis, bevor ihr diese Integration über HACS hinzufügt, müsst Ihr EVCC bei Euch installiert haben (hier der link zum Video).
Code zum Bonus im Video:
Hinweis ! Die Entitäten müsst ihr mit den Namen eurer Entitäten im YAML Code ersetzen Template Sensor Helfer „evcc_Tariff_Level“
{% set current_time = now().replace(minute=0, second=0, microsecond=0) %}
{% set rates = state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] %}
{% set future_rates = rates | selectattr('start', '>=', current_time.isoformat()) | list %}
{% if future_rates | length > 0 %}
{% set prices = future_rates | map(attribute='price') | list %}
{% set avg_price = prices | average(0) %}
{% set min_price = prices | min(0) %}
{% set max_price = prices | max(0) %}
{% set current_price = states('sensor.evcc_tariff_grid_2') | float(0) %}
{# Definiere den Schwellenwert in Prozent (z.B. 80%) #}
{% set threshold_percent = 10 %}
{# Berechne den Preisunterschied basierend auf dem Schwellenwert #}
{% set price_diff = avg_price * (threshold_percent / 100) %}
{# Kategorisiere den aktuellen Preis basierend auf der Berechnung #}
{% if current_price < (avg_price - price_diff) %}
günstig
{% elif current_price > (avg_price + price_diff) %}
teuer
{% else %}
mittel
{% endif %}
{% else %}
unbekannt
{% endif %}
Hast du auch Beleuchtungen, die Effekte integriert haben ? Klar, nicht immer will man dieses Lichtspektakel, es gibt aber auch Jahreszeiten, wo man sich darüber freut, dass man mal den einen oder anderen vielleicht „kitschigen“ Effekt laufen lässt. Und dann geht es los. Wie setze ich das um ?
Der erste Gedanke ist, dass man für jeden Effekt eine eigene Szene erstellt.
Aber sind wir mal ehrlich, da hat man innerhalb kürzester Zeit keine Lust mehr. Und genau hier möchte ich euch eine Lösung zeigen, die euch automatisch die Effekte ausliest und entweder einen zufälligen Effekt auswählt, oder aber die Effekte der Reihe nach durchgeht.
Wenn man in die Effektlisten der einzelnen Beleuchtungen schaut, dann können da schnell mal etliche Effekte zusammenkommen.
Um euch das Leben hier einfacher zu machen, habe ich euch ein Skript erstellt, in dem ihr eurer Licht übergebt, ein paar Übergabeparameter setzt und schon könnt ihr eure gewünschten Effekte laufen lassen.
Dieses Skript lässt sich einfach handhaben und in einer Automatisierung umsetzen. Als Beispiel möchte ich euch meine Weihnachtsbaum Automatisierung vorstellen.
Die zu übergebenden Parameter sind:
Licht ( beliebige Lichtentität mit Effekten)
random ( An / Aus )
brigthness ( 0% – 100%)
exclude ( Liste von Effekten, die bei der automatischen Selektion ausgeschlossen werden sollen )
transition ( Übergangszeit für einen weichen Übergang zum nächsten Effekt ) -> Hinweis: Das wird nicht von jeder Beleuchtung unterstützt. Ist diese Möglichkeit nicht vorhanden, so wird automatisch ohne Transition Time geschaltet.
In der obigen Beispielautomatisierung wird alle 30 Sekunden ein anderer Effekt selektiert. Der Zyklus ist vielleicht etwas kurz, aber hier könnt ihr frei entscheiden.
Gerne stelle ich euch das Script kostenfrei zur Verfügung und würde mich über Kommentare zum Video bei Youtube , aber auch ein Like und vielleicht ein Abo sehr freuen. Auch Anregungen zur sinnvollen Erweiterung finde ich immer sehr Klasse. Ich hoffe euch hilft diese Umsetzung und ihr könnt gerade in der aktuell adventlichen Zeit schnell ein paar schöne Effekte damit leuchten lassen. Wenn ihr dann noch eure Zeit dabei für die Umsetzung spart, dann habe ich mein Ziel schon erreicht.
Ich wünsche euch eine ruhige und besinnliche Adventszeit ( auch, wenn vielleicht mal ein Lichtspektakel dabei ist 🙂 ).
Das Skript ✨ Light Effect Toggle als YAML Code:
alias: ✨ Light Effect Toggle
sequence:
- action: light.turn_on
metadata: {}
data: {}
target:
entity_id: " {{ light }} "
alias: first turn on light
- variables:
current_effect: "{{ state_attr(light, 'effect') }}"
all_effects: >
{% set exclude_list = (exclude | default('')).split(',') | map('trim') |
list %} {{ state_attr(light, 'effect_list') | reject('in', exclude_list)
| list }}
effect_to_apply: |
{% if random %}
{{ all_effects | random }}
{% else %}
{% set idx = all_effects.index(current_effect) + 1 %}
{% if idx >= all_effects | length %}
{{ all_effects[0] }}
{% else %}
{{ all_effects[idx] }}
{% endif %}
{% endif %}
alias: get effect list ( light is on )
- action: light.turn_on
metadata: {}
data:
effect: "{{ effect_to_apply }}"
brightness_pct: "{{ brightness }}"
transition: "{{ transition | default(0) }}"
target:
entity_id: "{{light}}"
alias: apply effect
- action: logbook.log
data:
name: Actual Effect
message: "actual effect: {{ state_attr(light, 'effect') | default('None') }}"
- action: logbook.log
data:
name: effect to apply
message: "effect to apply: {{ state_attr(light, 'effect') | default('None') }}"
fields:
light:
name: Licht
description: Die zu steuernde Licht-Entität
selector:
entity:
domain: light
random:
selector:
boolean: {}
name: random
brightness:
selector:
number:
min: 1
max: 100
step: 1
name: brightness
required: true
default: 50
exclude:
selector:
text: null
name: exclude
description: enter the effects you want to exclude here, separated by commas
transition:
selector:
number:
min: 1
max: 10
step: 0.1
name: transition
description: time in seconds
default: 0
description: Toggles the effect of the specified light
mode: parallel
max: 10
In der Welt von Home Assistant entstehen ständig neue, kreative Lösungen, um den Alltag smarter und einfacher zu gestalten. In meinem neuesten Video stellen Mitglieder der Home Assistant Community ihre beeindruckenden Automatisierungsprojekte vor. Hier sind einige Highlights, die du nicht verpassen solltest:
🔹 Christian hat ein cleveres Setup für seine Waschmaschine und seinen Trockner entwickelt. Dank Home Assistant bekommt er immer rechtzeitig eine Benachrichtigung, wenn die Wäsche fertig ist – nie wieder zu spät die Maschine ausräumen oder den perfekten Zeitpunkt für den Wechsel verpassen!
🔹 Patrick präsentiert sein selbstgebautes, smartes Schlüsselbrett. Es kombiniert Technik und Kreativität auf eine beeindruckende Weise, die nicht nur praktisch ist, sondern auch stylisch in den Alltag integriert werden kann.
Diese Projekte zeigen, wie vielseitig Home Assistant eingesetzt werden kann – von nützlichen Haushaltshelfern bis hin zu kreativen Ideen, die dein Zuhause einzigartig machen.
Hast du auch spannende Automatisierungen umgesetzt? Teile sie in den Kommentaren oder lass dich von der Community inspirieren! 🚀
Diese Uhr ist nicht nur ein stilvolles Accessoire, sondern auch ein wahres Multitalent im Smart Home. Dank ihrer nahtlosen Integration in Home Assistant kannst du die Ulanzi TC001 ganz nach deinen Wünschen anpassen und automatisieren. Stell dir vor, wie sie dir nicht nur die Uhrzeit anzeigt, sondern auch aktuelle Wetterdaten in lebendigen Animationen präsentiert oder dich rechtzeitig an deine nächsten Termine erinnert. Lass deiner Kreativität freien Lauf und gestalte deine Uhr mit individuellen Designs, die deine Persönlichkeit widerspiegeln. Die Ulanzi TC001 Smart Pixel Uhr ist der Schlüssel, um dein Zuhause intelligenter und stilvoller zu machen. Entdecke die unendlichen Möglichkeiten der modernen Technologie und verwandle dein Zuhause in einen Ort, der sowohl funktional als auch ästhetisch ansprechend ist – mit der Ulanzi TC001 wird jeder Tag zu einem besonderen Erlebnis!
In meinem Video habe ich die Installation von awtrix 3 auf dem Pixel Display nicht vorgestellt. Bei mir geht es um die Kommunikation mit awtrix 3 und Home Assistant. Und zwar ohne dem teilweise bekannten Memory Leak.
Bis zur Nacht vor der Veröffentlichung lag mir auch noch kein Affiliate Link vor. Aber nach nun einigen Wochen Wartezeit habe auch ich tatsächlich einen Link erhalten, wo ihr das Produkt erwerben könnt. Lag wohl doch nicht an der Kanalgröße 🙂
Für die Kommunikation mit dem Pixeldisplay habe ich im Video mehrere Skripte vorgestellt.
Bei der Entwicklung, dem Code und auch beim Bugfixing habe ich mit @Herr Spiegelmann ( Moderator auf meinem Discord Server ) eng zusammengearbeitet. Auch an dieser Stelle meinen herzlichen Dank für die sehr angenehme und konstruktive Zusammenarbeit.
awtrix – new app
awtrix – delete app
awtrix – indicator
awtrix – power off
awtrix – power on
awtrix – reboot
Icons für das Display lassen sich auf der Seite LaMetric Icon Gallery herunterladen. Im Video wurden folgende Icon Numbers verwendet:
3813 – für Tibber
37323 – für PV Leistung
2422 – für Aussentemperatur
389 – für SOC des Hausspeichers
974 – für Youtube Views und Likes
56166 – für Gelbe Tonne
12155 – für Graue Tonne
56626 – für Grüne Tonne
!Hinweis vom 24.01.2025!
Ab der Version 0.97 funktionieren die LaMetrics Icon´s wieder.
Zur Müllanzeige gibt es im Video vom 24.01.2025 ( Veröffentlichungszeitpunkt 17:00 Uhr ) ein Update zum Thema. Ihr findet das Video unter: https://youtu.be/3jxeRZBt4u4
!Hinweis vom 16.12.2024!
Aktuell lässt sich in der awtrix Weboberfläche von LaMetrics kein Icon auf das Display laden. Aber es gibt eine alternative Lösung. Blueforcer , der Entwickler von awtrix 3 hat eine App für Android und IPhone entwickelt, wo ihr auch eine Icon Gallerie zur Verfügung gestellt bekommt und die Icons direkt auf das Display laden könnt. Die App kostet für iOs weniger als 4€ ( Stand: 16.12.2024), was ich für den Funktionsumfang für absolut gerechtfertigt halte. Es gilt zu beachten, wenn man die Icons von awtrix verwendet, dann müssen die Icon ID´s angepasst werden.
awtrix – new app
alias: awtrix - new app
sequence:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/custom/{{topicname}}
payload: |-
{
"text": "{{text}}",
"rainbow": {{rainbow|tojson}},
"duration": "{{duration}}",
"icon": "{{icon}}",
"scrollSpeed": 80,
"textCase": "{{textcase}}",
"lifetime": "{{lifetime}}"
}
- if:
- condition: template
value_template: "{{ showimmediately == true or showimmediately == True}}"
then:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/switch
payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
topicname:
selector:
text: null
name: topicname
required: true
description: Name of the topic - one topic per app
text:
selector:
text: null
name: text
required: true
description: Text to be displayed
icon:
selector:
number:
min: 0
max: 100000
name: icon
required: true
description: Icon ID, needs to be present on the awtrix filesystem - default no icon
default: 1
rainbow:
selector:
boolean: {}
name: rainbow
default: false
required: true
description: Rainbow text yes/no
lifetime:
selector:
number:
min: 0
max: 86400
step: 1
name: lifetime
default: 0
description: Discard app after X seconds - default 0 (never expire)
duration:
selector:
number:
min: 1
max: 180
step: 1
name: duration
default: 3
description: How many seconds should the message be displayed - default 3
textcase:
selector:
number:
min: 0
max: 2
step: 1
name: textCase
default: 0
description: >-
Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
2=shows as it sent - default 0
showimmediately:
selector:
boolean: {}
name: showImmediately
required: false
description: Jumps the queue and displays the message immediately - default false
mode: parallel
max: 10
awtrix – delete app
alias: awtrix - delete app
sequence:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/custom/{{topicname}}
payload: "{}"
description: ""
icon: mdi:led-strip
fields:
topicname:
selector:
text: null
name: topicname
required: true
description: Name of the app to be deleted
mode: parallel
max: 10
awtrix – indicator
Hinweis zur Verwendung: Wenn man den Indikator wieder deaktivieren ( nicht anzeigen ) lassen will, so muss lediglich die Farbe „schwarz“ selektiert werden.
alias: awtrix - indicator
sequence:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/indicator{{indicator}}
payload: "{\"color\":{{colour}}, \"fade\":{{fade}}}"
description: ""
icon: mdi:led-strip
fields:
indicator:
selector:
number:
min: 1
max: 3
step: 1
name: indicator
required: true
description: Index of the indicator
default: 1
colour:
selector:
color_rgb: {}
default:
- 255
- 0
- 0
name: colour
description: Colour of the indicator
required: true
fade:
selector:
number:
min: 500
max: 3000
step: 100
name: fade
required: true
default: 0
description: >-
Fade the indicator on and off with a fade interval in milliseconds - 0 is
don't fade
mode: parallel
max: 10
awtrix – power off
alias: awtrix - power off
sequence:
- action: mqtt.publish
metadata: {}
data:
topic: awtrix/power
payload: "{\"power\" : false}"
evaluate_payload: false
qos: 0
retain: false
description: power off device
icon: mdi:led-strip
fields: {}
mode: parallel
max: 10
awtrix – power on
alias: awtrix - power on
sequence:
- action: mqtt.publish
metadata: {}
data:
topic: awtrix/power
payload: "{\"power\" : true}"
evaluate_payload: false
qos: 0
retain: false
description: power on device
icon: mdi:led-strip
fields: {}
mode: parallel
max: 10
Für die Müllanzeige werden ein Input Button Helfer und ein Template Helfer benötigt.
Der Input Button Helfer übernimmt bei Betätigung einen aktuellen Zeitstempel, welcher im Template „Müllinformation“ verwendet wird.
Das Template Müllinformation liest aus einem Kalender Zeitpunkte für die jeweiligen Müllabholungstermine aus und differenziert in diesem Beispiel nach
Gelber Sack
Grüne Tonne
Graue Tonne
Template Helfer Sensor „Müllinformation“
{% set last_pressed = as_datetime(states('input_button.mulltonne_rausgestellt')).date() %}
{% set start_time = state_attr('calendar.abfall', 'start_time') %}
{% if start_time %}
{% set event_datetime = as_datetime(start_time) %}
{% set event_date = event_datetime.date() %}
{# Wenn der Button innerhalb des gültigen Zeitraums (heute oder gestern) gedrückt wurde und das Ereignis noch nicht vorbei ist #}
{% if (last_pressed == event_date or last_pressed == event_date - timedelta(days=1)) %}
Tonne wurde rausgestellt.
{% else %}
{# Am Tag vor dem Ereignis #}
{% if (event_date - now().date()).days == 1 %}
{{ state_attr('calendar.abfall', 'message') }} rausstellen!
{# Am Tag des Ereignisses #}
{% elif event_date == now().date() %}
{{ state_attr('calendar.abfall', 'message') }} rausstellen!
{# Ansonsten kein Termin #}
{% else %}
Kein Müll
{% endif %}
{% endif %}
{% else %}
Kein Termin
{% endif %}
1 Tag vor dem Abholungstermin bis zum Tag der Abholung, wird der Termin mit der jeweiligen herauszustellenden Tonne über das Template angezeigt. Ich verwende dafür die HACS Mushroom Cards .
Wurde die Tonne herausgestellt, kann über den Input Button quittiert werden, dass die Mülltonne herausgestellt wurde.
Wird der Vorgang quittiert, wird die Anzeige aktualisiert und auch auf dem Display die Nachricht entfernt.
Müll quittieren (Mushroom Template-Badge)
type: custom:mushroom-template-badge
content: Müll quittieren
icon: mdi:trash-can
color: >-
{% set last_pressed =
as_datetime(states('input_button.mulltonne_rausgestellt')).date() %}
{% set start_time = state_attr('calendar.abfall', 'start_time') %}
{% if start_time %}
{% set event_datetime = as_datetime(start_time) %}
{% set event_date = event_datetime.date() %}
{# Wenn der Button innerhalb des gültigen Zeitraums (heute oder gestern) gedrückt wurde und das Ereignis noch nicht vorbei ist #}
{% if (last_pressed == event_date or last_pressed == event_date - timedelta(days=1)) %}
green
{% else %}
blue
{% endif %}
{% endif %}
label: |2-
entity: input_button.mulltonne_rausgestellt
tap_action:
action: toggle
visibility:
- condition: and
conditions:
- condition: state
entity: sensor.mullinformation
state_not: Kein Müll
- condition: state
entity: sensor.mullinformation
state_not: Tonne wurde rausgestellt.
- condition: and
conditions: []
Die Automatisierung sieht dann wie folgt aus. Hier bitte die eigenen Entitäten verwenden und nicht benötigte Anzeigen entfernen.
Für Müll quittieren, verwende ich ein Mushroom Template Badge.
Update vom 27.11.2024dynamische Wetter-Icons
Das Thema beschäftigt mich weiterhin, so dass ich euch noch weitere Ergänzungen und Updates zum awtrix 3 zur Verfügung stellen möchte.
Angeregt durch einige Kommentare bzgl. einer in Abhängigkeit vom aktuellen Wetter anzuzeigendes Icon , möchte ich euch eine Erweiterung der Automatisierung, bzw. des Skripts vorstellen, so dass ihr ohne eine zusätzliche Automatisierung oder Skript den Zustand des Wetters als Icon ( z.B. Sonnig, Regnerisch, Bewölkt etc.. ) nutzen könnt. Grundvoraussetzung dafür ist eine Wetterintegration wie z.B. der Deutsche Wetterdienst (GitHub – FL550/dwd_weather: Deutscher Wetterdienst integration for Home-Assistant)
Partly Cloudly
Rainy
Snowy
Bei dieser Lösung wird der aktuelle Zustand der Wetter Entität ausgelesen und in der Automatisierung verwendet.
Wir benötigen dazu ein Template, welches den aktuellen Zustand des Wetters ausgibt. Die Ausgaben des Wetter Templates sind in jeder Integration identisch und können auf der Home Assistant Dokumentationsseite nachgelesen werden.
In meinem Beispiel heißt die Entität “ weather.lahr „.
{{ states('weather.lahr') }}
Rückgabe ist in diesem Beispiel bewölkt, also cloudy.
Es gibt nach der Home Assistant Dokumentation 15 unterschiedliche Wetter Zustände. Für jeden der Zustände habe ich uns ein Icon von der Seite LaMetric Icon Gallery herausgesucht und auf der awtrix 3 Weboberfläche heruntergeladen.
ICON-ID
Wetter Zustand
2283
cloudy
13505
clear-night
8551
fog
52386
hail
21174
lighting (thunderstorm)
51457
lightning-rainy
2286
partlycloudy
56677
pouring
56548
rainy
58081
snowy
49301
snowy-rainy
11201
sunny
15618
windy
62874
windy-variant
56705
exceptional
Ladet diese Icons über die awtrix 3 Weboberfläche herunter und speichert die Einstellungen.
Nachdem die Icons alle heruntergeladen sind, geht zum Tab Files und lasst euch dort alle Dateien im Verzeichnis ICONS anzeigen.
Dort gebt ihr den Dateien mit der jeweiligen ID den Namen aus der obigen Tabelle.
Die Beispiel ID 2283.gif, wird somit aus der Datei cloudy.gif umbenannt. Dieser Vorgang wird für alle in der Tabelle enthaltenen IDs wiederholt.
Ist der Vorgang abgeschlossen, sollten folgende Bilddaten im Verzeichnis ICONS vorhanden sein.
Im Skript awtrix – new app muss eine Änderung vorgenommen werden.
Unter dem Feld icon, muss Zahl in Text geändert und gespeichert werden.
Ändern in Text:
Nach dem Speichern ist das Skript nun in der Lage ein Icon über einen Namen ( wie z.B. cloudy oder sunny ) zu laden.
Hier nochmal das vollständige Skript awtrix – new app
alias: awtrix - new app
sequence:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/custom/{{topicname}}
payload: |-
{
"text": "{{text}}",
"rainbow": {{rainbow|tojson}},
"duration": "{{duration}}",
"icon": "{{icon}}",
"scrollSpeed": 80,
"textCase": "{{textcase}}",
"lifetime": "{{lifetime}}"
}
- if:
- condition: template
value_template: "{{ showimmediately == true or showimmediately == True}}"
then:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/switch
payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
topicname:
selector:
text: null
name: topicname
required: true
description: Name of the topic - one topic per app
text:
selector:
text: null
name: text
required: true
description: Text to be displayed
icon:
selector:
text: {}
name: icon
required: true
description: Icon ID, needs to be present on the awtrix filesystem - default no icon
rainbow:
selector:
boolean: {}
name: rainbow
default: false
required: true
description: Rainbow text yes/no
lifetime:
selector:
number:
min: 0
max: 86400
step: 1
name: lifetime
default: 0
description: Discard app after X seconds - default 0 (never expire)
duration:
selector:
number:
min: 1
max: 180
step: 1
name: duration
default: 3
description: How many seconds should the message be displayed - default 3
textcase:
selector:
number:
min: 0
max: 2
step: 1
name: textCase
default: 0
description: >-
Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
2=shows as it sent - default 0
showimmediately:
selector:
boolean: {}
name: showImmediately
required: false
description: Jumps the queue and displays the message immediately - default false
mode: parallel
max: 10
In der Automatisierung kann nun das Skript für die dynamischen Wettericons wie folgt aufgerufen werden, ich verwende es zusammen mit einem Außentemperatursensor und übergebe als Icon den aktuellen Zustand der Wetter Entität.
Ich habe das Script noch erweitert, so dass auch eine RGB Farbe übergeben werden kann. Defaultwert ist „weiß“ , es muss auch keine Farbe angegeben werden.
Der neue Parameter nennt sich textcolor. Im Beispiel ist die Schriftfarbe auf „rot“ gesetzt worden.
alias: awtrix - new app
sequence:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/custom/{{topicname}}
payload: |-
{
"text": "{{text}}",
"rainbow": {{rainbow|tojson}},
"duration": "{{duration}}",
"icon": "{{icon}}",
"scrollSpeed": 80,
"textCase": "{{textcase}}",
"lifetime": "{{lifetime}}",
"color": {{textcolor or [255, 255, 255] | tojson}}
}
- if:
- condition: template
value_template: "{{ showimmediately == true or showimmediately == TRUE }}"
then:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/switch
payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
topicname:
selector:
text: null
name: topicname
required: true
description: Name of the topic - one topic per app
text:
selector:
text: null
name: text
required: true
description: Text to be displayed
icon:
selector:
text: {}
name: icon
required: true
description: Icon ID, needs to be present on the awtrix filesystem - default no icon
rainbow:
selector:
boolean: {}
name: rainbow
default: false
required: true
description: Rainbow text yes/no
lifetime:
selector:
number:
min: 0
max: 86400
step: 1
name: lifetime
default: 0
description: Discard app after X seconds - default 0 (never expire)
duration:
selector:
number:
min: 1
max: 180
step: 1
name: duration
default: 3
description: How many seconds should the message be displayed - default 3
textcase:
selector:
number:
min: 0
max: 2
step: 1
name: textCase
default: 0
description: >-
Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
2=shows as it sent - default 0
showimmediately:
selector:
boolean: {}
name: showImmediately
required: false
description: Jumps the queue and displays the message immediately - default false
textcolor:
selector:
color_rgb: {}
name: textcolor
default:
- 255
- 255
- 255
required: false
description: set text color
mode: parallel
max: 10
Update vom 05.12.2024 : Fortschrittsanzeige
Desto mehr man mit dem Display arbeitet, desto mehr Dinge fallen einem ein, was man damit alles realisieren kann. Ich habe das Script ergänzt um eine Fortschrittsanzeige, so dass ihr z.B. den Fortschritt eures Waschvorgangs oder eurer Geschirrspülmaschine anzeigen lassen könnt. Dann hat man im Blick, wann man die Wäsche aufhängen darf, oder das Geschirr ausräumen:-)
In diesem Beispiel habe ich einen Geschirrspüler dargestellt, der gerade ca. 80% seines Vorgangs beendet hat.
Ein neues Feld wurde dazu im Script ergänzt. Im Feld „progress“ übergebt ihr eure Entität , die einen Fortschritt in Prozent enthält ( 0-100% ).
Als Icon habe ich dafür die Nr. 55848 verwendet.
Das Feld muss nicht zwingend übergeben werden, so dass eure Automatisierungen davon nicht betroffen sind. Wird kein Wert übergeben, wird der Default Wert auf -1 gesetzt und kein Fortschritt wird angezeigt.
Das aktualisierte Script awtrix – new app
alias: awtrix - new app
sequence:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/custom/{{topicname}}
payload: |-
{
"text": "{{text}}",
"rainbow": {{rainbow|tojson}},
"duration": "{{duration}}",
"icon": "{{icon}}",
"scrollSpeed": 80,
"textCase": "{{textcase}}",
"lifetime": "{{lifetime}}",
"color": {{textcolor or [255, 255, 255] | tojson}},
"progress": {{ progress or -1 }}
}
- if:
- condition: template
value_template: "{{ showimmediately == true or showimmediately == True}}"
then:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: awtrix/switch
payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
topicname:
selector:
text: null
name: topicname
required: true
description: Name of the topic - one topic per app
text:
selector:
text: null
name: text
required: true
description: Text to be displayed
icon:
selector:
text: {}
name: icon
required: true
description: Icon ID, needs to be present on the awtrix filesystem - default no icon
rainbow:
selector:
boolean: {}
name: rainbow
default: false
required: true
description: Rainbow text yes/no
lifetime:
selector:
number:
min: 0
max: 86400
step: 1
name: lifetime
default: 0
description: Discard app after X seconds - default 0 (never expire)
duration:
selector:
number:
min: 1
max: 180
step: 1
name: duration
default: 3
description: How many seconds should the message be displayed - default 3
textcase:
selector:
number:
min: 0
max: 2
step: 1
name: textCase
default: 0
description: >-
Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
2=shows as it sent - default 0
showimmediately:
selector:
boolean: {}
name: showImmediately
required: false
description: Jumps the queue and displays the message immediately - default false
textcolor:
selector:
color_rgb: {}
name: textcolor
default:
- 255
- 255
- 255
required: false
description: set text color
progress:
selector:
number:
min: 0
max: 99
step: 1
name: progress
description: "shows a progress bar (value range from 0-100) "
default: 0
mode: parallel
max: 10
Die Automatisierung dazu habe ich so gestaltet, dass mir die Meldung und der Fortschritt nur dann angezeigt werden, wenn der Fortschritt > 0 % ist. Ansonsten wird die Meldung wieder entfernt. Getriggert wird auf Änderung des Fortschritts.
Der Teilabschnitt für die Wenn/Dann Bedingung unter den Aktionen sieht wie folgt aus:
Es ist wieder soweit – die Black Friday Weeks stehen vor der Tür! Amazon lädt dich ein, unglaubliche Schnäppchen zu machen und deine Wunschliste endlich abzuarbeiten. Warum warten, wenn du jetzt die besten Angebote finden kannst?
Warum die Black Friday Weeks bei Amazon?
Rabatte, die begeistern: Von Technik über Mode bis hin zu Haushaltsgeräten – die Vielfalt an Deals ist unschlagbar.
Komfortables Shopping: Keine Warteschlangen, kein Gedränge – entdecke alles bequem von zu Hause.
Perfekt für die Weihnachtszeit: Decke dich mit Geschenken ein und spare dabei!
Meine Empfehlungen für dich:
⭐ Technik-Fans aufgepasst: Schnappe dir reduzierte Smart-Home-Geräte, Laptops und vieles mehr. 🎁 Geschenkideen: Überrasche deine Liebsten mit einem besonderen Schnäppchen. 🛍️ Persönliche Must-Haves: Jetzt ist der Moment, dir selbst etwas zu gönnen!
Wie funktioniert’s?
Ganz einfach: Klicke auf meinen Affiliate-Link hier, und du gelangst direkt zu den Angeboten. Mit jedem Kauf über diesen Link unterstützt du nicht nur dich, sondern auch meine Arbeit – ohne zusätzliche Kosten für dich. 🖤
Warten lohnt sich nicht!
Die Deals sind begrenzt und oft schnell vergriffen. Also schnapp dir jetzt dein Traumangebot, bevor es weg ist. Verpass nicht die Gelegenheit, bei den Black Friday Weeks auf Amazon zuzuschlagen!
Klicke hier und sichere dir die besten Deals! 🚀Wenn ihr meinen Kanal unterstützen wollt, würde ich mich sehr freuen,
Optimierung von Home Assistant Automatisierungen mit dem Statistik-Helfer
In meinem heutigen Artikel möchte ich dir zeigen, wie du den Statistik-Helfer in Home Assistant effektiv nutzen kannst, um tiefere Einblicke in deine Smart Home-Daten zu erhalten. Durch die richtigen Berechnungen kannst du deine Automatisierungen noch präziser und smarter gestalten. Hier sind die wichtigsten Charakteristika, die du mit dem Statistik-Helfer auswerten kannst:
1. Absoluter Abstand
Der absolute Abstand zeigt dir den Unterschied zwischen zwei Messwerten, ohne die Richtung zu berücksichtigen. Diese Berechnung ist besonders nützlich, wenn du Schwankungen in einem Wert überwachen möchtest, ohne die genaue Richtung zu verfolgen. Ich nutze diese Methode oft, um schnelle Veränderungen zu erkennen.
2. Abstand von 95% und 99% der Werte
Mit dieser Berechnung kann ich herausfinden, wie sich ein Wert im Vergleich zu den meisten anderen Werten verhält. Der Abstand von 95% und 99% der Werte hilft mir dabei, Ausreißer zu identifizieren und meine Automatisierungen so anzupassen, dass sie nur unter den typischen Bedingungen reagieren.
3. Ältester Zeitpunkt
Der älteste Zeitpunkt zeigt mir, wann der älteste Messwert aufgezeichnet wurde. Das ist besonders nützlich, wenn ich nach älteren Daten suche oder herausfinden möchte, wie lange es her ist, dass ein Wert zuletzt aktualisiert wurde. Diese Information kann wichtige Auswirkungen auf Automatisierungen haben, die sich auf historische Daten stützen.
4. Änderung
Die Änderung zeigt mir, wie stark sich ein Wert verändert hat, sei es positiv oder negativ. Ich verwende diese Berechnung, um zu verstehen, wie schnell oder langsam sich Werte entwickeln, was für zeitkritische Automatisierungen sehr hilfreich ist.
5. Anzahl der Werte
Die Anzahl der Werte gibt mir eine einfache Übersicht darüber, wie viele Messwerte über einen bestimmten Zeitraum hinweg erfasst wurden. Diese Zahl hilft mir dabei, Trends zu erkennen und zu überprüfen, ob die Sensoren korrekt arbeiten.
6. Arithmetisches Mittel
Das arithmetische Mittel (der Durchschnitt) ist eine der grundlegendsten Berechnungen und gibt mir eine Vorstellung vom allgemeinen Trend eines Messwerts. Ich nutze das Mittel, um Automatisierungen zu erstellen, die auf den durchschnittlichen Bedingungen basieren.
7. Durchschnittliche Änderung pro Probe oder Sekunde
Diese Berechnung zeigt mir, wie schnell sich ein Wert im Zeitverlauf verändert. Ich finde diese Kennzahl besonders nützlich bei der Überwachung von Sensoren, die schnelle Reaktionen erfordern, wie zum Beispiel Bewegungsmelder oder Temperaturfühler.
8. Gesamt
Die Gesamtberechnung summiert alle Werte innerhalb eines bestimmten Zeitrahmens. Ich verwende diese Methode oft, um den Gesamtverbrauch von Energie oder die Gesamtzahl von Ereignissen zu ermitteln. Diese Zahl ist besonders nützlich, wenn ich die gesamte Leistung oder Aktivität über einen längeren Zeitraum beobachten möchte.
9. Linearisierter Durchschnitt
Der linearisierte Durchschnitt hilft mir, Daten zu glätten und langfristige Trends zu erkennen. Diese Methode ist besonders hilfreich, wenn ich mit periodischen Schwankungen zu tun habe und die Daten auf eine lineare Skala übertragen möchte, um langfristige Muster besser sichtbar zu machen.
Durch die Nutzung dieser Berechnungen und der Einblicke, die der Statistik-Helfer bietet, kann ich meine Automatisierungen in Home Assistant noch gezielter und effizienter gestalten. Egal, ob du den Abstand zwischen Messwerten überwachen, die Änderungsgeschwindigkeit analysieren oder die Gesamttrends erkennen möchtest – dieser Helfer ist eine wertvolle Unterstützung für jede Home Assistant-Instanz.
In dieser Playlist findest du alle bisherigen und kommenden Videos zum Thema Home Assistant Helfer: