[PYTHON] Notification push à Intel Edison

Qu'est-ce que la notification push?

Lorsqu'un ordinateur est connecté à Internet pour obtenir des informations, la plupart d'entre eux accèdent à un serveur sur Internet du côté client et reçoivent les informations nécessaires. L'accès appelé "notification push" est lorsque le côté serveur notifie les informations du côté client par la route opposée. Dans des endroits familiers, vous pouvez recevoir un appel téléphonique ou un message via Skype / LINE. Lors de la réception d'informations du serveur sur le client, il existe une autre méthode appelée «interrogation», dans laquelle le client demande au serveur de nouvelles informations à intervalles réguliers. En fait, cette notification push est vraiment Taihen lorsque j'essaie de l'implémenter moi-même. Ceci sera expliqué dans le chapitre suivant.

Difficulté technique

Lors de la connexion à Internet (www), de nombreux ordinateurs dans le monde ont un routeur (routeur à large bande) entre les deux pour séparer le réseau local (LAN) de www. Le routeur régit le réseau en attribuant une adresse IP unique (adresse privée) à chaque ordinateur du LAN uniquement au sein du LAN. Ensuite, lorsque l'ordinateur dans le LAN communique avec l'ordinateur dans www, l'adresse privée de l'ordinateur dans le LAN est convertie en une adresse IP globale qui peut être utilisée dans www afin qu'il puisse communiquer (NAT / IP masquerade). Cela joue également un rôle. いんたぁねっとの図 Avec cette configuration, il n'y a aucun problème lors de l'accès à www à partir d'un ordinateur en LAN, mais inversement, lorsque vous essayez d'accéder à un ordinateur en LAN à partir d'un ordinateur du côté www, l'ordinateur en LAN est en www. Accès impossible car aucune adresse IP globale n'est identifiée par.

solution de contournement

Le croisement NAT n'est pas encore une technologie établie, il n'y a donc pas de mesure définitive. Cette fois, je présenterai deux types pour le moment. ** Nous avons reçu un commentaire de voluntas à propos de STUN / TURN expliqué ci-dessous. ** Voir les commentaires.

Par le serveur

Il s'agit d'une méthode dans laquelle les terminaux qui tentent de communiquer entre eux se connectent au même serveur, et ce serveur relaie la communication entre eux. En particulier, il existe TURN comme méthode standardisée. Cette méthode nécessite une quantité considérable de trafic et de charge du serveur, mais est facile à mettre en œuvre et </ s> peut surmonter presque tous les NAT.

STUN STUN est le numéro de port que l’adresse IP globale possède </ s> entre les terminaux essayant de communiquer entre eux. Il s'agit d'une méthode dans laquelle le serveur réellement sur www vous indique si vous êtes connecté à www par numéro, et les terminaux communiquent entre eux via P2P en utilisant ces informations. Avec cette méthode, le serveur ne notifie le profil du terminal qu'une seule fois au début, de sorte qu'une communication à haut débit entre les terminaux est possible quelles que soient les spécifications du serveur. Cependant, STUN a des restrictions sur les types de NAT qui peuvent être dépassés.

Expérience

C'est un passage NAT tellement difficile, mais réalisons-le facilement en utilisant un service externe. PubNub est un service bien connu qui prend en charge de telles notifications push. Une autre option consiste à utiliser l 'API Google Cloud Platform Channel. Cependant, cette fois, j'utiliserai l 'API de streaming de Twitter, que tout le monde aime et que j'aime aussi. Pour accéder à Twitter à partir d'une application, vous devez enregistrer votre propre application, émettre une clé client et obtenir un jeton d'accès pour le compte auquel vous souhaitez accéder. Reportez-vous à ceci.

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"

Le programme ressemble à ceci. L'API Streaming de Twitter maintient le chemin de communication établi entre le client et le serveur, donc s'il y a une action sur le serveur, le résultat est immédiatement envoyé au client. Ce sera via NAT en utilisant cette fonction. Les données qui peuvent être envoyées sont des données texte de 140 caractères ou moins, mais selon l'appareil, cela peut être suffisant. Il est également intéressant que vous puissiez utiliser le mécanisme d'authentification de Twitter tel quel.

résultat

La vidéo est ici.

Résumé

  • Le croisement NAT est Taihen
  • Certains services externes prennent en charge
  • L'API Streaming de Twitter a été utilisée

Recommended Posts