与Devolo家庭控制中心的通信

pyDHC的Python项目详细描述


python devolodhc

用于Devolo Home Control的Python API

这个python api允许您控制devolo主控设备。 当前支持以下设备:

  • Devolo智能计量插头(获取/设置)
  • Devolo墙壁开关/Devolo遥控钥匙(获取/设置)
  • Devolo警报器(获取/设置)
  • Devolo房间恒温器/散热器恒温器(阀)(获取/设置)
  • Devolo洪水传感器(GET)
  • Devolo湿度传感器(GET)
  • Devolo运动传感器(GET)
  • Devolo门窗触点(GET)
  • http设备(获取/设置)

  • 场景(获取/设置)
  • 组(获取/设置)
  • 计时器(获取/设置)
  • 规则(获取/设置)
  • 消息(获取/设置)

  • Qubino"冲洗快门"ZMNHCD1(获取/设置)
  • qubino"冲洗1D继电器"zmnhnd1(获取/设置)
  • Qubino"冲洗2继电器"ZMNHBD1(获取/设置一个或两个触点)
  • qubino"冲洗调光器"zmnhdd1(获取/设置/调光)

  • Busch Jaeger Duro 2000-ZME U 05461(获取/设置)

更改设置将显示在Devolo Web界面/应用程序每日日志中,您的帐户与往常一样。

请随时提交问题或请求添加更多内容。

需要这个api的php版本吗?php devolodhc

这不是一个官方的api,你要自己承担风险!< BR> 无论如何,这个api使用的命令与devolo home控件完全相同,devolo home控件基于prosyst mbs sdk。当你向中央询问不好的东西时,这个不会烧掉,但回答这是不可能或不允许的。
此API是逆向工程,用于互操作性的研究和开发。


:感叹号:警告:感叹号:

很抱歉,我已经切换到jeedom,不再使用devolo家庭控制解决方案。 这个api自从在这里创建以来工作得非常完美,但是如果出现问题,我将无法修复或扩展它。

如果有人想继续开发此API,请与我联系。


要求 如何
连接
读取数据 更改数据 消费 不支持的设备
版本历史记录

要求

  • python 2.7.11+/python 3+
  • API需要Internet访问(它将通过Devolo服务器进行身份验证)。

如何

  • 下载模块/pydhc.py.
  • 如果可以,请允许对api文件夹具有写权限。它将支持在连续执行脚本之间保持dhc用户会话(速度也更快)。
  • 加载PYDHC模块。
  • 使用您的devolo用户名/密码启动。

连接
importsyssys.path.append(r'C:\path\to\api')frompyDHCimportpyDHCDHC=pyDHC('login','password')ifDHC.error:print(DHC.error)

如果您有多个中央控制单元,或将演示中心保持在MyDevolo页上,则可以选择连接到的位置:

#(login | password | which central, default 0)DHC=pyDHC('login','password',1)ifDHC.error:print(DHC.error)

开始吧:

#for better looking print, we will use pprint:importpprintpp=pprint.PrettyPrinter(indent=4)#get some infos on your Devolo Home Control box:infos=DHC.getInfos()pp.pprint(infos)

读取操作

按您的名称更改设备名称!< /P>

#get all devices in a zone:zone=DHC.getDevicesByZone('living room')pp.pprint(zone)#get rule or timer state:state=DHC.isRuleActive("MyRule")pp.pprint(state)state=DHC.isTimerActive("MyTimer")pp.pprint(state)#Check if a device is on (0=off, 1=on)state=DHC.isDeviceOn("My Wall Plug")pp.pprint(state)#Check for devices with 2 relays (eg. Qubino Flush 2 Relay ZMNHBD1) is on (0=off, 1=on)#contact 1state=DHC.isDeviceOn("myRelay",1)pp.pprint(state['result'])#contact 2state=DHC.isDeviceOn("myRelay",2)pp.pprint(state['result'])#all contactsstate=DHC.isDeviceOn("myRelay",all)pp.pprint(state['result'])#check a device battery level:batteryLevel=DHC.getDeviceBattery('My Motion Sensor')pp.pprint(batteryLevel)#get all batteries level under 20% (ommit argument to have all batteries levels):BatLevels=DHC.getAllBatteries(20)pp.pprint(BatLevels)#get daily diary, last number of events:diary=DHC.getDailyDiary(10)pp.pprint(diary)#get daily device stat:#0:today, 1:yesterday, 2:day before yesterdaystats=DHC.getDailyStat('My MotionSensor',0)pp.pprint(stats)#get weather report:weather=DHC.getWeather()pp.pprint(weather)#Get one device states (all sensors):states=DHC.getDeviceStates('My Motion Sensor')pp.pprint(states)#Get one sensor data for any device, like light from a Motion Sensor or energy from a Wall Plug:data=DHC.getDeviceData('My Motion Sensor','light')pp.pprint(data['result']['value'])data=DHC.getDeviceData('Radiator','temperature')pp.pprint(data['result']['value'])#You can first ask without data, it will return all available sensors datas for this device:data=DHC.getDeviceData('My Wall Plug')pp.pprint(data)#get url from http device:url=DHC.getDeviceURL('myhttp device')#get message data:url=DHC.getMessageData('MyAlert')

