Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
iBus per SMS Steuern
#1
Hallo,
da ich hier gefragt wurde, wie ich mein Auto per SMS steuere, kommt hier eine Anleitung, wie ich das umgesetzt habe.

Zuerst einmal folgendes:
Ich nutze den kleinen RaspberryPi Zero W dafür. Der wird aktuell noch über eine 20.000 mAh Powerbank betrieben und hält damit so ca. 2-3 Tage durch.
Wichtig beim Pi Zero an Adapter denken! MicroUSB Stecker auf USB B Buchse und mini HDMI auf normalen HDMI.
An dem RaspberryPi ist über die RX und TX Pins ein GSM Modul (Sim800L) angeschlossen. Kostenpunkt dafür ca. 7€.
Via USB ist das ResslerInterface mit dem Auto verbunden.

Ich schreibe alles so auf, wie es bei mir gestartet und ausgeführt wird d.h. solltet ihr nicht die selben Pfade verwenden, müssen diese angepasst werden.

Vorab zur Software:
Ich habe das bei mir in 3 Scripte geteilt.

1. Script: Sendet eine Antwort SMS bzw. auch eine SMS, wenn der Pi gestartet wurde.
2. Script: Empfängt die SMS und führt basierend auf dem Inhalt Script 3 aus.
3. Script: Sendet mit dem "ibustester" den eigentlichen BusCode.



Script 1:
Ausführung: 
Code:
python /home/pi/notify/sms.py "SMS Inhalt"

Script:
Code:
import RPi.GPIO as GPIO
import serial
import time, sys
import datetime

from sys import argv
name, msgcon = argv
#print msgcon

SERIAL_PORT = "/dev/ttyS0"    # Rasp 3 UART Port
ser = serial.Serial(SERIAL_PORT, baudrate = 115200, timeout = 5)


# SIMSMS1.py

ser.write("AT+CMGF=1\r") # set to text mode
time.sleep(3)
ser.write('AT+CMGDA="DEL ALL"\r') # delete all SMS
time.sleep(3)
reply = ser.read(ser.inWaiting()) # Clean buf
ser.write("AT+CMGR=1\r") 
time.sleep(3)
reply = ser.read(ser.inWaiting())
ser.write('AT+CMGS="HIER_EURE_NUMMER_EINTRAGEN_AN_DIE_GESENDET_WERDEN_SOLL\r')
time.sleep(3)
msg = msgcon
print "SMS gesendet!\n" + msg
ser.write(msg + chr(26))
ser.write('AT+CMGDA="DEL ALL"\r') # delete all
time.sleep(3)
ser.read(ser.inWaiting()) # Clear buf
time.sleep(5)    

Hier kann es sein, dass der SERIAL_PORT bei euch anders ist.


Script 2 (smscmd.py):
Auführung: 
Code:
python /home/pi/Desktop/smscmd.py

Script:
Code:
import RPi.GPIO as GPIO
import serial
import time, sys
import datetime
import os

SERIAL_PORT = "/dev/ttyS0"    # Rasp 3 UART Port
ser = serial.Serial(SERIAL_PORT, baudrate = 115200, timeout = 5)

ser.write("AT+CMGF=1\r") # set to text mode
time.sleep(1)
ser.write('AT+CMGDA="DEL ALL"\r') # delete all SMS
time.sleep(1)
reply = ser.read(ser.inWaiting()) # Clean buf

print "Listening for incomming SMS..."
while True:
    reply = ser.read(ser.inWaiting())
    if reply != "":
        ser.write("AT+CMGR=1\r")
        time.sleep(1)
        reply = ser.read(ser.inWaiting())
        print "SMS received. Content:"
        print reply


        if "FENSTER" in reply.upper():
            if "AUF" in reply.upper():
                print "Fenster geht auf"
                os.system("sh /home/pi/Desktop/AutoCMDS/Fenster/auf.sh")

            if "ZU" in reply.upper():
                print "Fenster wird zu gemacht"
                os.system("sh /home/pi/Desktop/AutoCMDS/Fenster/zu.sh")
                
         if "SYSTEM" in reply.upper():
            if "REBOOT" in reply.upper():
                print "Reboot wird ausgefuehrt."
                os.system("python /home/pi/notify/sms.py \"Reboot wird eingeleitet\"")
                os.system("sudo reboot")

            if "PING" in reply.upper():
                print "Hallo, ich bin noch da."
                os.system("python /home/pi/notify/sms.py \"Hallo, ich bin noch da.\"")

            if "HALT" in reply.upper():
                print "Shutdown wird eingeleitet."
                os.system("python /home/pi/notify/sms.py \"Shutdown wird eingeleitet.\"")
                os.system("sudo halt")

        time.sleep(.500)
        ser.write('AT+CMGDA="DEL ALL"\r') # delete all
        time.sleep(.500)
        ser.read(ser.inWaiting()) # Clear buffer
        time.sleep(.500) 

