Erweitert
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:
smseagleBenutzer:
smseagleuserPasswort:
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 |
|---|---|---|
|
|
SMS aus Inbox und SentItems älter als das angegebene Datum löschen |
|
|
SMS aus Inbox und SentItems älter als 7 Tage löschen |
|
|
Clean Inbox, SentItems und Outbox - konzipiert für regelmäßige Ausführung via Cron |
|
|
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.
Melden Sie sich per SSH als
rootam 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 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.
Ü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-*.confbis018-*.confgeschrieben, 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äfix005-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.