Execute a command when an SMS is received?



  • I'd like to send a notification to my desktop and laptop when I receive a text message. Is this possible?

    Or more properly: what happens in the OS when an SMS is received and where would I find more information about this?

    Thanks



  • Currently, no, it is not possible. Someone had started looking at implementing support for KDE Connect, but I'm not sure how far they got.



  • Something which comes into my thinking: the SMS is stored into a table on a sqllite database and if this allows triggers to fire...



  • @guru Thanks, I managed to hack something together, but had to install inotify-tools:

    #!/bin/bash
    
    # location of databse storing text messages (table is "text_events")
    DB="/home/phablet/.local/share/history-service/history.sqlite"
    
    # location of scripts to run when a text is received
    SCRIPTDIR="/home/phablet/bin/text.d"
    
    function check {
    
    # current time in seconds since epoch
    CURRENTTIME=$(date +%s)
    
    # get senderid (phone number) and timestamp from most recent entry in text_events table of $DB at time of modification
    SENDERID=$(sqlite3 $DB "SELECT senderid FROM text_events ORDER BY timestamp DESC LIMIT 1;")
    
    # timestamp converted to seconds since epoch
    TIMESTAMP=$(date -d$(sqlite3 $DB "SELECT timestamp FROM text_events ORDER BY timestamp DESC LIMIT 1;") +%s)
    
    # calculate difference between when text was received and $CURRENTTIME
    DIFFERENCE=$(expr $CURRENTTIME - $TIMESTAMP)
    
    if [ $DIFFERENCE -lt 2 ] && [ $SENDERID != "self" ]
    then
    # run all scripts in #SCRIPTDIR
            run-parts $SCRIPTDIR
    else
            :
    fi
    }
    
    # monitor $DB for changes and execute the above function if it is modified
    while inotifywait -e modify $DB; do check; done
    
    

    There are probably much better ways of going about this but it works for now 🙂

    Any pointers appreciated.

    EDIT: Terrible code updated a bit



  • Check if sqllite supports triggers. If so you could attach a trigger to any table XYZ and any INSERT into that table will fire your own written piece of software.



  • You could also monitor the system dbus, sms appears in clear text on it.

    Sorry I can't copy paste from terminal , maybe a bug.

    sudo dbus-monitor --system "type='signal', interface='org.ofono.MessageManager'"
    


  • @guru

    Looks like triggers are supported but only UPDATE/INSERT/DELETE/SELECT are allowed in the trigger body (trying to use .shell gives a syntax error).

    Relevant Stackoverflow thread

    Close but no cigar 😕



  • Thanks, this is really cool. I did a test sending Testing dbus to my UBphone:

    $ sudo dbus-monitor --system "type='signal', interface='org.ofono.MessageManager'"
    [sudo] password for phablet: 
    ...
       string "Testing dbus"
       array [
          dict entry(
             string "LocalSentTime"
             variant             string "2020-01-12T20:26:33+0100"
          )
          dict entry(
             string "SentTime"
             variant             string "2020-01-12T20:26:33+0100"
          )
          dict entry(
             string "Sender"
             variant             string "+49170xxxxxxxx"
          )
       ]
    ^C
    


  • @AlainW94 Thanks, this looks promising.



  • Happy to help ! 👍


Log in to reply