Dieses Kapitel behandelt Themen für fortgeschrittene Benutzer, die die normale Weboberfläche umgehen und nicht über sie gehen: direkter Datenbankzugriff und SQL sowie Befehlszeilenskripte zur Datenbankbereinigung. Die meisten Benutzer werden dieses Kapitel nie benötigen.

Direkte Verbindung zur SMSEagle-Datenbank

Die Datenbank von SMSEagle läuft auf PostgreSQL. Sie können direkt auf sie zugreifen, um SMS-Nachrichten über SQL-Abfragen zu lesen oder zu schreiben, anstatt die Weboberfläche oder die API zu nutzen.

Der Datenbankzugriff für externe Anwendungen ist standardmäßig deaktiviert. Aktivieren Sie ihn unter Settings > Global settings > Application > Access to DB for external applications.

Nachdem Sie ihn aktiviert haben, verbinden Sie sich von einer externen Anwendung aus mit der Datenbank, indem Sie Folgendes verwenden:

  • Host: die IP-Adresse des Geräts

  • Datenbankname: smseagle

  • Benutzer: smseagleuser

  • Passwort: postgreeagle

Einfügen einer kurzen SMS über SQL

Eine kurze Textnachricht (bis zu 160 Zeichen):

INSERT INTO outbox (
    DestinationNumber,
    TextDecoded,
    CreatorID,
    Coding,
    Class,
    SenderID
) VALUES (
    '1234567',
    'This is a SQL test message',
    'Program',
    'Default_No_Compression',
    -1,
    'smseagle1'
);
INSERT INTO user_outbox (
    id_outbox,
    id_user
) SELECT CURRVAL(pg_get_serial_sequence('outbox','ID')), 1;

Die obige Nachricht gehört zum Benutzer mit id_user 1 (dem Standard-Benutzer admin) – die id_user-Werte anderer Benutzer befinden sich in der Tabelle public."user". Das Feld SenderID gibt an, welches Modem die Nachricht versendet: smseagle1 für Modem 1, smseagle2 für Modem 2.

Einfügen einer langen SMS über SQL

Mehrteilige Nachrichten benötigen auch einen UDH-Header, der als Hexadezimal-String im Feld UDH gespeichert ist. Sofern Sie keinen speziellen Grund haben, dies manuell zu tun, verwenden Sie stattdessen die API (siehe API and Developer Integration).

Bei einer langen Textnachricht beginnt der UDH mit 050003, gefolgt von einem Byte als Nachrichtenreferenz (ein beliebiger Hexadezimalwert, aber unterschiedlich für jede Nachricht – D3 unten), einem Byte für die Gesamtzahl der Teile (02 unten, eindeutig pro Nachricht, die an die gleiche Nummer versendet wird), und einem Byte für die Nummer des aktuellen Teils (01 für den ersten Teil, 02 für den zweiten usw.).

Eine zweiteilige lange Nachricht sieht folgendermaßen aus:

INSERT INTO outbox (
    "DestinationNumber",
    "CreatorID",
    "MultiPart",
    "UDH",
    "TextDecoded",
    "Coding",
    "Class",
    "SenderID"
) VALUES (
    '1234567',
    'Program',
    'true',
    '050003D30201',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, qui',
    'Default_No_Compression',
    -1,
    'smseagle1'
)
INSERT INTO outbox_multipart (
    "ID",
    "SequencePosition",
    "UDH",
    "TextDecoded",
    "Coding",
    "Class"
) SELECT
    CURRVAL(pg_get_serial_sequence('outbox','ID')),
    2,
    '050003D30202',
    's nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
    'Default_No_Compression',
    -1;
INSERT INTO user_outbox (
    id_outbox,
    id_user
) SELECT
    CURRVAL(pg_get_serial_sequence('outbox','ID')),
    1;

Das Hinzufügen eines UDH lässt weniger Platz für Text – das obige Beispiel ermöglicht nur 153 Zeichen pro Nachrichtenteil.

Datenbankbereinigungsskripte

Es stehen mehrere Skripte zum Löschen von SMS-Nachrichten aus der Datenbank über die Linux CLI zur Verfügung, die sich unter /mnt/nand-user/scripts/ befinden:

Skript

Verwendung

Zweck

db_delete

./db_delete YYYYMMDDhhmm

SMS aus Inbox und SentItems älter als das angegebene Datum löschen

db_delete_7days

./db_delete_7days

SMS aus Inbox und SentItems älter als 7 Tage löschen

db_delete_allfolders

./db_delete_allfolders

Clean Inbox, SentItems und Outbox - konzipiert für regelmäßige Ausführung via Cron

db_delete_select

./db_delete_select {inbox|outbox|sentitems|trash}

SMS aus einem gewählten Ordner löschen

Ein Skript zu Cron hinzufügen: erstellen Sie eine Datei unter /etc/cron.d/ (z. B. db_cleaner) mit folgendem Inhalt:

0 0 1 * * root /mnt/nand-user/scripts/db_delete_allfolders

Dieses Beispiel führt das Bereinigungsskript am 1. jeden Monats aus.

Weitergabe von Protokollen an einen externen Server

SMSEagle schreibt seine Protokolle über rsyslog. Um eine Kopie davon an einen zentralen Syslog-Server zu senden, fügen Sie eine Weiterleitungsregel über SSH hinzu. Es gibt keine Einstellung dafür in der Webschnittstelle.

  1. Melden Sie sich per SSH als root am Gerät an.

  2. Erstellen Sie die Datei /etc/rsyslog.d/005-remote.conf mit dieser Regel und ersetzen Sie die Adresse, den Port und das Protokoll durch die Ihres Servers:

    *.* action(type="omfwd" target="192.0.2.250" port="514" protocol="udp"
               action.resumeRetryCount="10"
               queue.type="linkedList" queue.size="10000")
    
    • target - IP-Adresse oder Hostname des Syslog-Servers.

    • port - Port, auf dem der Server lauscht, normalerweise 514.

    • protocol - udp oder tcp.

    • Die Warteschlangeneinstellungen halten bis zu 10000 Nachrichten auf dem Gerät, während der Server nicht erreichbar ist, und senden sie, sobald er wieder verfügbar ist.

  3. Überprüfen Sie die Konfiguration und starten Sie rsyslog neu:

    rsyslogd -N1
    systemctl restart rsyslog
    

Behalten Sie den Dateinamen bei. Die eigenen Protokolle von SMSEagle (Application, API, Message und die E-Mail-, Call-, Signal- und WhatsApp-Dienste) werden durch Regeln in /etc/rsyslog.d/010-*.conf bis 018-*.conf geschrieben, und jede dieser Regeln stoppt die weitere Verarbeitung ihrer Nachrichten. Eine Weiterleitungsregel, die danach platziert ist, zum Beispiel am Ende von /etc/rsyslog.conf, leitet nur die Systemprotokolle weiter. Das Präfix 005- bewirkt, dass rsyslog die Weiterleitungsregel zuerst liest, sodass jede Nachricht weitergeleitet wird.

Um den Protokolldatenverkehr mit TLS zu verschlüsseln, siehe das rsyslog-Handbuch Encrypting Syslog Traffic with TLS.