[RELEASE] HubiThings Replica

Can you explain how its working? Where to start? I have a ST hub with some devices (real) and some virtual devices... I have HE hub too with nothing else than my phone and presence sensor like life360...
Is there a kind of video or something to see what needed to be done?

@Bloodtick_Jones One more request, any idea about the contact sensor replica driver.

Did you try the Replica Multipurpose Sensor? That is designed around the ST native sensor which is primary as a contact. No idea why they named it as such. Probably should rename it...

1 Like

Start at the top!

The Arlo capabilties data information is below

capabilities: {"components":[{"id":"switch","version":1,"status":"live","name":"Switch","ephemeral":false,"attributes":{"switch":{"schema":{"type":"object","properties":{"value":{"title":"SwitchState","type":"string","enum":["on","off"]}},"additionalProperties":false,"required":["value"]},"enumCommands":[{"command":"on","value":"on"},{"command":"off","value":"off"}]}},"commands":{"off":{"name":"off","arguments":[]},"on":{"name":"on","arguments":[]}}},{"id":"refresh","version":1,"status":"live","name":"Refresh","ephemeral":false,"attributes":{},"commands":{"refresh":{"name":"refresh","arguments":[]}}},{"id":"button","version":1,"status":"live","name":"Button","ephemeral":false,"attributes":{"button":{"schema":{"type":"object","properties":{"value":{"title":"ButtonState","type":"string","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"]}},"additionalProperties":false,"required":["value"]},"enumCommands":[]},"numberOfButtons":{"schema":{"type":"object","properties":{"value":{"title":"PositiveInteger","type":"integer","minimum":0}},"additionalProperties":false,"required":["value"]},"enumCommands":[]},"supportedButtonValues":{"schema":{"type":"object","properties":{"value":{"type":"array","items":{"title":"ButtonState","type":"string","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"]}}},"additionalProperties":false,"required":[]},"enumCommands":[]}},"commands":{}},{"id":"battery","version":1,"status":"live","name":"Battery","ephemeral":false,"attributes":{"battery":{"schema":{"title":"IntegerPercent","type":"object","properties":{"value":{"type":"integer","minimum":0,"maximum":100},"unit":{"type":"string","enum":["%"],"default":"%"}},"additionalProperties":false,"required":["value"]},"enumCommands":[]}},"commands":{}},{"id":"healthCheck","version":1,"status":"live","name":"Health Check","ephemeral":false,"attributes":{"checkInterval":{"schema":{"type":"object","properties":{"value":{"type":"integer","minimum":0,"maximum":604800},"unit":{"type":"string","enum":["s"],"default":"s"},"data":{"type":"object","additionalProperties":false,"required":[],"properties":{"deviceScheme":{"type":"string","enum":["MIXED","TRACKED","UNTRACKED"]},"hubHardwareId":{"type":"string","pattern":"^[0-9a-fA-F]{4}$"},"protocol":{"title":"DeviceHealthProtocol","type":"string","enum":["zigbee","zwave","bluetooth","lan","cloud","unknown","ocf","mqtt"]},"offlinePingable":{"type":"string","enum":["0","1"]},"badProperty":{"type":"string"}}}},"additionalProperties":false,"required":["value"]},"enumCommands":[]},"healthStatus":{"schema":{"type":"object","properties":{"value":{"type":"string","enum":["online","offline"]},"data":{"type":"object","additionalProperties":false,"required":[],"properties":{"deviceScheme":{"type":"string","enum":["MIXED","TRACKED","UNTRACKED"]},"badProperty":{"type":"string"}}}},"additionalProperties":false,"required":["value"]},"enumCommands":[]},"DeviceWatch-Enroll":{"schema":{"type":"object","properties":{"value":{"title":"DeviceHealthEnroll","type":"object","additionalProperties":false,"properties":{"scheme":{"type":"string","enum":["MIXED","TRACKED","UNTRACKED"]},"protocol":{"title":"DeviceHealthProtocol","type":"string","enum":["zigbee","zwave","bluetooth","lan","cloud","unknown","ocf","mqtt"]},"hubHardwareId":{"title":"String","type":"string","maxLength":255}}}},"additionalProperties":false,"required":["value"]},"enumCommands":[]},"DeviceWatch-DeviceStatus":{"schema":{"type":"object","properties":{"value":{"type":"string","enum":["online","offline"]},"data":{"type":"object","additionalProperties":false,"required":[],"properties":{"deviceScheme":{"type":"string","enum":["MIXED","TRACKED","UNTRACKED"]},"badProperty":{"type":"string"}}}},"additionalProperties":false,"required":["value"]},"enumCommands":[]}},"commands":{"ping":{"name":"ping","arguments":[]}}},{"id":"videoStream","version":1,"status":"live","name":"Video Stream","ephemeral":false,"attributes":{"stream":{"schema":{"type":"object","properties":{"value":{"title":"JsonObject","type":"object"}},"additionalProperties":false,"required":["value"]},"enumCommands":[]}},"commands":{"stopStream":{"name":"stopStream","arguments":[]},"startStream":{"name":"startStream","arguments":[]}}},{"id":"motionSensor","version":1,"status":"live","name":"Motion Sensor","ephemeral":false,"attributes":{"motion":{"schema":{"type":"object","properties":{"value":{"title":"ActivityState","type":"string","enum":["active","inactive"]}},"additionalProperties":false,"required":["value"]},"enumCommands":[]}},"commands":{}},{"id":"soundSensor","version":1,"status":"live","name":"Sound Sensor","ephemeral":false,"attributes":{"sound":{"schema":{"type":"object","properties":{"value":{"type":"string","enum":["detected","not detected"]}},"additionalProperties":false,"required":["value"]},"enumCommands":[]}},"commands":{}},{"id":"videoCapture","version":1,"status":"live","name":"Video Capture","ephemeral":false,"attributes":{"stream":{"schema":{"type":"object","properties":{"value":{"title":"JsonObject","type":"object"}},"additionalProperties":false,"required":["value"]},"enumCommands":[]},"clip":{"schema":{"type":"object","properties":{"value":{"title":"JsonObject","type":"object"}},"additionalProperties":false,"required":["value"]},"enumCommands":[]}},"commands":{"capture":{"name":"capture","arguments":[{"name":"startTime","optional":false,"schema":{"title":"Iso8601Date","type":"string","pattern":"^(?:[1-9]\\d{3}-?(?:(?:0[1-9]|1[0-2])-?(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])-?(?:29|30)|(?:0[13578]|1[02])-?31)|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-?02-?29)T(?:[01]\\d|2[0-3]):?[0-5]\\d:?[0-5]\\d(?:\\.\\d{3})?(?:Z|[+-][01]\\d(?::?[0-5]\\d)?)$"}},{"name":"captureTime","optional":false,"schema":{"title":"Iso8601Date","type":"string","pattern":"^(?:[1-9]\\d{3}-?(?:(?:0[1-9]|1[0-2])-?(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])-?(?:29|30)|(?:0[13578]|1[02])-?31)|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-?02-?29)T(?:[01]\\d|2[0-3]):?[0-5]\\d:?[0-5]\\d(?:\\.\\d{3})?(?:Z|[+-][01]\\d(?::?[0-5]\\d)?)$"}},{"name":"endTime","optional":false,"schema":{"title":"Iso8601Date","type":"string","pattern":"^(?:[1-9]\\d{3}-?(?:(?:0[1-9]|1[0-2])-?(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])-?(?:29|30)|(?:0[13578]|1[02])-?31)|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-?02-?29)T(?:[01]\\d|2[0-3]):?[0-5]\\d:?[0-5]\\d(?:\\.\\d{3})?(?:Z|[+-][01]\\d(?::?[0-5]\\d)?)$"}},{"name":"correlationId","optional":true,"schema":{"title":"String","type":"string","maxLength":255}},{"name":"reason","optional":true,"schema":{"title":"String","type":"string","maxLength":255}}]}}},{"id":"alarm","version":1,"status":"live","name":"Alarm","ephemeral":false,"attributes":{"alarm":{"schema":{"type":"object","properties":{"value":{"title":"AlertState","type":"string","enum":["both","off","siren","strobe"]}},"additionalProperties":false,"required":["value"]},"enumCommands":[{"command":"both","value":"both"},{"command":"off","value":"off"},{"command":"siren","value":"siren"},{"command":"strobe","value":"strobe"}]}},"commands":{"siren":{"name":"siren","arguments":[]},"strobe":{"name":"strobe","arguments":[]},"off":{"name":"off","arguments":[]},"both":{"name":"both","arguments":[]}}}]}
commands: {"setSwitchValue":[{"name":"switch*","type":"ENUM"}],"setSwitchOff":[],"setSwitchOn":[],"setMotionValue":[{"name":"motion*","type":"ENUM"}],"setMotionActive":[],"setMotionInactive":[],"setSoundValue":[{"name":"sound*","type":"ENUM"}],"setSoundDetected":[],"setSoundNotDetected":[],"setBatteryValue":[{"name":"battery*","type":"NUMBER"}],"setHealthStatusValue":[{"name":"healthStatus*","type":"ENUM"}]}
description: {"deviceId":"30fb90d7-a507-4a38-80d3-f58ae0a9f895","name":"c2c-arlo-wired-video-doorbell-switch-battery","label":"Front Door Doorbell","manufacturerName":"SmartThings","presentationId":"SmartThings-smartthings-c2c_arlo_doorbell_switch_battery","locationId":"6deb2ff0-5ece-4c2c-9709-fc4e2819c574","ownerId":"573997fb-413b-4478-b153-f750618ef88e","roomId":"fe89c8a7-7a39-4465-99b5-0db72a4ff4ad","components":[{"id":"main","label":"main","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":[{"name":"Camera","categoryType":"manufacturer"}]}],"createTime":"2023-01-01T17:57:32.438Z","profile":{"id":"82c7e00a-b03b-4de0-8b79-aec4db3375e0"},"viper":{"manufacturerName":"Arlo","modelName":"AVD1001B"},"type":"VIPER","restrictionTier":0,"allowed":null}
health: {"deviceId":"30fb90d7-a507-4a38-80d3-f58ae0a9f895","state":"ONLINE","lastUpdatedDate":"2023-01-06T12:56:53.039Z"}
replica: {"deviceId":"30fb90d7-a507-4a38-80d3-f58ae0a9f895","replicaId":714,"type":"child"}
rules: {"version":1,"components":[ {"trigger":{"type":"attribute","properties":{"value":{"title":"ActivityState","type":"string"}},"additionalProperties":false,"required":["value"],"capability":"motionSensor","attribute":"motion","label":"attribute: motion.*"},"command":{"name":"setMotionValue","label":"command: setMotionValue(motion*)","type":"command","parameters":[{"name":"motion*","type":"ENUM"}]},"type":"smartTrigger"}, {"trigger":{"name":"off","label":"command: off()","type":"command"},"command":{"name":"off","type":"command","capability":"switch","label":"command: off()"},"type":"hubitatTrigger"}, {"trigger":{"name":"on","label":"command: on()","type":"command"},"command":{"name":"on","type":"command","capability":"switch","label":"command: on()"},"type":"hubitatTrigger"}, {"trigger":{"type":"attribute","properties":{"value":{"title":"ActivityState","type":"string"}},"additionalProperties":false,"required":["value"],"capability":"soundSensor","attribute":"sound","label":"attribute: sound.*"},"command":{"name":"setSoundValue","label":"command: setSoundValue(sound*)","type":"command","parameters":[{"name":"sound*","type":"ENUM"}]},"type":"smartTrigger"}, {"trigger":{"title":"IntegerPercent","type":"attribute","properties":{"value":{"type":"integer","minimum":0,"maximum":100},"unit":{"type":"string","enum":["%"],"default":"%"}},"additionalProperties":false,"required":["value"],"capability":"battery","attribute":"battery","label":"attribute: battery.*"},"command":{"name":"setBatteryValue","label":"command: setBatteryValue(battery*)","type":"command","parameters":[{"name":"battery*","type":"NUMBER"}]},"type":"smartTrigger","mute":true}, {"trigger":{"type":"attribute","properties":{"value":{"title":"SwitchState","type":"string"}},"additionalProperties":false,"required":["value"],"capability":"switch","attribute":"switch","label":"attribute: switch.*"},"command":{"name":"setSwitchValue","label":"command: setSwitchValue(switch*)","type":"command","parameters":[{"name":"switch*","type":"ENUM"}]},"type":"smartTrigger"}, {"trigger":{"type":"attribute","properties":{"value":{"title":"HealthState","type":"string"}},"additionalProperties":false,"required":["value"],"capability":"healthCheck","attribute":"healthStatus","label":"attribute: healthStatus.*"},"command":{"name":"setHealthStatusValue","label":"command: setHealthStatusValue(healthStatus*)","type":"command","parameters":[{"name":"healthStatus*","type":"ENUM"}]},"type":"smartTrigger","mute":true} ]}
status: {"components":{"main":{"button":{"button":{"value":"up","timestamp":"2023-01-06T12:56:51.615Z"},"numberOfButtons":{"value":null},"supportedButtonValues":{"value":["pushed"],"timestamp":"2023-01-01T17:57:37.880Z"}},"videoCapture":{"stream":{"value":null},"clip":{"value":null}},"videoStream":{"stream":{"value":null}},"healthCheck":{"checkInterval":{"value":60,"unit":"s","data":{"deviceScheme":"UNTRACKED","protocol":"cloud"},"timestamp":"2023-01-01T17:57:32.619Z"},"healthStatus":{"value":null},"DeviceWatch-Enroll":{"value":null},"DeviceWatch-DeviceStatus":{"value":"online","data":{},"timestamp":"2023-01-01T17:57:37.296Z"}},"alarm":{"alarm":{"value":"off","timestamp":"2023-01-01T17:57:37.880Z"}},"refresh":{},"soundSensor":{"sound":{"value":"not detected","timestamp":"2023-01-01T17:57:37.880Z"}},"motionSensor":{"motion":{"value":"inactive","timestamp":"2023-01-06T19:47:53.182Z"}},"battery":{"battery":{"value":35,"unit":"%","timestamp":"2023-01-06T12:56:51.299Z"}},"switch":{"switch":{"value":"on","timestamp":"2023-01-01T17:57:37.880Z"}}}}}
triggers: {"refresh":[]}

