New Plugin: Ezlo Bridge

Hi,

With support from @akbooer I created a plugin that works just as Vera Bridge, but then for the new Ezlo controllers running the Linux (Edge) or RTOS (Athom2) firmware. It makes it possible to include the Zwave devices included on the New Ezlo platform to be part of the openLuup environment for status and control. You can also run the Ezlo scenes, so you can trigger all commands you added via Ezlo VOI to your Ezlo hub from openLuup, or Reactor.

The connection is websocket based and @rigpapa kindly helped with the code for that.

It is a first beta, but so are the Ezlo hubs so nice fit on that aspect. :wink:

The app is in the ALTUI App store or look at GitHub - reneboer/EzloBridge: A bridge running on openLuup to make the Ezlo controled devices availble on openLuup with all its great plugins..

There will be issues with some device types I am sure as I do not have the full line to include on a test box, but I think it is fairly complete. Exceptions are HVAC and DoorLocks. For those support is very limited. The interactions with those devices is complex so most will have to be done via the Vera mobile app.

Note that the bridge function will always be limited to actions (On/Off, Dim, Open,…) and status (sensor status, power reports, switch status, …) and never will support including or configuration. For that you will need the Vera app.

So, beta testers, let me know what your findings are.

Cheers Rene

13 Likes

Great new @reneboer, will give this a run when my beta Ezlo comes back online and i can get the hub serial number. Am i correct in thinking i can get this from App or the Ezlo api tool?

And thank you for making the effort.

Much kudos for that!

My Atom v2 arrived yesterday, so something to work with, now.

Thanks

AK

Good work.

I don’t use OpenLuup myself or ALTUI, but would love to see a Vera hub to Ezlo hub bridge.
So all the real Z-Wave devices paired on the production Vera hub could be mirrored with Virtual devices on the test Ezlo hub.

Where controlling a virtual device on the Ezlo hub then controls the real device on the Vera hub.

Would be good for testing the Ezlo platform more until actually moving (unpair/pair) all of the Z-Wave devices from Vera to Ezlo.

2 Likes

Hi @ElCid,

You can find the serial# in the App. Select the controller and open the hamburger menu. It will give the controller name and serial at the top. (Android)

Cheers Rene

After i updated the controller and added one device and reloaded the luup on openLuup it lost connection with the Ezlo controller it says: Getting devices and scenes… and it stays like that.

Hi @eonnet,
In the L_EzloBridge.lua can you set the value for DEBUG (line 8) to true and reload luup. If you can let me know what you see in the log file.

Cheers Rene

This is from from the LuaUPnP.log

2020-06-19 12:31:53.231 openLuup.scheduler:: [11] Ezlo Bridge device startup
2020-06-19 12:31:53.231 luup_log:11: EzloBridge
2020-06-19 12:31:53.231 luup_log:11: 2020.06.18b
2020-06-19 12:31:53.231 luup_log:11: 192.168.0.95
2020-06-19 12:31:53.231 luup_log:11: device clone numbering starts at 20000
2020-06-19 12:31:53.231 luup_log:11: v20.6.18
2020-06-19 12:31:53.231 luup.variable_set:: 11.urn:upnp-org:serviceId:altui1.DisplayLine1 was: Getting devices and scenes… now: Connecting to Ezlo Hub… #hooks:0
2020-06-19 12:31:53.231 luup_log:11: Using stored credentials.
2020-06-19 12:31:53.231 luup_log:11: Token expires : Sat Jun 20 10:13:45 2020
2020-06-19 12:31:53.232 luup.variable_set:: 11.urn:upnp-org:serviceId:altui1.DisplayLine2 was: 192.168.0.95 now: Connecting to Hub. #hooks:0
2020-06-19 12:31:53.232 luup_log:11: Connect. 0…
2020-06-19 12:31:53.232 luup_log:11: luws: wsopen(“wss://192.168.0.95:17000”)
2020-06-19 12:31:53.234 luup_log:11: luws: wsopen(2.1.1) Hangs here at dohandshake for Athom
2020-06-19 12:31:53.320 luup_log:11: luws: wsopen(2.1.2) Hangs here at dohandshake for Athom
2020-06-19 12:31:53.321 luup_log:11: luws: wsopen() successful SSL/TLS negotiation
2020-06-19 12:31:53.321 luup_log:11: luws: wsopen() upgrading connection to WebSocket
2020-06-19 12:31:53.321 luup_log:11: luws: wsupgrade({ path=“/”, msghandler=function: 0x5623aa70bea0, ip=“192.168.0.95”, port=17000, socket=SSL connection: 0x5623ac5d5f18, options={ max_payload_size=65535, receive_timeout=0, receive_chunk_size=2048, connect=function: 0x5623aa6df2f0, use_masking=true }, connected=false, proto=“wss”, readstate=“start” })
2020-06-19 12:31:53.321 luup_log:11: luws: wsupgrade() sending “GET / HTTP/1.1\r
Host: 192.168.0.95\r
Upgrade: websocket\r
Connection: Upgrade\r
Sec-WebSocket-Key: NV/F/1Ntf/qyXz63v6lkpQ==\r
Sec-WebSocket-Version: 13\r
\r
"
2020-06-19 12:31:53.322 luup_log:11: luws: wsupgrade() received “HTTP/1.1 101 Switching Protocols”, nil
2020-06-19 12:31:53.322 luup_log:11: luws: wsupgrade() received “Upgrade: WebSocket”, nil
2020-06-19 12:31:53.322 luup_log:11: luws: wsupgrade() received “Connection: Upgrade”, nil
2020-06-19 12:31:53.322 luup_log:11: luws: wsupgrade() received “Sec-WebSocket-Accept: zYXZBow7m2r+WpiyxEHEp4V540Y=”, nil
2020-06-19 12:31:53.322 luup_log:11: luws: wsupgrade() received “”, nil
2020-06-19 12:31:53.323 luup_log:11: luws: wsupdate() upgrade response: { 1=“HTTP/1.1 101 Switching Protocols”, 2=“Upgrade: WebSocket”, 3=“Connection: Upgrade”, 4=“Sec-WebSocket-Accept: zYXZBow7m2r+WpiyxEHEp4V540Y=” }
2020-06-19 12:31:53.323 luup_log:11: luws: wsupgrade() upgrade succeeded!
2020-06-19 12:31:53.323 luup_log:11: luws: wsopen() successful WebSocket startup, wsconn { path=”/", msghandler=function: 0x5623aa70bea0, ip=“192.168.0.95”, port=17000, proto=“wss”, socket=SSL connection: 0x5623ac5d5f18, options={ max_payload_size=65535, receive_timeout=0, receive_chunk_size=2048, connect=function: 0x5623aa6df2f0, use_masking=true }, connected=true, lastMessage=1592562713.3232(06/19/20.12:31:53), readstate=“start” }
2020-06-19 12:31:53.323 luup_log:11: Connect. 1…
2020-06-19 12:31:53.323 luup_log:11: Connect. 2…
2020-06-19 12:31:53.323 luup_log:11: sending command : {“method”:“hub.offline.login.ui”,“id”:“71563c6c4671c6”,“params”:{“token”:“kv-0l@JLZYtcKOobXGgMaT@ACpOp%boG%LszmShS0XjOJamyH0YrfJm@Lxa94F%0HGd6qotPWltwqR%U224TDa$o~!MSfSHWnoI3bMaBE6eExDesYHtSj*%CdVJG7!lv23d@T6MfTlLWeZhonJtXbs0TtCrERpY_OAY1oKA_K4rQY0$x7~1xSZ7vckz4rp1G$DTO8YQ7aiLKrYIVET7ardLUyYIK83e1ddef-b9de-461f-b96e-73d03dd93733”,“user”:“934340a0-a7dd-11e9-bb96-67bdc8303c0f”}}
2020-06-19 12:31:53.324 luup.variable_set:: 11.urn:upnp-org:serviceId:altui1.DisplayLine1 was: Connecting to Ezlo Hub… now: Getting devices and scenes… #hooks:0
2020-06-19 12:31:53.324 luup.variable_set:: 11.urn:upnp-org:serviceId:altui1.DisplayLine2 was: Connecting to Hub. now: 192.168.0.95 #hooks:0
2020-06-19 12:31:53.325 luup.set_failure:: status = 0
2020-06-19 12:31:53.325 luup.variable_set:: 11.urn:micasaverde-com:serviceId:HaDevice1.CommFailure was: 0 now: 0 #hooks:0
2020-06-19 12:31:53.325 luup.variable_set:: 11.urn:micasaverde-com:serviceId:HaDevice1.CommFailureTime was: 0 now: 0 #hooks:0
2020-06-19 12:31:53.325 openLuup.scheduler:: [11] Ezlo Bridge device startup completed: status=true, msg=OK, name=EzloBridge
2020-06-19 12:31:53.325 luup_log:3: ALTUI: UPNPregisterDataProvider(3,Vera@192.168.0.82,http://127.0.0.1:3480/data_request?id=lr_HTTP_VeraBridgeMirror_192.168.0.82,[{
“default”:“device.serviceId.name”,
“key”:“mirror”,
“label”:“Mirror”,
“type”:“text”
}])

