Home Assistant + Telegram Bot: PV-/Akku-Status
Schritt-für-Schritt: Bot anlegen, Integration (Polling) einrichten, Befehle /akku & /info mit Balken & Inline-Buttons – inkl. Troubleshooting.
Inhalt
1) Telegram-Bot anlegen 2) Bot zur Gruppe & IDs holen 3) HA: Telegram-Integration (Polling) 4) Senden testen 5) Befehl /akku (mit Balken + Buttons) 6) Befehl /info (PV-Übersicht + Buttons) 7) Troubleshooting (häufige Fehler)1) Telegram-Bot anlegen (BotFather)
1
In Telegram @BotFather öffnen → /newbot → Namen & Username (z. B. home_1_177_bot) festlegen. Token notieren.
2
Privacy-Mode deaktivieren: /setprivacy → Bot wählen → Disable. (So kommen Befehle in Gruppen an.)
Tipp: Wenn du den Token irgendwo gepostet hast: /revoke und neuen Token via /token holen.
2) Bot zur Gruppe hinzufügen & Chat-IDs holen
- Bot in deine Supergruppe einladen (optional Admin machen).
- Gruppen-ID holen: @myidbot in der Gruppe → /getgroupid (Format: -100…).
- (Optional) Deine User-ID in PM: @myidbot → /getid.
Hinweis: Supergruppen-Themen (Topics) können Events blocken. Entweder Themen deaktivieren oder im „Allgemein/General“-Topic schreiben.
3) Home Assistant: Telegram-Integration (Polling)
- Einstellungen → Geräte & Dienste → Integration hinzufügen → “Telegram bot”.
- Token einfügen → Verbindungsmodus: Polling.
- In den Optionen: Allowed chat IDs = -100DEINEGRUPPE (und ggf. deine User-ID). Parse-Modus: HTML.
Webhook aufräumen (falls zuvor gesetzt):
https://api.telegram.org/bot<DEIN_TOKEN>/deleteWebhook?drop_pending_updates=true
4) Test: Kann HA senden?
Einstellungen → Entwicklerwerkzeuge → Aktionen → Dienst telegram_bot.send_message, dann:
target: -100DEINEGRUPPE
message: "HA ↔️ Telegram läuft ✅"
disable_web_page_preview: true
Kommt an? Super – weiter mit den Befehlen.
5) /akku – Batteriestatus mit Balken + Inline-Buttons
In Automationen neue Automation → YAML bearbeiten (kein führendes - am Anfang):
alias: Telegram /akku → Batteriestatus (modern)
mode: single
triggers:
- trigger: event
event_type: telegram_command
- trigger: event
event_type: telegram_text
- trigger: event
event_type: telegram_callback
actions:
- condition: template
value_template: >
{% set cmd = (trigger.event.data.command or '')|lower %}
{% set txt = (trigger.event.data.text or '')|lower %}
{% set cb = (trigger.event.data.data or '')|lower %}
{{ cmd.startswith('/akku') or txt.startswith('/akku') or txt in ['akku','akku?'] or cb.startswith('/akku') }}
- choose:
- conditions: "{{ trigger.event.event_type == 'telegram_callback' and (trigger.event.data.id is defined) }}"
sequence:
- action: telegram_bot.answer_callback_query
data:
callback_query_id: "{{ trigger.event.data.id }}"
show_alert: false
message: "Aktualisiert ✅"
- delay: "00:00:01"
- action: telegram_bot.send_message
data:
target: "{{ trigger.event.data.chat_id }}"
parse_mode: html
disable_web_page_preview: true
message: >-
{% set soc = states('sensor.growatt_spf_battery_state_of_charge')|int(0) %}
{% set filled = (soc // 10) %}
{% set bar = '█' * filled + '░' * (10 - filled) %}
{% set icon = '🟥' if soc < 20 else '🟧' if soc < 50 else '🟨' if soc < 80 else '🟩' %}
🔋 <b>Akku</b> {{ icon }}
SOC: {{ soc }}%
<code>[{{ bar }}]</code>
inline_keyboard:
- "🔁 Aktualisieren:/akku"
- "☀️ PV-Info:/info"
Der Balken füllt sich in 10-%-Schritten. Buttons senden telegram_callback Events, daher lauschen wir im Trigger darauf.
6) /info – PV-Übersicht (modern, mit Akku-Balken + Buttons)
Neue Automation → YAML bearbeiten (kein führendes -):
alias: Telegram /info → PV-Status (modern)
mode: single
triggers:
- trigger: event
event_type: telegram_command
- trigger: event
event_type: telegram_text
- trigger: event
event_type: telegram_callback
conditions:
- condition: template
value_template: >
{% set t = (trigger.event.data.text or '')|lower %}
{% set c = (trigger.event.data.command or '')|lower %}
{% set cb = (trigger.event.data.data or '')|lower %}
{{ t.startswith('/info') or t in ['info','info?'] or c.startswith('/info') or cb.startswith('/info') }}
actions:
- choose:
- conditions: "{{ trigger.event.event_type == 'telegram_callback' and (trigger.event.data.id is defined) }}"
sequence:
- action: telegram_bot.answer_callback_query
data:
callback_query_id: "{{ trigger.event.data.id }}"
show_alert: false
message: "Aktualisiert ✅"
- delay: "00:00:01"
- variables:
chat: "{{ trigger.event.data.chat_id }}"
pv: "{{ states('sensor.growatt_spf_pv_power')|float(0)|round(0) }}"
soc: "{{ states('sensor.growatt_spf_battery_state_of_charge')|int(0) }}"
pv1: "{{ states('sensor.growatt_spf_pv_power_1')|float(0)|round(0) }}"
pv2: "{{ states('sensor.growatt_spf_pv_power_2')|float(0)|round(0) }}"
v1: "{{ states('sensor.growatt_spf_pv_voltage_1')|float(0)|round(1) }}"
v2: "{{ states('sensor.growatt_spf_pv_voltage_2')|float(0)|round(1) }}"
a1: "{{ states('sensor.growatt_spf_pv_current_1')|float(0)|round(2) }}"
a2: "{{ states('sensor.growatt_spf_pv_current_2')|float(0)|round(2) }}"
e_tot: "{{ states('sensor.growatt_spf_pv_energy')|float(0)|round(2) }}"
e_day: "{{ states('sensor.pv_ertrag_heute')|float(0)|round(2) }}"
- action: telegram_bot.send_message
data:
target: "{{ chat }}"
parse_mode: html
disable_web_page_preview: true
message: >-
{% set filled = (soc // 10) %}
{% set bar = '█' * filled + '░' * (10 - filled) %}
<b>☀️ Growatt SPF6000 8kWp</b>
🔋 <b>Akkustand</b> {{ soc }}% <code>[{{ bar }}]</code>
🟧 <b>PV gesamt</b> {{ pv }} W
🟦 <b>PV1</b> {{ pv1 }} W • {{ v1 }} V • {{ a1 }} A
🟩 <b>PV2</b> {{ pv2 }} W • {{ v2 }} V • {{ a2 }} A
📊 <b>Energie</b> ges.: {{ e_tot }} kWh
📅 <b>Heute</b> : {{ e_day }} kWh
inline_keyboard:
- "🔁 Aktualisieren:/info"
- "🔋 Akku:/akku"
Einheiten/Präzision sind gerundet und gut lesbar. Icons sind rein visuell.
7) Troubleshooting (häufige Stolpersteine)
- „/akku“ löst nicht aus → In Gruppen /akku@DEIN_BOTNAME schreiben oder Privacy-Mode beim BotFather deaktivieren.
- Keine Events in HA → Integration im Polling-Modus, Allowed Chat IDs gesetzt, ggf. Bot kurz aus Gruppe entfernen & neu hinzufügen, im PM /start senden.
- Inline-Buttons „klicken“, aber keine Aktion → In den Automationen muss event_type: telegram_callback als Trigger dabei sein und auf data geprüft werden (siehe YAML oben).
- Webhook aktiv → Einmal bereinigen:
https://api.telegram.org/bot<TOKEN>/deleteWebhook?drop_pending_updates=true
- „Speichern“-Fehler im UI-Editor → Im UI-Editor kein führendes - vor alias:. In automations.yaml hingegen schon.
Check: Wenn Senden klappt und du im Event-Abo (telegram_text/telegram_command) Events siehst, funktionieren die Automationen mit den Snippets oben sofort.