Skip to content
Snippets Groups Projects
Commit cfdf3cab authored by jkerdreu's avatar jkerdreu
Browse files

Initial release of mqtt logger


git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/fork@1488 b32b6428-25c9-4566-ad07-03861ab6144f
parent 80f44c41
Branches
No related tags found
No related merge requests found
from setuptools import setup
with open('README.rst') as f:
long_description = f.read()
VERSION = "0.1"
setup(
name='xaal.mqttlogger',
version=VERSION,
license='GPL License',
author='Jerome Kerdreux',
author_email='Jerome.Kerdreux@imt-atlantique.fr',
#url='',
description=('xAAL devices for bugNet wireless sensors' ),
long_description=long_description,
classifiers=[
'Programming Language :: Python',
'Topic :: Software Development :: Libraries :: Python Modules',
],
keywords=['xaal', 'mqtt'],
platforms='any',
packages=["xaal.mqttlogger",],
namespace_packages=["xaal"],
include_package_data=True,
install_requires=[
'xaal.lib',
'paho-mqtt',
]
)
# this is a namespace package
try:
import pkg_resources
pkg_resources.declare_namespace(__name__)
except ImportError:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
from . import dev
dev.main()
import paho.mqtt.client as mqtt
from xaal.lib import Device,Engine,tools,config
import sys
# Hardcoded nickname, because metadata server is not ready
NICKNAME= { '2f31c921-02b2-4097-bfae-5753dde2cd40' : 'salon',
'2f31c921-03b2-4097-bfae-5753dde2cd40' : 'salon',
'2f31c922-02b2-4097-bfae-5753dde2cd40' : 'bureau',
'2f31c922-03b2-4097-bfae-5753dde2cd40' : 'bureau',
'2f31c933-02b2-4097-bfae-5753dde2cd40' : 'chambre',
'c7fed8ba-1ead-11e7-8249-82ed25e6aaaa' : 'test',
}
PACKAGE_NAME = "xaal.mqttlogger"
logger = tools.get_logger(PACKAGE_NAME,'DEBUG')
class MQTTLogger:
def __init__(self):
self.load_config()
self.setup()
def load_config(self):
""" load config file """
cfg = tools.load_cfg(PACKAGE_NAME)
if not cfg:
logger.warn("Unable to load config file")
import sys;sys.exit(-1)
self.cfg = cfg['config']
def setup(self):
cfg = self.cfg
client = mqtt.Client(client_id=cfg['client_id'], clean_session=True, userdata=None, protocol=mqtt.MQTTv31)
client.username_pw_set(cfg['username'],cfg['password'])
client.connect(host=cfg['host'], port=int(cfg['port']), keepalive=60, bind_address="")
client.loop_start()
self.mqtt = client
def parse_msg(self,msg):
if msg.action == 'attributesChange' :
nick = self.get_nickname(msg.source)
if nick:
base = "%s/%s" % (self.cfg['topic'],nick)
#import pdb;pdb.set_trace()
for k in msg.body:
topic = '%s/%s' % (base,k)
print("%s = %s" % (topic,msg.body[k]))
self.mqtt.publish(topic,payload=msg.body[k],qos=0,retain=True)
def get_nickname(self,addr):
""" return a nickname for a device """
try:
nick = NICKNAME[addr]
except KeyError:
nick = None
return nick
def run():
log = MQTTLogger()
eng = Engine()
eng.handle_rx_msg = log.parse_msg
eng.run()
def main():
try:
run()
except KeyboardInterrupt:
print("Bye Bye..")
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment