seven.io SMS & Kommunikation

ioBroker-Adapter für die seven.io-API. SMS versenden, Telefonnummern abfragen, Kontakte und Gruppen verwalten, Sprachdienste nutzen und Kontoinformationen überwachen.

Aktueller Release
0.1.2
Entwickler
ipod86
Lizenz
MIT

ioBroker-Adapter für seven.io

Dieser Adapter verbindet ioBroker mit der SMS- und Kommunikations-API von seven.io . Versenden Sie SMS und starten Sie Sprachanrufe mit Text-to-Speech direkt aus Ihren Automatisierungen, Blockly-Skripten oder JavaScript-Code heraus – inklusive Kontaktverwaltung, Zustellverfolgung, SMS-Abfrage und Kontostandsüberwachung.


Merkmale

  • SMS senden – Auslösung über Datenpunkt, Blockly-Block odersendTo()
  • Flash-SMS – die Nachricht erscheint direkt auf dem Bildschirm des Empfängers
  • Sprachanrufe (TTS) – Vorlesen von Texten per automatisiertem Anruf
  • Zustellstatus – automatische Prüfung ca. 60 Sekunden nach dem Versand, Eintrag in einen dedizierten Bundesstaat
  • Kontaktverwaltung – Kontakte von seven.io als einzelne Datenpunkte synchronisieren; neue Kontakte direkt in ioBroker erstellen.
  • Empfänger anhand des Namens – geben Sie anstelle einer Telefonnummer einen Kontaktnamen ein; der Adapter löst ihn automatisch auf.
  • Kontostandsabfrage – konfigurierbares Intervall, Ergebnis als lesbarer Zustand verfügbar
  • SMS-Abfrage für eingehende Nachrichten – Empfang eingehender SMS (erfordert eine gemietete virtuelle Nummer, siehe unten)
  • Blockly-Block – sofort einsatzbereiter Block in der Kategorie „Senden an“ mit Kontrollkästchen für SMS und/oder Sprachanrufe
  • sendTo()API – vollständige Skriptunterstützung für den JavaScript-Adapter

Anforderungen

  • Ein Konto bei seven.io
  • Ein gültiger API-Schlüssel (zu finden in Ihrem seven.io-Dashboard unter Entwickler → API-Schlüssel )

Kostenmodell:

  • Das Versenden von SMS und Sprachanrufen erfolgt nutzungsabhängig – Sie zahlen nur pro Nachricht oder Anruf, es gibt keine monatliche Gebühr.
  • Zum Empfang eingehender SMS ist eine virtuelle Telefonnummer erforderlich, die von seven.io gemietet wird (ca. 20 €/Monat). Ohne eine gemietete Nummer ist das Abfragen eingehender SMS nicht möglich.

Privatnutzer: seven.io ist primär ein Geschäftsdienst. Bei der Registrierung ist ein Firmenname erforderlich. Privatnutzer können einfach ihren eigenen Namen oder das Wort „Privat“ in dieses Feld eintragen – seven.io hat bestätigt, dass dies zulässig ist.


Konfiguration

EinstellungBeschreibungStandard
API-SchlüsselIhr seven.io API-Schlüssel(erforderlich)
Standard-Absender-IDAbsendername oder -nummer, die den Empfängern angezeigt wird. Maximal 11 alphanumerische oder 16 numerische Zeichen. Lassen Sie das Feld leer, um die Standardeinstellung Ihres seven.io-Kontos zu verwenden. Um Antworten zu ermöglichen, verwenden SiegetReplies: true pro Nachricht (Blockly odersendTo() ) — siehe eingehende SMS .(leer)
AbstimmungsintervallWie oft (in Minuten) der Adapter Ihren Kontostand abfragt30
Abfrageintervall für eingehende SMSWie oft (in Minuten) der Adapter auf neue eingehende SMS prüft. Einstellen auf0 zum Deaktivieren.0
Ländercode für die PreisgestaltungISO-Ländercode (z. B.DE ,US ) um die SMS-Preise nur für dieses Land zu laden. Lassen Sie dieses Feld leer, um die Preise für alle Länder zu laden.(leer)

Datenpunkte

info

ZustandTypBeschreibung
info.connectionboolescher Werttrue wenn der Adapter die seven.io API erreichen kann

account

