Jython

12. Push-Benachrichtungen

Mit dem eingebauten LinkUp kann der mbRobot auch Push-Benachrichtigungen verschicken. Es handelt sich dabei um Daten, die auf einem Cloud-Server zwischengespeichert werden, und von einer Push-Applikation eines Smartphones abgeholt werden.  Auf dem Smartphone lösen die Push-Benachrichtigungen in der Regel  einen akustischen Alarm aus und werden in einem Notifikationsfenster angezeigt, auch wenn der Smartphone im Ruhezustand ist oder anders verwendet wird.

Damit man die Push-Nachrichten empfangen kann, wird auf dem Smartphone die App Pushover installiert. (von Google play bzw. App Store). Die Gratisversion funktioniert eine Woche lang, dann muss man sie neu installieren. Eine immer funktionierende Version kostet nur Fr. 5.-. Beim ersten Start erstellst man ein Benutzerkonto mit Email-Adresse und Passwort. Dabei wird man aufgefordert, dem Smartphone einen beliebigen Namen zu geben, in diesem Beispiel aplu. Die persönlichen Kontoangaben werden beim Versenden der Push-Benachrichtigungen nicht verwendet.

Für das Versenden von Pushnachrichten braucht man zusätzlich einen User Key und einen API-Token-Key. Diese richtet man am einfachsten mit einem PC ein. Man wählt im Browser die URL https://www.pushover.net und loggt sich mit den oben festgelegten Kontoangaben ein.

Zum Testen kann man im Message-Fenster etwas eintippen, um die ersten Pushbenachrichtigung zu erhalten.

Wichtig ist aber der Klick auf Send Notification, damit wird der UserKey angezeigt, den man sich notieren muss.

Dann muss man auf den Link Application klicken

und im Feld Name kann eine beliebige Bezeichnung eingegeben, (hier abc ). Die Checkbox Terms of Service bestätigen und auf Create Application klicken.

Danach erscheint ein API Token Key , den man sich ebenfalls notieren muss:

 

Beispiel 1: Eine Nachricht versenden

Um Nachrichten zu versenden, muss der mbRobot über den Accesspoint mit dem Internet verbunden sein. Im ersten Beispiel wird nur eine einfache Textnachricht gesendet. Im Programm muss man die persönlichen User- und Token Key einfügen sowie die URL des Pushover-Servers. Eine Benachrichtigung wird mit der Funktion httpPost(url, content) gesendet, wobei content die benannten Parametern token, user, title und message beinhaltet. Nach der Programmausführung wird in kurzer Zeit die Push-Nachricht am dem Smartphone angezeigt.

   

# Push1.py
from linkup import *

token = "ainrm1ongcvfgbfpfqeryi8prixb8g"
user = "setghjcbt8qibfibdgsew33q3abx"
title =  "micro:bit"
message = "Greetings from mbRobot"


connectAP("mySSID", "myPassword")
url  = "https://api.pushover.net/1/messages.json"
content = "token=%s&user=%s&title=%s&message=%s"  %(token, user, title, message)
response = httpPost(url, content)
print("response:", response)
► In Zwischenablage kopieren
 

 

Erklärungen zum Programmcode:

token = "ainrm1vdgzvfgbfpfqeryi8prixb8g": API Token Key, den man beim Erstellen des Pushover-Kontos erhalten hat
print("response:", response): Anzeige im Terminalfenster

 

Beispiel 2: Roboter mit einem Distanzsensor zur Überwachung verwenden.

Der Roboter sendet eine Push-Benachrichtigung, wenn ein Objekt in seiner Nähe erscheint. Die Callbackfunktion sendNotifikation(d) wird aufgerufen, wenn im Abstand von 5 bis 50 cm ein Objekt erscheint. Dann wird er für 10 s inaktiv.

 

# Push2.py
from linkup import *
from mbrobot import *

token = "aeqskhjloizzo9h4v8okpc5ug74desn"
user = "u781hdp6qe8oiuznnejrm6wx8fi36q6"
title =  "movement detector"

def sendNotification(distance):
    print("Sending push notification")
    connectAP("mySSID", "myPassword")
    url  = "https://api.pushover.net/1/messages.json"
    message = "Object detected. Distance: " + str(distance)
    content = "token=%s&user=%s&title=%s&message=%s"  %(token, user, title, message)
    httpPost(url, content)

