Is there any way to use newState in the UI rules?
I love the UI rules in OH3 - these are so easy to read, write and manage. I was looking to write a rule to sync my wifi plugs to my hue lights - I know this can be few lines of codes in rule DSL with newState, etc. but in the UI rules, newState doesn’t seem to be there. Would there be another easy way to copy state changes of one switch with another one?
Do you refer to the blocklies and event.newState? Then the answer is “soon”. I have just implemented it and it is waiting to be reviewed and therefore released soon.
In that case no, that’s not supported and I know of no one who is working on support for that. code less rules are intended to be for only the most very basic of rules. If we add all the little “but can we do this, and what about adding that” type stuff to it it doesn’t take too long before we end up with Blockly anyway.
Not correct. Make a rule. Under “Then” choose “Run Script” and from there choose “Design with Blockly”. It’s rare that one would write a rule that calls other rules. That’s creating a Script Action. Calling another rule (e.g. something listed under Settings → Scripts) is done by choosing “Other rules” as the action.
Unfortunately the word “Script” has two meanings here which causes confusion.
The Settings → Script section is just a place to put a special class of rules that consist of only a single Script Action with no triggers or conditions.
They can be useful to experiment with. They can be useful to be called from other rules. And they definitely are a good place to keep a library of examples that you build up over time.
and then create a script named “helloWorld” and add the following code
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
logger.info('helloWorld was called')
logger.info('Params are='+context.getAttribute('myKey1'))
logger.info('Params are='+context.getAttribute('myKey2'))
When triggering the blockly rule you will see the following in the log
[org.openhab.rule.helloWorld ] - helloWorld was called
[org.openhab.rule.helloWorld ] - Params are=10
[org.openhab.rule.helloWorld ] - Params are=45
Btw, I am also a pretty experienced Java Developer and used DSL rules for quite a number of rules but I moved to the blocklies for many of my rules (not saying all) because most of the rules are rather simple and in these case the blocklies have the big advantage that you can build them very quickly whereas with DSLs can you can easily end up having syntax errors or typos. So for “simple” stuff (even though complex things are doable) I used the blocklies, for complex things I keep my DSLs.
PS: @rlkoshak Maybe we should add a Block that allows to get context-values (context getAttribute) because then we could have even written the script with blocklies. What do you think?
Absolutely, though that’s a pretty advanced capability to I wasn’t going to push for it until later. It is also one of the things that changes between Nashorn and JScripting and may further change in JSScripting and figured we should wait for that to settle down so there is less rework in Blockly later.
But it’s a super easy add I think so it’s up to you if you want to add it now.