Linux

SMS Gateway DIY

Setup SMS Gateway with playSMS and gammu

Generally:
The aim is to have an SMS gateway for sending 2FA passwords and also for messages from monitoring

Hardware:

Software:

  • RaspberryOS 32Bit
  • Rufus
  • gammu-smsd
  • playSMS
  • apache2
  • mariadb-server

Installation:
Download the operating system and write to the SD card with Rufus
As soon as this is done, an empty ssh file is created on the new drive x: \ boot, so that the SSH server is activated in the system.
If WLAN is required, a file wpa_supplicant.conf with content must also be found on x: \ boot

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
ssid="Wlanname"
psk="Wlanpasswort"
}

 

Now that the preparation is complete, the card can be switched on in the Pi and it can be switched on.
Now search for the Pi in the network with Netscanner or in DHCP.
It then continues with PuTTY
Connect to the found IP
Username: pi
Password: raspberry

sudo apt update && apt dist-upgrade -y

 

When the update is done, restart the Pi once: sudo shutdown -r now

Reconnect to PuTTY

Create user with whom the application runs

sudo adduser sms
sudo usermod -a -G sudo sms

 

Install the firewall and allow ssh, otherwise you can no longer get on the Pi

sudo apt install ufw
sudo ufw allow ssh
sudo ufw enable
sudo ufw reload
 

Install web server with PHP and database server

sudo update
sudo rm /etc/source.list.d/vscode.list # Seit dem letzten Update wird vscode von Microsoft automatisch hinzugefüht, da man das auf dem Server nicht braucht, wird es gelöscht
sudo apt install mariadb-server mc unzip apache2 php php-cli php-mysql php-gd php-curl php-mbstring php-xml php-zip
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
sudo systemctl start apache2.service
sudo systemctl enable apache2.service
sudo ufw allow http
sudo ufw allow https
sudo ufw reload

 

Gammu, the SMS service
Since we need the serial interface, the config.txt has to be adjusted beforehand

sudo nano /boot/config.txt
enable_uart=1

sudo apt install gammu gammu-smsd
mkdir -p /var/log/gammu /var/spool/gammu/{inbox,outbox,sent,error}