while True:
    d = getDistance()
    print(d)
    if 50 < d < 500:
        sendNotification(d)
    sleep(10000)    
► In Zwischenablage kopieren
 

 

Erklärungen zum Programmcode:

if 50 < d < 500: dasselbe wie d > 50 and d < 500, d liegt zwischen 50 mm und 500 mm
sendNotification(distance): Aufruf der der Callbackfunktion, die die Benachrichtigung auslöst


Beispiel 3
: Erdfeuchtigkeit mit Push-Benachrichtigungen überwachen

Die Anlage zur Messung der Feuchte der Pflanzenerde aus den Kapiteln "Physical Computing" und "IoT"KOMMA WEG kann mit einer ushnachricht ergänzt werden.

Mit den Krokodilklammern am Pin 1 und 3V wird ein Stromkreis aufgebaut. Bei niedriger Feuchte sind die Messwerte, die man mit dem Befehl pin1.read_analog() erhält, wesentlich kleiner als Feuchte.

Die Callbackfunktion sendNotifikation(v) wird aufgerufen, wenn v < 500 ist. Dann wird einer Push-Nachricht versendet und der Besitzer der Blume kann entsprechend reagieren.

 

# Puah3.html
from linkup import *
from mbrobot import *

token = "aeqsgkdrnj5zo9h4v8okpc5ug74desn"
user = "jlutg81hdp6qe8pqynnejrm6wx8fi36q6"
title =  "mbRobot"

def sendNotification(distance):
    print("Sending push notification")
    connectAP("mySSID", "myPassword")
    url  = "https://api.pushover.net/1/messages.json"
    message = "I need water!"
    content = "token=%s&user=%s&title=%s&message=%s"  %(token, user, title, message)
    httpPost(url, content)

while True:
    v = pin1.read_analog()
    print(v)
    if v < 500:
        sendNotification(v)
    sleep(1000)    
► In Zwischenablage kopieren
 

 



Beispiel 4: PIR-Bewegungsdetektor zur Überwachung einsetzen

Der Pyroelektrische Infrarot-Sensor (PIR) verwendet die Eigenschaft einiger Halbleiter, dass eine Temperaturänderung zu einer elektrischen Spannung führt. Da Lebewesen eine Temperaturstrahlung im Infrarot-Bereich abgeben, können PIR-Sensoren die Bewegung von Lebewesen im Bereich von bis zu einigen Metern detektieren. Sie werden vor allem in Alarmanlagen eingesetzt. Der Sensor gibt bei einer Bewegung ein digitales Signal HIGH ab, das nach einigen Sekunden wieder auf LOW geht, falls keine Bewegung mehr stattfindet.

  Es gibt verschiedene Bauformen des PIR-Sensors. Eine  preisgünstige Variante ist HC SR505 PIR (Bezugsquelle: bastelgarage.ch). Der Sensor wird am P2 mit drei F-F-Jumperkabeln angeschlossen.
 

Achtung: Da P2 auch für den Ultrasonic-Sensor verwendet wird, muss dieser aus dem Sockel entfernt werden. Der Sensor ist eigentlich ein digitaler Sensor, d.h. hat nur zwei Zustände (Spannungspegel). Am Analogeingang des micro:bit betragen diese ungefähr 800 (Alarm ausgelöst) und 100 (Ruhezustand).

# Push4.py
from microbit import *
from linkup import *

def sendNotification(v):
    print("Sending push notification")
    connectAP("mySSID", "MyPassword")
    url  = "https://api.pushover.net/1/messages.json"
    message = "Movement detected"
    content = "token=%s&user=%s&title=%s&message=%s"  %(token, user, title, message)
    httpPost(url, content)

token = "amnvfdsnj5zo9h4v8okpc5ug74desn"
user = "kjugfhdp6qe8pqynnejrm6wx8fi36098"
title =  "motion detector"
state = "IDLE"

while True:
    v = pin2.read_analog()
    print(v) 
    if v > 500 and state =="IDLE":
        sendNotification(v)         
    if v < 200 and state == "ALARM":
        state = "IDLE"
    sleep(500)
► In Zwischenablage kopieren
 

 

Erklärungen zum Programmcode:

state = "IDLE": Es wird eine Zustandsvariable verwendet, die beschreibt, ob der Alarm eben ausgelöst wurde (ALARM) oder der Sensor sich im Detektionsmodus (IDLE) befindet