jqh1 Posted July 20, 2018 Posted July 20, 2018 Well - I'm still new, so I'll ask another question while it's still forgivable hopefully I want to use the ${alert.details} variable in a HTTP GET Network Resource, but I can't seem to get it to resolve at runtime - it works fine in a "Customized Content" email message called from a program, but, in the Network Resource, nothing happens to it. Specifically, I put it into the path, like: /cgi-bin/myscript.cgi?alert=${alert.details} -- not URL-encoded But when the Network Resource gets invoked by a Program when an event happens, on the other side I just see literally "${alert.details}" (whereas in the email custom content, instead I get information about the event that just happened, which is what I want) I've been reading a lot, but haven't yet found an instance where a variable like that is used in a Network Resource - can it be done? Thanks again! edit - if I put the variable in body with a POST request, like: alert=${alert.details} -- at least I get something other than the literal variable name: At: 2018/07/19 9:46:42 PM Value: null but it looks like the information that's going into the email isn't making to the Network Resource (instead it's just "null"). For what it's worth, here's what comes in the email notification invoked by the same Program handling the same event, and this is what I would love to see in the CGI script that's being called by the Network Resource, rather than "Value: null": At: 2018/07/19 9:46:42 PM Program: motion Device: ZW 002 Motion Sensor (ZW002_155) Action: Status Value: On Any suspicions as to what I'm doing wrong?
MWareman Posted July 20, 2018 Posted July 20, 2018 Please post a screenshot. There are some setting that are incompatible with variable substitutions.... principally the ‘Encode URL’ (which *must* be unchecked for variable substitutions to work). Encoding is done by the admin console when the network resource is saved and not at runtime after the substitution is made. Also, if the variable substitute contains any invalid characters without encoding you cannot use that variable for substitution. Other things that cannot be used - and variable with # (to indicate the triggering device). I suspect this variable is in the same category. There is no association between triggering event and the rule that can be used at runtime. Email substitutions do have the triggering device association.
jqh1 Posted July 20, 2018 Author Posted July 20, 2018 thanks!! Here's the Program: If Status 'ZW 002 Motion Sensor' is Off Or Status 'ZW 002 Motion Sensor' is On Then Resource 'myscript' Send Notification to 'localemail' content 'event' Else - No Actions - (To add one, press 'Action') Here are some screenshots. First - is the Custom email Notification that does what I want it to do, and then I have two alternatives I've tried for the Network Resource, one using GET and one using POST In the Custom Notification, the variable ${alert.details} is replaced with this (which is what I want to happen in the Network Resource): " At: 2018/07/19 9:46:42 PM Program: motion Device: ZW 002 Motion Sensor (ZW002_155) Action: Status Value: On" With the GET Resource, my cgi script receives the "${alert.details}" literally as the "data" form field value, and with the POST Resource, the "data" form field value looks like: " At: 2018/07/19 9:46:42 PM Value: null" [by the way - my alternative will be to simply use the email notifications to communicate - I'll direct the custom notification to a script that will extract the data I want and send it on its way. I would prefer to use the Network Resource approach though - because it would be more standardized, and I wouldn't need to add a mail server to my local specified configuration (which doesn't currently include a web server, either, I suppose -- ideal would be for the ISY to send Zero MQ messages with JSON payloads, but I don't see how that could work at the moment)] [and you may have answered the question when you said "There is no association between triggering event and the rule that can be used at runtime. Email substitutions do have the triggering device association." -- i.e., Email Custom Notifications have the runtime context for the substitution but Network Resources don't -- but just in case I don't understand, I'll still hold onto hope]
jqh1 Posted July 21, 2018 Author Posted July 21, 2018 I got the email thing working and then noticed that the ISY supports a bidirectional websocket with the REST API - doh! Anyway, I learned a lot. I'm sure I have never seen such a small plastic box with so much going on in it!
MWareman Posted July 23, 2018 Posted July 23, 2018 Agreed. It’s an amazing little box - once the nuances are understood!It was explained to me as a difference in how the actions are queued. Emails are fast to create so the substitutions happen inline with program execution and do not delay the execution. The result is hen queued to send in another thread. Network rules are queued before substitution and executed not necessarily inline with where the resource was called. So, at substitution time the engine does not know from where the resource was triggered. The reason was that the designer did not want a slow or unresponsive network server to slow down or stall all program execution on the ISY. I know somewhere in the change backlog is a proper queue mechanism for network resources where the substitution happens before queuing so that these variable values can be used.
jqh1 Posted July 24, 2018 Author Posted July 24, 2018 well, the notification email-as-local-system message is doing the job pretty well - pretty much instantaneous. I'll probably just let that ride for a while because everything's working. Thanks again!
Recommended Posts
Archived
This topic is now archived and is closed to further replies.