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)

Persönliche kabellose Beleuchtung

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:

  1. Versenden einer Email mit vordefiniertem Text und Empfänger
  2. 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.

  1. Die Applets sehen für Email und GoogleDocs relativ ähnlich aus. Hier ein Bsp. für Email IFTTT Nach dem die Buttons gedrückt werden erfolgen E-Mails in folgender Form. eMail

  2. 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)