Hope that helps

1 Like

Beta Code Release 1.2.10 posted.

  • Update to object command to support color bulbs. Thanks to @djgutheinz for the patch!

How to update:
Load HubiThings Replica first:
https://raw.githubusercontent.com/bloodtick/Hubitat/main/hubiThingsReplica/hubiThingsReplica.groovy

Load HubiThings OAuth next (not required if you have 1.2.09):
https://raw.githubusercontent.com/bloodtick/Hubitat/main/hubiThingsReplica/hubiThingsOauth.groovy

@djgutheinz Replica Device Handler Repo:
Location: https://github.com/DaveGut/HubitatActive/tree/master/HubiThingsReplica%20Drivers

He has designed some amazing color bulb device handlers with more 'HubiThings' to come.

6 Likes

@bradford.clarke There are the drivers you needed!

2 Likes

For the device code of hubitat, do you mean the drivers section? Because in devices section I only have the option to add new device in list or by brand… just wanted to be sure that its not in virtual device or something!

Thanks!

Good catch. That line of the instructions probably should say "Drivers Code" instead of Device Code. Hope that helps.

2 Likes

Another thing, how do we know if some new drivers are added or have new version?

In theory once it is added to HPM it will notify you. It will be intersting wrangling the drivers together for it though.

2 Likes

I'm just starting out on this and cannot seem to get past this step. I get this message when clicking on the link:

400

Bad Request
invalid_request : Invalid query parameter value for state

※ IAMUSSauseast1_1673201600501_99999-5542522526.999

Also, what is "PAT"?

I'm really just trying to set this up so I can use SmartThings app in my phone as the presence sensor because the HE presence sensor doesn't work. (Even though it should and nobody seems to be able to figure out why it doesn't.)

A PAT is a Personal Access Token. PATs are required to access the SmartThingss API, which this integration requires. I"m not sure why that link isn't working at the moment, but you can get one by following this link;

Hey @bthrock thanks for this. It was enough to get me un-stuck. I managed to fumble my way through getting my "SmartThings iPhone" added into HE and it was available to update my rules. So with any luck next time I leave the house ST will trigger the HE rule. And hopefully when I return (within 30 minutes of sunset) another HE rule will trigger.

1 Like

OK, next question: Does anyone know of any replica drivers for a Samsung SmartTV?

1 Like

One is forthcoming.

There is a community driver already that provides you with local control augmented by SmartThings.

3 Likes

Fixed. Not sure what happened there. But thank you for flagging it.

I could not find it.

2 Likes