12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- """
- demeter mqtt
- name:connect.py
- author:rabin
- """
- from demeter.core import *
- import paho.mqtt.client as mqtt
- class Connect(object):
- def __init__(self, act):
- act.connect = self
- self.client = mqtt.Client()
- self.client.on_connect = self.connect
- state = hasattr(act, 'message')
- if state:
- self.client.on_message = act.message
- self.client.connect(Demeter.config['mqtt']['host'], Demeter.config['mqtt']['port'], int(Demeter.config['mqtt']['timeout']))
- if state:
- self.client.loop_forever()
- def __del__(self):
- pass
- def getClient(self):
- return self.client
- def connect(self, client, userdata, flags, rc):
-
-
- sub = Demeter.config['mqtt']['sub'].split(',')
- for value in sub:
- client.subscribe(value + "/#")
- """
- gevent.joinall([
- gevent.spawn(self.subscribe, client, 'sensor/#'),
- gevent.spawn(self.subscribe, client, 'pic/#'),
- gevent.spawn(self.subscribe, client, 'msg/#'),
- ])
- """
- @staticmethod
- def subscribe(client, key):
- client.subscribe(key)
- def handle(self, key, value):
- Demeter.record(key, value)
- class Pub(object):
- def __init__(self):
- Connect(self)
- def __del__(self):
- pass
- def push(self, key, msg):
- self.connect.getClient().publish(key,msg)
- class Sub(object):
- def __init__(self):
- Connect(self)
- def __del__(self):
- pass
- def message(self, client, userdata, msg):
-
- self.connect.handle(msg.topic, str(msg.payload))
|