AutomationDataset/tjuuljensen/automation-descriptions.json

171 lines
30 KiB
JSON

[
{
"id": "'Battery Alert: Notification'",
"result": {
"structured": "TRIGGER: When the scheduled time input_datetime.low_battery_notification_check [input_datetime.low_battery_notification_check] is reached OR When battery alert threshold min [input_number.battery_alert_threshold_min] OR battery alert threshold max [input_number.battery_alert_threshold_max] changes state OR When the time pattern matches every 15 minutes (minutes: /15, seconds: 0) OR When notifier format [input_select.notifier_format] changes state OR When low batteries [input_boolean.low_batteries] changes state (enabled). CONDITIONS: ( (notifier format [input_select.notifier_format] is Persistent AND (trigger is every_15_minutes OR threshold_changed OR notifier_format_changed)) OR ( (notifier format [input_select.notifier_format] is NOT Persistent) AND (trigger is NOT every_15_minutes) ) OR (trigger is every_15_minutes AND low batteries [input_boolean.low_batteries] is on) OR (trigger is low_batteries_boolean_changed AND (trigger.to_state.context.parent_id is none AND trigger.to_state.context.user_id is not none AND trigger.to_state.context.id is not none)) ). ACTIONS: 1. Set variables: notification_tag, low_batteries (boolean result of a complex template checking battery status group members), notifier (determined from input_text.notifier_name [input_text.notifier_name]). 2. Conditionally clear notifications if: (low batteries [input_boolean.low_batteries] is on AND low_batteries variable is false) OR trigger is notifier_format_changed OR trigger is threshold_changed. Clear based on notifier format [input_select.notifier_format] state and trigger id. 3. If low_batteries variable is true: Set message_text variable from a template listing qualifying batteries. Then choose action based on notifier format [input_select.notifier_format]: If Default AND trigger is threshold_changed OR time OR notifier_format_changed: Send notification via notifier, wait 15 minutes, then clear it. If Slack AND trigger is threshold_changed OR time OR notifier_format_changed: Send notification via notifier with Slack attachment. If Persistent AND trigger is every_15_minutes OR threshold_changed OR notifier_format_changed: Create a persistent notification. 4. Set low batteries [input_boolean.low_batteries] to match the low_batteries variable state: Turn on if off and variable true; turn off if on and variable false.",
"natural_language": {
"trigger": "The automation can be triggered in several ways: at a specific scheduled time defined by low battery notification check [input_datetime.low_battery_notification_check]; when the minimum or maximum battery alert thresholds [input_number.battery_alert_threshold_min, input_number.battery_alert_threshold_max] are changed; every 15 minutes on the clock; when the preferred notification format [input_select.notifier_format] is changed; or when the low batteries status boolean [input_boolean.low_batteries] itself changes state.",
"conditions": "The conditions form a complex logical gate that determines if the automation should proceed based on which trigger fired and the current system state. It allows execution if: the notification format is set to 'Persistent' and the trigger is the 15-minute timer, a threshold change, or a format change itself. Alternatively, if the format is NOT 'Persistent', the 15-minute trigger is specifically blocked. Execution is also allowed if the trigger is the 15-minute timer AND the low batteries boolean is already on. Finally, it allows execution if the low batteries boolean was changed, and that change appears to have originated from a user interface interaction (based on context IDs).",
"action": "The automation first calculates which battery sensors are currently considered 'low' based on a complex template that checks all members of the battery status [group.battery_status] group against the current threshold values and other attributes. It then manages notifications: if the conditions for clearing are met (like the boolean state no longer matching the sensor status, or a settings change), it will dismiss existing notifications. If there are low batteries detected, it formats a message and sends a new notification. The type of notification (Default with auto-dismissal, Slack message, or Persistent notification in the UI) depends on the selected notifier format [input_select.notifier_format] and which trigger started the process. Finally, it updates the low batteries [input_boolean.low_batteries] boolean to accurately reflect whether any low batteries are currently detected."
},
"human_like": "This automation monitors battery levels and sends alerts when they are low, using a user-selected notification method (like a pop-up or Slack message) and automatically clearing old alerts when batteries are no longer low.",
"complexity": "high"
}
},
{
"id": "'Battery Alert: Create Sensor From Attributes'",
"result": {
"structured": "TRIGGER: When any entity changes state (event: state_changed). CONDITIONS: (Trigger exists) AND (Trigger event data exists) AND (Trigger event data old_state exists) AND (Trigger event data new_state exists) AND (The new state's name does not contain 'battery' in lowercase) AND (The entity does NOT have a device_class attribute equal to 'battery') AND (The entity does NOT have a 'battery_sensor_creation_disabled' attribute set to true) AND (The entity is NOT marked as 'restored' with a 'restored' attribute set to true) AND ((The new state's attributes have a defined and non-null 'battery_level') OR (The new state's attributes have a defined and non-null 'battery') OR (The new state's attributes have a defined and non-null 'battery_critical')). ACTIONS: Publish an MQTT configuration message to create a battery sensor for the triggering entity. Publish an MQTT state message with the battery value for the new sensor. Publish an MQTT attributes message linking the new sensor to the original entity.",
"natural_language": {
"trigger": "Whenever any entity in the system changes its state.",
"conditions": "The automation only proceeds if the state change event is valid, meaning both the old and new states exist. The entity's name must not contain the word 'battery', and the entity itself must not already be a battery device. The entity must not have been explicitly excluded from this automation via a 'battery_sensor_creation_disabled' attribute, and it must not be a restored entity. Crucially, the entity's new state must contain battery information in one of its attributes, specifically a defined and non-empty value for 'battery_level', 'battery', or 'battery_critical'.",
"action": "The automation publishes three MQTT messages to set up a new battery sensor. It first publishes a configuration message to define the new sensor's properties (like name, state topic, and icon) based on the source attribute. It then publishes the initial battery value to the sensor's state topic. Finally, it publishes an attributes message that links the new sensor back to the original entity and provides a reference for deletion."
},
"human_like": "Automatically creates dedicated battery sensors for any device that reports battery level in its attributes, making battery monitoring more consistent.",
"complexity": "high"
}
},
{
"id": "'Battery Alert: Update Status Group Members'",
"result": {
"structured": "TRIGGER: When the time pattern matches every minute OR when battery alert update status group members [automation.battery_alert_update_status_group_members] remains on for 1 second. CONDITIONS: None. ACTIONS: Set the members of battery status [group.battery_status] to a list of all sensor entities that are not hidden and have a device_class of 'battery' OR have an entity_id ending with '_battery' OR have a name ending with '_battery'.",
"natural_language": {
"trigger": "The automation runs every minute, or when the automation itself (battery alert update status group members [automation.battery_alert_update_status_group_members]) is turned on and remains on for one second.",
"conditions": "There are no conditions for this automation.",
"action": "Updates the membership of the battery status [group.battery_status] group. It includes all sensor entities that are not hidden and are either classified as a battery, have an entity ID ending with '_battery', or have a name ending with '_battery'."
},
"human_like": "This automation keeps the battery status group up-to-date by refreshing its list of battery sensors every minute.",
"complexity": "medium"
}
},
{
"id": "'Battery Alert: Delete a Sensor'",
"result": {
"structured": "TRIGGER: When delete battery sensor [input_text.delete_battery_sensor] changes state. CONDITIONS: The text entered into delete battery sensor [input_text.delete_battery_sensor] contains the substring 'homeassistant/sensor/' OR the first 7 characters of the text contain the substring 'sensor.'. ACTIONS: Set a variable 'sensor_to_delete' to the MQTT topic format. Publish a retained MQTT message to the topic 'sensor_to_delete'. Publish a retained MQTT message to the topic 'sensor_to_delete/attributes'. Publish a retained MQTT message to the topic 'sensor_to_delete/state'. Publish a retained MQTT message to the topic 'sensor_to_delete/config'. Set the value of delete battery sensor [input_text.delete_battery_sensor] to '# MQTT delete message sent #'. Wait for 2 seconds. Set the value of delete battery sensor [input_text.delete_battery_sensor] to an empty string.",
"natural_language": {
"trigger": "Whenever the text in the 'delete battery sensor' [input_text.delete_battery_sensor] input field is changed.",
"conditions": "The entered text must be in a valid format: it must either contain the MQTT prefix 'homeassistant/sensor/' or begin with 'sensor.' (indicating standard Home Assistant entity notation).",
"action": "The automation converts the entered sensor name into a full MQTT topic path. It then sends a series of retained MQTT delete messages to that topic and its related subtopics (/attributes, /state, /config) to instruct Home Assistant to remove the sensor. Finally, it provides user feedback by temporarily setting the input field to a confirmation message and then clearing it."
},
"human_like": "Deletes a battery sensor by publishing MQTT cleanup messages when a sensor name is entered into a text field.",
"complexity": "medium"
}
},
{
"id": "livetrack_initialize",
"result": {
"structured": "TRIGGER: When Home Assistant starts. CONDITIONS: (livetrack notifier name [input_text.livetrack_notifier_name] is empty) OR (livetrack local json path [input_text.livetrack_local_json_path] is empty). ACTIONS: If livetrack local json path [input_text.livetrack_local_json_path] is empty, set its value to 'https://homeassistant.local:8123/local/livetrack/empty_garmin.json'. If livetrack notifier name [input_text.livetrack_notifier_name] is empty, first stop the automation, then set its value to 'notify.notify'. Finally, execute the shell command 'shell_command.create_empty_garmin_json_file'.",
"natural_language": {
"trigger": "When Home Assistant starts up.",
"conditions": "If either the livetrack notifier name [input_text.livetrack_notifier_name] is empty or the livetrack local json path [input_text.livetrack_local_json_path] is empty.",
"action": "If the local JSON path is empty, it is set to a default URL. If the notifier name is empty, the automation stops and then sets the notifier name to a default value. Regardless of the previous steps, a shell command is executed to create an empty Garmin JSON file."
},
"human_like": "Sets up default configuration values for a live tracking feature when Home Assistant starts, ensuring necessary paths and notifiers are initialized.",
"complexity": "medium"
}
},
{
"id": "'Hue motion sensor: Multihub fetch data when input selects change'",
"result": {
"structured": "TRIGGER: When hue hubs [input_select.hue_hubs] changes state (id: hub_change) OR When hue motion sensor hub data [sensor.hue_motion_sensor_hub_data] is unknown (id: hub_identifier_unknown) OR When hue hubs [input_select.hue_hubs] changes from 'Undefined' (id: after_start). CONDITIONS: None. ACTIONS: CHOOSE: IF trigger id is hub_change THEN CHOOSE: IF the first option name from Hue Hubs [input_text.hue_hubs] equals the current state of hue hubs [input_select.hue_hubs] THEN set hue hub ip [input_text.hue_hub_ip] to the first option's ip AND set hue hub username [input_text.hue_hub_username] to the first option's user. ELSE IF the second option name from Hue Hubs [input_text.hue_hubs] equals the current state of hue hubs [input_select.hue_hubs] THEN set hue hub ip [input_text.hue_hub_ip] to the second option's ip AND set hue hub username [input_text.hue_hub_username] to the second option's user. ELSE IF trigger id is hub_identifier_unknown OR after_start THEN REPEAT for (number of options in hue hubs [input_select.hue_hubs] minus 1) times: select next option in hue hubs [input_select.hue_hubs] (cycle), CHOOSE: IF the first option name from Hue Hubs [input_text.hue_hubs] equals the current state of hue hubs [input_select.hue_hubs] THEN set hue hub ip [input_text.hue_hub_ip] to the first option's ip AND set hue hub username [input_text.hue_hub_username] to the first option's user. ELSE IF the second option name from Hue Hubs [input_text.hue_hubs] equals the current state of hue hubs [input_select.hue_hubs] THEN set hue hub ip [input_text.hue_hub_ip] to the second option's ip AND set hue hub username [input_text.hue_hub_username] to the second option's user. THEN update hue motion sensor hub data [sensor.hue_motion_sensor_hub_data], WAIT for hue motion sensor hub data [sensor.hue_motion_sensor_hub_data] to not be unknown (timeout 5 seconds), IF the sensitivity option from hue motion sensor hub data [sensor.hue_motion_sensor_hub_data] does not match hue motion sensitivity [input_select.hue_motion_sensitivity] THEN set hue motion sensitivity [input_select.hue_motion_sensitivity] to the sensitivity from the sensor.",
"natural_language": {
"trigger": "The automation triggers in three situations: when the selected hue hub changes, when the hue motion sensor hub data sensor reports an unknown state, or when the hue hubs selector transitions from an 'Undefined' state.",
"conditions": "There are no conditions; the automation runs whenever any of the triggers occur.",
"action": "Depending on which trigger fired, the automation performs different actions. If the hue hub selection changed, it looks up the corresponding IP address and username from a stored list and updates the hue hub ip and hue hub username text fields. If the trigger was due to unknown hub data or the hub selector leaving the 'Undefined' state, it cycles through the available hub options. For each hub, it sets the IP and username, fetches the hub data, waits briefly for the data to update, and if the motion sensitivity reported by the hub differs from the current UI selection, it updates the hue motion sensitivity selector to match the hub's setting."
},
"human_like": "This automation manages Hue bridge connections by updating IP and login details when the selected hub changes and automatically synchronizes motion sensor sensitivity settings if the hub data is missing or unknown.",
"complexity": "high"
}
},
{
"id": "'Hue motion sensor: Fill input selects with data'",
"result": {
"structured": "TRIGGER: When hue motion sensor hub data [sensor.hue_motion_sensor_hub_data] attribute 'sensitivitymax' equals 2 OR When hue motion sensor hub data [sensor.hue_motion_sensor_hub_data] attribute 'sensitivitymax' equals 4 OR When Home Assistant starts OR When an event_template_reloaded event occurs. CONDITIONS: None. ACTIONS: (IF trigger is sensitivity_basic THEN set hue motion sensitivity [input_select.hue_motion_sensitivity] options to [Low, Medium, High]) OR (IF trigger is sensitivity_advanced THEN set hue motion sensitivity [input_select.hue_motion_sensitivity] options to [Very low, Low, Medium, High, Very high]) OR (IF trigger is start THEN set motion sensor entities [input_select.motion_sensor_entities] options to a list of all available motion sensor entity IDs AND set hue hubs [input_select.hue_hubs] options to a list of hub names from hue hubs [input_text.hue_hubs]). THEN set hue motion sensitivity [input_select.hue_motion_sensitivity] selected option to match the current sensitivity value from hue motion sensor hub data [sensor.hue_motion_sensor_hub_data].",
"natural_language": {
"trigger": "This automation runs when the hue motion sensor hub data [sensor.hue_motion_sensor_hub_data] reports its 'sensitivitymax' attribute is set to 2 (basic mode) or 4 (advanced mode), when Home Assistant first starts up, or when an event_template_reloaded event occurs.",
"conditions": "There are no conditions; the automation runs whenever any of the triggers activate.",
"action": "Depending on which trigger fired, the automation performs different actions. If the sensitivity is basic, it sets the hue motion sensitivity [input_select.hue_motion_sensitivity] dropdown to have three options: Low, Medium, High. If the sensitivity is advanced, it sets the dropdown to have five options: Very low, Low, Medium, High, Very high. If Home Assistant just started, it populates the motion sensor entities [input_select.motion_sensor_entities] dropdown with a list of all available motion sensor entities and updates the hue hubs [input_select.hue_hubs] dropdown with hub names from hue hubs [input_text.hue_hubs]. Finally, regardless of the trigger, it sets the currently selected option in the hue motion sensitivity [input_select.hue_motion_sensitivity] dropdown to match the current sensitivity value reported by the hub data."
},
"human_like": "This automation configures the sensitivity dropdown for Hue motion sensors based on the hub's capabilities and updates dropdown lists for motion sensors and hubs when Home Assistant starts.",
"complexity": "medium"
}
},
{
"id": "'Hue motion sensor: Refresh data when selected sensor changes'",
"result": {
"structured": "TRIGGER: When motion sensor entities [input_select.motion_sensor_entities] changes state. CONDITIONS: None. ACTIONS: If the trigger was from motion sensor entities [input_select.motion_sensor_entities] changing state, then: 1. Refresh the data for hue motion sensor hub data [sensor.hue_motion_sensor_hub_data]. 2. Set the option for hue motion sensitivity [input_select.hue_motion_sensitivity] to the value corresponding to the sensitivity attribute from hue motion sensor hub data [sensor.hue_motion_sensor_hub_data].",
"natural_language": {
"trigger": "Whenever the selected motion sensor entity in the dropdown motion sensor entities [input_select.motion_sensor_entities] is changed.",
"conditions": "There are no conditions that must be met.",
"action": "First, it fetches the latest data for the hue motion sensor hub data [sensor.hue_motion_sensor_hub_data]. Then, it updates the hue motion sensitivity [input_select.hue_motion_sensitivity] dropdown to match the sensitivity value that was just retrieved from the hub data."
},
"human_like": "Updates the motion sensor's sensitivity setting automatically whenever a different motion sensor is selected from the list.",
"complexity": "medium"
}
},
{
"id": "pollen_trigger_update_of_pollen_sensors",
"result": {
"structured": "TRIGGER: When the time is 16:00:00 OR When the time pattern matches every 30 minutes OR When the state of pollen update feed [input_button.pollen_update_feed] changes. CONDITIONS: ((pollen update time [sensor.pollen_update_time] was last updated before today) AND (the current date is between January 1 and March 15 inclusive) AND (pollen updated today [binary_sensor.pollen_updated_today] attribute 'in_pollen_season' is false) AND (the trigger is pre_season_single_time_trigger)) OR ((pollen update time [sensor.pollen_update_time] was last updated before today) AND (the current date is between January 15 and October 15 inclusive) AND (the current time is between 14:59:00 and 20:00:00) AND (pollen updated today [binary_sensor.pollen_updated_today] attribute 'in_pollen_season' is true)) OR ((the trigger is button_trigger) AND (more than 5 seconds have passed since the last state change of pollen update feed [input_button.pollen_update_feed])). ACTIONS: Update the entity pollen update time [sensor.pollen_update_time].",
"natural_language": {
"trigger": "The automation can be triggered at 4:00 PM, every 30 minutes, or when the pollen update feed [input_button.pollen_update_feed] button is pressed.",
"conditions": "For the 4:00 PM trigger to work, the pollen sensors must not have been updated today, the date must be between January 1st and March 15th, and the system must indicate that pollen is not currently in the air. For the recurring 30-minute trigger to work during the afternoon, the pollen sensors must not have been updated today, the date must be between January 15th and October 15th, the time must be between 2:59 PM and 8:00 PM, and the system must indicate that pollen is in the air. For the button press trigger to work, at least 5 seconds must have passed since the last time the button was pressed.",
"action": "It triggers an update for the pollen update time [sensor.pollen_update_time] sensor."
},
"human_like": "This automation ensures pollen sensor data is updated daily, either on a schedule during pollen season or manually via a button, while preventing unnecessary updates.",
"complexity": "high"
}
},
{
"id": "'Zone registration: Initialize start values'",
"result": {
"structured": "TRIGGER: When Home Assistant starts. CONDITIONS: (zone registration config [input_text.zone_registration_config] is empty) OR (zone registration config [input_text.zone_registration_config] is unknown). ACTIONS: IF (zone registration config [input_text.zone_registration_config] is unknown OR empty) THEN set zone registration config [input_text.zone_registration_config] to '[]'. IF (zone registration comment [input_text.zone_registration_comment] is unknown) THEN set zone registration comment [input_text.zone_registration_comment] to empty. IF (zone registration config label [input_text.zone_registration_config_label] is unknown) THEN set zone registration config label [input_text.zone_registration_config_label] to empty. Execute shell_command.create_csv_dir. Execute shell_command.mv_zone_csv_script.",
"natural_language": {
"trigger": "When Home Assistant starts up.",
"conditions": "If the zone registration config [input_text.zone_registration_config] is either empty or in an unknown state.",
"action": "If the zone registration config [input_text.zone_registration_config] is empty or unknown, it is set to an empty list. If the zone registration comment [input_text.zone_registration_comment] is unknown, it is cleared. If the zone registration config label [input_text.zone_registration_config_label] is unknown, it is cleared. Then, a shell command is run to create a CSV directory if it doesn't exist, followed by another shell command to move a script file from the packages directory to the CSV directory."
},
"human_like": "Initializes configuration values and sets up directories for a zone registration system when Home Assistant starts.",
"complexity": "medium"
}
},
{
"id": "'Zone registration: Fill input select with data'",
"result": {
"structured": "TRIGGER: When Home Assistant starts OR When a service call event occurs for domain 'input_select' and action 'reload'. CONDITIONS: None. ACTIONS: Wait 1 second, then set zones [input_select.zones] options to the list of all zone entity IDs, then set person entities [input_select.person_entities] options to the list of all person entity IDs, then set zone registration config [input_select.zone_registration_config] options to the list of 'name' attributes parsed from the JSON content of zone registration config [input_text.zone_registration_config].",
"natural_language": {
"trigger": "The automation runs either when Home Assistant starts up, or when a service call is made to reload the input_select domain.",
"conditions": "There are no conditions for this automation.",
"action": "After a one-second delay, it populates three dropdown lists. First, it fills the zones [input_select.zones] dropdown with all available zone entities. Second, it fills the person entities [input_select.person_entities] dropdown with all available person entities. Third, it fills the zone registration config [input_select.zone_registration_config] dropdown with the list of configuration names extracted from the JSON stored in the zone registration config [input_text.zone_registration_config] text field."
},
"human_like": "This automation populates several dropdown menus with available zones, people, and configuration names when the system starts or when the input select data is reloaded.",
"complexity": "medium"
}
},
{
"id": "'Zone registration: Auto update input select when config changes'",
"result": {
"structured": "TRIGGER: When zone registration config [input_select.zone_registration_config] changes state. CONDITIONS: None. ACTIONS: Set variable selected_config to the index of the currently selected option in zone registration config [input_select.zone_registration_config]. Set variable selected_person to the person field from the JSON options stored in zone registration config [input_text.zone_registration_config] at the selected_config index. Set variable selected_zone to the zone field from the JSON options stored in zone registration config [input_text.zone_registration_config] at the selected_config index. Set variable config_name to the name field from the JSON options stored in zone registration config [input_text.zone_registration_config] at the selected_config index. Select the option selected_person in person entities [input_select.person_entities]. Select the option selected_zone in zones [input_select.zones]. Set the value of zone registration config label [input_text.zone_registration_config_label] to config_name. Update the entity zone registration statistics [sensor.zone_registration_statistics].",
"natural_language": {
"trigger": "Whenever the selection in the zone registration config [input_select.zone_registration_config] changes.",
"conditions": "There are no conditions that must be met.",
"action": "The automation extracts the currently selected configuration from the dropdown. It reads a JSON structure stored in the zone registration config [input_text.zone_registration_config] to find the person, zone, and name associated with the selected configuration index. It then updates the person entities [input_select.person_entities] dropdown to select the corresponding person, updates the zones [input_select.zones] dropdown to select the corresponding zone, sets the label text in zone registration config label [input_text.zone_registration_config_label] to the configuration name, and finally refreshes the zone registration statistics [sensor.zone_registration_statistics] sensor."
},
"human_like": "Automatically updates related dropdowns and labels when a user selects a different zone registration configuration, keeping the UI in sync.",
"complexity": "medium"
}
},
{
"id": "'Zone registration: Register configured zone events'",
"result": {
"structured": "TRIGGER: When any state_changed event occurs. CONDITIONS: (The entity_id from the triggering event is listed in the zones attribute of zone registration config valid [binary_sensor.zone_registration_config_valid]) AND (The derived trigger_person variable is listed in the persons attribute of zone registration config valid [binary_sensor.zone_registration_config_valid]) AND ((zone registration enter [input_boolean.zone_registration_enter] is on AND the new state count is greater than the old state count) OR (zone registration leave [input_boolean.zone_registration_leave] is on AND the new state count is less than the old state count)). ACTIONS: Set variable zone_config (the configuration entry for trigger_person from the JSON attribute of zone registration config valid [binary_sensor.zone_registration_config_valid]), set variable filename (derived from zone_config.name), execute shell command zone_registration with entry=auto and the filename variable, and then update the entity zone registration statistics [sensor.zone_registration_statistics].",
"natural_language": {
"trigger": "The automation is triggered whenever any entity in the system changes its state.",
"conditions": "First, the entity that changed state must be part of a pre-configured list of zones stored in the zone registration config valid [binary_sensor.zone_registration_config_valid] sensor. Second, the person associated with the state change must be part of a pre-configured list of persons also stored in the zone registration config valid sensor. Third, depending on the automation's settings, the change must represent either a person entering or leaving a zone: if the 'enter' mode is active, the number of people in the zone must have increased; if the 'leave' mode is active, the number of people must have decreased.",
"action": "The automation retrieves the specific configuration for the person involved, generates a filename based on that configuration, logs the event to a CSV file using a shell command, and finally updates the zone registration statistics [sensor.zone_registration_statistics] sensor to reflect the new data."
},
"human_like": "Logs when configured people enter or leave specific zones to a CSV file for registration purposes.",
"complexity": "high"
}
}
]