Service - 91kodi1bvg/Emergency-DashButton GitHub Wiki
1. Wlan
Internetzugang fand über einen TP-LINK 450Mbps Wireless N Router: TL-WR940N Der router dangierte als AccessPoint für das Projekt. Alle Clients kommunizierten drüber.
Nach der Einrichtung der DashButtons bei Amazon wurden die Zugänge ins Internet per MAC-Blokade verboten. (Wireless MAC Filtering) Damit ist es möglich to Deny or allow specific wireless client devices to access my network by their MAC addresses. For example, you want the wireless client A with the MAC address 00-0A-EB-B0-00-0B and the wireless client B with the MAC address 00-0A-EB-00-07-5F to access. Quelle: siehe unten. Wie waren die Schritte:
1. Visit http://tplinkwifi.net or 192.168.0.1 in the address bar of a web browser, and log in with the username and
password you set for the router.
2. Go to Wireless > Wireless MAC Filtering.
3. Click Enable to enable the Wireless MAC Filtering function.
4. Select Allow the stations specified by any enabled entries in the list to access as the filtering rule.
5. Delete or disable all entries if there are any entries already.
6. Click Add New and fill in the blanks.
1 ) Enter the MAC address 00-0A-EB-B0-00-0B/00-0A-EB-00-07-5F in the MAC Address field.
2 ) Enter wireless client A/B in the Description field.
3 ) Leave the status as Enabled.
4 ) Click Save and click Back.
7. The configured
Fertig!
Linkadresse zu der Bedienungseinleitung findet man hier: TL-WR940N(EU)_V6_User Guide
2. Dash Button
Für das Einrichten des Dash Buttons braucht man lediglich ein Smartphone mit der Amazon-App für iOS oder Android. Der Dash Button ist daher bei der erste Einrichtung über Bluetooth mit der App zu verbinden. Anschließend folgt über die App-Eingabe Einrichtung der Wlan-Zugangsdaten für den Dush-Button, dadurch ist die direkte Verbindung mit dem Internet möglich. Detaillierte Anleitung finden Sie hier: https://www.amazon.de/gp/help/customer/display.html?nodeId=201746340
3. Philips Hue
Im Projekt benutze integrative Lösung von Home Assistant hat uns ermöglicht die Bedienung der Hue-Lampe mit Python mit wenig Code zu Testen.
Einzuschalten:
import homeassistant.remote as remote
from homeassistant.const import STATE_ON
api = remote.API('192.168.1.188:8123', '')
remote.set_state(api, 'light.hue_color_lamp_1', new_state=STATE_ON)
oder auszuschalten:
import homeassistant.remote as remote
from homeassistant.const import STATE_OFF
api = remote.API('192.168.1.188:8123', '')
remote.set_state(api, 'light.hue_color_lamp_1', new_state=STATE_OFF)
Für weitere Implementierung könnte betrachtet werden die bestimmten Farbtöne, Kontraste oder ein Spektrum an verschiedenen Farben, einzusetzen um die ideale Beleuchtung für evtl. bestimmte Zeiten zu integrieren.
4. IFTTT
Im Folgenden werden zwei Beispiele näher erläutert:
- Versenden einer Email mit vordefiniertem Text und Empfänger
- Eintrag in GoogleDocs
Die Einrichtung der Apletts erfolgt Analog für 1 und 2 durch wenige Klicks bei IFTTT. Dabei erstellt man zunächst ein neues Aplett mit THIS den Maker (Maker Webhooks) und dem entsprechende THAT (GoogleDocs oder Email). Die Konfiguration der Parameter ist Intuitiv gestaltet. Als Ergebnis entstehen zwei URLS, welche das Event auslösen.
-
Die Applets sehen für Email und GoogleDocs relativ ähnlich aus. Hier ein Bsp. für Email
Nach dem die Buttons gedrückt werden erfolgen E-Mails in folgender Form.