and also this

2020-06-19 12:32:13.315 luup.variable_set:: 10429.urn:micasaverde-com:serviceId:SecuritySensor1.LastTrip was: 1592562668 now: 1592562728 #hooks:0
2020-06-19 12:32:13.316 luup.variable_set:: 10429.urn:micasaverde-com:serviceId:SecuritySensor1.Tripped was: 1 now: 0 #hooks:0
2020-06-19 12:32:13.316 luup.variable_set:: 10460.urn:micasaverde-com:serviceId:SecuritySensor1.LastTrip was: 1592562670 now: 1592562731 #hooks:0
2020-06-19 12:32:13.317 luup.variable_set:: 10460.urn:micasaverde-com:serviceId:SecuritySensor1.Tripped was: 1 now: 0 #hooks:0
2020-06-19 12:32:13.317 luup.variable_set:: 11024.urn:upnp-org:serviceId:TemperatureSensor1.CurrentTemperature was: 25.70 now: 25.60 #hooks:0
2020-06-19 12:32:13.317 luup.variable_set:: 11426.urn:micasaverde-com:serviceId:EnergyMetering1.Watts was: 0.000 now: 1.661 #hooks:0
2020-06-19 12:32:13.317 luup.variable_set:: 11426.urn:micasaverde-com:serviceId:EnergyMetering1.Log was: 0,0,1,1592562727,128 now: 1,0,1,1592562732,133 #hooks:0
2020-06-19 12:32:13.443 openLuup.server:: request completed (34641 bytes, 3 chunks, 179 ms) tcp{client}: 0x5623ac7c5488
2020-06-19 12:32:13.742 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=562750821&Timeout=60&MinimumDelay=1500&_=1592562652146 HTTP/1.1 tcp{client}: 0x5623ac7c5488
2020-06-19 12:32:13.847 luup_log:11: luws: wshandleincoming() accepted, now 0 bytes to go
2020-06-19 12:32:13.847 luup_log:11: MessageHandler 1, {“error”:null,“id”:“ed6d652bc8592c”,“method”:“hub.room.list”,“result”:[{“_id”:“5ee3d8bf124c351621301175”,“name”:“Kid”},{“_id”:“5ee4d217124c351621301188”,“name”:“Living”},{“_id”:“5ee4d254124c351621301189”,“name”:“Bathroom UP”},{“id":“5ee4d28c124c35162130118a”,“name”:“Bedroom”}]}
2020-06-19 12:32:13.850 luup.variable_set:: 11.urn:akbooer-com:serviceId:EzloBridge1.Ezlo_roomMap was: {“5ee4d217124c351621301188”:2,“5ee4d28c124c35162130118a”:4,“5ee3d8bf124c351621301175”:1,“5ee4d254124c351621301189”:… now: {“5ee4d217124c351621301188”:2,“5ee4d28c124c35162130118a”:4,“Room_Num_Next”:5,“5ee4d254124c351621301189”:3,"5ee3d8bf… #hooks:0
2020-06-19 12:32:13.850 luup_log:11: Send list scenes
2020-06-19 12:32:13.850 luup_log:11: sending command : {“method”:“hub.scenes.list”,“id”:“65da84abab79d6”,“params”:{}}
2020-06-19 12:32:14.373 openLuup.server:: request completed (9594 bytes, 1 chunks, 629 ms) tcp{client}: 0x5623ac7c5488
2020-06-19 12:32:14.600 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=562750822&Timeout=60&MinimumDelay=1500&
=1592562652147 HTTP/1.1 tcp{client}: 0x5623ac7c5488
2020-06-19 12:32:14.906 luup_log:11: Ezlo_Async_WebSocket_Reciever, More chunks to receive
2020-06-19 12:32:14.907 luup_log:11: Ezlo_Async_WebSocket_Reciever, More chunks to receive
2020-06-19 12:32:14.907 luup_log:11: luws: wshandleincoming() accepted, now 0 bytes to go
2020-06-19 12:32:14.909 luup_log:11: MessageHandler 1, {“error”:null,“id”:“65da84abab79d6”,“method”:“hub.scenes.list”,“result”:{“scenes”:[{”_id":“5ee3f66f124c3516637dd62c”,“enabled”:false,“house_modes”:[“1”,“2”,“3”,“4”],“is_group”:false,“name”:“Heating on”,“parent_id”:“5ee3d8bf124c351621301175”,“then”:[{“blockOptions”:{“method”:{“args”:{“abstractId”:“abstract”,“capability”:“capability”,“command”:“command”,“parameters”:“parameters”},“name”:“sendCloudAbstractCommand”}},“blockType”:“then”,“fields”:[{“name”:“abstract”,“type”:“string”,“value”:“a301c5e0-992a-11ea-8de7-c736d0dbb689”},{“name”:“command”,“type”:“string”,“value”:“send”},{“name”:“capability”,“type”:“string”,“value”:“text_command”},{“name”:“parameters”,“type”:“object”,“value”:{“text”:“turn on virtual heating”}}]}],“user_notifications”:[“2017961”],“when”:[{“blockOptions”:{“method”:{“args”:{“blocks”:“blocks”},“name”:“or”}},“blockType”:“when”,“fields”:[{“name”:“blocks”,“type”:“blocks”,“value”:[{“blockId”:“0001-00000055”,“blockOptions”:{“method”:{“args”:{“armed”:“armed”,“item”:“item”,“value”:“value”},“name”:“isItemState”}},“blockType”:“when”,“fields”:[{“name”:“item”,“type”:“item”,“value”:“5ee3d896124c351621301173”},{“name”:“value”,“options”:[{“label”:{“lang_tag”:“idle”,“text”:“Idle”},“value”:“idle”},{“label”:{“lang_tag”:“ui7_mode_state_Heating”,“text”:“Heating”},“value”:“heating”},{“label”:{“lang_tag”:“ui7_mode_state_Cooling”,“text”:“Cooling”},“value”:“cooling”},{“label”:{“lang_tag”:“fan_only”,“text”:“Fan only”},“value”:“fan_only”},{“label”:{“lang_tag”:“2nd_stage_heating”,“text”:“Second stage heating”},“value”:“2nd_stage_heating”},{“label”:{“lang_tag”:“2nd_stage_cooling”,“text”:“Second stage cooling”},“value”:“2nd_stage_cooling”}],“type”:“token”,“value”:“heating”}],“label”:{“lang_tag”:“ui7_thermostat_state_changes”,“text”:“Thermostat state changes”}},{“blockId”:“0001-00000055”,“blockOptions”:{“method”:{“args”:{“armed”:“armed”,“item”:“item”,“value”:“value”},“name”:“isItemState”}},“blockType”:“when”,“fields”:[{“name”:“item”,“type”:“item”,“value”:“5ee3d896124c351621301173”},{“name”:“value”,“options”:[{“label”:{“lang_tag”:“idle”,“text”:“Idle”},“value”:“idle”},{“label”:{“lang_tag”:“ui7_mode_state_Heating”,“text”:“Heating”},“value”:“heating”},{“label”:{“lang_tag”:“ui7_mode_state_Cooling”,“text”:“Cooling”},“value”:“cooling”},{“label”:{“lang_tag”:“fan_only”,“text”:“Fan only”},“value”:“fan_only”},{“label”:{“lang_tag”:“2nd_stage_heating”,“text”:“Second stage heating”},“value”:“2nd_stage_heating”},{“label”:{“lang_tag”:“2nd_stage_cooling”,“text”:“Second stage cooling”},“value”:“2nd_stage_cooling”}],“type”:“token”,“value”:“cooling”}],“label”:{“lang_tag”:“ui7_thermostat_state_changes”,“text”:“Thermostat state changes”}}]}]}]},{“id":“5ee3f6ce124c3516637dd62f”,“enabled”:false,“house_modes”:[“1”,“2”,“3”,“4”],“is_group”:false,“name”:“Heating off”,“parent_id”:“5ee3d8bf124c351621301175”,“then”:[{“blockOptions”:{“method”:{“args”:{“abstractId”:“abstract”,“capability”:“capability”,“command”:“command”,“parameters”:“parameters”},“name”:“sendCloudAbstractCommand”}},“blockType”:“then”,“fields”:[{“name”:“abstract”,“type”:“string”,“value”:“a301c5e0-992a-11ea-8de7-c736d0dbb689”},{“name”:“command”,“type”:“string”,“value”:“send”},{“name”:“capability”,“type”:“string”,“value”:“text_command”},{“name”:“parameters”,“type”:“object”,“value”:{“text”:“turn off virtual heating”}}]}],“user_notifications”:[“2017961”],“when”:[{“blockOptions”:{“method”:{“args”:{“blocks”:“blocks”},“name”:“or”}},“blockType”:“when”,“fields”:[{“name”:“blocks”,“type”:“blocks”,“value”:[{“blockId”:“0001-00000055”,“blockOptions”:{“method”:{“args”:{“armed”:“armed”,“item”:“item”,“value”:“value”},“name”:“isItemState”}},“blockType”:“when”,“fields”:[{“name”:“item”,“type”:“item”,“value”:“5ee3d896124c351621301173”},{“name”:“value”,“options”:[{“label”:{“lang_tag”:“idle”,“text”:“Idle”},“value”:“idle”},{“label”:{“lang_tag”:“ui7_mode_state_Heating”,“text”:“Heating”},“value”:“heating”},{“label”:{“lang_tag”:“ui7_mode_state_Cooling”,“text”:“Cooling”},“value”:“cooling”},{“label”:{“lang_tag”:“fan_only”,“text”:“Fan only”},“value”:“fan_only”},{“label”:{“lang_tag”:“2nd_stage_heating”,“text”:“Second stage heating”},“value”:“2nd_stage_heating”},{“label”:{“lang_tag”:“2nd_stage_cooling”,“text”:“Second stage cooling”},“value”:“2nd_stage_cooling”}],“type”:“token”,“value”:“idle”}],“label”:{“lang_tag”:“ui7_thermostat_state_changes”,“text”:“Thermostat state changes”}}]}]}]},{"id":“5ee3f93d124c3516637dd63a”,“enabled”:false,“house_modes”:[“1”,“2”,“3”,“4”],“is_group”:false,“name”:“Hallway light”,“parent_id”:“”,“then”:[{“blockOptions”:{“method”:{“args”:{“abstractId”:“abstract”,“capability”:“capability”,“command”:“command”,“parameters”:“parameters”},“name”:“sendCloudAbstractCommand”}},“blockType”:“then”,“fields”:[{“name”:“abstract”,“type”:“string”,“value”:“a301c5e0-992a-11ea-8de7-c736d0dbb689”},{“name”:“command”,“type”:“string”,“value”:“send”},{“name”:“capability”,“type”:“string”,“value”:“text_command”},{“name”:“parameters”,“type”:“object”,“value”:{“text”:“set hallway to 20”}}]},{“blockOptions”:{“method”:{“args”:{“abstractId”:“abstract”,“capability”:“capability”,“command”:“command”,“parameters”:“parameters”},“name”:“sendCloudAbstractCommand”}},“blockType”:“then”,“delay”:{“days”:0,“hours”:0,“minutes”:2,“seconds”:0},“fields”:[{“name”:“abstract”,“type”:“string”,“value”:“a301c5e0-992a-11ea-8de7-c736d0dbb689”},{“name”:“command”,“type”:“string”,“value”:“send”},{“name”:“capability”,“type”:“string”,“value”:“text_command”},{“name”:“parameters”,“type”:“object”,“value”:{“text”:“turn off hallway”}}]}],“user_notifications”:[],“when”:[{“blockOptions”:{“method”:{“args”:{“blocks”:“blocks”},“name”:“or”}},“blockType”:“when”,“fields”:[{“name”:“blocks”,“type”:“blocks”,“value”:[{“blockId”:“0001-0000002c”,“blockOptions”:{“method”:{“args”:{“armed”:“armed”,“item”:“item”,“value”:“value”},“name”:“isItemState”}},“blockType”:“when”,“fields”:[{“name”:“item”,“type”:“item”,“value”:“5ee3f34f124c351621301179”},{“name”:“value”,“type”:“bool”,“value”:true}],“label”:{“lang_tag”:“ui7_door_window_motion_sensor_is_tripped”,“text”:“Whenever DEVICE_NAME detects motion whether is armed or disarmed”}}]}]}]}]}}
2020-06-19 12:32:14.920 luup_log:11: Send list devices
2020-06-19 12:32:14.920 luup_log:11: sending command : {“method”:“hub.devices.list”,“id”:“9596eef0ab922f”,“params”:{}}
2020-06-19 12:32:15.769 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=562750788&Timeout=60&MinimumDelay=1500&
=1592561786876 HTTP/1.1 tcp{client}: 0x5623ac7c8628
2020-06-19 12:32:15.773 openLuup.server:: GET /data_request?id=lr_ALTUI_Handler&command=oscommand&oscommand=top%20-n%201&
=1592561786877 HTTP/1.1 tcp{client}: 0x5623ac7b8d58
2020-06-19 12:32:15.979 openLuup.server:: request completed (52445 bytes, 4 chunks, 208 ms) tcp{client}: 0x5623ac7c8628
2020-06-19 12:32:16.010 openLuup.server:: request completed (2 bytes, 1 chunks, 236 ms) tcp{client}: 0x5623ac7b8d58
2020-06-19 12:32:16.011 luup_log:11: Ezlo_Async_WebSocket_Reciever, More chunks to receive
2020-06-19 12:32:16.011 luup_log:11: luws: wshandleincoming() accepted, now 0 bytes to go
2020-06-19 12:32:16.011 luup_log:11: MessageHandler 1, {“api”:“1.0”,“error”:null,“id”:“9596eef0ab922f”,“method”:“hub.devices.list”,“result”:{“devices”:[{”_id":“5ee3d895124c35162130116c”,“batteryPowered”:true,“category”:“hvac”,“deviceTypeId”:“Centralite_3157100”,“gatewayId”:“5ec2adab124c3514fee707a9”,“info”:{“manufacturer”:“Centralite”,“model”:“3157100”},“name”:“Kid Thermostat”,“parentDeviceId”:“”,“reachable”:true,“ready”:true,“roomId”:“5ee3d8bf124c351621301175”,“security”:“no”,“status”:“idle”,“subcategory”:“hvac”,“type”:“thermostat”},{“_id”:“5ee3f34f124c351621301176”,“armed”:false,“batteryPowered”:true,“category”:“security_sensor”,“deviceTypeId”:“CentraLite_3328-G”,“gatewayId”:“5ec2adab124c3514fee707a9”,“info”:{“manufacturer”:“CentraLite”,“model”:“3328-G”},“name”:“Motion Sensor”,“parentDeviceId”:“”,“reachable”:true,“ready”:true,“roomId”:“5ee4d28c124c35162130118a”,“security”:“no”,“status”:“idle”,“subcategory”:“motion”,“type”:“sensor”},{“_id”:“5ee3f34f124c35162130117a”,“batteryPowered”:true,“category”:“temperature”,“deviceTypeId”:“CentraLite_3328-G”,“gatewayId”:“5ec2adab124c3514fee707a9”,“info”:{“manufacturer”:“CentraLite”,“model”:“3328-G”},“name”:“Temperature Motion”,“parentDeviceId”:“5ee3f34f124c351621301176”,“reachable”:true,“ready”:true,“roomId”:“5ee4d28c124c35162130118a”,“security”:“no”,“status”:“idle”,“subcategory”:“”,“type”:“sensor”},{“_id”:“5ee3fc48124c35162130117c”,“batteryPowered”:true,“category”:“humidity”,“deviceTypeId”:“CentraLite_3310-G”,“gatewayId”:“5ec2adab124c3514fee707a9”,“info”:{“manufacturer”:“CentraLite”,“model”:“3310-G”},“name”:“Centralite Humidity”,“parentDeviceId”:“”,“reachable”:true,“ready”:true,“roomId”:“5ee4d217124c351621301188”,“security”:“no”,“status”:“idle”,“subcategory”:“”,“type”:“sensor”},{“_id”:“5ee3fc48124c35162130117f”,“batteryPowered”:true,“category”:“temperature”,“deviceTypeId”:“CentraLite_3310-G”,“gatewayId”:“5ec2adab124c3514fee707a9”,“info”:{“manufacturer”:“CentraLite”,“model”:“3310-G”},“name”:“Centralite Temp”,“parentDeviceId”:“5ee3fc48124c35162130117c”,“reachable”:true,“ready”:true,“roomId”:“5ee4d217124c351621301188”,“security”:“no”,“status”:“idle”,“subcategory”:“”,“type”:“sensor”},{“_id”:“5ee4d39d124c35162130118b”,“batteryPowered”:true,“category”:“humidity”,“deviceTypeId”:“CentraLite_3310-G”,“gatewayId”:“5ec2adab124c3514fee707a9”,“info”:{“manufacturer”:“CentraLite”,“model”:“3310-G”},“name”:“Humidity Sensor”,“parentDeviceId”:“”,“reachable”:true,“ready”:true,“roomId”:“5ee4d28c124c35162130118a”,“security”:“no”,“status”:“idle”,“subcategory”:“”,“type”:“sensor”},{“id":“5ee4d39d124c35162130118e”,“batteryPowered”:true,“category”:“temperature”,“deviceTypeId”:“CentraLite_3310-G”,“gatewayId”:“5ec2adab124c3514fee707a9”,“info”:{“manufacturer”:“CentraLite”,“model”:“3310-G”},“name”:“Temp Bedroom”,“parentDeviceId”:“5ee4d39d124c35162130118b”,“reachable”:true,“ready”:true,“roomId”:“5ee4d28c124c35162130118a”,“security”:“no”,“status”:“idle”,“subcategory”:“”,“type”:“sensor”},{"id":“5eec4f32124c351073792bb9”,“batteryPowered”:false,“category”:“switch”,“deviceTypeId”:“0_0_0”,“gatewayId”:“5eb2b95e00000014fee707a8”,“info”:{“manufacturer”:“Unknown”,“model”:“Unknown”},“name”:“In Wall Switch”,“parentDeviceId”:“”,“reachable”:false,“ready”:true,“roomId”:“”,“security”:“no”,“status”:“idle”,“subcategory”:“in_wall”,“type”:“device”},{"id":“5eec533b124c351073792bc0”,“batteryPowered”:false,“category”:“switch”,“deviceTypeId”:“0_0_0”,“gatewayId”:“5eb2b95e00000014fee707a8”,“info”:{“manufacturer”:“Unknown”,“model”:“Unknown”},“name”:“In Wall Switch”,“parentDeviceId”:“”,“reachable”:true,“ready”:true,“roomId”:“”,“security”:“no”,“status”:“idle”,“subcategory”:“in_wall”,“type”:“device”}]}}
2020-06-19 12:32:16.016 luup.variable_set:: 11.urn:akbooer-com:serviceId:EzloBridge1.Ezlo_deviceMap was: {“Device_Num_Next”:13,“5ee3f34f124c351621301176”:5,“5ee3fc48124c35162130117f”:8,“5eec533b124c351073792bc0”:12,"5ee3… now: {“Device_Num_Next”:13,“5ee3f34f124c351621301176”:5,“5ee3fc48124c35162130117f”:8,“5ee3fc48124c35162130117c”:7,"5ee3f… #hooks:0
2020-06-19 12:32:16.017 luup_log:11: Send list items
2020-06-19 12:32:16.017 luup_log:11: sending command : {“method”:“hub.items.list”,“id”:“34ce038daf0dda”,“params”:{}}
2020-06-19 12:32:16.017 openLuup.server:: GET /data_request?id=lr_ALTUI_Handler&command=oscommand&oscommand=top%20-n%201&
=1592562652148 HTTP/1.1 tcp{client}: 0x5623ac7c22e8
2020-06-19 12:32:16.140 openLuup.server:: request completed (2 bytes, 1 chunks, 122 ms) tcp{client}: 0x5623ac7c22e8
2020-06-19 12:32:16.259 openLuup.server:: request completed (9594 bytes, 1 chunks, 1657 ms) tcp{client}: 0x5623ac7c5488
2020-06-19 12:32:16.473 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=562750823&Timeout=60&MinimumDelay=1500&
=1592562652149 HTTP/1.1 tcp{client}: 0x5623ac7c5488
2020-06-19 12:32:16.769 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=562750822&Timeout=60&MinimumDelay=1500&
=1592561786878 HTTP/1.1 tcp{client}: 0x5623ac7c22e8
2020-06-19 12:32:16.879 openLuup.server:: request completed (9594 bytes, 1 chunks, 109 ms) tcp{client}: 0x5623ac7c22e8
2020-06-19 12:32:17.081 luup_log:11: Ezlo_Async_WebSocket_Reciever, More chunks to receive
2020-06-19 12:32:17.082 luup_log:11: Ezlo_Async_WebSocket_Reciever, More chunks to receive
2020-06-19 12:32:17.082 luup_log:11: luws: wshandleincoming() accepted, now 0 bytes to go
2020-06-19 12:32:17.082 luup_log:11: MessageHandler 1, {“api”:“1.0”,“error”:null,“id”:“34ce038daf0dda”,“method”:“hub.items.list”,“result”:{“items”:[{”_id":“5ee3d896124c35162130116d”,“deviceId”:“5ee3d895124c35162130116c”,“hasGetter”:true,“hasSetter”:false,“name”:“temp”,“scale”:“celsius”,“show”:true,“value”:25.7299995422363,“valueFormatted”:“25.73”,“valueType”:“temperature”},{“_id”:“5ee3d896124c35162130116e”,“deviceId”:“5ee3d895124c35162130116c”,“enum”:[“off”,“heat”,“cool”],“hasGetter”:true,“hasSetter”:true,“name”:“thermostat_mode”,“show”:true,“value”:“heat”,“valueFormatted”:“heat”,“valueType”:“token”},{“_id”:“5ee3d896124c35162130116f”,“deviceId”:“5ee3d895124c35162130116c”,“hasGetter”:true,“hasSetter”:true,“maxValue”:30,“minValue”:7,“name”:“thermostat_setpoint”,“scale”:“celsius”,“show”:true,“value”:26,“valueFormatted”:“26”,“valueType”:“temperature”},{“_id”:“5ee3d896124c351621301170”,“deviceId”:“5ee3d895124c35162130116c”,“enum”:[“fanmode_on”,“fanmode_on_auto”],“hasGetter”:true,“hasSetter”:true,“name”:“thermostat_fan_mode”,“show”:true,“value”:“fanmode_on_auto”,“valueFormatted”:“fanmode_on_auto”,“valueType”:“token”},{“_id”:“5ee3d896124c351621301171”,“deviceId”:“5ee3d895124c35162130116c”,“hasGetter”:true,“hasSetter”:false,“name”:“battery”,“show”:true,“value”:90,“valueFormatted”:“90”,“valueType”:“int”},{“_id”:“5ee3d896124c351621301172”,“deviceId”:“5ee3d895124c35162130116c”,“hasGetter”:true,“hasSetter”:true,“maxValue”:30,“minValue”:7,“name”:“thermostat_setpoint_heating”,“scale”:“celsius”,“show”:false,“value”:26,“valueFormatted”:“26”,“valueType”:“temperature”},{“_id”:“5ee3d896124c351621301173”,“deviceId”:“5ee3d895124c35162130116c”,“enum”:[“cooling”,“idle”,“2nd_stage_heating”,“3rd_stage_fan”,“heating”,“fan_only”,“2nd_stage_cooling”,“2nd_stage_fan”],“hasGetter”:true,“hasSetter”:false,“name”:“thermostat_operating_state”,“show”:true,“value”:“idle”,“valueFormatted”:“idle”,“valueType”:“token”},{“_id”:“5ee3d896124c351621301174”,“deviceId”:“5ee3d895124c35162130116c”,“hasGetter”:true,“hasSetter”:true,“maxValue”:30,“minValue”:7,“name”:“thermostat_setpoint_cooling”,“scale”:“celsius”,“show”:false,“value”:20,“valueFormatted”:“20”,“valueType”:“temperature”},{“_id”:“5ee3f34f124c351621301177”,“deviceId”:“5ee3f34f124c351621301176”,“hasGetter”:true,“hasSetter”:false,“name”:“security_threat”,“show”:true,“value”:false,“valueFormatted”:“false”,“valueType”:“bool”},{“_id”:“5ee3f34f124c351621301178”,“deviceId”:“5ee3f34f124c351621301176”,“hasGetter”:true,“hasSetter”:false,“name”:“battery”,“show”:true,“value”:100,“valueFormatted”:“100”,“valueType”:“int”},{“_id”:“5ee3f34f124c351621301179”,“deviceId”:“5ee3f34f124c351621301176”,“hasGetter”:true,“hasSetter”:false,“name”:“motion”,“show”:true,“value”:false,“valueFormatted”:“false”,“valueType”:“bool”},{“_id”:“5ee3f34f124c35162130117b”,“deviceId”:“5ee3f34f124c35162130117a”,“hasGetter”:true,“hasSetter”:false,“maxValue”:60,“minValue”:-40,“name”:“temp”,“scale”:“celsius”,“show”:true,“value”:0,“valueFormatted”:“0”,“valueType”:“temperature”},{“_id”:“5ee3fc48124c35162130117d”,“deviceId”:“5ee3fc48124c35162130117c”,“hasGetter”:true,“hasSetter”:false,“name”:“battery”,“show”:true,“value”:100,“valueFormatted”:“100”,“valueType”:“int”},{“_id”:“5ee3fc48124c35162130117e”,“deviceId”:“5ee3fc48124c35162130117c”,“hasGetter”:true,“hasSetter”:false,“maxValue”:80,“minValue”:0,“name”:“humidity”,“scale”:“percent”,“show”:true,“value”:47.4900016784668,“valueFormatted”:“47.49”,“valueType”:“humidity”},{“_id”:“5ee3fc48124c351621301180”,“deviceId”:“5ee3fc48124c35162130117f”,“hasGetter”:true,“hasSetter”:false,“maxValue”:60,“minValue”:-40,“name”:“temp”,“scale”:“celsius”,“show”:true,“value”:25.8299999237061,“valueFormatted”:“25.83”,“valueType”:“temperature”},{“_id”:“5ee4d39d124c35162130118c”,“deviceId”:“5ee4d39d124c35162130118b”,“hasGetter”:true,“hasSetter”:false,“maxValue”:80,“minValue”:0,“name”:“humidity”,“scale”:“percent”,“show”:true,“value”:48.75,“valueFormatted”:“48.75”,“valueType”:“humidity”},{“_id”:“5ee4d39d124c35162130118d”,“deviceId”:“5ee4d39d124c35162130118b”,“hasGetter”:true,“hasSetter”:false,“name”:“battery”,“show”:true,“value”:100,“valueFormatted”:“100”,“valueType”:“int”},{“_id”:“5ee4d39d124c35162130118f”,“deviceId”:“5ee4d39d124c35162130118e”,“hasGetter”:true,“hasSetter”:false,“maxValue”:60,“minValue”:-40,“name”:“temp”,“scale”:“celsius”,“show”:true,“value”:25.6900005340576,“valueFormatted”:“25.69”,“valueType”:“temperature”},{“_id”:“5eec4f32124c351073792bba”,“deviceId”:“5eec4f32124c351073792bb9”,“hasGetter”:true,“hasSetter”:true,“maxValue”:100,“minValue”:0,“name”:“dimmer”,“show”:true,“value”:100,“valueFormatted”:“100”,“valueType”:“int”},{“_id”:“5eec4f33124c351073792bbb”,“deviceId”:“5eec4f32124c351073792bb9”,“hasGetter”:true,“hasSetter”:true,“name”:“switch”,“show”:true,“value”:false,“valueFormatted”:“false”,“valueType”:“bool”},{“_id”:“5eec4f33124c351073792bbc”,“deviceId”:“5eec4f32124c351073792bb9”,“hasGetter”:false,“hasSetter”:true,“name”:“dimmer_down”,“show”:true,“value”:0,“valueFormatted”:“0”,“valueType”:“int”},{“_id”:“5eec4f33124c351073792bbd”,“deviceId”:“5eec4f32124c351073792bb9”,“hasGetter”:false,“hasSetter”:true,“name”:“dimmer_up”,“show”:true,“value”:0,“valueFormatted”:“0”,“valueType”:“int”},{“_id”:“5eec4f33124c351073792bbe”,“deviceId”:“5eec4f32124c351073792bb9”,“hasGetter”:true,“hasSetter”:true,“name”:“rgbcolor”,“show”:true,“value”:null,“valueFormatted”:“#000000”,“valueType”:“rgb”},{“_id”:“5eec4f33124c351073792bbf”,“deviceId”:“5eec4f32124c351073792bb9”,“hasGetter”:false,“hasSetter”:true,“name”:“dimmer_stop”,“show”:true,“value”:0,“valueFormatted”:“0”,“valueType”:“int”},{“_id”:“5eec533b124c351073792bc1”,“deviceId”:“5eec533b124c351073792bc0”,“hasGetter”:true,“hasSetter”:true,“name”:“switch”,“show”:true,“value”:false,“valueFormatted”:“false”,“valueType”:“bool”}]}}
2020-06-19 12:32:17.096 luup_log:11: Setting variable details for item name temp, value type temperature, scale celsius.
2020-06-19 12:32:17.096 luup_log:11: Setting variable details for item name thermostat_mode, value type token, scale no scale.
2020-06-19 12:32:17.096 luup_log:11: Setting variable details for item name thermostat_setpoint, value type temperature, scale celsius.
2020-06-19 12:32:17.096 luup_log:11: Setting variable details for item name thermostat_fan_mode, value type token, scale no scale.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name battery, value type int, scale no scale.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name thermostat_setpoint_heating, value type temperature, scale celsius.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name thermostat_operating_state, value type token, scale no scale.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name thermostat_setpoint_cooling, value type temperature, scale celsius.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name security_threat, value type bool, scale no scale.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name motion, value type bool, scale no scale.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name humidity, value type humidity, scale percent.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name dimmer, value type int, scale no scale.
2020-06-19 12:32:17.097 luup_log:11: Setting variable details for item name switch, value type bool, scale no scale.
2020-06-19 12:32:17.098 luup_log:11: Setting variable details for item name dimmer_down, value type int, scale no scale.
2020-06-19 12:32:17.098 luup_log:11: Setting variable details for item name dimmer_up, value type int, scale no scale.
2020-06-19 12:32:17.098 luup_log:11: Error in method callback for method hub.items.list, [string “L_EzloBridge.lua”]:2282: attempt to index field ‘value’ (a nil value)

Hi @eonnet,

The device with RGB is returning an empty value, so added a test for that. Can you update the plugin? The L_EzloBridge.lua file is changed.

Cheers Rene

Now its ok

1 Like

Hi,

I put an updated version on github with some improvements. Better HVAC support, better child devices support.

Cheers Rene

3 Likes

Ok have got the beta Ezlo plus, I am not geting any bridged devices
I am getting error No implemantation.
I have 7 files in my OpenLuup cmh-ludl folder.

I have reloaded luup and refreshed browser.
i havetried Ezlo password and the pluses own password.

What am i doing wrong?
From start up log

no field package.preload['bit']
	no file './bit.lua'
	no file '/usr/local/share/lua/5.1/bit.lua'
	no file '/usr/local/share/lua/5.1/bit/init.lua'
	no file '/usr/local/lib/lua/5.1/bit.lua'
	no file '/usr/local/lib/lua/5.1/bit/init.lua'
	no file '/usr/share/lua/5.1/bit.lua'
	no file '/usr/share/lua/5.1/bit/init.lua'
	no file '../cmh-lu/bit.lua'
	no file 'files/bit.lua'
	no file 'openLuup/bit.lua'
	no file './bit.so'
	no file '/usr/local/lib/lua/5.1/bit.so'
	no file '/usr/lib/arm-linux-gnueabihf/lua/5.1/bit.so'
	no file '/usr/lib/lua/5.1/bit.so'
	no file '/usr/local/lib/lua/5.1/loadall.so'

Looks like you need to install the bit library in your Lua system.

Shell command is:

sudo apt-get install lua-bitop
2 Likes

Cheers, working like a charm.

1 Like

Hi,

I put a new version of the plugin on github in the branch development (GitHub - reneboer/EzloBridge at development). There are quite some changes, one is the service and device ID. This means you have to reinstall from scratch (sorry won’t happen again, I hope).

Other changes are:

  • Populate manufacturer and model if available from Ezlo.
  • Updated HVAC operations (not tested as I don’t have those)
  • Setup child devices correctly by setting Vera parent ID.
  • Added logging, variables, json and utils modules.
  • Log level is a user option in the Settings panel.
  • Remove obsolete rooms, scenes and device ID from stored mapping.
  • Changes SID/device type to rboer (from akbooer).
  • Added periodic full pull of devices and items for full status refresh. Interval time is in Settings panel.
  • Display Can’t Detect Device message if hub shows a device as unreachable.

Cheers Rene

5 Likes

Hello @reneboer i have again a problem with Getting devices and scenes… i went trough the logs and only error related to ezlo was the following (see the last line of the debug log):
2020-07-10 12:43:27.574 luup_log:13: Ezlo_Async_WebSocket_Reciever, More chunks to receive 2020-07-10 12:43:27.574 luup_log:13: luws: wshandleincoming() accepted, now 0 bytes to go 2020-07-10 12:43:27.575 luup_log:13: MessageHandler 1, {"error":null,"id":"8924ad10013381","method":"hub.scenes.list","result":{"scenes":[{"_id":"5f07893b124c3510c6a3f17c","enabled":true,"house_modes":["1","2","3","4"],"is_group":false,"name":"Living Cooling","parent_id":"","then":[{"blockOptions":{"method":{"args":{"item":"item","value":"value"},"name":"setItemValue"}},"blockType":"then","fields":[{"name":"item","type":"item","value":"5f078510124c35105aec5791"},{"name":"value","type":"bool","value":true}]}],"user_notifications":[],"when":[{"blockOptions":{"method":{"args":{"blocks":"blocks"},"name":"or"}},"blockType":"when","fields":[{"name":"blocks","type":"blocks","value":[{"blockId":"0001-00000055","blockOptions":{"method":{"args":{"armed":"armed","item":"item","value":"value"},"name":"isItemState"}},"blockType":"when","fields":[{"name":"item","type":"item","value":"5f0788ad124c35108fa6ce9a"},{"name":"value","options":[{"label":{"lang_tag":"idle","text":"Idle"},"value":"idle"},{"label":{"lang_tag":"ui7_mode_state_Heating","text":"Heating"},"value":"heating"},{"label":{"lang_tag":"ui7_mode_state_Cooling","text":"Cooling"},"value":"cooling"},{"label":{"lang_tag":"fan_only","text":"Fan only"},"value":"fan_only"},{"label":{"lang_tag":"2nd_stage_heating","text":"Second stage heating"},"value":"2nd_stage_heating"},{"label":{"lang_tag":"2nd_stage_cooling","text":"Second stage cooling"},"value":"2nd_stage_cooling"}],"type":"token","value":"cooling"}],"label":{"lang_tag":"ui7_thermostat_state_changes","text":"Thermostat state changes"}}]}]}]},{"_id":"5f078961124c3510c6a3f17f","enabled":true,"house_modes":["1","2","3","4"],"is_group":false,"name":"Living Stop Cooling","parent_id":"","then":[{"blockOptions":{"method":{"args":{"item":"item","value":"value"},"name":"setItemValue"}},"blockType":"then","fields":[{"name":"item","type":"item","value":"5f078510124c35105aec5791"},{"name":"value","type":"bool","value":false}]}],"user_notifications":[],"when":[{"blockOptions":{"method":{"args":{"blocks":"blocks"},"name":"or"}},"blockType":"when","fields":[{"name":"blocks","type":"blocks","value":[{"blockId":"0001-00000055","blockOptions":{"method":{"args":{"armed":"armed","item":"item","value":"value"},"name":"isItemState"}},"blockType":"when","fields":[{"name":"item","type":"item","value":"5f0788ad124c35108fa6ce9a"},{"name":"value","options":[{"label":{"lang_tag":"idle","text":"Idle"},"value":"idle"},{"label":{"lang_tag":"ui7_mode_state_Heating","text":"Heating"},"value":"heating"},{"label":{"lang_tag":"ui7_mode_state_Cooling","text":"Cooling"},"value":"cooling"},{"label":{"lang_tag":"fan_only","text":"Fan only"},"value":"fan_only"},{"label":{"lang_tag":"2nd_stage_heating","text":"Second stage heating"},"value":"2nd_stage_heating"},{"label":{"lang_tag":"2nd_stage_cooling","text":"Second stage cooling"},"value":"2nd_stage_cooling"}],"type":"token","value":"idle"}],"label":{"lang_tag":"ui7_thermostat_state_changes","text":"Thermostat state changes"}}]}]}]}]}} 2020-07-10 12:43:27.578 luup_log:13: Send list devices 2020-07-10 12:43:27.578 luup_log:13: sending command : {"method":"hub.devices.list","id":"a4e38ca38ff628","params":{}} 2020-07-10 12:43:28.057 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=377829372&Timeout=60&MinimumDelay=1500&_=1594377371488 HTTP/1.1 tcp{client}: 0x5616851e7438 2020-07-10 12:43:28.660 luup_log:13: Ezlo_Async_WebSocket_Reciever, More chunks to receive 2020-07-10 12:43:28.660 luup_log:13: luws: wshandleincoming() accepted, now 0 bytes to go 2020-07-10 12:43:28.660 luup_log:13: MessageHandler 1, {"api":"1.0","error":null,"id":"a4e38ca38ff628","method":"hub.devices.list","result":{"devices":[{"_id":"5f06a385124c3516d6c23c82","batteryPowered":true,"category":"humidity","deviceTypeId":"CentraLite_3310-G","gatewayId":"5ec2adab124c3514fee707a9","info":{"manufacturer":"CentraLite","model":"3310-G"},"name":"Humidity Sensor Balcony","parentDeviceId":"","reachable":true,"ready":true,"roomId":"","security":"no","status":"idle","subcategory":"","type":"sensor"},{"_id":"5f06a385124c3516d6c23c85","batteryPowered":true,"category":"temperature","deviceTypeId":"CentraLite_3310-G","gatewayId":"5ec2adab124c3514fee707a9","info":{"manufacturer":"CentraLite","model":"3310-G"},"name":"Temperature Balcony","parentDeviceId":"5f06a385124c3516d6c23c82","reachable":true,"ready":true,"roomId":"","security":"no","status":"idle","subcategory":"","type":"sensor"},{"_id":"5f06a64e124c35105aec5784","armed":true,"batteryPowered":true,"category":"security_sensor","deviceTypeId":"CentraLite_3315-Geu","gatewayId":"5ec2adab124c3514fee707a9","info":{"manufacturer":"CentraLite","model":"3315-Geu"},"name":"Water Leak Sensor","parentDeviceId":"","reachable":true,"ready":true,"roomId":"","security":"no","status":"idle","subcategory":"leak","type":"sensor"},{"_id":"5f06a64e124c35105aec5789","batteryPowered":true,"category":"temperature","deviceTypeId":"CentraLite_3315-Geu","gatewayId":"5ec2adab124c3514fee707a9","info":{"manufacturer":"CentraLite","model":"3315-Geu"},"name":"Temperature Water","parentDeviceId":"5f06a64e124c35105aec5784","reachable":true,"ready":true,"roomId":"","security":"no","status":"idle","subcategory":"","type":"sensor"},{"_id":"5f06a716124c35105aec578b","batteryPowered":true,"category":"humidity","deviceTypeId":"CentraLite_3310-G","gatewayId":"5ec2adab124c3514fee707a9","info":{"manufacturer":"CentraLite","model":"3310-G"},"name":"Humidity Living","parentDeviceId":"","reachable":true,"ready":true,"roomId":"","security":"no","status":"idle","subcategory":"","type":"sensor"},{"_id":"5f06a716124c35105aec578e","batteryPowered":true,"category":"temperature","deviceTypeId":"CentraLite_3310-G","gatewayId":"5ec2adab124c3514fee707a9","info":{"manufacturer":"CentraLite","model":"3310-G"},"name":"Temperature living","parentDeviceId":"5f06a716124c35105aec578b","reachable":true,"ready":true,"roomId":"","security":"no","status":"idle","subcategory":"","type":"sensor"},{"_id":"5f078510124c35105aec5790","batteryPowered":false,"category":"switch","deviceTypeId":"134_3_96","gatewayId":"5eb2b95e00000014fee707a8","info":{"manufacturer":"Aeotec","model":"ZW096-C16"},"name":"Smart Switch G6","parentDeviceId":"","reachable":true,"ready":true,"roomId":"","security":"middle","status":"idle","subcategory":"interior_plugin","type":"switch.outlet"},{"_id":"5f0788ad124c35108fa6ce97","batteryPowered":true,"category":"hvac","deviceTypeId":"Centralite_3157100","gatewayId":"5ec2adab124c3514fee707a9","info":{"manufacturer":"Centralite","model":"3157100"},"name":"ZigBee HA Glass Thermostat","parentDeviceId":"","reachable":true,"ready":true,"roomId":"","security":"no","status":"idle","subcategory":"hvac","type":"thermostat"}]}} 2020-07-10 12:43:28.664 luup_log:13: Error in method callback for method hub.devices.list, [string "L_EzloBridge.lua"]:2602: attempt to index global 'vdev' (a nil value)

Best regards

Hi @reneboer just added a smart thing sensor to Ezlo hub, all works in Ezlo plus, but in OpenLuup it adds an extra current temperature variable. I have no idea if the issue is Ezlo bridge or the Ezlo plus firmware causing the issue

Hi @eonnet,

It may be because of the zigbee device I will have a look.

Cheers Rene

Hi @ElCid,

Can you use the API tool (Ezlo API Tool), logon with your controller credentials, and send me a PM with the results of the hub.devices.list and hub.items.list commands? In the Response tile you can click Copy to get the json response on the clipboard.

Cheers Rene