Thank you for the tag, @JDRoberts
@Jun_Li, yes, the dates shared here correspond to the Groovy-based integrations (SmartApps and DTHs) in the IDE. The endpoint app registered in the Dev Workspace isnât part of that environment.
yes, its very ugly because itâs an API. Itâs not really meant to be used directly. Instead it should have an application for the UI to call the API. Routines in the mobile app does this. But there has yet to be a more complex UI for Rules API created.
Isnât that what âRoutine Creatorâ (beta) is supposed to be?
The app needs a way to group or sort routines by room or something, itâs not great.
Makes sense; the problem being that one rules UI is deprecated without a replacement being made available⊠Folks will undoubtedly leave the platform in this case, chose your poison so to speak!
gst - whereâs the âRoutine Creatorâ? I think the app needs lots of things but to be honest thereâs a UI/UX challenge in not making it overly complicated for new users.
Thanks - Just found it in another thread
Depends how you choose to use it. Currently I write Rules in raw YAML in text files as the CLI will consume those directly. I find them quite readable, although quite spaced out, and with nesting they get awfully wide. It meets my needs at the moment.
However Rules are just simple data objects. A combination of however you prefer to describe arrays and key-value pairs. They are defined in JSON because the SmartThings API consumes and outputs JSON, but you can write them in any language you like that supports those constructs. There is a strong chance you can trivially export to JSON given its ubiquity. You can write them as scripts that automatically install the Rule if you really want.
How do we get access to the closed beta? Might be helpful to many of usâŠ
Its a depricated project.
Look at post 662
Multi gang switch.
I have a 2 gang Zemismart switch in my kitchen currently using a DTH.
When this migrates to edge will this now move to a single switch with two controls, and will I lose the ability to control both lights from Alexa?
As it stands now, only the master component will be exposed to Alexa.
The workaround is to create a virtual device for each subcomponent, use routines to keep those in sync with the actual switches, and have Alexa control the virtual devices.
Itâs annoying, and itâs extra work, but the problem was reported last year and isnât fixed yet, so Iâm not holding my breath on it.
Thanks, workaround is a bit painful, thankfully I only have one multigang switch at the moment
@Mariano_Colmenarejo ZigBee switch with childâs Mc Edge Driver is probably what you are looking for. It will give you 2 separate switches if that is what you want. It works well with my 3gang Zemismart switch.
Thanks for chiming in - I can see this as quite powerful. I have the cli setup this week but didnât really digest everything just yet; I took a look at the example using Postman but given I like to keep things simple Iâm reluctant to go down this path. A yaml file with cli injection would be a good place to start playing around. Are there any decent examples (or tutorials yet); this all needs a modicum of comprehension in terms of exploring device-id, things that can be changed etc⊠(Iâm not there yet!)
A simple task Iâm looking to complete, I turn on a light based on motion detection, after 10 minutes it switches off (I have kids!), however, if I turn on the light switch manually it stays on. I believe a variable is needed to store the state (e.g. manualActivation == True/False). If Iâm reading the threads correctly this canât be done as there are no variables in the rules engine?
thanks for that, will that be deployed automagically when groovy is shut down or will i need to take action then?
You can use a virtual switch to store status
OK, Thanks. I keep reading about these virtual switches (which I have in the IDE) but I have no idea how to implement them in the new scheme of things? Deeper down the rabbit hole I go!
There arenât any variables in the Rules but you can use a virtual switch to hold a binary status. My approach to this problem actually uses a virtual motion sensor as it simplifies the logic. I turn a light on if there is motion between fifteen minutes before sunset and and thirty minutes after sunrise. I also turn the light off if motion goes inactive as my Ikea motion sensors give me a three minute delay that suits me just fine. This is actually my code, such as it is âŠ
name: '[R] Motion: Landing'
actions:
- if:
and:
- equals:
left:
device:
devices:
- &landing_motion xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- &landing_virtual xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
component: main
capability: motionSensor
attribute: motion
right:
string: active
aggregation: Any
- between:
value:
time:
reference: Now
start:
time:
reference: Sunset
offset:
value:
integer: -15
unit: Minute
end:
time:
reference: Sunrise
offset:
value:
integer: 30
unit: Minute
then:
- command:
devices:
- &landing_shelf_light xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
commands:
- component: main
capability: switch
command: on
else:
- if:
and:
- equals:
left:
device:
devices:
- *landing_motion
- *landing_virtual
component: main
capability: motionSensor
attribute: motion
right:
string: inactive
aggregation: All
- between:
value:
time:
reference: Now
start:
time:
reference: Sunset
offset:
value:
integer: -15
unit: Minute
end:
time:
reference: Sunrise
offset:
value:
integer: 34
unit: Minute
then:
- command:
devices:
- *landing_shelf_light
commands:
- component: main
capability: switch
command: off
My buttons have push, held and double options. I use the push for a toggle on/off on the motion-controlled light. It does look like there is such a thing as a toggle command but if so it doesnât seem to be available to the punters yet. Iâve stripped down my actual code here âŠ
name: '[R] Button: Landing'
actions:
- if:
equals:
left:
device:
devices:
- &landing_button xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
component: main
capability: button
attribute: button
right:
string: pushed
then:
- if:
equals:
left:
device:
devices:
- &landing_shelf_light xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
component: main
capability: switch
attribute: switch
trigger: Never
right:
string: off
then:
- command:
devices:
- &landing_virtual xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
commands:
- component: main
capability: switch
command: on
- command:
devices:
- *landing_shelf_light
commands:
- component: main
capability: switch
command: on
else:
- command:
devices:
- *landing_virtual
commands:
- component: main
capability: switch
command: off
- command:
devices:
- *landing_shelf_light
commands:
- component: main
capability: switch
command: off
The âlanding_virtualâ virtual motion sensor has both switch and motion capabilities so I can treat it like a switch in this rule.
I actually have multiple copies of this rule, one for each button I have doing the same thing. In webCoRE you can differentiate between âany button is pushedâ (condition) and âany button gets pushedâ (trigger) but if there is a way of doing the same with Rules I hadnât spotted it at the time.
Last, but by no means least. If the light is turned off by any mechanism (app, ActionTiles, Google etc) I need to clear the manual override.
name: '[R] Virtual: Landing'
actions:
- if:
and:
- equals:
left:
device:
devices:
- &landing_shelf_light xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
component: main
capability: switch
attribute: switch
right:
string: off
- equals:
left:
device:
devices:
- &landing_virtual xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
component: main
capability: motionSensor
attribute: motion
trigger: Never
right:
string: active
then:
- command:
devices:
- *landing_virtual
commands:
- component: main
capability: switch
command: off
I wrote âI could probably turn off triggering on the motion sensor there, but that was documented after I last pondered the rule at all.â but it turns out I had pondered it and had turned it off. I do have some unnecessary triggering going on somewhere.
While I am here, here is how I turn off a switch if it has been running for 45 minutes. You can do something similar to turn off lights if motion remains inactive for a while.
name: '[R] Fan Timer: Bedroom'
actions:
- if:
remains:
equals:
left:
device:
devices:
- &bedroom_fan xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
component: main
capability: switch
attribute: switch
right:
string: on
duration:
value:
integer: 45
unit: Minute
then:
- command:
devices:
- *bedroom_fan
commands:
- component: main
capability: switch
command: off
The [R] in the name of the rule just helps me identify rules in the app history.
You can use it to make a new virtual device with Edge drive [ST Edge] vEdge Creator: a virtual device generator for end users
but maybe your question wasnât how to make them, but how to implement them in the new scheme of things sorry for that I donât have an answer, still too far for me
No, it will not be an automatic switch because it is a community written driver.
But once the automatic transition occurs it will be easy to switch over to the community driver.