-
Die Google Ausgabe erfolgt in folgende GoogleTabelle
5. Raspberry Pi
Im zweiten Schritt erfolgt die Einrichtung des RaspberryPi, dies ist notwendig um die Kommunikation zwischen den BashButton und der Anwendungen zu gewährleisten.
5.1 RPi Grundkonfiguration
Erstes sollte der Raspberry Pi konfiguriert werden. Grundkonfiguration
5.2 DashButton
diese beiden Programme werden benötigt um die DashButtons später zu finden.
sudo apt-get install python- scapy tcpdump
Mit dem folgende Abschnitt DashFinder.py lassen sich die MAC-Adressen der jeweiligen DashButtons erkennen.
from scapy.all import *
def arp_display(pkt):
if pkt.haslayer(DHCP):
print pkt[Ether].src
print "Druecken Sie den Dashbutton"
print sniff(prn=arp_display, filter="(udp and (port 67 or 68))", store=0)
5.5 E-Mail mit IFTTT
Die folgende Methode ruft die IFTT URL mittels Post-Requests auf und löst dadurch das Event (E-Mail) aus.
def ifttt_post(value):
#IFTT URL mit dem E-Mail Event, kann direkt von der IFTTT Seite kopiert werden.
url = 'https://maker.ifttt.com/trigger/Patient/with/key/1ZtlOAudE_eoCRCU0UVsa'
#Hier übergeben wir Parameter an die URL. Diese werden direkt beim Aufruf uebergeben (Value)
query = {'value1': value}
#Hier wird die URL zusammengebaut und der Request ausgelöst.
res = requests.post(url, data=query)
#Hier wird die Antwort auf der Konsole ausgegeben
print(res.text)
5.4 GoogleTabellen mit IFTTT
def 2google(name):
url = 'https://maker.ifttt.com/trigger/2google/with/key/1ZtlOAudE_eoCRCU0UVsa'
lt = localtime()
wochentag = strftime("%A",lt)
query = {'value1': wochentag , 'value2' : name}
res = requests.post(url, data=query)
print(res.text)
5.5 GoogleTabellen mit Python
Für die Nutzung der GoogleDocs müssen folgende programme installiert werden
sudo pip install gspread
sudo pip install --upgrade oauth2client
Um in die Google Tabellen schreiben zu können wird folgender 2google.py benötigt.
from scapy.all import *
import subprocess
import requests
import time
import gspread
import locale
from time import *
from oauth2client.service_account import *
def 2google(message = ''):
scope = ['https://spreadsheets.google.com/feeds']
#Die Credentials sollten als erstes angelget werden und der Pfad angepasst
credentials = ServiceAccountCredentials.from_json_keyfile_name('/home/pi/credentials.json', scope)
gspeadcreds = gspread.authorize(credentials)
# Der Schlüssel sollte von der GoogleTabelle übernommen werden
wkeys = gc.open_by_key("1Y34234pudshjalhJHDSAHLdhjknsaSADAioe").sheet1
lotime = localtime()
uhrzeit = strftime("%-H:%M",lt)
wochentag = strftime("%A",lt)
print wochentag
print uhrzeit
wkeys.append_row([,wochentag,uhrzeit,message])
2google("DK")
weiter Infos: GIT- Spreadsheets Spreadsheets
5.4 Zusammenführung
Zusätzlich ist es möglich auch nur start.py Datei zu starten und auf die Anweisungen warten, hier wurden die einzelnen Abschnitte zusammengefügt. Einige der Funktionen wie das aus 5.5 wurden ausgelassen, um das schreiben in die Google Tabellen nicht unnötig mehrfach durchzuführen.
from scapy.all import *
import subprocess
import requests
import time
from time import localtime, strftime, sleep
lastdetection = 0
import urllib
from oauth2client.service_account import ServiceAccountCredentials
import gspread
import locale
import json
#Das ist die Übergeordnete Methode (Mainmethode)
def arp_display(pkt):
global lastdetection
if pkt.haslayer(DHCP):
#Hier muss die MAC-Adresse vom 1ten DashButton Helfer eingetragen werden
if pkt[Ether].src == '44:65:0d:f5:78:7b':
if(time.time() - lastdetection > 10):
print
print "Helfer"
ifttt_postB('Helfer eingetroffen')
2google('Helfer eingetroffen')
#Hier muss die MAC-Adresse vom 2ten DashButton Patient eingetragen werden
elif pkt[Ether].src == 'ac:63:be:3d:ab:bd':
if(time.time() -lastdetection > 10):
print
print "Patient"
ifttt_post('Raum 225')
2google("Patient A")
lastdetection = time.time()
else:
#Falls keine Bekannte MAC-Adresse erkannt wird, erfolgt die Ausgabe aller gefundenen MAC-Adressen
print pkt[Ether].src
# Methode zum IFTTT E-MAIL vom Patienten
def ifttt_post(value):
url = 'https://maker.ifttt.com/trigger/Patient/with/key/1ZtlOAudE_eoCRCU0UVsa'
query = {'value1': value}
res = requests.post(url, data=query)
print(res.text)
# Methode zum IFTT E-MAIL vom Helfer, alles OK
def ifttt_postB(value):
url = 'https://maker.ifttt.com/trigger/Helfer/with/key/1ZtlOAudE_eoCRCU0UVsa'
query = {'value1': value}
res = requests.post(url, data=query)
print(res.text)
# Methode zum IFTTT Schreiben in GoogleDocs
def 2google(name):
url = 'https://maker.ifttt.com/trigger/2google/with/key/1ZtlOAudE_eoCRCU0UVsa'
lt = localtime()
tag = strftime("%-d. %B", lt)
uhrzeit = strftime("%-H:%M",lt)
wochentag = strftime("%A",lt)
print wochentag
value = wochentag
#Hier werden zwei Parameter an IFTTT übergeben zum einen der Wochentag und zum anderen der Name
query = {'value1': value , 'value2' : name}
res = requests.post(url, data=query)
print(res.text)
#2google("Script startet")
print sniff(prn=arp_display, filter="(udp and (port 67 or 68))", store=0)