更改操作

按您的名称更改设备名称!< /P>

#TURN DEVICE ON(1) or OFF(0):#supported: all on/off devices and http devicesdev=DHC.turnDeviceOnOff("My Room wallPlug",1)pp.pprint(dev)#For devices with 2 relays as Qubino Flush 2 Relay ZMNHBD1 (device name, state, contact):#contact 1 onDHC.turnDeviceOnOff("myRelay",1,1)#contact 2 onDHC.turnDeviceOnOff("myRelay",1,2)#all contacts onDHC.turnDeviceOnOff("myRelay",1,"All")#TURN GROUP ON(1) or OFF(0):DHC.turnGroupOnOff("My Plugs Group",1)#RUN HTTP DEVICE:DHC.turnDeviceOnOff("My http device",1)#0 won't do anything of course.#START SCENE:DHC.startScene("We go out")#SEND MESSAGE:DHC.sendMessage("Alert")#CHANGE THERMOSTAT/VALVE VALUE:targetValue=DHC.setDeviceValue('My radiator',21)DHC.setDeviceValue('my thermostat',19)#press thermostat button:DHC.pressDeviceKey('my thermostat',1)#TURN SIREN ON: (last number is the indice of the tone in the interface list. For example, 1 is alarm and won't stop! 0 will!)DHC.setDeviceValue('My Devolo Siren',5)#SET SHUTTER OPENING:DHC.setDeviceValue('qubShutter',50)#SET DIMMER VALUE:DHC.setDeviceValue('qubDimmer',50)#PRESS REMOTE SWITCH KEY OR KEY FOB KEY:DHC.pressDeviceKey('MySwitch',3)#TURN RULE ACTIVE (1 or 0)DHC.turnRuleOnOff('MyRule',1)#TURN TIMER ACTIVE (1 or 0)DHC.turnTimerOnOff('MyTimer',1)#TURN OFF DAILY DIARY REPORT (true/false):DHC.setDeviceDiary('movekitchen',false)

消耗量

有些人希望有超过3天的消费记录,如墙上的插头设备。 这里有两个函数来记录消耗,并在两个选择的日期之间读取它们。所以你可以每天做一个cron任务来调用这个函数,它会记录昨天的总con每个墙塞的消耗量:

DHC.logConsumption('log.json')

如果不提供文件路径,或者无法写入,则API将返回错误,但也会提供结果(以便您可以编写自己的自定义函数)。
然后,阅读日志并了解一个月的消耗量,或夏季/冬季的消耗量等:

stats=DHC.getLogConsumption('log.json','01.03.2017','31.03.2017')pp.pprint(stats)

当然,它需要api以前保存的有效日志文件。您可以不提供日期(完整日志),或者只提供一个日期(如果需要,请首先设置为空)。只要尊重day.month.year(php'd.m.y')。

有关php脚本的可视化日志反馈,请在此处查看

不支持的设备

如果您有不受支持的设备,您可以使用该设备调用特殊功能,并在新版本中发布返回信息。

请求不支持的设备

help=DHC.debugDevice('MyStrangeDevice')pp.pprint(help)

版本历史记录

v 1.3(2017-10-19)

  • 现在支持蟒蛇3!同一个模块将检查您的python版本并在2.7/3上运行!

v 1.0(2017-09-24)

  • new:getnumstats()报告设备、规则、计时器、场景、组、区域、消息的数量
  • 增强:Qubino flush 2继电器ZMNHBD1支持
    dhc.turndeviceonoff('my2relay',1,'all')//支持1,2,'all'用于q1,q2,两者
    dhc.isdeviceon('my2relay',1)//q1、q2都支持1、2、'all'

v 0.9(2017-06-12)

  • 第一个公共版本

许可证

麻省理工学院许可证(MIT)

版权所有(c)2017 Kiboost

兹免费准许任何人取得副本 本软件和相关文档文件("软件")的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许软件的用户 在满足以下条件的情况下,可以这样做:

上述版权公告及本许可公告须包括在 软件的副本或大部分。

本软件按"原样"提供,无任何形式的保证,明示或 默示的,包括但不限于适销性保证, 适合某一特定目的和非侵犯性。在任何情况下 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与本软件有关,或使用或与本软件的其他交易有关。 软件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
IntelliJ IDEA Java代码样式:注释和枚举之间的空间   java车辆路径问题或工具教程未在eclipse上运行   从HTML表单发布时,java非英语UTF 8字符会发生变化   使用MultiResourceItemReader时,java Spring批处理在CustomLineMapper中获取文件名   java配置JAXB解组器来处理同时具有acessor方法和字段的类   java在JpaRepository findAll()方法中返回对象的浅拷贝   java如何对docx文件进行碎片整理,以便与ApachePOI3.8一起使用?   java如何将一维数组分解成行?   java为什么这个图形对象不是绘画?(我做错了什么?)   如何在Java代码中将Java函数应用于Scala选项   使用IntelliJ REST客户端测试Spring MVC POST导致415   weka java代码kmeans群集   java中为什么Sin(30)=0.98803116240928618   java创建Android警报通知   数组可能是Java For循环问题