Hallo!
Habe einen Modemstick am Raspberry angeschlossen und kann nunmehr mit "gammu" wie folgt SMS absenden:
$ echo "Ich bin eine Test-SMS, versandt vom Raspberry Pi" | sudo gammu-smsd-inject TEXT "+43664xxxxxxx"
leider gelingt mir ein SMS-Versand aus FHEM heraus nicht. Trotz intensiven Studiums entspr. Beiträge und vieler Versuche klappt es nicht! Was habe ich dafür (falsch?) getan:
$ sudo usermod -aG dialout fhem
$ sudo usermod -aG sudo fhem
$ sudo chown fhem:root /usr/bin/gammu-smsd-inject
sowie unzählige Variationen von:
{system (' echo "Ich bin eine Test-SMS, versandt vom Raspberry Pi" | sudo gammu-smsd-inject TEXT "+43664xxxxxxx"')}
insbesonders bei den Anführungszeichen und Hochkommas (" ' `´ - welche sind richtig?) habe ich Probleme.
Wie muss also bitte der funktionierende Linux-Befehl in Fhem aussehen?
Danke und LG
Ich würde das in einen externen Script auslagern und dann den Script aus hem heraus aufrufen.
Aber warum SMS, es gibt doch kostenlose Tools wie WhatsApp, Pushover und Co.
@Mitch
für einen externen Script ist mein derzeitiger Wissensstand nicht ausreichend!
SMS deswegen, damit ich bei Stromausfall wichtige Meldungen weiter erhalte (natürlich Raspi mit Bufferbatterie).
LG
Hab mir das gerade im Web angeschaut.
Du kannst folgendes schicken:
gammu-smsd-inject TEXT 123456 -text "All your base are belong to us"
also sollte so etwas funktionieren:
system ("gammu-smsd-inject TEXT 123456 -text 'All your base are belong to us'")
du könntest dann noch den TEXT als Variable übergeben, somit kannst Du verschiedene Texte nehmen.
Hier ein Beispiel welches Daten aus dem Fallmonitor per SMS schicken würde:
Anrufmonitor:event:.ring {
my $extnumber=(ReadingsVal("Anrufmonitor","external_number",99));
my $extname=(ReadingsVal("Anrufmonitor","external_name",99));
my $caller= "$extname - $extnumber";
my $msg = "$caller -header Anruf von";
system ("gammu-smsd-inject TEXT 123456 -text '$msg'");
}
Hi,
ich habe das so gelöst:
aus fhem notify rufe das shell script auf
{system("/scripts/sendsms_gammu \"$message\" 0664xxxxxxxx");}
das shell script sieht so aus:
MSG=$1
NO=$2
echo "$MSG $NO" > /scripts/sendsms_gammu.log
echo "$MSG" | gammu-smsd-inject TEXT $NO
Gruß
Karl
@Mitch:
also sollte so etwas funktionieren:
system ("gammu-smsd-inject TEXT 123456 -text 'All your base are belong to us'")
leider nein, kommt -1 retour.
@schka17: Habe heute schon den Kopf zu voll, kann erst wieder morgen weitertun.
Vorerst vielen Dank und LG
-1 sollte passen.
Kam keine SMS an?
@Mitch:
Nein SMS kam nicht an.
Ich setze auch als Kontrolle immer wieder SMS von der Linuxkommandozeile ab, alle immer ok.
Vielleicht stimmen die Berechtigungen (siehe mein erster Beitrag) nicht?
Danke und LG
Hi,
user FHEM sollte zur Gruppe "dialout" gehören. Bei mir klappt es so:
# System- SMS versenden; Benutzung: set Dum_SMS_D Text der in der SMS stehen soll
define Dum_SMS_D dummy
attr Dum_SMS_D group Programm
attr Dum_SMS_D room 5_System
define Func_SMS_N notify Dum_SMS_D { \
\
my $SMSText = (Value("Dum_SMS_D"));;\
\
{system("echo $SMSText. | sudo gammu --sendsms TEXT 012345.... &")};;\
Log 1, "SMS wurde versendet: $SMSText";; \
}
Gruß
Frank
@fiedel
Danke, dein Beispiel habe ich heute bereits in einem anderen Thread gefunden und auch mehrmals (versch. Parameter) versucht - leider nein.
LG
Braucht die Software root Rechte?
Dann würde ich den User fhem in Sudoers eintragen, dass er dieses Prog ohne Passwort aufrufen darf und fhem in die Gruppe sudo aufnehmen.
Hallo,
ich biete eine alternative Möglichkeit an um SMS zu versenden.
gsm-utils auf dem RPi installieren:
sudo apt-get install libgsmme1c2a gsm-utils
Test-SMS versenden:
gsmsendsms -d /dev/ttyUSB1 +49176xxxxxxxx "SMS Test"
Bsp. für ein FHEM Notify:
define Klingel FS20 1ab2 00
attr Klingel IODev CUL868
attr Klingel model fs20st
define Tuerklingel notify Klingel:.*on.* { system ("/usr/bin/gsmsendsms -d /dev/ttyUSB1 +49176xxxxxxxx 'Es hat an der Haustuer geklingelt!'") }
Das lief schon vor Jahren aufm TuxRadio und nun funktioniert es auch auf dem RPi.
Es funktioniert!!!
Danke vorerst an Alle für ihre Unterstützung.
Da es sowohl ein großes Problem (zumindest für mich) war, erst den Modemstick zum laufen zu bringen und dann SMS direkt aus fhem versenden, werde ich meine Vorgangsweise zusammenfassen und hier posten.
Danke nochmals, der erste Schritt ist getan, die Feinheiten müssen jetzt noch erarbeitet werden!
LG
SMS vom Raspberry senden
Begründung:
Trotz Stromausfall entsprechende Meldungen erhalten. Natürlich Raspberry mit Bufferbatterie!
Teil 1 - Modemstick installieren:
Neuer günstiger Tarif von HoT (Hofer in Österreich) mit Modemstick.
Manufacturer: MediaTek Inc
Nach Einstecken des Modemsticks in den Raspberry und $ lsusb wird dieser als USB-Speicher erkannt.
Zuerst muss natürlich der Stick von Linux als Modem erkannt werden:
usb-modeswitch und usb-modeswitch-data installieren
Leider jedoch nicht genug, denn die derzeitige ID (0e8d:0002) sollte (0e8d:00a5) lauten:
Eine Datei mit der Bezeichnung 0e8d:0002 erstellen, mit folgenden Inhalt:
# MediaTek MT6276M
DefaultVendor= 0x0e8d
DefaultProduct=0x0002
TargetVendor=0x0e8d
TargetProductList="00a1,00a2,00a5"
MessageContent="555342431234567800000000000006f0010300000000000000000000000000"
Diese Datei nach: /etc/usb_modeswitch.d/ kopieren.
Jetzt sollte der Stick als Modem erkannt werden - mit $ ls -la /dev/serial/by-id/ überprüfen.
Teil 2 - Software installieren:
$ sudo apt-get install gammu-smsd
und konfigurieren (/etc/gammu-smsdrc):
# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB0 # ev. andere
connection = at
# Debugging
logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
pin = xxxx #SIM Pin
service = files
#logfile = syslog
logfile = /var/log/gammu-smsd
# Increase for debugging information
debuglevel = 0
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/
Testen: $ sudo /etc/init.d/gammu-smsd restart
echo "Ich bin eine Test-SMS" | sudo gammu-smsd-inject TEXT "+43664xxxxxxx"
Teil 3 - SMS aus fhem versenden:
fhem zu sudo und dialout hinzugefügt
$ sudo usermod -aG dialout fhem
$ sudo usermod -aG sudo fhem
Datei "gammu-smsd-inject" in "sudoers" dazugefügt:
$ sudo visudo
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
ALL ALL = NOPASSWD: /usr/bin/mplayer
ALL ALL = NOPASSWD: /usr/bin/espeak
ALL ALL = NOPASSWD: /usr/bin/mp3wrap
ALL ALL = NOPASSWD: /usr/bin/gammu-smsd-inject
und dann mit folgender Syntx in fhem eingegeben:
{system (" sudo gammu-smsd-inject TEXT 0664xxxxxxx -text 'TestSMS aus fhem gesendet'")}
gibt -1 retour und hat funktioniert!!! Ob alles korrekt und notwendig war kann ich nicht bestätigen.
Für mich als Newbie (hallo plötzlich Jr. Member) war alles in allem ein sehr grosser Zeitaufwand damit
verbunden - wobei es jedoch nur die Vorarbeit zur richtigen Einbindung in fhem war.
Nun muß ich schauen wie man einen Stromausfall (auch nur eine Phase) am besten erkennt (glaube mit HM
Komponenten) und die notwendigen Meldungen dann entsprechend konfigurieren. Über Scriptfile, notify,
dummy, DOIF etc....... ????? Vorschläge willkommen!
Danke nochmals allen für Ihre Unterstützung und
LG aus Wien
ich erkenne Stromausfall durch eine Meldung meiner USV's, ohne USV hat es auch keinen Sinn gemacht :)
Scherz beiseite, ich verwende als SMS Interface ein altes Nokia, das funtkioniert seit vielen Jahren, mit den USB Sticks war das nie zuverlässig. Vor FHEM habe ich mal eine Lösung mit einem kleinen Netzteil einem FS20 Teil mit einem Kondensator, das Spannung erkennen konnte (ich weiss nicht mehr wie das hieß). Das Signal habe ich dann ausgewertet.
Mit den USV's und nuts daemon gehts viel eleganter.
Gruß
Karl
Raimundl,
zum SMS senden via gammu sollte FHEM kein Sudo benötigen, muss nicht in der Sudo Gruppe sein und du brauchst den gammu Befehl auch nicht in Sudoers einzutragen. Es sollte reichen, wenn du den FHEM Benutzer zur gammu Gruppe hinzufügst. Danach ist es wichtig, dass FHEM gestoppt und wieder gestartet wird wird, damit die Gruppenzuweisung auch übernommen wird. Vom Terminal solltest du dies mit folgenden Befehlen erreichen:
sudo service fhem stop
sudo service fhem start
Mplayer läuft bei mir auch ohne Sudo oder sudoers Eintrag, wenn ich FHEM zur audio Gruppe hinzufüge (und FHEM stoppe + neustarte).
Ich nutze Debian 7 und je nachdem welches System du nutzt, ist es möglich, dass das Audiosystem etwas anders als bei Debian eingerichtet ist. Gammu sollte aber auch auf anderen Systemen so funktionieren (eventuell variiert der Name der Gammugruppe).
Als Stromausfallüberwachung nutze ich auch eine USV mit NUT. Einfache USVs mit USB gibt's ja auch schon für unter 100 Euro. Ich selber habe eine von Cyberpower.
Falls du Homematic Geräte nutzt, könntest du ohne USV einen weekdaytimer nutzen, der jede Stunde oder auch öfter, einen statusrequest an ein HM Gerät absetzt. Falls das Gerät keinen Strom hat, sollte das innerhalb von einer Minute zu einem 'state:MISSING ACK' führen, den du dann via einem notify in eine Meldung verwandeln kannst.
Sebastian
Hallo Basti!
Danke für die umfangreiche Hilfe. Mit Linux Berechtigungssystem stehe ich noch auf Kriegsfuß. Das Start und Stop habe ich bei meinen umfangreichen Probieren nicht gemacht. Werde es jetzt nochmals wie vorgeschlagen versuchen.
Für Stromausfall habe ich nunmehr den DeviceManager installiert, der überprüft ob sich ein Gerät innerhalb eines zu definierenden Zeitraumes meldet, wenn nicht dann SMS. Als Gerät habe ich die HM-ES-PMSw1-PI genommen. Das hat den Vorteil, dass ich nicht nur Stromausfall sonder auch das angesteckte Gerät (Gefrierschrank) überwachen kann.
Danke und LG
Hallo Raimundl,
das mit service start / stop habe ich auch nur durch probieren rausgefunden. Hoffentlich klappts bei dir auch.
Ich selbst habe 2 HM-LC-SW1-PL2 (Zwischenstecker ohne Leistungsmesser) im Einsatz. Wenn ich mir die Readings in FHEM anschaue, scheinen die Geräte keinen regelmäßigen Kontakt mit FHEM aufzunehmen.
Aus diesem Grund hatte ich mir das mit der aktiven Überwachung mit dem Weekdaytimer überlegt.
Ich hab mir gerad DeviceMonitor nochmal angeschaut. Ist ja interessant, dass es da eine checkstate Funktion gibt. Muss ich bei mir auch mal probieren. Ist sicher flexibler als meine hausgemachte Variante.
Viele Grüße,
Sebastian