From 718e93b7571e48462df08629e192625ca06e1ebc Mon Sep 17 00:00:00 2001 From: wixaw Date: Sat, 18 May 2019 15:53:39 +0200 Subject: [PATCH] Add Triones Support --- core/config/devices/triones/triones_rgb.jpg | Bin 0 -> 36477 bytes core/config/devices/triones/triones_rgb.json | 84 +++++++++++++++++++ resources/blead/devices/triones.py | 52 ++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 core/config/devices/triones/triones_rgb.jpg create mode 100644 core/config/devices/triones/triones_rgb.json create mode 100644 resources/blead/devices/triones.py diff --git a/core/config/devices/triones/triones_rgb.jpg b/core/config/devices/triones/triones_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6689b6be6b40c7c03ea4354635d3338966a8d0eb GIT binary patch literal 36477 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 JM9cog{{dJ6Y9;^x literal 0 HcmV?d00001 diff --git a/core/config/devices/triones/triones_rgb.json b/core/config/devices/triones/triones_rgb.json new file mode 100644 index 0000000..f49ec39 --- /dev/null +++ b/core/config/devices/triones/triones_rgb.json @@ -0,0 +1,84 @@ +{ + "triones_rgb": { + "name": "Triones - RGB", + "groupe" : "Lumières", + "configuration" : { + "cancontrol" : 1, + "name" : "triones_rgb", + "canbelocked" : 1 + }, + "commands": [ + { + "name": "Couleur", + "type": "action", + "subtype": "color", + "isVisible": 1, + "unite": "", + "logicalId": "name:triones_rgb,handle:0xffd9,value:#color#,type:color", + "display": { + "forceReturnLineBefore": 1 + } + }, + { + "name": "On", + "type": "action", + "subtype": "other", + "isVisible": 1, + "unite": "", + "logicalId": "name:triones_rgb,handle:0xffd9,value:cc2333,type:switch", + "display": { + "icon": "<\/i>" + } + }, + { + "name": "Off", + "type": "action", + "subtype": "other", + "isVisible": 1, + "unite": "", + "logicalId": "name:triones_rgb,handle:0xffd9,value:cc2433,type:switch", + "display": { + "icon": "<\/i>" + } + }, + { + "name": "Luminosité", + "type": "action", + "subtype": "slider", + "isVisible": 1, + "unite": "", + "logicalId": "name:triones_rgb,handle:0x12,value:#slider#,type:brightness", + "configuration": { + "minValue": 1, + "maxValue": 100 + } + }, + { + "name": "Blanc", + "type": "action", + "subtype": "slider", + "isVisible": 1, + "unite": "", + "logicalId": "name:triones_rgb,handle:0x12,value:#slider#,type:white", + "configuration": { + "minValue": 1700, + "maxValue": 6500 + } + } + ], + "compatibility": [ + { + "manufacturer": "Triones", + "name": "Bed", + "doc": "", + "type": "Lumières", + "battery_type": "", + "ref" : "", + "comlink": "", + "remark": "Ajout STRIP LED", + "inclusion" : "Mode inclusion", + "imglink": "triones_rgb" + } + ] + } +} diff --git a/resources/blead/devices/triones.py b/resources/blead/devices/triones.py new file mode 100644 index 0000000..622eefb --- /dev/null +++ b/resources/blead/devices/triones.py @@ -0,0 +1,52 @@ +from bluepy.btle import Scanner, DefaultDelegate +import time +import logging +import globals +import binascii +from multiconnect import Connector + +class Triones(): + def __init__(self): + self.name = 'triones_rgb' + self.ignoreRepeat = True + + def isvalid(self,name,manuf='',data=''): + if name.lower() in [self.name,'triones']: + return True + + def parse(self,data,mac,name,manuf): + action={} + action['present'] = 1 + return action + + def action(self,message): + mac = message['device']['id'] + handle = message['command']['handle'] + value = message['command']['value'] + repeat=0 + if 'repeat' in message['command']: + repeat = int(message['command']['repeat']) + if mac in globals.KEEPED_CONNECTION: + logging.debug('Already a connection for ' + mac + ' use it') + conn = globals.KEEPED_CONNECTION[mac] + else: + logging.debug('Creating a new connection for ' + mac) + conn = Connector(mac) + globals.KEEPED_CONNECTION[mac]=conn + conn.connect() + if not conn.isconnected: + conn.connect() + if not conn.isconnected: + return + if repeat != 0: + conn.writeCharacteristic('Ox12','010000000000000000000d0a') + time.sleep(2) + for x in range(repeat): + conn.writeCharacteristic(handle,value) + time.sleep(0.4) + else: + conn.writeCharacteristic(handle,value) + conn.disconnect() + return + +globals.COMPATIBILITY.append(Triones)