chown www-data:www-data -R /var/spool/gammu/*

 

nano /etc/gammu-smsdrc
[gammu]
port = /dev/ttyS0
connection = at
logfile = /var/log/gammu/gammu.log
logformat = textall
[smsd]
Service = files
InboxPath = /var/spool/gammu/inbox/
OutboxPath = /var/spool/gammu/outbox/
SentSMSPath = /var/spool/gammu/sent/
ErrorSMSPath = /var/spool/gammu/error/
InboxFormat = unicode
OutboxFormat = unicode
TransmitFormat = auto
debugLevel = 1
LogFile = /var/log/gammu/smsd.log
DeliveryReport = sms
DeliveryReportDelay = 7200
CheckSecurity = 0

 

Gammu test

service gammu-smsd start
gammu-smsd-monitor
echo "Testnachricht" | gammu-smsd-inject TEXT +4917XXXXXX

 

Prepare directory for playSMS and the web server

cd /home/sms
mkdir -p public_html log
sudo chmod 775 /home/sms public_html log
sudo chown sms.sms -R /home/sms
sudo chown www-data.sms -R /home/sms/log
ls -l /home/sms
sudo nano /etc/apache2/sites-available/sms.domain.local.conf
ServerName sms.domain.local
DocumentRoot /home/sms/public_html
ErrorLog /home/sms/log/httpd-error.log
CustomLog /home/sms/log/httpd-accesss.log combined
 AllowOverride FileInfo AuthConfig
 Limit Indexes Options MultiViews Indexes
 SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS php_admin_value engine On
sudo a2ensite sms.domain.local
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
sudo systemctl reload apache2.service

 

If you would like to carry out this step with an https certificate, because the gateway is internal, this is not absolutely necessary

sudo apt install python3-certbot-apache
sudo certbot --apache

 

Create database

sudo mysqladmin create playsms
sudo mysql

 

CREATE USER 'playsms'@'localhost' IDENTIFIED BY 'strongpasswordhere';
GRANT ALL PRIVILEGES ON playsms.* TO 'playsms'@'localhost';
FLUSH PRIVILEGES;
exit

 

Install playSMS
Since the application should not run in root mode, the user is changed here and work continues with these rights

su sms
cd /home/sms
mkdir -p bin etc lib src
sudo chmod 775 bin etc lib src
sudo touch log/audit.log log/playsms.log
sudo chmod 664 log/audit.log log/playsms.log
sudo chown www-data.sms -R log
ls -l log

cd /home/sms/src
git clone -b 1.4.3 --depth=1 https://github.com/antonraharja/playSMS
cd /home/sms/src/playSMS

nano install.conf

DBUSER="playsms"
DBPASS="strongpasswordhere"
DBNAME="playsms"
DBHOST="localhost"
DBPORT="3306"
WEBSERVERUSER="www-data"
WEBSERVERGROUP="www-data"
PATHSRC="/home/sms/src/playSMS"
PATHWEB="/home/sms/public_html"
PATHLIB="/home/sms/lib"
PATHBIN="/home/sms/bin"
PATHLOG="/home/sms/log"
PATHCONF="/home/sms/etc"

cd /home/sms/src/playSMS
./install-playsms.sh

 

During the installation you have to confirm 3 times with y

The following has to be saved as /etc/systemd/system/playsms.service

[Unit]
Description=PlaySMS
After=mariadb.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/sms/bin/playsmsd /home/sms/etc/playsmsd.conf start
ExecStop=/home/sms/bin/playsmsd /home/sms/etc/playsmsd.conf stop
[Install]
WantedBy=multi-user.target

 

 

Subsequently

systemctl enable playsms.service

 

The config.php has to be adapted for extended logs and if https is used

nano /home/sms/public_html/config.php

logstate 3

ishttps true

 

http://IP
Username: admin
Password: admin

playSMS https://playsms.org/
Routing Konfiguration: https://edzeame.wordpress.com/2019/06/08/playsms-web-interface-gammu-install-and-configure/
API Referenz: https://github.com/playsms/playsms/blob/master/documents/development/WEBSERVICES.md

Forgot admin password?

Then use ssh on the Pi and after sudo -s use the following command

echo “UPDATE playsms_tblUser SET password=’21232f297a57a5a743894a0e4a801fc3′ WHERE uid=’1′” | mysql -uroot -p playsms

Das ganze gibt es auch als fertiges Image

https://cloud.isatho.me/s/qoaziYkEfsaRkBi

 

 

Amazon links are included in this article. Clicking on it will take you directly to the provider. Should you decide to buy there, we will receive a small commission. Nothing changes in the price for you.

41 thoughts on “SMS Gateway DIY

  1. Hi, danke für das Image!

    Über Gammu direkt kann ich SMS versenden, bei PlaySMS bleiben diese in der Queue hängen und gehen nicht raus.
    Zufällig eine Idee woran dies liegen könnte?

      1. Guten Abend! Habe das Image genutzt, sehe auch deine Testnachrichten darin, meine neuen bleiben aber hängen.
        Gammu ist dort auch als SMSC drin. Muss ich das noch mit der Queue verbinden?

    1. was steht denn in /home/sms/log und was sagt /var/log/gammu/smsd.log dazu? oder dmesg
      Ich hatte an einem PI das Problem, dass das 7600 HAT immer ein Undervoltage verursacht hat.

      1. Guten Morgen! In playsms.log steht nur der Queue-Eintrag einer neuen Nachricht drin, sonst nichts. In smsd.log passiert gar nichts wenn ich über playsms eine eine Nachricht versuche zu verschicken. Dort passiert erst etwas wenn ich über gammu direkt eine Nachricht sende.

          1. Die beiden Dateien habe ich nachgerüstet, aber noch keine Veränderung nach einem Neustart.
            Der playSMS daemon status steht auf rot, sieht so aus als ob dieser gar nicht laufen würde.

          2. Hi, der Raspi hängt nicht direkt am Netz dran. Hab jetzt auch mal die Anleitung von Alex abgearbeitet die du verlinkt hattest, aber dort komme ich noch nicht einmal auf das PlaySMS-Webinterface obwohl nginx etc. laufen…

          3. Bei den systemd Pfaden hast du es angepasst?
            /home/sms/bin/playsmsd /home/sms/etc/playsmsd.conf start und
            /home/sms/bin/playsmsd /home/sms/etc/playsmsd.conf stop ?

            Mit /home/sms/bin/playsmsd /home/sms/etc/playsmsd.conf status solltest du sehen ob es überhaupt läuft
            Die Webseite wird immer angezeigt da der Webpfad auf /home/sms/public_html zeigt

  2. Das war es, danke!!!
    Allerdings muss ich playsms noch per Hand “/home/sms/bin/playsmsd /home/sms/etc/playsmsd.conf start” starten, sonst geht es nicht.

    1. Im Artikel habe ich es schon angepasst.
      Du musst noch
      systemctl enable playsms.service

      Dadurch wird der Service beim starten auch automatisch geladen

  3. Reicht es für Mail-To-SMS die Mailserver-Einstellungen über das Webinterface vorzunehmen oder muss man dazu in der config.php auch von etwas eintragen?

    1. Habe ich bis jetzt nicht gehabt, läuft auf zwei Pi seit erscheinen des Artikels , also ca 2-3 Monate. Wenn dann schau Mal in die logs, Apache, system, dmesg und playsms, vielleicht gibt es da einen Anhaltspunkt. Kann aber sein das die Disk voll ist. Ich hatte das Image mit nur 200mb frei. Dann mit raspi-config die Disk vergrößern

      1. Praktisch wenn man einen Kollegen hat der das kann. Ich hab auch trotz intensiver Suche nichts gefunden (Raspi4+Waveshare GSM Hat). Nimmt dein Kollege zufällig Aufträge an?

      1. In der config.php habe ich nichts zur Spracheinstellung gefunden. Kann es sein dass man erstmal über raspi-config die Lokalisationen installieren muss?

  4. Moin! Bin beim Wechsel der Simkarte auf das Problem gestossen dass Gammu keine SMSC-Nummer von der Simkarte zieht, diese muss man nach jedem Neustart neu setzen. Hast du eine Idee mich man die Nummer dauerhaft an Gammu übergeben kann?

  5. Das funktioniert jetzt, danke! Aus irgendeinem Grund muss ich nach jedem Neustart gammu-smsd per Hand einmal beenden und neu starten damit SMS rausgehen. Was könnte da der Grund sein? gammu-smsd wird automatisch immer mitgestartet.

  6. In der smsd.log wird nach einem Neustart immer der Fehler abgelegt dass keine SMSC-Nummer vorhanden wäre. Startet man den smsd kann neu geht es sofort. Kann es sein dass vielleicht irgendwelche Rechte der Config-Datei falsch sind? Ich habe das pi-default-PW geändert.

    1. Kommt drauf an welches hat du benutzt bei dem großen musste ich wie bei Waveshare steht die Brücken setzen. Mit dem Passwort hat das aber nichts zu tun

  7. Irgendwas mache ich grundsätzlich falsch: Hab die ich selbe Installation die im RB4 nicht geht mit einem Zero probiert. Selbes Modem, selbe SIM, geht sofort. Ich stecke irgendwie fest…

    1. Sagt es zufällig bei dmesg undervoltage? Das hab ich auf einem pi4 und 3 auch, auf dem Zero nicht. Habe aber auch kein Original Netzteil von raspberry. Mit einem vom Amazon Tab geht es zum Teil besser

      1. Sieht nicht nach Untervoltage aus. Nutze das originale Netzteil mit 3A. Sehe auch am HAT (habe einen anderen als du (SIM800X)) dass die Karte im Netz eingebucht ist.

        Würde es als Workaround gehen per Cronjob o.ä. Gammu nach jeden Reboot einmal zu stoppen/starten?

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.