Auch hier gilt wieder, dass eventuell der SERIAL_PORT abgeändert werden muss.

Folgende Erklärung hierzu:
Der obere Teil ist für die Kommunikation mit dem GSM Modul. Im Mittelteil kommt dann der eigentlich interessante Teil.
Hier geht es ab "if "FENSTER" in reply.upper():" los. Ich habe es bei mit so eingeteilt, dass als erstes eine "Kategorie" gesendet wird hier also FENSTER.
In der nächsten "if Abfrage" wird dann überprüft, was gemacht werden soll. "if "AUF" in reply.upper():".
Treffen diese beiden Fälle zu, dann wird im Terminal "Fenster geht auf" ausgegeben und in der nächsten Zeile wird das Script 3 mit dem BusCode ausgeführt in diesem wird auch "Script 1" für die SMS Antwort getriggert. Dazu gleich mehr.
Ich habe hier noch einige Systemfunktionen eingebaut, wie das Ausschalten/Neustarten per SMS und auch ein Ping, um zu schauen ob alles funktioniert.
Wichtig! Darauf achten, dass alles großgeschrieben ist.

Ich habe für die einzelnen Befehle bei mir folgende Ordnerstruktur angelegt, damit alles übersichtlich und logisch bleibt.

Code:
/home/pi/Desktop/AutoCMDS/Fenster
            zu.sh
            auf.sh
            
/home/pi/Desktop/AutoCMDS/Lichter
            Fernlicht.sh
            TagfahrlichtBlinker.sh
            Warnblinker.sh
            Nebler.sh
            
/home/pi/Desktop/AutoCMDS/Dach
            auf.sh
            zu.sh


Kommen wir zu Script 3:
Auführung: 
Code:
sh /home/pi/Desktop/AutoCMDS/Fenster/auf.sh

Script, hier am Beispiel "Alle Fenster schließen"
Code:
#!/bin/sh
python /home/pi/notify/sms.py "Die Fernster schließen sich!" &
(echo w; sleep 0.3; echo 9C 05 BF 7C 02 71 2A; sleep 0.3;echo 9C 05 BF 7C 02 71 2A; sleep 0.3; echo q) | python /home/pi/Desktop/ibustester/ibustester.py  -dev /dev/ttyUSB0

Erklärung dazu:
In der 2. Zeile wird die SMS Antwort gesendet (Script 1), da das Senden leider relativ lange dauert, wird mit dem "&" gar nicht erst darauf gewartet, dass die Nachricht gesendet wurde, sondern es geht gleich weiter in Zeile 3.
In Zeile 3 wird mit dem "ibustester" dann ein beliebiger BusCode gesendet.

Hier ganz zum Schluss noch das Start-Script. Wie ihr das beim Start ausführt, ist euch überlassen, da gibt es mehrere Möglichkeiten, das würde jetzt den Rahmen sprengen.

Startscript:
Code:
#!/bin/sh

#Zeit Datum
date=`date +%d.%m.%Y`
time=`date +%H:%M`

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi


#SMS Info
sudo python /home/pi/notify/sms.py "CarPi wurde gestartet und hat die IP: $_IP $time $date"  >> /dev/null 2>&1

#SMS Servic Starten
python /home/pi/Desktop/smscmd.py

Erklärung dazu: Im Ersten Abschnitt wird das Datum und die Uhrzeit als Variable bereitgestellt, im zweiten Abschnitt wird die IP-Adresse bereitgestellt (funktioniert nur im WLAN). 
Im Nächstenabschnitt wird dann eine SMS mit Zeit Datum und falls verfügbar IP gesendet. Zu guter letzt wird das Script 2 (smscmd.py) gestartet, um die SMS zu verwalten.



So funktioniert das ganze bei mir im Auto. Der Vollständigkeit halber noch, es handelt sich bei meinem Auto um ein E46 Cabrio aus 2004. Ich öffne damit auch mein Verdeck.
Mein nächster Schritt ist, dass ich gerne ein GPS Modul einbauen möchte um den Standort des Autos abzufragen.

Da ich ein iPhone habe, habe ich mir mit der Kurzbefehle App meine ganzen Auto-Aktionen als Kurzbefehl zusammen gebastelt, sodass ich nicht jedes mal "FENSTER AUF" schreiben muss, des weiteren geht das Fenster öffnen etc. dann auch mit Siri.

Ich hoffe ich habe nix vergessen, so dass der Ein oder Andere sein Auto demnächst auch per SMS/Siri steuern kann.

JanMarvin, 7 Juli 2019
Antworten
#2
Hört sich ja echt interessant an xD

Gibt es das Projekt auf github?
Bzw. kannst du es uns bereit stellen?
Antworten
#3
Nein gibt es nicht, einfach die beschriebenen Scripte mit den Inhalten anlegen.

Wichtig: Das Script 3 muss mit
Code:
sudo chmod +x
ausführbar gemacht werden!
Antworten


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste