I've created a plugin for the Daikin BRP069A42 WiFi adapter.
It can be found on GitHub: https://github.com/leejoow/domoticz_daikin_BRP069A42
Any comments, please let me know

Moderator: leecollings
Yes, with the new version of plugin is possible to set x seconds of updates and it works fine, and the temp out works now too.leejoow wrote: ↑Tuesday 29 August 2017 8:34 The latest version contains an extra property which can be used to select the number of seconds which must be passed before polling the unit again. You have to restart Domoticz to make these settings visible and update the hardware settings.
The temperature should update even when the unit is off. Could you change the settings to debug mode and post the log? In the latest version I've added some extra connection handling, because in some cases the devices stopped updating. Maybe I've also solved your problem.
I would like to add the extra settings, however I don't have such a unitSo if you could supply me with one, I would be very happy to implement
Another way to handle this would be you send me the requests which are done by the app when you are controlling it. If you could dump the HTTP traffic between your app and unit and send me it.
Code: Select all
2017-10-08 09:06:08.458 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:06:08.458 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
2017-10-08 09:06:09.461 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:06:09.461 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
2017-10-08 09:08:07.398 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:08:07.398 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
2017-10-08 09:08:08.451 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:08:08.451 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
2017-10-08 09:10:07.441 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:10:07.441 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
2017-10-08 09:10:08.443 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:10:08.443 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
2017-10-08 09:12:07.464 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:12:07.464 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
2017-10-08 09:12:08.516 Error: (Daikin_airo) failed to parse parameters, Message or Message, Delay expected.
2017-10-08 09:12:08.516 Error: (Daikin_airo) 'CConnection_send' failed 'TypeError':'function takes at most 2 arguments (4 given)'.
Code: Select all
Connection.Send(data, 'GET', requestUrl, headers)
Code: Select all
Connection.Send({"Verb":"GET", "URL":requestUrl, "Headers": headers})
Code: Select all
Connection.Send({"Verb":"GET", "URL":requestUrl, "Headers": headers, "Data":data})
Code: Select all
2017-10-18 20:22:01.732 (Zwave_Battery) Calling message handler 'onHeartbeat'.
2017-10-18 20:22:01.736 (Daikin_airo) Debug log level set to: 'true'.
2017-10-18 20:22:01.736 (Daikin_airo) 'Name':'Daikin_airo'
2017-10-18 20:22:01.736 (Daikin_airo) 'HomeFolder':'/home/pi/domoticz/plugins/domoticz_daikin_BRP069A42/'
2017-10-18 20:22:01.736 (Daikin_airo) 'Mode1':'12'
2017-10-18 20:22:01.736 (Daikin_airo) 'Mode2':'Debug'
2017-10-18 20:22:01.736 (Daikin_airo) 'Key':'BRP069A42'
2017-10-18 20:22:01.736 (Daikin_airo) 'Port':'80'
2017-10-18 20:22:01.736 (Daikin_airo) 'Author':'leejoow'
2017-10-18 20:22:01.736 (Daikin_airo) 'Address':'192.168.0.19'
2017-10-18 20:22:01.736 (Daikin_airo) 'HardwareID':'44'
2017-10-18 20:22:01.736 (Daikin_airo) 'Version':'1.0.0'
2017-10-18 20:22:01.736 (Daikin_airo) Device count: 6
2017-10-18 20:22:01.736 (Daikin_airo) Device: 1 - ID: 1977, Name: 'Daikin_airo - Power', nValue: 0, sValue: ''
2017-10-18 20:22:01.736 (Daikin_airo) Device ID: '1977'
2017-10-18 20:22:01.736 (Daikin_airo) Device Name: 'Daikin_airo - Power'
2017-10-18 20:22:01.736 (Daikin_airo) Device nValue: 0
2017-10-18 20:22:01.736 (Daikin_airo) Device sValue: ''
2017-10-18 20:22:01.736 (Daikin_airo) Device LastLevel: 0
2017-10-18 20:22:01.736 (Daikin_airo) Device: 2 - ID: 1978, Name: 'Daikin_airo - Temp IN', nValue: 0, sValue: ''
2017-10-18 20:22:01.736 (Daikin_airo) Device ID: '1978'
2017-10-18 20:22:01.736 (Daikin_airo) Device Name: 'Daikin_airo - Temp IN'
2017-10-18 20:22:01.736 (Daikin_airo) Device nValue: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device LastLevel: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device: 3 - ID: 1979, Name: 'Daikin_airo - Temp OUT', nValue: 0, sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device ID: '1979'
2017-10-18 20:22:01.737 (Daikin_airo) Device Name: 'Daikin_airo - Temp OUT'
2017-10-18 20:22:01.737 (Daikin_airo) Device nValue: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device LastLevel: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device: 4 - ID: 1980, Name: 'Daikin_airo - Mode', nValue: 0, sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device ID: '1980'
2017-10-18 20:22:01.737 (Daikin_airo) Device Name: 'Daikin_airo - Mode'
2017-10-18 20:22:01.737 (Daikin_airo) Device nValue: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device LastLevel: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device: 5 - ID: 1981, Name: 'Daikin_airo - Fan Rate', nValue: 0, sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device ID: '1981'
2017-10-18 20:22:01.737 (Daikin_airo) Device Name: 'Daikin_airo - Fan Rate'
2017-10-18 20:22:01.737 (Daikin_airo) Device nValue: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device LastLevel: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device: 6 - ID: 1982, Name: 'Daikin_airo - Temp TARGET', nValue: 0, sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device ID: '1982'
2017-10-18 20:22:01.737 (Daikin_airo) Device Name: 'Daikin_airo - Temp TARGET'
2017-10-18 20:22:01.737 (Daikin_airo) Device nValue: 0
2017-10-18 20:22:01.737 (Daikin_airo) Device sValue: ''
2017-10-18 20:22:01.737 (Daikin_airo) Device LastLevel: 0
2017-10-18 20:22:01.737 (Daikin_airo) Heartbeat interval set to: 10.
2017-10-18 20:22:01.737 (Daikin_airo) Protocol set to: 'HTTP'.
2017-10-18 20:22:01.737 (Daikin_airo) Transport set to: 'TCP/IP', 192.168.0.19:80.
2017-10-18 20:22:01.738 PluginSystem: Starting I/O service thread.
2017-10-18 20:22:01.738 (Daikin_airo) Connect directive received, action initiated successfully.
2017-10-18 20:22:01.738 (Daikin_airo) Protocol set to: 'HTTP'.
2017-10-18 20:22:01.738 (Daikin_airo) Transport set to: 'TCP/IP', 192.168.0.19:80.
2017-10-18 20:22:01.738 (Daikin_airo) Connect directive received, action initiated successfully.
2017-10-18 20:22:01.738 (Daikin_airo) Protocol set to: 'HTTP'.
2017-10-18 20:22:01.788 (Daikin_airo) Calling message handler 'onConnect'.
2017-10-18 20:22:01.788 (Daikin_airo) Connection successful
2017-10-18 20:22:01.788 (Daikin_airo) Sensor connection created
2017-10-18 20:22:01.788 (Daikin_airo) Sending 219 bytes of data:
2017-10-18 20:22:01.788 (Daikin_airo) 47 45 54 20 2f 61 69 72 63 6f 6e 2f 67 65 74 5f 73 65 6e 73 GET./aircon/get_sens
2017-10-18 20:22:01.788 (Daikin_airo) 6f 72 5f 69 6e 66 6f 20 48 54 54 50 2f 31 2e 31 0d 0a 41 63 or_info.HTTP/1.1..Ac
2017-10-18 20:22:01.788 (Daikin_airo) 63 65 70 74 3a 20 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 cept:.Content-Type:.
2017-10-18 20:22:01.788 (Daikin_airo) 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 55 text/html;.charset=U
2017-10-18 20:22:01.789 (Daikin_airo) 54 46 2d 38 0d 0a 48 6f 73 74 3a 20 31 39 32 2e 31 36 38 2e TF-8..Host:.192.168.
2017-10-18 20:22:01.789 (Daikin_airo) 30 2e 31 39 3a 38 30 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 65 6e 0.19:80..Content-Len
2017-10-18 20:22:01.789 (Daikin_airo) 67 74 68 3a 20 30 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 gth:.0..Content-Type
2017-10-18 20:22:01.789 (Daikin_airo) 3a 20 74 65 78 74 2f 78 6d 6c 3b 20 63 68 61 72 73 65 74 3d :.text/xml;.charset=
2017-10-18 20:22:01.789 (Daikin_airo) 75 74 66 2d 38 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b utf-8..Connection:.k
2017-10-18 20:22:01.789 (Daikin_airo) 65 65 70 2d 61 6c 69 76 65 0d 0a 55 73 65 72 2d 41 67 65 6e eep-alive..User-Agen
2017-10-18 20:22:01.789 (Daikin_airo) 74 3a 20 44 6f 6d 6f 74 69 63 7a 2f 31 2e 30 0d 0a 0d 0a .. t:.Domoticz/1.0....
2017-10-18 20:22:01.839 (Daikin_airo) Received 116 bytes of data:
2017-10-18 20:22:01.839 (Daikin_airo) 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0d 0a 43 6f 6e HTTP/1.0.200.OK..Con
2017-10-18 20:22:01.839 (Daikin_airo) 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 35 31 0d 0a 43 6f 6e tent-Length:.51..Con
2017-10-18 20:22:01.839 (Daikin_airo) 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 6c 61 69 tent-Type:.text/plai
2017-10-18 20:22:01.839 (Daikin_airo) 6e 0d 0a 0d 0a 72 65 74 3d 4f 4b 2c 68 74 65 6d 70 3d 32 32 n....ret=OK,htemp=22
2017-10-18 20:22:01.839 (Daikin_airo) 2e 30 2c 68 68 75 6d 3d 2d 2c 6f 74 65 6d 70 3d 31 34 2e 30 .0,hhum=-,otemp=14.0
2017-10-18 20:22:01.839 (Daikin_airo) 2c 65 72 72 3d 30 2c 63 6d 70 66 72 65 71 3d 30 .. .. .. .. ,err=0,cmpfreq=0
2017-10-18 20:22:01.839 (Daikin_airo) Calling message handler 'onMessage'.
2017-10-18 20:22:01.839 Error: (Daikin_airo) 'onMessage' failed 'TypeError':'onMessage() missing 2 required positional arguments: 'Status' and 'Extra''.
2017-10-18 20:22:01.839 (Daikin_airo) Calling message handler 'onDisconnect'.
2017-10-18 20:22:01.839 (Daikin_airo) Connection Sensor Info closed.
2017-10-18 20:22:02.841 (Daikin_airo) Calling message handler 'onConnect'.
2017-10-18 20:22:02.842 (Daikin_airo) Connection successful
2017-10-18 20:22:02.842 (Daikin_airo) Control connection created
2017-10-18 20:22:02.842 (Daikin_airo) Sending 220 bytes of data:
2017-10-18 20:22:02.842 (Daikin_airo) 47 45 54 20 2f 61 69 72 63 6f 6e 2f 67 65 74 5f 63 6f 6e 74 GET./aircon/get_cont
2017-10-18 20:22:02.842 (Daikin_airo) 72 6f 6c 5f 69 6e 66 6f 20 48 54 54 50 2f 31 2e 31 0d 0a 41 rol_info.HTTP/1.1..A
2017-10-18 20:22:02.842 (Daikin_airo) 63 63 65 70 74 3a 20 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a ccept:.Content-Type:
2017-10-18 20:22:02.842 (Daikin_airo) 20 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d .text/html;.charset=
2017-10-18 20:22:02.842 (Daikin_airo) 55 54 46 2d 38 0d 0a 48 6f 73 74 3a 20 31 39 32 2e 31 36 38 UTF-8..Host:.192.168
2017-10-18 20:22:02.842 (Daikin_airo) 2e 30 2e 31 39 3a 38 30 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 65 .0.19:80..Content-Le
2017-10-18 20:22:02.843 (Daikin_airo) 6e 67 74 68 3a 20 30 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 ngth:.0..Content-Typ
2017-10-18 20:22:02.843 (Daikin_airo) 65 3a 20 74 65 78 74 2f 78 6d 6c 3b 20 63 68 61 72 73 65 74 e:.text/xml;.charset
2017-10-18 20:22:02.843 (Daikin_airo) 3d 75 74 66 2d 38 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 =utf-8..Connection:.
2017-10-18 20:22:02.843 (Daikin_airo) 6b 65 65 70 2d 61 6c 69 76 65 0d 0a 55 73 65 72 2d 41 67 65 keep-alive..User-Age
2017-10-18 20:22:02.843 (Daikin_airo) 6e 74 3a 20 44 6f 6d 6f 74 69 63 7a 2f 31 2e 30 0d 0a 0d 0a nt:.Domoticz/1.0....
2017-10-18 20:22:02.893 PluginSystem: Restarting I/O service thread.
2017-10-18 20:22:02.893 (Daikin_airo) Received 400 bytes of data:
2017-10-18 20:22:02.894 (Daikin_airo) 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0d 0a 43 6f 6e HTTP/1.0.200.OK..Con
2017-10-18 20:22:02.894 (Daikin_airo) 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 33 33 34 0d 0a 43 6f tent-Length:.334..Co
2017-10-18 20:22:02.894 (Daikin_airo) 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 6c 61 ntent-Type:.text/pla
2017-10-18 20:22:02.894 (Daikin_airo) 69 6e 0d 0a 0d 0a 72 65 74 3d 4f 4b 2c 70 6f 77 3d 30 2c 6d in....ret=OK,pow=0,m
2017-10-18 20:22:02.894 (Daikin_airo) 6f 64 65 3d 33 2c 61 64 76 3d 2c 73 74 65 6d 70 3d 31 38 2e ode=3,adv=,stemp=18.
2017-10-18 20:22:02.894 (Daikin_airo) 30 2c 73 68 75 6d 3d 30 2c 64 74 31 3d 32 35 2e 30 2c 64 74 0,shum=0,dt1=25.0,dt
2017-10-18 20:22:02.894 (Daikin_airo) 32 3d 4d 2c 64 74 33 3d 31 38 2e 30 2c 64 74 34 3d 32 35 2e 2=M,dt3=18.0,dt4=25.
2017-10-18 20:22:02.894 (Daikin_airo) 30 2c 64 74 35 3d 32 35 2e 30 2c 64 74 37 3d 32 35 2e 30 2c 0,dt5=25.0,dt7=25.0,
2017-10-18 20:22:02.894 (Daikin_airo) 64 68 31 3d 41 55 54 4f 2c 64 68 32 3d 35 30 2c 64 68 33 3d dh1=AUTO,dh2=50,dh3=
2017-10-18 20:22:02.894 (Daikin_airo) 30 2c 64 68 34 3d 30 2c 64 68 35 3d 30 2c 64 68 37 3d 41 55 0,dh4=0,dh5=0,dh7=AU
2017-10-18 20:22:02.894 (Daikin_airo) 54 4f 2c 64 68 68 3d 35 30 2c 62 5f 6d 6f 64 65 3d 33 2c 62 TO,dhh=50,b_mode=3,b
2017-10-18 20:22:02.894 (Daikin_airo) 5f 73 74 65 6d 70 3d 31 38 2e 30 2c 62 5f 73 68 75 6d 3d 30 _stemp=18.0,b_shum=0
2017-10-18 20:22:02.894 (Daikin_airo) 2c 61 6c 65 72 74 3d 32 35 35 2c 66 5f 72 61 74 65 3d 42 2c ,alert=255,f_rate=B,
2017-10-18 20:22:02.895 (Daikin_airo) 66 5f 64 69 72 3d 30 2c 62 5f 66 5f 72 61 74 65 3d 42 2c 62 f_dir=0,b_f_rate=B,b
2017-10-18 20:22:02.895 (Daikin_airo) 5f 66 5f 64 69 72 3d 30 2c 64 66 72 31 3d 35 2c 64 66 72 32 _f_dir=0,dfr1=5,dfr2
2017-10-18 20:22:02.895 (Daikin_airo) 3d 35 2c 64 66 72 33 3d 42 2c 64 66 72 34 3d 35 2c 64 66 72 =5,dfr3=B,dfr4=5,dfr
2017-10-18 20:22:02.895 (Daikin_airo) 35 3d 35 2c 64 66 72 36 3d 35 2c 64 66 72 37 3d 35 2c 64 66 5=5,dfr6=5,dfr7=5,df
2017-10-18 20:22:02.895 (Daikin_airo) 72 68 3d 35 2c 64 66 64 31 3d 30 2c 64 66 64 32 3d 30 2c 64 rh=5,dfd1=0,dfd2=0,d
2017-10-18 20:22:02.895 (Daikin_airo) 66 64 33 3d 30 2c 64 66 64 34 3d 30 2c 64 66 64 35 3d 30 2c fd3=0,dfd4=0,dfd5=0,
2017-10-18 20:22:02.895 (Daikin_airo) 64 66 64 36 3d 30 2c 64 66 64 37 3d 30 2c 64 66 64 68 3d 30 dfd6=0,dfd7=0,dfdh=0
2017-10-18 20:22:02.895 (Daikin_airo) Calling message handler 'onMessage'.
2017-10-18 20:22:02.895 Error: (Daikin_airo) 'onMessage' failed 'TypeError':'onMessage() missing 2 required positional arguments: 'Status' and 'Extra''.
2017-10-18 20:22:02.895 (Daikin_airo) Calling message handler 'onDisconnect'.
2017-10-18 20:22:02.895 (Daikin_airo) Connection Control Info closed.
Code: Select all
def onMessage(self, Connection, Data, Status, Extra):
Code: Select all
def onMessage(self, Connection, Data):
Code: Select all
dataDecoded = Data.decode("utf-8")
Code: Select all
dataDecoded = Data["Data"].decode("utf-8", "ignore")
remb0 wrote: ↑Wednesday 18 October 2017 20:27
...2017-10-18 20:22:01.732 (Zwave_Battery) Calling message handler 'onHeartbeat'.
2017-10-18 20:22:01.736 (Daikin_airo) Debug log level set to: 'true'.
2017-10-18 20:22:01.736 (Daikin_airo) 'Name':'Daikin_airo'
2017-10-18 20:22:01.736 (Daikin_airo) 'HomeFolder':'/home/pi/domoticz/plugins/domoticz_daikin_BRP069A42/'
2017-10-18 20:22:01.736 (Daikin_airo) 'Mode1':'12'
2017-10-18 20:22:01
2017-10-18 20:22:01.736 (Daikin_airo) 'Name':'Daikin_airo'...
"airo" is it not airco?
Code: Select all
"""
<plugin key="BRP069A42" name="Daikin Airconditioning (BRP069A42)" author="leejoow" version="1.0.0" externallink="https://www.daikin.nl/nl_nl/products/BRP069A42.html">
<params>
<param field="Address" label="IP Address" width="200px" required="true" default=""/>
<param field="Port" label="Port" width="30px" required="true" default="80"/>
<param field="Mode1" label="Update every x seconds" width="75px">
<options>
<option label="30" value="3" />
<option label="60" value="6" default="true" />
<option label="90" value="9" />
<option label="120" value="12" />
<option label="150" value="15" />
<option label="180" value="18" />
<option label="210" value="21" />
<option label="240" value="24" />
</options>
</param>
<param field="Mode2" label="Debug" width="75px">
<options>
<option label="True" value="Debug"/>
<option label="False" value="Normal" default="true" />
</options>
</param>
</params>
</plugin>
"""
import Domoticz
import hmac
import hashlib
import time
import re
import base64
import http.client
from datetime import datetime
class BasePlugin:
powerOn = 0
runCounter = 0
httpConnSensorInfo = None
httpConnControlInfo = None
httpConnSetControl = None
def __init__(self):
return
def onStart(self):
if Parameters["Mode2"] == "Debug":
Domoticz.Debugging(1)
if (len(Devices) == 0):
Domoticz.Device(Name="Power", Unit=1, Image=16, TypeName="Switch", Used=1).Create()
Domoticz.Device(Name="Temp IN", Unit=2, TypeName="Temperature", Used=1).Create()
Domoticz.Device(Name="Temp OUT", Unit=3, TypeName="Temperature",Used=1).Create()
Options = {"LevelActions" : "|||||",
"LevelNames" : "|Auto|Cool|Heat|Fan|Dry",
"LevelOffHidden" : "true",
"SelectorStyle" : "1"}
Domoticz.Device(Name="Mode", Unit=4, TypeName="Selector Switch", Image=16, Options=Options, Used=1).Create()
Options = {"LevelActions" : "|||||||",
"LevelNames" : "|Auto|Silent|L1|L2|L3|L4|L5",
"LevelOffHidden" : "true",
"SelectorStyle" : "1"}
Domoticz.Device(Name="Fan Rate", Unit=5, TypeName="Selector Switch", Image=7, Options=Options, Used=1).Create()
Domoticz.Device(Name="Temp TARGET", Unit=6, Type=242, Subtype=1, Image=16, Used=1).Create()
Domoticz.Log("Device created.")
DumpConfigToLog()
Domoticz.Heartbeat(10)
self.httpConnSensorInfo = Domoticz.Connection(Name="Sensor Info", Transport="TCP/IP", Protocol="HTTP", Address=Parameters["Address"], Port=Parameters["Port"])
self.httpConnSensorInfo.Connect()
self.httpConnControlInfo = Domoticz.Connection(Name="Control Info", Transport="TCP/IP", Protocol="HTTP", Address=Parameters["Address"], Port=Parameters["Port"])
self.httpConnControlInfo.Connect()
self.httpConnSetControl = Domoticz.Connection(Name="Set Control", Transport="TCP/IP", Protocol="HTTP", Address=Parameters["Address"], Port=Parameters["Port"])
self.runCounter = int(Parameters["Mode1"])
def onStop(self):
Domoticz.Log("Plugin is stopping.")
def onConnect(self, Connection, Status, Description):
if (Status == 0):
Domoticz.Debug("Connection successful")
data = ''
headers = { 'Content-Type': 'text/xml; charset=utf-8', \
'Connection': 'keep-alive', \
'Accept': 'Content-Type: text/html; charset=UTF-8', \
'Host': Parameters["Address"]+":"+Parameters["Port"], \
'User-Agent':'Domoticz/1.0', \
'Content-Length' : "%d"%(len(data)) }
if (Connection == self.httpConnSensorInfo):
Domoticz.Debug("Sensor connection created")
requestUrl = "/aircon/get_sensor_info"
elif (Connection == self.httpConnControlInfo):
Domoticz.Debug("Control connection created")
requestUrl = "/aircon/get_control_info"
elif (Connection == self.httpConnSetControl):
Domoticz.Debug("Set connection created")
requestUrl = self.buildCommandString()
Connection.Send({"Verb":"GET", "URL":requestUrl, "Headers": headers, "Data":data})
else:
Domoticz.Debug("Connection failed")
def onMessage(self, Connection, Data):
dataDecoded = Data["Data"].decode("utf-8", "ignore")
Domoticz.Debug("Received data from connection " + Connection.Name + ": " + dataDecoded)
if (Connection == self.httpConnControlInfo):
position = dataDecoded.find("pow=")
power = dataDecoded[position + 4 : position + 5]
position = dataDecoded.find("mode=")
mode = dataDecoded[position + 5 : position + 6]
position = dataDecoded.find("f_rate=")
f_rate = dataDecoded[position + 7 : position + 8]
position = dataDecoded.find("stemp=")
stemp = dataDecoded[position + 6 : position + 8]
Domoticz.Debug("Power: " + power + "; Mode: " + mode + "; FanRate: " + f_rate + "; Target temperature: " + stemp)
self.powerOn = int(power)
# Power
if (power == "0"):
if (Devices[1].nValue != 0):
Devices[1].Update(nValue = 0, sValue ="0")
else:
if (Devices[1].nValue != 1):
Devices[1].Update(nValue = 1, sValue ="100")
# Mode
if (mode == "0"):
sValueNew = "10" #Auto
elif (mode == "2"):
sValueNew = "50" #Dry
elif (mode == "3"):
sValueNew = "20" #Cool
elif (mode == "4"):
sValueNew = "30" #Warm
if (Devices[4].nValue != self.powerOn or Devices[4].sValue != sValueNew):
Devices[4].Update(nValue = self.powerOn, sValue = sValueNew)
# Fan rate
if (f_rate == "A"):
sValueNew = "10" # Auto
elif (f_rate == "B"):
sValueNew = "20" # Silent
else:
sValueNew = str(int(f_rate) * 10)
if (Devices[5].nValue != self.powerOn or Devices[5].sValue != sValueNew):
Devices[5].Update(nValue = self.powerOn, sValue = sValueNew)
lastUpdate = datetime.strptime(Devices[6].LastUpdate, "%Y-%m-%d %H:%M:%S")
delta = datetime.now() - lastUpdate
# Setpoint temperature, update once per 30 minutes if no changes
if (Devices[6].nValue != self.powerOn or Devices[6].sValue != stemp or delta.total_seconds() > 1800):
Devices[6].Update(nValue = self.powerOn, sValue = stemp)
elif (Connection == self.httpConnSensorInfo):
position = dataDecoded.find("htemp=")
htemp = dataDecoded[position + 6 : position + 10]
position = dataDecoded.find("otemp=")
otemp = dataDecoded[position + 6 : position + 10]
Domoticz.Debug("Internal temperature: " + htemp + "; Outside temperature: " + otemp)
Devices[2].Update(nValue = 0, sValue = htemp)
Devices[3].Update(nValue = 0, sValue = otemp)
#Force disconnect, in case the Daikin unit doesn't disconnect
if (Connection.Connected()):
Domoticz.Debug("Close connection")
Connection.Disconnect()
def onCommand(self, Unit, Command, Level, Hue):
Domoticz.Debug("Command received U="+str(Unit)+" C="+str(Command)+" L= "+str(Level)+" H= "+str(Hue))
if (Unit == 1):
if(Command == "On"):
self.powerOn = 1
Devices[1].Update(nValue = 1, sValue ="100")
else:
self.powerOn = 0
Devices[1].Update(nValue = 0, sValue ="0")
#Update state of all other devices
Devices[4].Update(nValue = self.powerOn, sValue = Devices[4].sValue)
Devices[5].Update(nValue = self.powerOn, sValue = Devices[5].sValue)
Devices[6].Update(nValue = self.powerOn, sValue = Devices[6].sValue)
if (Unit == 4):
Devices[4].Update(nValue = self.powerOn, sValue = str(Level))
if (Unit == 5):
Devices[5].Update(nValue = self.powerOn, sValue = str(Level))
if (Unit == 6):
Devices[6].Update(nValue = self.powerOn, sValue = str(Level))
self.httpConnSetControl.Connect()
def onDisconnect(self, Connection):
Domoticz.Debug("Connection " + Connection.Name + " closed.")
def onHeartbeat(self):
self.runCounter = self.runCounter - 1
if self.runCounter <= 0:
Domoticz.Debug("Poll unit")
self.runCounter = int(Parameters["Mode1"])
if (self.httpConnSensorInfo.Connected() == False):
self.httpConnSensorInfo.Connect()
if (self.httpConnControlInfo.Connected() == False):
self.httpConnControlInfo.Connect()
else:
Domoticz.Debug("Polling unit in " + str(self.runCounter) + " heartbeats.")
def buildCommandString(self):
#Minimal string: pow=1&mode=1&stemp=26&shum=0&f_rate=B&f_dir=3
requestUrl = "/aircon/set_control_info?shum=0&f_dir=0&pow="
if (self.powerOn):
requestUrl = requestUrl + "1"
else:
requestUrl = requestUrl + "0"
requestUrl = requestUrl + "&mode="
if (Devices[4].sValue == "10"):
requestUrl = requestUrl + "0"
elif (Devices[4].sValue == "20"):
requestUrl = requestUrl + "3"
elif (Devices[4].sValue == "30"):
requestUrl = requestUrl + "4"
elif (Devices[4].sValue == "50"):
requestUrl = requestUrl + "2"
requestUrl = requestUrl + "&f_rate="
if (Devices[5].sValue == "10"):
requestUrl = requestUrl + "A"
elif (Devices[5].sValue == "20"):
requestUrl = requestUrl + "B"
else:
requestUrl = requestUrl + str(int(int(Devices[5].sValue) / 10))
requestUrl = requestUrl + "&stemp=" + Devices[6].sValue
return requestUrl
global _plugin
_plugin = BasePlugin()
def onStart():
global _plugin
_plugin.onStart()
def onStop():
global _plugin
_plugin.onStop()
def onConnect(Connection, Status, Description):
global _plugin
_plugin.onConnect(Connection, Status, Description)
def stringToBase64(s):
global _plugin
_plugin.stringToBase64(s)
def onMessage(self, Connection, Data):
global _plugin
_plugin.onMessage(self, Connection, Data)
def onCommand(Unit, Command, Level, Hue):
global _plugin
_plugin.onCommand(Unit, Command, Level, Hue)
def onDisconnect(Connection):
global _plugin
_plugin.onDisconnect(Connection)
def onHeartbeat():
global _plugin
_plugin.onHeartbeat()
# Generic helper functions
def DumpConfigToLog():
for x in Parameters:
if Parameters[x] != "":
Domoticz.Debug( "'" + x + "':'" + str(Parameters[x]) + "'")
Domoticz.Debug("Device count: " + str(len(Devices)))
for x in Devices:
Domoticz.Debug("Device: " + str(x) + " - " + str(Devices[x]))
Domoticz.Debug("Device ID: '" + str(Devices[x].ID) + "'")
Domoticz.Debug("Device Name: '" + Devices[x].Name + "'")
Domoticz.Debug("Device nValue: " + str(Devices[x].nValue))
Domoticz.Debug("Device sValue: '" + Devices[x].sValue + "'")
Domoticz.Debug("Device LastLevel: " + str(Devices[x].LastLevel))
return
Code: Select all
import hmac
import hashlib
import time
import re
import base64
import http.client
Code: Select all
017-12-06 22:50:17.317 Error: (Daikin Papà) 'onMessage' failed 'TypeError':'attribute of type 'NoneType' is not callable'.
2017-12-06 22:50:17.317 Error: (Daikin Papà) ----> Line 295 in /home/pi/domoticz/plugins/Daikin/plugin.py, function onMessage
2017-12-06 22:50:17.317 Error: (Daikin Papà) ----> Line 170 in /home/pi/domoticz/plugins/Daikin/plugin.py, function onMessage
Code: Select all
2017-12-06 19:39:27.171 (Daikin Fabio) Plugin is stopping.
2017-12-06 19:39:27.304 (Daikin Fabio) Exiting work loop...
2017-12-06 19:39:27.339 (Daikin Fabio) Stopped.
Code: Select all
lastUpdate = datetime.strptime(Devices[6].LastUpdate, "%Y-%m-%d %H:%M:%S")
_plugin.onMessage(Connection, Data, Status, Extra)
Code: Select all
017-12-06 23:28:04.484 (Daikin Papà) Calling message handler 'onMessage'.
2017-12-06 23:28:04.484 (Daikin Papà) Received data from connection Control Info: ret=OK,pow=0,mode=4,adv=,stemp=21.5,shum=0,dt1=25.0,dt2=M,dt3=25.0,dt4=21.5,dt5=21.5,dt7=25.0,dh1=AUTO,dh2=50,dh3=0,dh4=0,dh5=0,dh7=AUTO,dhh=50,b_mode=4,b_stemp=21.5,b_shum=0,alert=255,f_rate=4,f_dir=0,b_f_rate=4,b_f_dir=0,dfr1=5,dfr2=5,dfr3=5,dfr4=4,dfr5=4,dfr6=5,dfr7=5,dfrh=5,dfd1=0,dfd2=0,dfd3=0,dfd4=0,dfd5=0,dfd6=0,dfd7=0,dfdh=0,dmnd_run=0,en_demand=1
2017-12-06 23:28:04.484 (Daikin Papà) Power: 0; Mode: 4; FanRate: 4; Target temperature: 21
2017-12-06 23:28:04.485 Error: (Daikin Papà) 'onMessage' failed 'TypeError':'attribute of type 'NoneType' is not callable'.
2017-12-06 23:28:04.485 Error: (Daikin Papà) ----> Line 295 in /home/pi/domoticz/plugins/Daikin/plugin.py, function onMessage
2017-12-06 23:28:04.485 Error: (Daikin Papà) ----> Line 170 in /home/pi/domoticz/plugins/Daikin/plugin.py, function onMessage
2017-12-06 23:28:04.485 (Daikin Papà) Calling message handler 'onDisconnect'.
Users browsing this forum: No registered users and 1 guest