Und schon geht es weiter, hätte nicht gedacht, dass euch das Thema so interessiert ... freut mich umso mehr, dass es ankommt.
MQTT
Ich setze jetzt einmal voraus, dass ihr einen Mosquitto/MQTT Server am start habt, wenn nicht, auch nicht schlimm, denn auch hierzu wird in Zukunft ein Video/Beitrag folgen. Damit Ihr ein Event auslösen könnt und an den MQTT schicken, benötigt Ihr zunächst ein Client auf dem DoorPi.
Hierzu einfach:
pip install paho-mqtt
ausführen und schon habt Ihr den notwendigen Client und sollte so am Ende bei euch aussehen:
Soweit so gut, weiter benötigt Ihr eine Datei z.B. mqtt.py mit folgendem Inhalt:
#!/usr/bin/env python>
import paho.mqtt.publish as publish
import time
auth = {
'username':"",
'password':""
}
publish.single("doorpi/keyboard/ring", "true", hostname = "<ip von eurem MQTT-Server>")
time.sleep(2)
publish.single("doorpi/keyboard/ring", "false", hostname = "<ip von eurem MQTT-Server")
Kurz erklärt:
Anfangs werden die benötigen Sachen importiert, der Client und Time. Danach kommt die Authentifizierung am MQTT-Server, sofern ihr dort ein Benutzer/Passwort habt, müsst ihr dort natürlich eure Credentials eintragen.
Anschließend wird ein "true" an den MQTT-Server geschickt... kurz gewartet (time.sleep) und dann wieder auf false gestellt. Also genau genommen, wie wenn Ihr den Knopf an der Klingel drückt und der "Kreislauf" geschlossen wird... sobald ihr den Knopf wieder los lasst, wird der Kreislauf geöffnet, sprich in den Ursprpung zurück gesetzt, genau das passiert hier auch.
D.h. ihr könnt (was auch immer Ihr benutzt z.B. an Hausautomation) jetzt auf das Event "true" reagieren.
Jetzt erst einmal das Ganze Testen:
Am MQTT-Server warten wir auf das Event mit:
mosquitto_sub -h 127.0.0.1 -t doorpi/keyboard/ring
In dem Falle hört der MQTT-Server auch nur auf den Pfad doorpi/keyboard/ring damit wir natürlich auch nur auf das Event vom DoorPi wartet und nicht alles andere mit rein blubbert.
Auf dem DoorPi führen wir die zuvor angelegte Datei aus:
python /pfad/zu/eurer/mqtt.py
Solltet Ihr alles richtig gemacht haben, dannt sollte das "auf eurem MQTT-Server" so aussehen:
sprich er hat einmal "true" bekommen und nach kurzer Zeit dann "false".
Ab jetzt könnt Ihr dieses Event abgreifen und weiter nutzen... in meinem Fall schicke ich z.B. ein Snapshot von der Kamera an Telegram sowie ein entsprechenden Text dazu. Ich habe es mal angefangen, aber noch nicht fertig leider, aber rein theoretisch, wenn Ihr z.B. Kodi benutzt, dann könntet ihr auch dort den Snapshot und die Info einblenden, dass es klingelt und zeitgleich das Licht eingeschalten/heller machen oder sowas in die Richtung, kurz gesagt, eurer Phantasie sind keine Grenzen gesetzt.
Natürlich muss DoorPi auslösen, wenn ein Event zutrifft, hierzu einfach die DoorPi.ini anpassen:
/usr/local/etc/DoorPi/conf/doorpi.ini
[EVENT_BeforeSipPhoneMakeCall]
10 = os_execute:python /usr/local/etc/DoorPi/conf/mqtt.py
oder
[EVENT_OnKeyPressed_onboardpins.1]
40 = os_execute:python /usr/local/etc/DoorPi/conf/mqtt.py
Somit wird entweder beim Drücken des Klingelknopfes oder eben vor dem Call ausgelöst.
MQTT sollte somit eingerichtet und bereit für die weitere Verwendung sein (sprich abgreifen für was auch immer ihr damit erledigen wollt).
Call.txt bzw. weitere Rufnummern
Wollt Ihr, wie in unserem Fall die Möglichkeit haben mehrer Rufnummern ansprechen zu können, könnt Ihr u.A. eine "Gruppenrufnummer" auf der (in meinem Fall) Fritzbox anlegen und die entsprechenden Nr. hinterlegen. Anschließend das Pi einfach diese Gruppennummer anrufen lassen oder, wenn Ihr flexibel sein wollt, dann macht eine Datei z.B. Call.txt natürlich mehr Sinn wie in meinem Falle.
Wie ist mein Aufbau:
In meiner Hausautomation habe ich ein Dropdownfeld eingebaut mit 3 Rufnummern, die Gruppenrufnummer, welche interne Tablet, Handy, C3 und C4 klingeln lässt, meine Handy-Nr. und die meiner Frau. Wird einer dieser Nummern in der Hausautomation ausgewählt, dann gibt es im HIntergrund drei Dateien, eine für jede Nummer mit folgendem Inhalt.
echo -n "eure Rufnummer" | ssh "cat > /usr/local/etc/DoorPi/tools/call.txt"
Von der Hausautomation (welche ebenfalls eine Linux-Maschine ist) wird mit SSH-Files remote genau der Command in der Datei ausgeführt. Setzt natürlich voraus, dass Doorpi vorbereitet ist und die Hausautomationsmaschine das Recht hat remote einen Command (ohne Benutzer Passwort) auf dem Doorpi auszuführen.
Wie in der Command/Datei zu sehen, wird mit einem echo die Information in den darauffolgenden Pfad/Datei (Call.txt) geschrieben.
Wie könnt Ihr DoorPi jetzt dazu bringen die call.txt zu verwenden? Hierzu müsst Ihr die DoorPi.ini anpassen, welche sich in diesem Pfad befindet:
/usr/local/etc/DoorPi/conf/doorpi.ini
Ihr könnt in folgenden Bereich einfach eine Zeile wie folgt hinzufügen:
[EVENT_OnKeyPressed_onboardpins.1]
10 = file_call_value:/usr/local/etc/DoorPi/tools/call.txt
Das ist auch schon die ganze Magic. Somit wird nicht eine Rufnummer direkt angerufen sondern eben die Rufnummer, die sich jeweils flexibel in der call.txt befindet.
Viel Spaß beim Nachbauen