Erweitert
Dieses Kapitel behandelt Themen für fortgeschrittene Benutzer, die die normale Weboberfläche umgehen: direkter Datenbankzugriff und SQL sowie Befehlszeilenskripte zur Datenbankbereinigung. Die meisten Benutzer werden dieses Kapitel nie benötigen.
Direktes Verbinden mit der 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 verwenden.
Der Datenbankzugriff für externe Anwendungen ist standardmäßig deaktiviert. Aktivieren Sie ihn unter Settings > Global settings > Application > Access to DB for external applications.
Verbinden Sie sich von einer externen Anwendung aus mit der Datenbank mit:
Host: Die IP-Adresse des Geräts
Database name:
smseagleUser:
smseagleuserPassword:
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 dem 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 identifiziert, welches Modem die Nachricht sendet: 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 Hexadezimalstring im Feld UDH gespeichert ist. Verwenden Sie stattdessen die API, wenn Sie keinen spezifischen Grund haben, dies manuell zu tun (siehe API and Developer Integration).
Bei einer langen Textnachricht beginnt der UDH mit 050003, gefolgt von einem Byte als Nachrichtenreferenz (beliebiger Hexwert, aber unterschiedlich für jede Nachricht – D3 unten), einem Byte für die Gesamtzahl der Teile (02 unten, eindeutig pro Nachricht an dieselbe Nummer) und einem Byte für die aktuelle Teilenummer (01 für den ersten Teil, 02 für den zweiten usw.).
Eine zweiteilige lange Nachricht sieht wie folgt 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 nimmt Platz für Text weg – das obige Beispiel ermöglicht nur 153 Zeichen pro Nachrichtenteil.
Datenbankbereinigungsskripte
Mehrere Skripte sind über die Linux-CLI zum Löschen von SMS-Nachrichten aus der Datenbank verfügbar, die sich unter /mnt/nand-user/scripts/ befinden:
Skript |
Verwendung |
Zweck |
|---|---|---|
|
|
Löschen von SMS aus Inbox und SentItems älter als das angegebene Datum |
|
|
Löschen von SMS aus Inbox und SentItems älter als 7 Tage |
|
|
Inbox, SentItems und Outbox bereinigen – zum regelmäßigen Ausführen per Cron vorgesehen |
|
|
Löschen von SMS aus einem ausgewählten Ordner |
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. eines jeden Monats aus.
Weiterleitungsprotokolle 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. Hierfür gibt es keine Einstellung in der Webschnittstelle.
Melden Sie sich über SSH als
rootauf dem Gerät an.Erstellen Sie die Datei
/etc/rsyslog.d/005-remote.confmit 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, normalerweise514.protocol-udpodertcp.Die Warteschlangen-Einstellungen speichern bis zu 10000 Nachrichten auf dem Gerät, während der Server nicht erreichbar ist, und senden diese, sobald er wieder verfügbar ist.
Überprüfen Sie die Konfiguration und starten Sie rsyslog neu:
rsyslogd -N1 systemctl restart rsyslog
Behalten Sie den Dateinamen. Die eigenen Protokolle von SMSEagle (Application, API, Message und die E-Mail-, Call-, Signal- und WhatsApp-Services) werden durch Regeln in
/etc/rsyslog.d/010-*.confbis018-*.confgeschrieben, und jede dieser Regeln stoppt die weitere Verarbeitung ihrer Nachrichten. Eine Weiterleitungsregel, die nach diesen platziert wird, beispielsweise am Ende von/etc/rsyslog.conf, leitet nur die Systemprotokolle weiter. Das Präfix005-veranlasst rsyslog, die Weiterleitungsregel zuerst zu lesen, sodass jede Nachricht weitergeleitet wird.
Um den Protokolldatenverkehr mit TLS zu verschlüsseln, siehe das rsyslog-Handbuch Encrypting Syslog Traffic with TLS.