I think the problem lies in the way the logic in node-red works. Following your logic above it is fired and forgotten. I want it to be dunamic. Thus if the sun is set AND the blinds are moving between 20-40% I want the light to go on an off…
I have this logic currently running in Vera in “PLEG” and this works well over years. But I want to move all logic to node-red…
EDIT:
I think I can only solve this question if I start with trying to get an answer on the question how to use a state node and output on the “current_ position” entity. That I can’t get to work…
This output I get as a total output from the state node: {"topic":"cover.143","payload":"open","data":{"entity_id":"cover.143","old_state":{"entity_id":"cover.143","state":"open","attributes":{"current_position":100,"Vera Device Id":143,"friendly_name":"cover","supported_features":15},"last_changed":"2020-10-31T10:39:01.262763+00:00","last_updated":"2020-10-31T15:30:14.535922+00:00","context":{"id":"91cacf243be596f2114e257dcd103f49","parent_id":null,"user_id":null},"original_state":"open","timeSinceChangedMs":17488574},"new_state":{"entity_id":"cover.143","state":"open","attributes":{"current_position":100,"Vera Device Id":143,"friendly_name":"cover","supported_features":15},"last_changed":"2020-10-31T10:39:01.262763+00:00","last_updated":"2020-10-31T15:30:14.535922+00:00","context":{"id":"91cacf243be596f2114e257dcd103f49","parent_id":null,"user_id":null},"original_state":"open","timeSinceChangedMs":17488574}},"_msgid":"e0d4dc9a.98107"}
So the main trigger is cover position and depending on the Sun position a different action to be taken. Maybe start with a trigger state node that fires when the cover goes below 20% and put a timeswitch node before the service call node.
hi all, thanks for responding and thinking along. The main question in this case was how to “act” on the attribute rather than on the state. i think I did it. High Level looks like:
But whatever I try, setting the cover to a position (via home assistant) etc. I wanted to make my flow simpler and add that to the state node like this:
But I keep getting “NaN” at the node (with or without the json code)
my guess would be because you have state type as number and the state of the cover is becoming unavailable which is unable to parsed to a number so you get NaN
I’m back… a lot of things changed. Me, Node-Red, Homeassistant and my zwave (OZW to ZwaveJS) and my automation broke…
Whatever I try I can’t get it back working again and I ended up on my own post
1st question: I want to simply check the state of a cover which is still reported under data.attributes.current_position. But for whatever reason this does not output correctly anymore after “a change”.
The above posts helped me figure out my use case (Google Calendar offset attribute) with a little trial and error. To help anyone with an Event State node, this is what worked for me:
If state = JSONata AND Expression = $entity().attributes.offset_reached = true
State type = boolean
Output properties: msg.data = event data
Ignore state change event when: Uncheck → “Current state equals previous state” (NOTE - all were unchecked)
Note that the debug output shows following structure:
Object
> data
> new_state
> attributes
> offset_payload
Using your example, I’ve got my state comparison working. But I can’t figure out how to get the payload state that’s displayed at the bottom of the node (bottom of the screenshot below) to reflect that specific attribute. Would you happen to know what I need to adjust or is this just not supported?
Have been struggling with the current state node for a while now, and maybe someone here could assist me.
I’m trying to check a attribute as the other before me.
Have this config:
This is the entity attributes:
But the state node still send out on the “false” output.
I suspect that if Netflix in your attribute is a string, then the JSONata literal in your predicate should be ‘quoted’.
data.attributes.app_id = ‘Netflix’
If you are interested in the detail, then JSONata does not throw an error when it does not find anything. Netflix (unquoted so not a string literal) is treated as a key to lookup. Not finding that key, it returns nothing (just does not return anything at all), and in a predicate test something=nothing is always false, so the predicate will always return false.
When using the JSONata rule on the left, the right hand side needs to return a predicate. Using JSONata for the expression the entity attribute data needs to be obtained using $entity() to get the data first.
Sadly I don’t have your media_player and I don’t have your entity data to examine, however setting this up for myself this morning it all works nicely.
The entity is a media player (nest hub, now playing radio).
Using the output properties, I am sending the entire ‘entity’ object to msg.data. In the debug window I can see all the msg.data, and the attributes, and the app_id which is a string ‘12F05308’.
In the JSONata expression for the JSONata test, the $entity().attributes.app_id gets the entity data, and the attribute value for app_id.
In the JSONata expression the left hand side evaluates to ‘12F05308’ as a string. The right hand side is the same, therefore this expression evaluates as true. The output is on the upper ‘true’ output.
I can only suggest that you would benefit from doing something similar so as to check the entity value (as seen here in Node-RED and not in HA) to ensure that your app_id is actually ‘Netflix’. If it is, then I cannot see why this will not work.
If you find that, in HA the entity looks as if app_id is ‘Netflix’, but in Node-RED the entity app_id is something else, then this is an issue with Node-RED not being updated with the HA state correctly.