Kritische Alarme.
Garantiert zugestellt.
Critical Alerts.
Guaranteed Delivery.
Eine Push-Nachricht wird nachts überhört. Verbinde dein Smart Home nahtlos mit der API von TeamMessage.eu und sende echte Voice-Calls und SMS, die den "Bitte nicht stören"-Modus deiner Familie oder Nachbarn sofort durchbrechen. A push notification is missed at night. Seamlessly connect your smart home with the TeamMessage.eu API and send real voice calls and SMS that instantly break through the "Do Not Disturb" mode of your family or neighbors.
So rettet die Integration deinen TagHow the integration saves your day
Keine verpassten Alarme, keine App-Zwänge, volle Kontrolle.No missed alarms, no app requirements, full control.
1. Der Alarm1. The Alarm
Dein Home Assistant registriert Rauch oder Wasser. Die Automatisierung feuert den Dienst send_message ab. Keine Zeit zu verlieren.Your Home Assistant detects smoke or water. The automation fires the send_message service. No time to lose.
2. Smarte Gruppen2. Smart Groups
Du hast die ID "Familie" angegeben. Die Integration ermittelt im Hintergrund automatisch alle hinterlegten Handynummern.You specified the ID "Family". The integration automatically determines all stored mobile numbers in the background.
3. Der Voice-Call3. The Voice Call
Push-Nachrichten sind lautlos. TeamMessage ruft die Handys an. Eine Computerstimme liest den Alarm laut vor. Man wacht garantiert auf.Push messages are silent. TeamMessage calls the phones. A computer voice reads the alarm aloud. You are guaranteed to wake up.
4. Dashboard Logbuch4. Dashboard Log
Dank der Custom Cards siehst du in Home Assistant sofort, ob die Anrufe zugestellt wurden. Volle Kontrolle auf deinem Tablet.Thanks to the Custom Cards, you can instantly see in Home Assistant whether the calls were delivered. Full control on your tablet.
📖 Anwender-Handbuch (Integration) 📖 User Manual (Integration)
Die Konfiguration und Nutzung der Dienst-Aufrufe (Service-Calls) in Home Assistant (v1.1.1). The configuration and usage of service calls in Home Assistant (v1.1.1).
1. Vorbereitungen (TeamMessage.de)1. Preparations (TeamMessage.eu)
Bevor du die Integration in Home Assistant nutzen kannst, benötigst du einen Account beim Anbieter und die entsprechenden Zugangsdaten für die API. Before you can use the integration in Home Assistant, you need a provider account and the corresponding access data for the API.
Preise & AccountsPricing & Accounts
Für den tatsächlichen Versand von SMS und Sprachanrufen fallen die üblichen Gebühren deines Tarifs beim Anbieter an. Die Integration selbst ist kostenlos. The standard fees of your provider tariff apply for the actual sending of SMS and voice calls. The integration itself is free of charge.
- Registrierung:Registration: Gehe aufGo to teammessage.eu und erstelle dir einen Account.and create an account.
- Team-ID ermitteln:Find Team ID: Sobald du eingeloggt bist, findest du deine Team-ID (Kundennummer) in deinem Profil. Notiere sie dir (z.B.
98765).Once logged in, you will find your Team-ID (customer number) in your profile. Note it down (e.g.,98765). - API-Token generieren:Generate API Token: Navigiere zu den Einstellungen -> Schnittstellen / API. Erstelle dort einen neuen API-Token (Bearer Token) und kopiere diesen sofort.Navigate to Settings -> Interfaces / API. Create a new API Token (Bearer Token) there and copy it immediately.
2. Installation & Einrichtung2. Installation & Setup
Nach der Installation (siehe Downloads) fügst du die Integration über Einstellungen -> Geräte & Dienste hinzu. Dort gibst du ID und Token ein. After installation (see Downloads), add the integration via Settings -> Devices & Services. There you enter the ID and Token.
Smarte Fallbacks (Optionen)Smart Fallbacks (Options)
Über den Button Konfigurieren in der Integrations-Übersicht kannst du diese Fallbacks definieren. Das erspart dir ständiges Tippen in den YAML-Automatisierungen! You can define these fallbacks via the Configure button in the integration overview. This saves you from constantly typing in YAML automations!
| EinstellungsfeldSetting Field | Beschreibung & Praxis-BeispielDescription & Example |
|---|---|
| Standard TeamlisteDefault Teamlist |
Wird genutzt, wenn im Dienst das Feld teamlist_email leer bleibt.
Used if the field teamlist_email remains empty in the service call.Bsp: Trage die ID "Familie" ein. Du musst die Liste ab sofort nie wieder in YAML abtippen.Ex: Enter the ID "Family". You never have to type the list in YAML again. |
| Standard Absender-E-MailDefault Sender Email |
Deine Autorisations-E-Mail. Zwingend nötig für "Geschlossene Gruppen".
Your authorization email. Mandatory for "Closed Groups". Bsp: admin@beispiel.de. So autorisiert sich HA automatisch.Ex: admin@example.com. HA authorizes itself automatically. |
| Standard KeywordDefault Keyword |
Das Passwort für geschlossene Listen.The password for closed lists. Bsp: Sicher123!.Ex: Secure123!. |
3. Das TeamMessage Panel im Detail3. The TeamMessage Panel
Die Integration fügt deinem Home Assistant in der linken Seitenleiste ein neues Menü namens TeamMessage hinzu. Dieses hochmoderne "Glassmorphism"-Panel ist in 5 Tabs unterteilt: The integration adds a new menu called TeamMessage to the left sidebar of your Home Assistant. This modern "Glassmorphism" panel is divided into 5 tabs:
- Dashboard: Anzeige von Guthaben (Prepaid), historisch gesendeten Nachrichten und deinem Tarifmodell.Display of credits (prepaid), historically sent messages, and your tariff model.
- SendenSend: Ideal, um Nachrichten manuell zu testen, ohne erst eine Automatisierung schreiben zu müssen. Formular für Direkt- oder Gruppenversand.Ideal for testing messages manually without having to write an automation first. Form for direct or group sending.
- LogbuchLogbook: Das Herzstück der Fehleranalyse. Live-Anzeige von Zustellstatus (Haken, Sanduhr, Fehler), Filterfunktion und Auto-Refresh.The core of error analysis. Live display of delivery status (check, hourglass, error), filter function and auto-refresh.
- KontakteContacts: Verwalte die Mitglieder deiner Teamlisten direkt aus Home Assistant heraus! Du kannst Kontakte laden, erstellen, bearbeiten und löschen.Manage the members of your team lists directly from Home Assistant! You can load, create, edit and delete contacts.
- EinstellungenSettings: Hier kannst du die Smarten Fallbacks bequem über die grafische Oberfläche ändern.Here you can easily change the Smart Fallbacks via the graphical interface.
4. Nutzung in Automatisierungen4. Usage in Automations
Sende Alarme über den Dienst:Send alarms via the service: sno_teammessage.send_message.
Hier sind alle 13 verfügbaren Parameter:Here are all 13 available parameters:
Vollumfängliche YAML BeispieleComprehensive YAML Examples
alias: "Alarm: Wasserschaden SMS"
trigger:
- platform: state
entity_id: binary_sensor.wassersensor_keller
to: "on"
action:
- action: sno_teammessage.send_message
data:
target_type: "direct"
to_mobile: "+4915112345678"
channel: "sms"
message: "🚨 ALARM: Der Wassersensor im Keller hat Wasser registriert!"
from_mobile: "HomeAssist"
ucs2: true
alias: "Alarm: Einbruch Voice Call"
trigger:
- platform: state
entity_id: binary_sensor.haustur_kontakt
to: "on"
condition:
- condition: time
after: "23:00:00"
before: "06:00:00"
action:
- action: sno_teammessage.send_message
data:
target_type: "direct"
to_mobile: "+4915187654321"
channel: "voice"
message: "Achtung. Kritische Systemwarnung. Die Haustür wurde soeben geöffnet."
alias: "Info: System offline an Team"
trigger:
- platform: state
entity_id: binary_sensor.server_status
to: "off"
for:
minutes: 5
action:
- action: sno_teammessage.send_message
data:
target_type: "list"
teamlist_email: "98765"
message: "SERVER OFFLINE: Der Hauptserver ist seit 5 Minuten nicht erreichbar."
keyword: "Sicher123!"
sender_email: "admin@beispiel.de"
alias: "Info: Waschmaschine (Planung)"
trigger:
- platform: state
entity_id: sensor.waschmaschine_status
to: "Fertig"
action:
- action: sno_teammessage.send_message
data:
target_type: "direct"
to_mobile: "+4915112345678"
message: "Die Waschmaschine ist fertig und kann ausgeräumt werden."
flash: true
time: "16:00"
🛠️ Entwickler-Dokumentation🛠️ Developer Docs
Vollumfängliche Systemarchitektur, Payload-Manipulation und Datenfluss in Python. Comprehensive system architecture, payload manipulation and data flow in Python.
Architektur-RichtlinieArchitecture Guideline
Die Integration implementiert eine Hub-Architektur mit Cloud-Polling. Das Frontend (Lovelace/SPA) hat keinen Zugriff auf den Bearer Token. Sämtliche Kommunikation läuft zwingend über die views.py (Proxy-Schicht) im Backend, um API-Keys nicht im Browser offenzulegen.
The integration implements a hub architecture with cloud polling. The frontend (Lovelace/SPA) has no access to the Bearer Token. All communication strictly runs through the views.py (proxy layer) in the backend to avoid exposing API keys in the browser.
1. Systemarchitektur & Kernkomponenten1. System Architecture & Core Components
- api.py (API Client): Asynchroner HTTP-Wrapper (aiohttp). Verwaltet Token & Auto-Heal-Mechanismus für unvollständige PUT-Anfragen.Asynchronous HTTP wrapper (aiohttp). Manages token & auto-heal mechanism for incomplete PUT requests.
- services.py (Service Layer): Beinhaltet die Geschäftslogik für den
send_message-Dienst und den Smart Group Resolver.Contains the business logic for thesend_messageservice and the Smart Group Resolver. - views.py (Security Proxy): Ein
HomeAssistantView. Fängt HTTP-Requests ab und leitet sie sicher anapi.pyweiter.AHomeAssistantView. Intercepts HTTP requests and securely forwards them toapi.py. - coordinator.py: Pollt zyklisch (alle 5 Min) Guthaben, Tarife und Logs für die Sensoren.Cyclically polls (every 5 min) credits, tariffs and logs for the sensors.
- webhook.py: Nimmt asynchrone POST-Requests entgegen und feuert Events.Receives asynchronous POST requests and fires events.
2. Der Smart Group ResolverThe Smart Group Resolver (services.py)
Die TeamMessage REST-API erlaubt nativ keinen Blind-Broadcast an Listen-IDs auf dem SMS-Endpunkt. Sie verlangt immer physische Handynummern in to_mobile. Der Resolver mappt dies:
The TeamMessage REST API natively does not allow blind broadcasts to list IDs on the SMS endpoint. It always requires physical mobile numbers in to_mobile. The resolver maps this:
- Der Nutzer übergibt in HA eine
teamlist_email.The user passes ateamlist_emailin HA. - Der Service ruft
await client.get_teamlist_members()asynchron ab.The service retrievesawait client.get_teamlist_members()asynchronously. - Die Liste wird iteriert. Nur Kontakte mit
mb_contacttype==sms/voicewerden akzeptiert.The list is iterated. Only contacts withmb_contacttype==sms/voiceare accepted. - Fehlende Ländervorwahlen werden durch
format_phone_number()korrigiert (+49).Missing country codes are corrected byformat_phone_number()(+49). - Die Liste wird als String verknüpft (
",".join(mobile_numbers)) und alsto_mobilean die API gesendet.The list is concatenated as a string (",".join(mobile_numbers)) and sent asto_mobileto the API.
3. Auto-Heal & Pydantic Validierung (api.py)
Die TeamMessage API verwendet Pydantic. Fehlt beim Aktualisieren von Kontakten (PUT) das Feld mb, wirft die API einen 422 Error.
The TeamMessage API uses Pydantic. If the mb field is missing when updating contacts (PUT), the API throws a 422 error.
# Auto-Heal in api.py
if method.upper() == "PUT" and "/contacts/" in url:
if "data" not in payload: payload["data"] = {}
try:
contact_id = payload["data"].get("id", url.split("/")[-1])
existing = await self._request("GET", f"/contacts/{contact_id}")
if existing and "data" in existing:
# Fülle fehlende Felder auf, um 422 zu vermeiden / Fill missing fields to avoid 422
for key in ["mb", "name", "channel"]:
if key not in payload["data"] or not payload["data"][key]:
if key in existing["data"]:
payload["data"][key] = existing["data"][key]
except Exception as e:
_LOGGER.warning(f"Auto-heal failed: {e}")
4. Dynamisches URL-RoutingDynamic URL Routing
Um hardcodierte URLs zu vermeiden, leitet die API-Klasse Endpunkte aus der const.py ab. Beim Auflösen von Gruppen wird der SMS-Endpunkt dynamisch umgeschrieben:
To avoid hardcoded URLs, the API class derives endpoints from const.py. When resolving groups, the SMS endpoint is rewritten dynamically:
async def get_teamlist_members(self, list_target: Any) -> Dict[str, Any]:
# Transformation: /sms/send/ -> /teamlist/members/
url = ENDPOINT_SMS_SEND.replace("sms/send/", "teamlist/members/")
# ... Request ausführen / execute request
5. Event-Bus & Webhooks (Inbound)Event Bus & Webhooks (Inbound)
Schlägt ein Request auf dem Webhook (/api/webhook/sno_teammessage_12345) auf, feuert Home Assistant das Event sno_teammessage_incoming auf dem internen Event-Bus.
If a request hits the webhook (/api/webhook/sno_teammessage_12345), Home Assistant fires the event sno_teammessage_incoming on the internal event bus.
trigger:
- platform: event
event_type: sno_teammessage_incoming
action:
- action: notify.mobile_app
data:
message: "Webhook empfangen! / Webhook received! Daten: {{ trigger.event.data.payload }}"
6. Error Handling (API Map)
Die API liefert negative Integer-Codes. Die const.py mappt diese auf standardisierte String-Schlüssel für lokalisierte Exceptions in HA.
The API returns negative integer codes. The const.py maps these to standardized string keys for localized exceptions in HA.
- -1 -> invalid_team_id
- -2 -> invalid_teamlist_email
- -5 -> invalid_message
- -6 -> invalid_to_mobile
- -10 -> account_not_found
- -13 -> rate_limit_exceeded (Drosselt Polling)(Throttles polling)
- -14 -> closed_group_auth
🎨 Anleitung & Design (Dashboard)🎨 Guide & Design (Dashboard)
Guthaben, Logbücher und Schnellversand direkt auf deinem Tablet oder Smartphone. Credits, logs and quick sending directly on your tablet or smartphone.
1. Karten im Dashboard platzieren1. Placing Cards in the Dashboard
Nachdem du die Datei teammessage-cards.js als Ressource hinzugefügt hast (siehe Downloads), kannst du die Karten nutzen.
After adding the teammessage-cards.js file as a resource (see Downloads), you can use the cards.
- Navigiere zu deinem gewünschten Dashboard.Navigate to your desired dashboard.
- Klicke oben rechts auf den Stift (Dashboard bearbeiten).Click on the Pencil (Edit Dashboard) in the top right corner.
- Klicke auf Karte hinzufügen und suche nach
TeamMessage.Click on Add Card and search forTeamMessage. - Wähle die Karte. Im visuellen Editor trägst du zwingend deine Team-ID (
tm) ein!Select the card. In the visual editor, you must enter your Team-ID (tm)!
2. Die 4 Custom Cards im Detail2. The 4 Custom Cards in Detail
Das Herzstück. Versende Nachrichten manuell über dein Dashboard. Inklusive Dropdown für Teamlisten und intelligenter Rufnummern-Korrektur (0171 wird zu +49171). The centerpiece. Send messages manually via your dashboard. Includes dropdown for team lists and intelligent number correction (0171 becomes +49171).
Visualisiert dein verfügbares SMS-Guthaben in einem modernen Ring-Design. Aktualisiert sich vollautomatisch im Hintergrund. Visualizes your available SMS credits in a modern ring design. Updates fully automatically in the background.
Die Minimalismus-Lösung für schmale Spalten. Konzentriert sich ausschließlich auf den reinen SMS-Verbrauch als kleinen Text-Block. The minimalist solution for narrow columns. Focuses exclusively on pure SMS consumption as a small text block.
Ein interaktives Protokoll deiner Alarme. Klickst du auf einen Eintrag, siehst du das genutzte Handynetz (z.B. Vodafone) und den genauen Fehlercode. An interactive log of your alarms. If you click on an entry, you will see the mobile network used (e.g. Vodafone) and the exact error code.
3. Hybrides Einstellungs-System (Theming)3. Hybrid Setting System (Theming)
Die Karten unterstützen 5 Modi: Classic, Minimal, Glass, Dark und Neon.
The cards support 5 modes: Classic, Minimal, Glass, Dark and Neon.
Globale Admin-VorgabeGlobal Admin Default
Wenn du die Karte über den normalen Editor hinzufügst, definierst du den Standard für alle Nutzer im Haus. If you add the card via the normal editor, you define the standard for all users in the house.
Persönlicher OverridePersonal Override
Jede Karte hat oben rechts ein Zahnrad. Klickt ein Nutzer darauf, kann er das Design nur für sein eigenes Tablet/Handy überschreiben. Each card has a gear icon in the top right. If a user clicks on it, they can overwrite the design only for their own tablet/phone.
💻 Entwickler-Doku (Frontend)💻 Developer Docs (Frontend)
Vollumfängliche JavaScript-Architektur, API-Proxy Calls und Boilerplates (V2.0). Comprehensive JavaScript architecture, API proxy calls and boilerplates (V2.0).
1. Architektur & Sicherheitskonzept1. Architecture & Security Concept
Um höchste Sicherheitsstandards einzuhalten und CORS-Probleme zu vermeiden, dürfen Dashboard-Karten niemals direkt mit der externen API kommunizieren. In order to maintain the highest security standards and avoid CORS issues, dashboard cards must never communicate directly with the external API.
- Schreiben / Aktionen:Writing / Actions: Erfolgen ausschließlich über das Home Assistant Dienst-System (
sno_teammessage.send_message).Are executed exclusively via the Home Assistant service system (sno_teammessage.send_message). - Lesen / Datenabruf:Reading / Data Retrieval: Erfolgen über den in der Integration implementierten Reverse-Proxy, der serverseitig die Authentifizierung sicher abwickelt.Are executed via the reverse proxy implemented in the integration, which securely handles authentication on the server side.
2. Daten abrufen via Reverse-Proxy2. Fetching Data via Reverse Proxy
Der Proxy (views.py) nimmt Requests an. Kapsele diesen Aufruf in deiner Custom Card mit hass.callApi:
The proxy (views.py) accepts requests. Encapsulate this call in your custom card with hass.callApi:
async function fetchTMApi(hass, endpoint) {
try {
const data = await hass.callApi(
'GET',
`sno_teammessage/proxy?endpoint=${encodeURIComponent(endpoint)}`
);
return { data };
} catch (e) {
return { error: `Proxy HTTP ${e.status_code || 'Unbekannt/Unknown'} (${e.message})` };
}
}
// Beispiel: Logbuch abrufen (Status 0=Zugestellt, 1=Wird gesendet, 2=Fehler)
// Example: Fetch logbook (Status 0=Delivered, 1=Sending, 2=Error)
// const res = await fetchTMApi(this._hass, '/logging/sms/?start=0&quantity=5&tm=12345');
3. Aktionen ausführen (Service Call)3. Executing Actions (Service Call)
Das Versenden von Nachrichten erfolgt über hass.callService.
Sending messages is done via hass.callService.
async sendAlert() {
const payload = {
message: "Achtung: Wassersensor hat ausgelöst! / Warning: Water sensor triggered!",
teamlist_email: "admin@beispiel.de"
};
try {
await this._hass.callService('sno_teammessage', 'send_message', payload);
console.log("Nachricht erfolgreich an Backend übergeben / Message successfully passed to backend");
} catch (error) {
console.error("Fehler beim Senden / Error while sending:", error.message);
}
}
4. Das Hybride State-Management (localStorage)4. Hybrid State Management (localStorage)
Als Entwickler musst du sicherstellen, dass deine Karte Konfigurationen aus zwei Quellen korrekt zusammenführt (State Merging): Globale Config (HA Editor) und lokaler Override (Browser). As a developer, you must ensure that your card correctly merges configurations from two sources (State Merging): Global Config (HA Editor) and Local Override (Browser).
setConfig(config) {
if (!config.tm) throw new Error("Team-ID (tm) ist erforderlich! / is required!");
this.config = config;
// 1. Eindeutiger Key / Unique Key
const safeTitle = (config.title || 'default').replace(/[^a-zA-Z0-9]/g, '_');
this.cardKey = `sno_tm_v2_${config.type}_${safeTitle}`;
// 2. Lade lokale Daten / Load local data
let local = {};
try { local = JSON.parse(localStorage.getItem(this.cardKey)) || {}; } catch(e){}
// 3. State Merging (Local hat Vorrang / Local takes precedence)
this.state = {
theme: local.theme ?? this.config.theme ?? 'classic',
interval: local.interval ?? this.config.interval ?? 30000,
};
}
5. Blueprint für Custom Cards (Vanilla JS)5. Blueprint for Custom Cards (Vanilla JS)
Nutze folgendes Boilerplate ohne externe Lit-Abhängigkeiten für maximale HA-Kompatibilität: Use the following boilerplate without external Lit dependencies for maximum HA compatibility:
class SNOTeamMessageCustomCard extends HTMLElement {
static getConfigElement() {
return document.createElement("sno-teammessage-data-editor");
}
static getStubConfig() {
return { type: "custom:sno-teammessage-custom-card", title: "Meine Karte / My Card", tm: "" };
}
setConfig(config) {
if (!config.tm) throw new Error("Team-ID fehlt! / missing!");
this.config = config;
}
set hass(hass) {
this._hass = hass;
if (!this.querySelector('ha-card')) {
this.innerHTML = `
${this.config.title}
`;
this.querySelector('#btn').addEventListener('click', () => { /* callService */ });
}
}
getCardSize() { return 3; }
}
customElements.define('sno-teammessage-custom-card', SNOTeamMessageCustomCard);
6. Guidelines & Best Practices6. Guidelines & Best Practices
- Design-Konstanten nutzen:Use Design Constants: Verwende zwingend HA-Variablen wie
var(--primary-color), damit sich deine Karte ins Nutzer-Theme einfügt.It is mandatory to use HA variables likevar(--primary-color)so that your card blends into the user theme. - Caching:Caching: Nutze
hass.callApinur bei expliziter Nutzerinteraktion oder in angemessen kurzen Intervallen (z.B. alle 60 Sek für Log-Updates).Usehass.callApionly on explicit user interaction or in reasonably short intervals (e.g. every 60 sec for log updates). - Lebenszyklus:Lifecycle: Beende Timer in der
disconnectedCallback()Methode (z. B.clearInterval(this.timer)), um Memory Leaks zu vermeiden.Terminate timers in thedisconnectedCallback()method (e.g.clearInterval(this.timer)) to avoid memory leaks.
📦 Installation & Downloads📦 Installation & Downloads
Hier findest du die Ressourcen für Backend und Frontend.Find the resources for backend and frontend here.
1. HA Core Integration (Backend)1. HA Core Integration (Backend)
Installiert das Backend, die Service-Calls und das interaktive Seitenleisten-Panel. Installs the backend, service calls and the interactive sidebar panel.
Via HACS (Empfohlen)Via HACS (Recommended)
Füge https://github.com/SyncNetOps/int_SNO_teammessage als benutzerdefiniertes Repository in HACS hinzu.
Add https://github.com/SyncNetOps/int_SNO_teammessage as a custom repository in HACS.
Manuell (ZIP)Manual (ZIP)
Lade die ZIP herunter und entpacke sie in den Ordner /config/custom_components/sno_teammessage.
Download the ZIP and extract it into the folder /config/custom_components/sno_teammessage.
2. Custom Dashboard Cards2. Custom Dashboard Cards
Die JavaScript Datei für die Lovelace Dashboard Karten. The JavaScript file for the Lovelace Dashboard Cards.
Installations-AnleitungInstallation Guide
- Lege die heruntergeladene Datei im Ordner
/config/www/deines Home Assistants ab.Place the downloaded file in the/config/www/folder of your Home Assistant. - Gehe zu Einstellungen -> Dashboards -> Ressourcen.Go to Settings -> Dashboards -> Resources.
- Füge
/local/teammessage-cards.js?v=2als JavaScript-Modul hinzu.Add/local/teammessage-cards.js?v=2as a JavaScript Module. - Lade das Dashboard neu (Cache leeren!). Die Karten sind nun im Lovelace-Editor verfügbar.Reload the dashboard (clear cache!). The cards are now available in the Lovelace editor.
Changelog & Release History
v1.1.1 (Current Release)
Smart Group Resolver: Bei der Auswahl einer Teamliste (target_type: list) ruft das Backend nun im Hintergrund vollautomatisch alle Listenmitglieder ab, extrahiert die Rufnummern (SMS/Voice-Kanäle) und transformiert diese in das von der REST-API geforderte Format.
Smart Group Resolver: When selecting a team list (target_type: list), the backend now automatically retrieves all list members in the background, extracts the phone numbers (SMS/Voice channels) and transforms them into the format required by the REST API.
Im SPA-Frontend-Panel wurden dedizierte Eingabefelder für Keyword und Absender E-Mail beim Gruppenversand integriert, um die Authentifizierung in geschlossenen Gruppen zu gewährleisten. Dedicated input fields for Keyword and Sender Email have been integrated into the SPA frontend panel during group sending to ensure authentication in closed groups.
Sicheres URL-Routing (api.py): Funktion get_teamlist_members hinzugefügt, welche Endpunkte relativ und absolut fehlerfrei generiert.
Secure URL routing (api.py): Added function get_teamlist_members which generates endpoints relatively and absolutely error-free.
Fehler HTTP 422 (mb is missing) beim Editieren von Kontakten behoben. Der Auto-Heal Mechanismus rettet nun fehlerhafte PUT-Requests. Fixed HTTP 422 error (mb is missing) when editing contacts. The auto-heal mechanism now rescues faulty PUT requests.
🖼️ Benutzeroberfläche & Screenshots🖼️ UI & Screenshots
Klicke auf ein Bild, um die Lightbox-Vergrößerung zu aktivieren. Click on an image to activate the lightbox zoom.
❓ Umfassende FAQ (Wissensdatenbank) ❓ Comprehensive FAQ (Knowledge Base)
Lösungen zu Einrichtung, Smart Fallbacks und API-Fehlercodes. Solutions for setup, smart fallbacks and API error codes.
Über SNO (Matt) About SNO (Matt)
Die EntstehungsgeschichteThe Origin Story
"Es war ein ruhiger Dienstagabend, als plötzlich der Rauchmelder in der Garage Alarm schlug. Home Assistant reagierte sofort und schickte eine Push-Nachricht. Das Problem? Ich war im Kino – Handy stumm, kein Internetempfang im Saal. Zum Glück war es nur ein Fehlalarm durch Staub, aber es war ein Weckruf. Was nützt das smarteste Zuhause, wenn kritische Alarme nicht ankommen?
Ich brauchte ein System, das meine Familie und vor allem meine älteren Nachbarn – die gar kein Smartphone besitzen – im Notfall parallel informieren kann. Ein echter Anruf auf dem Festnetz oder eine klassische SMS, die jedes 'Bitte nicht stören' durchbricht. Da es keine zufriedenstellende HA-Integration gab, die Gruppenverwaltung und Voice-Calls intelligent kombinierte, programmierte ich SNO_TeamMessage."
"It was a quiet Tuesday evening when the smoke detector in the garage suddenly went off. Home Assistant reacted immediately and sent a push notification. The problem? I was at the movies – phone on silent, no internet reception in the theater. Fortunately, it was just a false alarm caused by dust, but it was a wake-up call. What good is the smartest home if critical alarms don't get through?
I needed a system that could inform my family and, above all, my elderly neighbors – who don't even own a smartphone – in parallel in an emergency. A real phone call to the landline or a classic SMS that breaks through any 'Do Not Disturb' mode. Since there was no satisfactory HA integration that intelligently combined group management and voice calls, I coded SNO_TeamMessage."
Hi! Hinter SNO (SyncNetOps) stehe ich – Matt. IT-Enthusiast aus NRW und riesiger Home Assistant Fan. Hi! Behind SNO (SyncNetOps) is me – Matt. IT enthusiast from Germany and huge Home Assistant fan.