2017-09-30 4 views
1

J'ai écrit un script python pour l'abonné MQTT qui fonctionne parfaitement bien localement.Comment exécuter des scripts d'abonné MQTT écrits en python sur google app engine

Python script Abonné

import paho.mqtt.client as mqtt 
import os,json 

filePath = "logs.csv" 

def initiateFile(): 
    if (os.path.exists(filePath) == False): 
     fileObj = open(filePath, "w") 
     fileObj.write("Label,x,y,z\n") 

def readFile(): 
    data = open(filePath,'r').read() 
    return data 

def decodeJson(jsonString): 
    jsonObject = json.loads(jsonString) 
    label = jsonObject.keys()[0] 
    x = jsonObject[label]['x'] 
    y = jsonObject[label]['y'] 
    z = jsonObject[label]['z'] 
    return label.encode("utf-8")+","+x+","+y+","+z; 

def writeInFile(newData): 
    oldData = readFile() 
    fileObj = open(filePath, "w") 
    fileObj.write(oldData+newData+"\n") 

def on_connect(client, userdata, flags, rc): 
    print("Connected with result code "+str(rc)+" "+str(client)) 
    client.subscribe("sensors/test") 
    initiateFile() 

def on_message(client, userdata, msg): 
    print msg.payload 
    writeInFile(decodeJson(msg.payload)) 

def on_disconnect(client, userdata, rc): 
    print("Disconnect, reason: " + str(rc)) 
    print("Disconnect, reason: " + str(client)) 

client = mqtt.Client() 
client.username_pw_set(username, password) 
client.connect(broker,port) 
client.on_connect = on_connect 
client.on_message = on_message 
client.loop_forever() 
client.on_disconnect = on_disconnect 

Mais quand j'ai essayé de le déployer sur Google Cloud, je suis "ImportError: Aucun module nommé paho.mqtt.client" d'erreur.

Alors j'ai essayé des solutions suivantes mais nous avons eu erreur

1.) Déclarer la bibliothèque paho-mqtt dans app.yaml

runtime: python27 
api_version: 1 
threadsafe: true 

handlers: 
- url: /.* 
    script: main.app 

libraries: 
- name: paho-mqtt 
    version: "1.3.0" 

***ERROR: (gcloud.app.deploy) An error occurred while parsing file: [C:\Users\uni5p_000\Desktop\RMIT_Studies\Sem_1\Cloud_Computing\Practical\GOOGLE\python-docs-samples\appengine\standard\hello_world\app.yaml] 
the library "paho-mqtt" is not supported 
    in "C:\Users\uni5p_000\Desktop\RMIT_Studies\Sem_1\Cloud_Computing\Practical\GOOGLE\python-docs-samples\appengine\standard\hello_world\app.yaml", line 11, column 19*** 

2.) pip installer paho-mqtt sur la coque Nuage

***OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/paho_mqtt-1.3.0.dist-info'*** 

Comment procéder maintenant?

+0

double possible de [Comment inclure les bibliothèques Python tiers dans Google App Engine?] (Https://stackoverflow.com/questions/14850853/how-to-include-third-party-python-libraries- in-google-app-engine) – hardillb

+0

Si vous utilisez un environnement standard, cela ne fonctionnera pas même si vous avez trié l'installation et le socket. L'environnement standard ne prend pas en charge les requêtes longues. Face à face ne demande qu'une seule exécution pendant une minute et les files d'attente de tâches sont limitées à 10 minutes. Je suppose que vous pouvez vous connecter/déconnecter constamment sur chaque demande déclenchée par cron –

Répondre

1

Documentation de Google explains Comment installer les bibliothèques sous un répertoire local lib.

  1. Create a directory to store your third-party libraries, such as lib/.

mkdir lib

  1. Use pip (version 6 or later) with the -t flag to copy the libraries into the folder you created in the previous step. For example:

pip install -t lib/ <library_name>

+0

Merci pour votre suggestion, son fonctionnement maintenant. Mais je reçois une nouvelle erreur "FeatureNotEnabledError: L'API Socket sera activée pour cette application une fois la facturation a été activée dans la console d'administration." –

+0

Cette erreur semble assez explicite. Si cette réponse a répondu à la question initiale, veuillez la marquer comme telle. – hardillb