ZustandTypBeschreibung
account.balanceNummerAktueller Kontostand
account.currencyZeichenketteWährung (z. B.EUR )
account.lastCheckZeichenketteISO-Zeitstempel der letzten Saldenabfrage

contacts

ZustandTypBeschreibung
contacts.jsonZeichenkette (JSON)Vollständige Kontaktliste als JSON-Array
contacts.countNummerAnzahl der Kontakte
contacts.refreshboolescher WertAuf einstellentrue um eine sofortige Kontaktaktualisierung auszulösen
contacts.new.nameZeichenketteName für einen neuen Kontakt, der erstellt werden soll
contacts.new.numberZeichenketteTelefonnummer für den neuen Kontakt (Format:491234567890 , ohne+ )
contacts.new.saveboolescher WertAuf einstellentrue um den Kontakt zu erstellen und die Liste zu aktualisieren
contacts.list.<Name>ZeichenketteEin Bundesstaat pro Kontakt – der Bundesstaatsname ist der Anzeigename des Kontakts (z. B.contacts.list.Max_Mustermann Der Wert ist die Telefonnummer.

sms

ZustandTypR/WBeschreibung
sms.toZeichenketterwEmpfänger — Telefonnummer (+491234567890 ) oder Kontaktname (z. B.Max Mustermann )
sms.fromZeichenketterwAbsender-ID überschreiben – leer = Standardwert aus den Einstellungen verwenden
sms.textZeichenketterwNachrichtentext (max. 1520 Zeichen / ~10 SMS-Teile)
sms.flashboolescher WertrwAls Flash-SMS senden (Nachricht wird direkt auf dem Bildschirm angezeigt)
sms.getRepliesboolescher WertrwGemeinsamen Nachrichtenpool aktivieren, damit der Empfänger antworten kann – optional pro Nachricht, Standardeinstellung false
sms.sendboolescher WertrwAuf einstellentrue zum Senden — setzt zurück auffalse automatisch
sms.lastResultZeichenkette (JSON)RVollständige API-Antwort des letzten Sendeversuchs, einschließlich statusText
sms.lastStatusZeichenketteRFür Menschen lesbarer Status der letzten Sendung (z. B.Success ,Insufficient credits )
sms.lastDeliveryZeichenkette (JSON)RZustellbericht ca. 60 Sekunden nach dem Versand abgerufen — enthältid ,to ,status (z.BDELIVERED )

sms.inbound

ZustandTypBeschreibung
sms.inbound.idZeichenketteNachrichten-ID der zuletzt empfangenen SMS
sms.inbound.fromZeichenketteAbsendernummer der zuletzt empfangenen SMS
sms.inbound.textZeichenketteTextinhalt der zuletzt empfangenen SMS
sms.inbound.timestampZeichenketteZeitstempel des SMS-Empfangs

voice

ZustandTypR/WBeschreibung
voice.toZeichenketterwTelefonnummer des Empfängers
voice.fromZeichenketterwVerifizierte Anrufernummer (muss in Ihrem seven.io-Konto registriert sein)
voice.textZeichenketterwText zum Vorlesen (TTS), maximal 10.000 Zeichen
voice.ringtimeNummerrwWie lange soll es klingeln, bevor aufgelegt wird (5–60 Sekunden, Standard 30)
voice.sendboolescher WertrwAuf einstellentrue Anruf starten — wird zurückgesetzt auffalse automatisch
voice.lastResultZeichenkette (JSON)RVollständige API-Antwort des letzten Aufrufversuchs
voice.lastStatusZeichenketteRFür Menschen lesbarer Status des letzten Anrufs (z. B.Success ,Call failed )

pricing

ZustandTypBeschreibung
pricing.jsonZeichenkette (JSON)Die vollständigen Preisdaten von seven.io – SMS-Preise pro Netzwerk für das konfigurierte Land oder alle Länder
pricing.priceAnzahl (€)SMS-Preis für das konfigurierte Land – wird nur festgelegt, wenn eine Ländervorwahl konfiguriert ist
pricing.lastUpdateZeichenketteISO-Zeitstempel der letzten Preisabfrage
pricing.refreshboolescher WertAuf einstellentrue Preisdaten sofort aktualisieren

stats (gleitender 30-Tage-Zeitraum)

Die Statistiken decken stets den Zeitraum von heute bis heute (30 Tage) ab. Sie werden einmalig beim Start des Adapters und bei manueller Auslösung abgerufen – es gibt keinen automatischen Aktualisierungstimer.

ZustandTypBeschreibung
stats.smsSentNummerGesamtzahl der in den letzten 30 Tagen versendeten ausgehenden SMS
stats.voiceCallsNummerGesamtzahl der in den letzten 30 Tagen getätigten Sprachanrufe
stats.inboundNummerGesamtzahl der in den letzten 30 Tagen empfangenen eingehenden SMS
stats.totalCostNummerGesamtkosten in EUR für die letzten 30 Tage
stats.lastUpdateZeichenketteISO-Zeitstempel des letzten Statistikabrufs
stats.jsonZeichenkette (JSON)Rohdaten der Analyse, gruppiert nach Tag
stats.refreshboolescher WertAuf einstellentrue Statistiken sofort aktualisieren

Eingehende SMS

Um SMS-Antworten zu erhalten, benötigen Sie einen numerischen Absender – alphanumerische Namen (z. B. 1999) sind nicht zulässig.MyCompany Sie können keine direkten Antworten empfangen. Sie haben zwei Möglichkeiten:

Option 1 — Gemeinschaftspool (kostenlos, zum Testen und für gelegentliche Nutzung)

PassierengetReplies: true pro Nachricht (Blockly-Kontrollkästchen odersendTo() seven.io weist automatisch eine temporäre Shared-Pool-Nummer als Absender zu, sodass Antworten auch mit einer alphanumerischen Absender-ID funktionieren.

KostenKostenlos – es fallen lediglich die üblichen SMS-Versandkosten an.
Antwortfenster48 Stunden nach dem Absenden
ZahlenstabilitätDieselbe Nummer wird innerhalb von 2 Wochen erneut versucht – keine Garantie.
Verfügbare LänderDE 🇩🇪 AT 🇦🇹 CH 🇨🇭 US 🇺🇸 PL 🇵🇱
Geeignet fürTesten, geringes Benachrichtigungsaufkommen, nicht kritische Benachrichtigungen

Option 2 — Eigene Rufnummer für eingehende Anrufe (~20 €/Monat)

Mieten Sie eine virtuelle Rufnummer direkt in Ihrem seven.io-Dashboard. Antworten werden zuverlässig und dauerhaft zugestellt.

Kostenca. 20 €/Monat
AntwortfensterUnbegrenzt
ZahlenstabilitätFest, immer die gleiche Zahl
Verfügbare LänderViele – überprüfen Sie das seven.io-Dashboard
Geeignet fürLaufende Kundenkommunikation, Produktionsnutzung

Konfigurieren Sie das Abfrageintervall in den Adaptereinstellungen. Stellen Sie es auf ein.0 um eingehende Abfragen zu deaktivieren (z. B. wenn Sie stattdessen Webhooks verwenden).

Mehrere Nachrichten pro Zyklus: Wenn zwischen zwei Abfragen mehrere SMS eintreffen, verarbeitet der Adapter alle – die älteste zuerst. Jede Nachricht löst eine separate Statusänderung aus.sms.inbound.text Daher wird jede Blockly-Regel oder JavaScript-Automatisierung, die diesen Status überwacht, einmal pro Nachricht ausgeführt. Die Datenpunkte spiegeln nach dem Zyklus immer die aktuellste Nachricht wider.


Blockly

Nach der Installation des Adapters erscheint ein sofort einsatzbereiter Block in der Kategorie „sendTo “ des ioBroker Blockly-Editors.

┌─ seven.io  |  SMS ☑  Voice call ☐ ─────────────┐
│  sender (optional)  [ ""                  ]      │
│  recipient          [ "+491234567890"     ]      │
│  message            [ "Alarm!"            ]      │
│  flash SMS ☐  replies (shared pool) ☐           │
│  ring time (s)  30                               │
│  instance  sevenio.0 ▼                           │
└──────────────────────────────────────────────────┘
  • Aktivieren Sie die Option „SMS senden“, um eine SMS zu senden.
  • Aktivieren Sie die Option „Sprachanruf“ , um einen automatisierten TTS-Anruf auszulösen.
  • Aktivieren Sie beides , um gleichzeitig eine SMS zu senden und einen Anruf zu tätigen (parallel, ohne zusätzliche Verzögerung).
  • Antworten (gemeinsamer Pool) – wenn diese Option aktiviert ist, verwendet seven.io eine gemeinsam genutzte Poolnummer als Absender, damit der Empfänger antworten kann (siehe Eingehende SMS ).
  • Im Empfängerfeld können Sie eine Telefonnummer oder einen Kontaktnamen aus Ihrer seven.io-Kontaktliste eingeben.

sendTo()-Skripting

Alle Funktionen sind verfügbar übersendTo() im JavaScript-Adapter.

Senden Sie eine SMS:

sendTo('sevenio.0', 'send', {
    to: '+491234567890',   // or a contact name: 'Max Mustermann'
    text: 'Door opened!',
    flash: false,          // optional
    getReplies: true,      // optional — enable shared pool so recipient can reply
}, result => {
    console.log(result.statusText); // e.g. 'Success'
});

Einen Sprachanruf auslösen:

sendTo('sevenio.0', 'voice', {
    to: '+491234567890',
    text: 'Attention! Motion detected in the garage.',
    ringtime: 30,          // optional, 5–60 s
});

Kontostand abrufen:

sendTo('sevenio.0', 'get_balance', {}, result => {
    console.log(result.amount, result.currency);
});

Kontaktliste abrufen:

sendTo('sevenio.0', 'get_contacts', {}, contacts => {
    console.log(JSON.stringify(contacts));
});

Einen Kontakt erstellen:

sendTo('sevenio.0', 'create_contact', {
    name: 'Max Mustermann',
    number: '491234567890',   // without +
});

Test-SMS (senden Sie eine Testnachricht, um den API-Schlüssel zu überprüfen):

sendTo('sevenio.0', 'test_sms', { to: '+491234567890' }, result => {
    console.log(result.statusText);
});

Test-Sprachanruf:

sendTo('sevenio.0', 'test_voice', { to: '+491234567890' }, result => {
    console.log(result);
});

Statistiken sofort aktualisieren:

sendTo('sevenio.0', 'get_stats', {}, result => {
    console.log(result); // raw analytics data
});

Alternativ können Sie die folgende Einstellung vornehmen:sevenio.0.stats.refresh Datenpunkt zutrue — Der Adapter ruft aktuelle Statistiken ab und setzt den Zustand zurück auffalse automatisch.

Verzögerte SMS (geplante Zustellung):

sendTo('sevenio.0', 'send', {
    to: '+491234567890',
    text: 'Good morning!',
    delay: '2026-12-24 08:00:00', // ISO datetime or Unix timestamp (seconds)
}, result => {
    console.log(result.statusText);
});

Derdelay Der Parameter wird direkt an die seven.io-API weitergeleitet. Verwenden Sie eine ISO-Datums-/Zeitzeichenfolge (YYYY-MM-DD HH:MM:SS oder ein Unix-Zeitstempel in Sekunden. Die Nachricht wird von seven.io in die Warteschlange gestellt und zum angegebenen Zeitpunkt zugestellt.


SMS-Statuscodes

Dersms.lastStatus Der Status enthält eine für Menschen lesbare Übersetzung des seven.io-Statuscodes:

CodeBedeutung
100Erfolg
101Weiterleitung an SMS-Center fehlgeschlagen
201Ungültige Empfängernummer
202Ungültige Absender-ID
301Unzureichende Gutschriften
403Der Absender steht auf der schwarzen Liste.
500Unbekannter Fehler
700Netzwerk-Übertragungstimeout

Changelog

0.1.2 (2026-07-22)

  • (ipod86) Maintenance: fix io-package.json structure, improve CI and dependabot configuration

0.1.1 (2026-07-22)

  • (ipod86) Fix: multiple inbound SMS per poll cycle now each trigger automations (processed oldest-first)

0.1.0 (2026-07-22)

  • (ipod86) SMS sending via state, Blockly, and sendTo()
  • (ipod86) Voice calls (TTS) via state, Blockly, and sendTo()
  • (ipod86) Contact management — sync, create, send by name
  • (ipod86) Inbound SMS polling with shared pool and own number support
  • (ipod86) Delivery status check ~60 s after sending
  • (ipod86) Account balance polling
  • (ipod86) SMS pricing data with per-country price state
  • (ipod86) Usage statistics (rolling 30-day window)

License

MIT License

Copyright (c) 2026 ipod86 david@graef.email

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.