Closed gtrabanco closed 2 years ago
Es el mismo subflow pero permite hacer lo mismo con cualquier localización, no solo si está en casa.
[{"id":"a88bf4f353498b06","type":"subflow","name":"People @ Location","info":"","category":"","in":[{"x":60,"y":200,"wires":[{"id":"3bd3d58638b67231"}]}],"out":[{"x":820,"y":120,"wires":[{"id":"a5ab5e6c9de58592","port":0}]},{"x":820,"y":200,"wires":[{"id":"a5ab5e6c9de58592","port":1}]},{"x":820,"y":280,"wires":[{"id":"5a3a701ab57f12db","port":1}]}],"env":[{"name":"req_people","type":"str","value":"all","ui":{"icon":"font-awesome/fa-user","label":{"en-US":"Required People"},"type":"select","opts":{"opts":[{"l":{"en-US":"all"},"v":"all"},{"l":{"en-US":"any"},"v":"any"},{"l":{"en-US":"none"},"v":"none"}]}}},{"name":"req_location","type":"str","value":"home","ui":{"label":{"en-US":"Location to check"},"type":"input","opts":{"types":["str"]}}}],"meta":{"module":"people_home","version":"1.0.0","author":"Gabriel Trabanco Llano <gtrabanco@users.noreply.github.com>","desc":"Used to get if there are people at home."},"color":"#DDAA99","icon":"font-awesome/fa-home","status":{"x":820,"y":380,"wires":[{"id":"ac98ef934def58c9","port":0},{"id":"97de79323b17caca","port":0}]}},{"id":"ac98ef934def58c9","type":"change","z":"a88bf4f353498b06","name":"on","rules":[{"t":"set","p":"payload","pt":"msg","to":"on","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":340,"wires":[[]]},{"id":"97de79323b17caca","type":"change","z":"a88bf4f353498b06","name":"off","rules":[{"t":"set","p":"payload","pt":"msg","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":420,"wires":[[]]},{"id":"3bd3d58638b67231","type":"ha-get-entities","z":"a88bf4f353498b06","name":"","server":"2934e1c9.95a54e","version":0,"rules":[{"property":"entity_id","logic":"starts_with","value":"person","valueType":"str"}],"output_type":"array","output_empty_results":false,"output_location_type":"msg","output_location":"people","output_results_count":1,"x":190,"y":200,"wires":[["5a3a701ab57f12db"]]},{"id":"5a3a701ab57f12db","type":"function","z":"a88bf4f353498b06","name":"","func":"const checkOption=env.get(\"req_people\");\nconst requiredLocation=env.get(\"req_location\") || \"home\";\nconst maximumPeople=msg.people.length;\nvar people = [];\nvar payload = \"off\";\n\nmsg.people.map((p) => {\n if (p.state == requiredLocation) {\n people.push(p.entity_id);\n }\n})\n\nswitch(checkOption) {\n case \"all\":\n if(maximumPeople == people.length) {\n payload = \"on\";\n }\n break;\n \n case \"any\":\n if(people.length > 0) {\n payload = \"on\";\n }\n break;\n \n case \"none\":\n if (people.length == 0) {\n payload = \"on\";\n }\n break;\n}\n\nreturn [ {payload}, {people} ];\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":200,"wires":[["a5ab5e6c9de58592"],[]]},{"id":"a5ab5e6c9de58592","type":"switch","z":"a88bf4f353498b06","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":530,"y":160,"wires":[["ac98ef934def58c9"],["97de79323b17caca"]]},{"id":"2934e1c9.95a54e","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]
Explicación
Este subflow cuenta el número de entidades que hay del tipo
person
y a partir de la entrada que le definamos de si queremos que este todo el mundo en casa (all
), alguno (any
) o ninguno (none
) nos devuelveon
si evalúa como verdadero en la primera salida,off
si evalua como falso en la segunda salida y devuelve los objetosperson
como un array de las personas en casa en la tercera salida (este último valor siempre devuelve algo, puede ser un array vacío si no hay nadie en casa.Código
Notas
Este subflow está resuelto y es parte de una automatización (ver issue #71 ) para contar en todo momento el número de personas en casa que yo uso para que se encienda la aspiradora.
Cualquier duda sobre la automatización o propuestas de mejoras son bienvenidas.