domoticafacilconjota / capitulos

Copy y paste del canal
39 stars 50 forks source link

[NuevoFlow] Subflow para saber si hay alguien en casa [Resuelto] #70

Closed gtrabanco closed 2 years ago

gtrabanco commented 2 years ago

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 devuelve on si evalúa como verdadero en la primera salida, off si evalua como falso en la segunda salida y devuelve los objetos person 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.

Screenshot 2021-12-08 at 01 49 01

Screenshot 2021-12-08 at 01 53 54

Código

[{"id":"a88bf4f353498b06","type":"subflow","name":"People @ home","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"}]}}}],"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 maximumPeople=msg.people.length;\nvar people = [];\nvar payload = \"off\";\n\nmsg.people.map((p) => {\n    if (p.state == \"home\") {\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}]

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.

gtrabanco commented 2 years ago

Version 2

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}]

Screenshot 2021-12-08 at 13 45 48