bloodtick / Hubitat

4 stars 3 forks source link

[NEW DEVICE SUPPORT] Arlo Doorbell #15

Open evojim opened 7 months ago

evojim commented 7 months ago

Requesting New Device support. Comments: {{Arlo doorbell - currently using the Arlo camera device driver, but the "refresh" command doesn't work properly, the battery state doesn't update, and the health status changes to "null" upon refresh}}

COPY REPLICA METADATA BELOW THIS LINE [{ "DESCRIPTION": {"allowed":null,"components":[{"capabilities":[{"id":"switch","version":1},{"id":"refresh","version":1},{"id":"button","version":1},{"id":"battery","version":1},{"id":"healthCheck","version":1},{"id":"videoStream","version":1},{"id":"motionSensor","version":1},{"id":"soundSensor","version":1},{"id":"videoCapture","version":1},{"id":"alarm","version":1}],"categories":[{"categoryType":"manufacturer","name":"Camera"}],"id":"main","label":"main"}],"createTime":"2023-12-14T14:13:41.875Z","deviceId":"hidden","deviceManufacturerCode":"Arlo","executionContext":"CLOUD","label":"Front Doorbell","locationId":"hidden","manufacturerName":"SmartThings","name":"c2c-arlo-wired-video-doorbell-switch-battery","ownerId":"c54d0000-2eaf-0992-d300-5a5f376802cc","presentationId":"SmartThings-smartthings-c2c_arlo_doorbell_switch_battery","profile":{"id":"82c7e00a-b03b-4de0-8b79-aec4db3375e0"},"restrictionTier":0,"roomId":"hidden","type":"VIPER","viper":{"endpointAppId":"viper_555d6f40-b65a-11ea-8fe0-77cb99571462","manufacturerName":"Arlo","modelName":"AVD1001B"}} }, { "CAPABILITIES": {"components":[{"attributes":{"switch":{"enumCommands":[{"command":"on","value":"on"},{"command":"off","value":"off"}],"schema":{"additionalProperties":false,"properties":{"value":{"enum":["on","off"],"title":"SwitchState","type":"string"}},"required":["value"],"type":"object"}}},"commands":{"off":{"arguments":[],"name":"off"},"on":{"arguments":[],"name":"on"}},"ephemeral":false,"id":"switch","name":"Switch","status":"live","version":1},{"attributes":{},"commands":{"refresh":{"arguments":[],"name":"refresh"}},"ephemeral":false,"id":"refresh","name":"Refresh","status":"live","version":1},{"attributes":{"button":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"enum":["pushed","held","double","pushed_2x","pushed_3x","pushed_4x","pushed_5x","pushed_6x","down","down_2x","down_3x","down_4x","down_5x","down_6x","down_hold","up","up_2x","up_3x","up_4x","up_5x","up_6x","up_hold","swipe_up","swipe_down","swipe_left","swipe_right"],"title":"ButtonState","type":"string"}},"required":["value"],"type":"object"}},"numberOfButtons":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"minimum":0,"title":"PositiveInteger","type":"integer"}},"required":["value"],"type":"object"}},"supportedButtonValues":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"items":{"enum":["pushed","held","double","pushed_2x","pushed_3x","pushed_4x","pushed_5x","pushed_6x","down","down_2x","down_3x","down_4x","down_5x","down_6x","down_hold","up","up_2x","up_3x","up_4x","up_5x","up_6x","up_hold","swipe_up","swipe_down","swipe_left","swipe_right"],"title":"ButtonState","type":"string"},"type":"array"}},"required":[],"type":"object"}}},"commands":{},"ephemeral":false,"id":"button","name":"Button","status":"live","version":1},{"attributes":{"battery":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"unit":{"default":"%","enum":["%"],"type":"string"},"value":{"maximum":100,"minimum":0,"type":"integer"}},"required":["value"],"title":"IntegerPercent","type":"object"}}},"commands":{},"ephemeral":false,"id":"battery","name":"Battery","status":"live","version":1},{"attributes":{"DeviceWatch-DeviceStatus":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"badProperty":{"type":"string"},"deviceScheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"},"reason":{"enum":["INVALID-ACCESS-TOKEN","INTEGRATION-OFFLINE","DEVICE-OFFLINE","DEVICE-DELETED","DEVICE-UNAVAILABLE","DEVICE-UNDISCOVERED"],"type":"string"}},"required":[],"type":"object"},"value":{"enum":["online","offline"],"type":"string"}},"required":["value"],"type":"object"}},"DeviceWatch-Enroll":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"additionalProperties":false,"properties":{"hubHardwareId":{"maxLength":255,"title":"String","type":"string"},"protocol":{"enum":["zigbee","zwave","bluetooth","lan","cloud","unknown","ocf","mqtt"],"title":"DeviceHealthProtocol","type":"string"},"scheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"}},"title":"DeviceHealthEnroll","type":"object"}},"required":["value"],"type":"object"}},"checkInterval":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"badProperty":{"type":"string"},"deviceScheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"},"hubHardwareId":{"pattern":"removed","type":"string"},"offlinePingable":{"enum":["0","1"],"type":"string"},"protocol":{"enum":["zigbee","zwave","bluetooth","lan","cloud","unknown","ocf","mqtt"],"title":"DeviceHealthProtocol","type":"string"}},"required":[],"type":"object"},"unit":{"default":"s","enum":["s"],"type":"string"},"value":{"maximum":604800,"minimum":0,"type":"integer"}},"required":["value"],"type":"object"}},"healthStatus":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"badProperty":{"type":"string"},"deviceScheme":{"enum":["MIXED","TRACKED","UNTRACKED"],"type":"string"},"reason":{"enum":["INVALID-ACCESS-TOKEN","INTEGRATION-OFFLINE","DEVICE-OFFLINE","DEVICE-DELETED","DEVICE-UNAVAILABLE","DEVICE-UNDISCOVERED"],"type":"string"}},"required":[],"type":"object"},"value":{"enum":["online","offline"],"type":"string"}},"required":["value"],"type":"object"}}},"commands":{"ping":{"arguments":[],"name":"ping"}},"ephemeral":false,"id":"healthCheck","name":"Health Check","status":"live","version":1},{"attributes":{"stream":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"title":"JsonObject","type":"object"}},"required":["value"],"type":"object"}}},"commands":{"startStream":{"arguments":[],"name":"startStream"},"stopStream":{"arguments":[],"name":"stopStream"}},"ephemeral":false,"id":"videoStream","name":"Video Stream","status":"live","version":1},{"attributes":{"motion":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"enum":["active","inactive"],"title":"ActivityState","type":"string"}},"required":["value"],"type":"object"}}},"commands":{},"ephemeral":false,"id":"motionSensor","name":"Motion Sensor","status":"live","version":1},{"attributes":{"sound":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"enum":["detected","not detected"],"type":"string"}},"required":["value"],"type":"object"}}},"commands":{},"ephemeral":false,"id":"soundSensor","name":"Sound Sensor","status":"live","version":1},{"attributes":{"clip":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"title":"JsonObject","type":"object"}},"required":["value"],"type":"object"}},"stream":{"enumCommands":[],"schema":{"additionalProperties":false,"properties":{"value":{"title":"JsonObject","type":"object"}},"required":["value"],"type":"object"}}},"commands":{"capture":{"arguments":[{"name":"startTime","optional":false,"schema":{"pattern":"removed","title":"Iso8601Date","type":"string"}},{"name":"captureTime","optional":false,"schema":{"pattern":"removed","title":"Iso8601Date","type":"string"}},{"name":"endTime","optional":false,"schema":{"pattern":"removed","title":"Iso8601Date","type":"string"}},{"name":"correlationId","optional":true,"schema":{"maxLength":255,"title":"String","type":"string"}},{"name":"reason","optional":true,"schema":{"maxLength":255,"title":"String","type":"string"}}],"name":"capture"}},"ephemeral":false,"id":"videoCapture","name":"Video Capture","status":"live","version":1},{"attributes":{"alarm":{"enumCommands":[{"command":"both","value":"both"},{"command":"off","value":"off"},{"command":"siren","value":"siren"},{"command":"strobe","value":"strobe"}],"schema":{"additionalProperties":false,"properties":{"value":{"enum":["both","off","siren","strobe"],"title":"AlertState","type":"string"}},"required":["value"],"type":"object"}}},"commands":{"both":{"arguments":[],"name":"both"},"off":{"arguments":[],"name":"off"},"siren":{"arguments":[],"name":"siren"},"strobe":{"arguments":[],"name":"strobe"}},"ephemeral":false,"id":"alarm","name":"Alarm","status":"live","version":1}]} }, { "STATUS": {"components":{"main":{"alarm":{"alarm":{"timestamp":"2023-12-14T14:13:45.072Z","value":"off"}},"battery":{"battery":{"timestamp":"2023-12-14T14:13:43.966Z","unit":"%","value":38}},"button":{"button":{"timestamp":"2024-02-12T16:54:27.799Z","value":"up"},"numberOfButtons":{"value":null},"supportedButtonValues":{"timestamp":"2023-12-14T14:13:45.072Z","value":["pushed"]}},"healthCheck":{"DeviceWatch-DeviceStatus":{"data":{},"timestamp":"2023-12-14T14:13:43.966Z","value":"online"},"DeviceWatch-Enroll":{"value":null},"checkInterval":{"data":{"deviceScheme":"UNTRACKED","protocol":"cloud"},"timestamp":"2023-12-14T14:13:41.917Z","unit":"s","value":60},"healthStatus":{"value":null}},"motionSensor":{"motion":{"timestamp":"2024-02-12T16:36:09.925Z","value":"inactive"}},"refresh":{},"soundSensor":{"sound":{"timestamp":"2023-12-14T14:13:45.072Z","value":"not detected"}},"switch":{"switch":{"timestamp":"2024-02-03T13:33:26.359Z","value":"on"}},"videoCapture":{"clip":{"value":null},"stream":{"value":null}},"videoStream":{"stream":{"timestamp":"2024-02-03T13:49:18.583Z","value":{"InHomeURL":"","OutHomeURL":""}}}}}} }, { "RULES": {"components":[{"command":{"label":"command: setMotionValue(motion)","name":"setMotionValue","parameters":[{"name":"motion","type":"ENUM"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"motion","capability":"motionSensor","label":"attribute: motion.","properties":{"value":{"title":"ActivityState","type":"string"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"capability":"switch","label":"command: off()","name":"off","type":"command"},"trigger":{"label":"command: off()","name":"off","type":"command"},"type":"hubitatTrigger"},{"command":{"capability":"switch","label":"command: on()","name":"on","type":"command"},"trigger":{"label":"command: on()","name":"on","type":"command"},"type":"hubitatTrigger"},{"command":{"label":"command: setSoundValue(sound)","name":"setSoundValue","parameters":[{"name":"sound","type":"ENUM"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"sound","capability":"soundSensor","label":"attribute: sound.","properties":{"value":{"title":"ActivityState","type":"string"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setBatteryValue(battery)","name":"setBatteryValue","parameters":[{"name":"battery","type":"NUMBER"}],"type":"command"},"mute":true,"trigger":{"additionalProperties":false,"attribute":"battery","capability":"battery","label":"attribute: battery.","properties":{"unit":{"default":"%","enum":["%"],"type":"string"},"value":{"maximum":100,"minimum":0,"type":"integer"}},"required":["value"],"title":"IntegerPercent","type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setSwitchValue(switch)","name":"setSwitchValue","parameters":[{"name":"switch","type":"ENUM"}],"type":"command"},"trigger":{"additionalProperties":false,"attribute":"switch","capability":"switch","label":"attribute: switch.","properties":{"value":{"title":"SwitchState","type":"string"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"label":"command: setHealthStatusValue(healthStatus)","name":"setHealthStatusValue","parameters":[{"name":"healthStatus","type":"ENUM"}],"type":"command"},"mute":true,"trigger":{"additionalProperties":false,"attribute":"healthStatus","capability":"healthCheck","label":"attribute: healthStatus.*","properties":{"value":{"title":"HealthState","type":"string"}},"required":["value"],"type":"attribute"},"type":"smartTrigger"},{"command":{"capability":"refresh","label":"command: refresh()","name":"refresh","type":"command"},"trigger":{"label":"command: refresh()","name":"refresh","type":"command"},"type":"hubitatTrigger"}],"version":1} }]

almulder commented 5 months ago

Have you tried the drive that was already made from here: https://github.com/bloodtick/Hubitat/tree/main/hubiThingsReplica/devices

If it works recommend closing case

evojim commented 4 months ago

Apologies, I completely forgot to reply.

I hadn’t tried that driver, wasn’t aware it existed unfortunately. I’ve now installed it and changed the child device to this driver in Hubitat, but it is still not updating the battery (mines wired so should presumably be 100%, but has been 38% since the day I installed it), and I’m not sure the refresh is working correctly (it certainly isn’t showing a response in the events log when refresh is pressed).

Frustratingly, the SmartThings device appears to get stuck on motion active, and this pulls through to the Hubithings child device. Hitting refresh does nothing to resolve it. Is this something that others have reported?

evojim commented 4 months ago

When I press the refresh button in the SmartThings device page, it returns “Error running command "refresh". 424 Schema validation for partner response failed”

evojim commented 4 months ago

I’m also getting the following warning log in Hubitat, presumably due to the SmartThings refresh error? HubiThings Replica asyncHttpPostCallback setSmartDeviceCommand body:{"commands":[{"component":"main","capability":"refresh","command":"refresh","arguments":[]}]} status:424 reason:Failed Dependency