[PYTHON] Push-Benachrichtigung an Intel Edison

Was ist eine Push-Benachrichtigung?

Wenn ein Computer mit dem Internet verbunden ist, um Informationen zu erhalten, greifen die meisten von der Clientseite auf einen Server im Internet zu und erhalten die erforderlichen Informationen. Der als "Push-Benachrichtigung" bezeichnete Zugriff erfolgt, wenn die Serverseite die Clientseite über die Informationen auf dem entgegengesetzten Weg benachrichtigt. An vertrauten Orten erhalten Sie möglicherweise einen Anruf oder eine Nachricht über Skype / LINE. Beim Empfang von Informationen vom Server auf dem Client gibt es eine andere Methode namens "Polling", bei der der Client den Server in regelmäßigen Abständen nach neuen Informationen fragt. Eigentlich ist diese Push-Benachrichtigung wirklich Taihen, wenn ich versuche, sie selbst zu implementieren. Dies wird im nächsten Kapitel erläutert.

Technische Schwierigkeit

Bei der Verbindung mit dem Internet (www) verfügen viele Computer auf der Welt über einen Router (Breitband-Router) dazwischen, um das lokale Netzwerk (LAN) von www zu trennen. Der Router regelt das Netzwerk, indem er jedem Computer im LAN nur innerhalb des LAN eine eindeutige IP-Adresse (private Adresse) zuweist. Wenn dann der Computer im LAN mit dem Computer im WWW kommuniziert, wird die private Adresse des Computers im LAN in eine globale IP-Adresse konvertiert, die im WWW verwendet werden kann, damit er kommunizieren kann (NAT / IP-Maskerade). Es spielt auch eine Rolle. いんたぁねっとの図 Bei dieser Konfiguration gibt es kein Problem beim Zugriff auf www von einem Computer im LAN aus. Wenn Sie jedoch versuchen, von einem Computer auf der www-Seite auf einen Computer im LAN zuzugreifen, befindet sich der Computer im LAN im www. Kein Zugriff möglich, da keine globale IP-Adresse durch identifiziert ist.

Problemumgehung

NAT Crossing ist noch keine etablierte Technologie, daher gibt es keine endgültige Maßnahme. Dieses Mal werde ich vorerst zwei Typen vorstellen. ** Wir haben einen Kommentar von Volunteeras zu STUN / TURN erhalten, der unten erläutert wird. ** Zeige Kommentare.

Über den Server

Dies ist eine Methode, bei der Terminals, die miteinander kommunizieren möchten, eine Verbindung zu demselben Server herstellen und dieser Server die Kommunikation zwischen ihnen weiterleitet. Insbesondere gibt es TURN als standardisierte Methode. Diese Methode erfordert eine beträchtliche Menge an Datenverkehr und Serverlast, ist jedoch einfach zu implementieren und </ s> kann fast alle NATs überwinden.

STUN In STUN die Terminals, die versuchen zu kommunizieren, welche globale IP-Adresse sie haben </ s> und welchen Port Dies ist eine Methode, bei der der Server unter www Ihnen über eine Nummer mitteilt, ob Sie mit www verbunden sind, und die Terminals über P2P mit diesen Informationen miteinander kommunizieren. Bei dieser Methode benachrichtigt der Server das Terminal nur einmal zu Beginn über das Profil, sodass eine Hochgeschwindigkeitskommunikation zwischen Terminals unabhängig von den Spezifikationen des Servers möglich ist. STUN hat jedoch Einschränkungen hinsichtlich der NAT-Typen, die überschritten werden können.

Experiment

Es ist eine so schwierige NAT-Kreuzung, aber lassen Sie es uns einfach mit einem externen Dienst realisieren. PubNub ist ein bekannter Dienst, der solche Push-Benachrichtigungen unterstützt. Eine weitere Option ist die Verwendung der Google Cloud Platform Channel-API. Dieses Mal werde ich jedoch die Streaming API von Twitter verwenden, die jeder liebt und die ich auch liebe. Um von einer Anwendung aus auf Twitter zugreifen zu können, müssen Sie Ihre eigene Anwendung registrieren, einen Verbraucherschlüssel ausstellen und ein Zugriffstoken für das Konto erhalten, auf das Sie zugreifen möchten. Siehe hierzu.

push.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

from twitter import *
import mraa, time

gpio = mraa.Gpio(20)
gpio.dir(mraa.DIR_OUT)

def blink():
  for i in range(20):
    gpio.write(0 if i%2==0 else 1)
    time.sleep(0.3)

auth = OAuth(
    consumer_key = "iruafhiiUEHWIiuHFWIUli",
    consumer_secret = "Eiuhf4fFW0fwwfehi2fWEiWooifwQEIUUfh2efFui",
    token = "428639810-dwufhiEhi04FWIi3Lluh3fwiuhIWhi2fi8fwuFWf",
    token_secret = "fo9f3fwufwiGiuHF57Fui1ohifut7kfwuFKwufhwuF"
    )

allow_users = ['k_yone']

twitter_userstream = TwitterStream(auth=auth, domain='userstream.twitter.com    ')
for msg in twitter_userstream.user():
  if 'user' in msg:
    user = msg['user']
    if 'screen_name' in user:
      print("user: %s " % user['screen_name'])
      if user['screen_name'] not in allow_users:
        continue

      print msg['text']
      if msg['text'] == u"L Chika":
        blink()
        print "success"

Das Programm sieht so aus. Die Streaming-API von Twitter behält den Kommunikationspfad zwischen dem Client und dem Server bei. Wenn also auf dem Server eine Aktion ausgeführt wird, wird das Ergebnis sofort an den Client gesendet. Mit dieser Funktion wird es über NAT übertragen. Die Daten, die gesendet werden können, sind Textdaten mit maximal 140 Zeichen. Je nach Gerät kann dies jedoch ausreichend sein. Es ist auch attraktiv, dass Sie den Authentifizierungsmechanismus von Twitter so wie er ist verwenden können.

Ergebnis

Das Video ist hier.

Zusammenfassung

  • NAT Kreuzung ist Taihen
  • Es gibt einige externe Dienste, die unterstützen
  • Die Streaming-API von Twitter wurde verwendet

Recommended Posts