57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
import httplib2
|
|
import argparse
|
|
import base64
|
|
import csv
|
|
import datetime
|
|
import random
|
|
import sys
|
|
import time
|
|
import base64
|
|
import domoticz
|
|
|
|
# This script connects Domoticz with Google Cloud PubSub API
|
|
# To make it works :
|
|
# 1 - Install the Google API Client Python Library : pip install --upgrade google-api-python-client (or see https://cloud.google.com/pubsub/libraries)
|
|
# 2 - Activate the Google Cloud PubSub API in the Google Cloud Console
|
|
# 3 - Generate a Service account key in the Google Cloud Console and download the private key in JSON format
|
|
# 4 - Transfer the json key into the domoticz install dir
|
|
# 5 - Set the ENV variable GOOGLE_APPLICATION_CREDENTIALS to the path of your Service account key
|
|
# 6 - Create a topic in the "PubSub" Google Cloud Console
|
|
# 7 - Modify the variable PUBSUB_TOPICNAME below with the topic name
|
|
|
|
# Required library to make pubsub google api working fine
|
|
from apiclient import discovery
|
|
from oauth2client import client as oauth2client
|
|
|
|
# Required privileges
|
|
PUBSUB_SCOPES = ['https://www.googleapis.com/auth/pubsub']
|
|
|
|
# Topic name defined in the Google Cloud PubSub Console
|
|
PUBSUB_TOPICNAME = 'projects/affable-enigma-136123/topics/domoticz'
|
|
|
|
def create_pubsub_client(http=None):
|
|
credentials = oauth2client.GoogleCredentials.get_application_default()
|
|
if credentials.create_scoped_required():
|
|
credentials = credentials.create_scoped(PUBSUB_SCOPES)
|
|
if not http:
|
|
http = httplib2.Http()
|
|
credentials.authorize(http)
|
|
|
|
return discovery.build('pubsub', 'v1', http=http)
|
|
|
|
def publish_message(client,topicname,message):
|
|
message1 = base64.b64encode(message)
|
|
body = {
|
|
'messages': [
|
|
{'data': message1}
|
|
]
|
|
}
|
|
resp = client.projects().topics().publish(topic=topicname, body=body).execute()
|
|
|
|
def main(argv):
|
|
client = create_pubsub_client()
|
|
publish_message(client,PUBSUB_TOPICNAME,data) # noqa: F821
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv)
|