--- title: Homeassistant Part 1 description: published: 1 date: 2024-02-18T08:04:27.217Z tags: editor: markdown dateCreated: 2024-02-03T20:23:54.798Z --- Need to access time sensor alternatively, use now template: - trigger: - platform: time_pattern seconds: "/1" sensor: - name: time state: "{{ now().strftime('%H:%M:%S') }}" {{ now().strftime("%I:%M %p") }} {{ as_timestamp(state_attr("device_tracker.android_9050f88e39898022", "last_time_reachable")) | timestamp_local }} {##{{ state_attr("device_tracker.android_9050f88e39898022", "last_time_reachable").strftime('%H:%M:%S') }}##} - condition: template value_template: '"{{ now().timestamp()+300 < (as_timestamp(state_attr("device_tracker.android_9050f88e39898022", "last_time_reachable")) | float) }}"' Change attribute value via automation https://community.home-assistant.io/t/how-to-manually-set-state-value-of-sensor/43975/21 - id: automation 3 trigger: platform: time_pattern minutes: '/1' action: service: python_script.set_state data_template: entity_id: sensor.cold_water_rate state: 42 # new HA OS on RaPi4 http://192.168.178.52:8123/ • ==create user ◦ user: bora, pass: bora • select location== • activate advanced mode under profile settings • install add ons ◦ Samba share ▪ username: homeassistant, password: bora, workgroup: WORKGROUP ▪ add a new network location: \\192.168.178.52\config ◦ file editor ◦ duckdns ▪ domains: - habora.duckdns.org token: 799093a4-0b34-454f-99cb-25a4637bf404 aliases: [] lets_encrypt: accept_terms: true algo: secp384r1 certfile: fullchain.pem keyfile: privkey.pem seconds: 300 • ◦ MariaDB ▪ databases: - homeassistant logins: - username: homeassistant password: password1234 - username: read_only_user password: password1234 rights: - username: homeassistant database: homeassistant - username: read_only_user database: homeassistant privileges: - SELECT ▪ recorder: db_url: mysql://homeassistant:password@core-mariadb/homeassistant?charset=utf8mb4 ▪ ◦ Nginx Proxy Manager ▪ Open WebUI → admin@example.com / changeme ▪ Hosts – Proxy Hosts → Add Proxy Host ▪ Domain Names: habora.duckdns.org ▪ Als Scheme wählt Ihr http, unter „Forward Hostname / IP“ tragt Ihr die IP eures Home Assistant ein. → 192.168.178.52 ▪ Bei Forward Port gebt Ihr den Port ein, unter dem euer Home Assistant erreichbar ist. (Standardmäßig ist das der Port 8123) ▪ Aktiviert abschließend noch den Punkt „Websockets Support„. ▪ Anschließend wechselt Ihr auf den Reiter SSL. ▪ Hier wählt ihr unter „SSL Certificate“ den Eintrag „Request a new SSL Certificate“ um ein neues Zertifikat zu erstellen aus. ▪ Aktiviert nun den Punkt „Force SSL„, tragt eine gültige Email-Adresse für eure Zertifikat ein und akzeptiert die Let’s Encrypt Bedingungen durch aktivieren der Option am unteren Rand der Dialog. ▪ Bestätigt nun die Eingaben durch einen Klick auf „Save“ und wartet, bis der Vorgang abgeschlossen ist. ▪ Dann werden im Hintergrund die Zertifikate von Let’s Encrypt generiert. Das kann einen Augenblick in Anspruch nehmen. ▪ Das registrieren des Zertifikates funktioniert nur, wenn die eingetragene Domain auch auf eure externe IP zeigt, und die Ports 80 und 443 auf die Home Assistant IP weitergeleitet sind. • PICTURE ![home_assistant_html_eeaf4fb9a08969e4.png](/pictures/home_assistant_html_eeaf4fb9a08969e4.png) ▪ configuration.yaml • http: • use_x_forwarded_for: true • trusted_proxies: • - 127.0.0.1 • - 172.30.33.0/24 • - ::1 ◦ Let's Encrypt ▪ domains: - habora.duckdns.org email: boraers@googlemail.com keyfile: privkey.pem certfile: fullchain.pem challenge: http dns: {} ▪ add to configuration.aml http: ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem ◦ influxdb ▪ no adaptation of configuration was needed ▪ http://192.168.178.52:8123/api/hassio_ingress/FJZMGvrT7OnlTzBKdUP9jKiKEe4yp4V4D5VT4zHP5cQ/sources/0/hosts ▪ http://192.168.178.52:8123/hassio/ingress/a0d7b954_influxdb ▪ create database: home_assistant ▪ create user: homeassistant, pass: homeassistant, permissions: ALL ◦ mosquitto ▪ Logins: - username: note4 password: note4 ▪ MQTT integration configuration: 127.0.0.1 ← not core-mosquitto 1883 note4 note4 MQTT protocol: 5 ◦ Grafana ▪ env_vars: - name: GF_SECURITY_ALLOW_EMBEDDING value: "true" - name: GF_AUTH_ANONYMOUS_ORG_NAME value: Main Org. - name: GF_AUTH_ANONYMOUS_ENABLED value: "true" - name: GF_AUTH_DISABLE_LOGIN_FORM value: "false" ▪ SSL: false or true, depending on having ssl set up ▪ Network: 3000 ▪ http://192.168.178.52:8123/hassio/ingress/a0d7b954_grafana ▪ in web panel • add data source: InfluxDB • URL: http://a0d7b954-influxdb:8086 • database, user, pass • ◦ Terminal and SSH • integrations ◦ HACS ▪ github credentials required ◦ OpenWeatherMap ▪ API Ke: ◦ solarman • re-use old config files ◦ automations ◦ blueprints ◦ bosch_shc ◦ custom_components ◦ group ◦ images ◦ python_scripts ◦ www ◦ alarm_control_panel.yaml ◦ automations.yaml ◦ climate.yaml ◦ configuration.yaml ◦ influxdb.yaml ◦ mqtt.yaml ◦ scenes.yaml ◦ scripts.yaml ◦ secrets.yaml ◦ sensor.yaml • move to external SSD • che PICTURE ![Home_assistant_html_8c01be9bb611f888.png](/pictures/home_assistant_html_8c01be9bb611f888.png) # Home-Assistant script template {## Imitate available variables: ##} {% set my_test_json = { "temperature": 25, "unit": "°C" } %} The temperature is {{ my_test_json.temperature }} {{ my_test_json.unit }}. {% if is_state("sun.sun", "above_horizon") -%} The sun rose {{ relative_time(states.sun.sun.last_changed) }} ago. {%- else -%} The sun will rise at {{ as_timestamp(state_attr("sun.sun", "next_rising")) | timestamp_local }}. {%- endif %} For loop example getting entity values in the weather domain: {% for state in states.weather -%} {%- if loop.first %}The {% elif loop.last %} and the {% else %}, the {% endif -%} {{ state.name | lower }} is {{state.state_with_unit}} {%- endfor %}. {% set tado_temp = states('sensor.tado_wohnzimmer_temperature')|float(20) %} {% set room_temp = states('sensor.meter_plus_90b4_temperature')|float(20) %} {% set current_offset = state_attr('climate.tado_wohnzimmer', 'offset_celsius') %} {{ tado_temp|round(1) }} {{ room_temp|round(1) }} {{ current_offset|round(1) }} {{ (-(tado_temp - room_temp) + current_offset)|round(1) }} {{ (tado_temp - current_offset)|round(1) }} {% set average_temp = 0 %} {% set active_rooms = 0 %} {% set temp_bedroom = states('sensor.radiator_thermostat_bedroom_temperature')|float(15) %} {% set climate_bedroom = states('climate.room_climate_bedroom') %} {% set temp_top = states('sensor.radiator_thermostat_child_top_temperature')|float(15) %} {% set climate_top = states('climate.room_climate_child_s_room_1_top') %} {% set temp_bottom = states('sensor.radiator_thermostat_bottom_temperature')|float(15) %} {% set climate_bottom = states('climate.room_climate_child_s_room_2_botto') %} {% if climate_bedroom not in ("unavailable", "unknown", "off") %} {% set active_rooms = active_rooms + 1 %} {% set average_temp = average_temp + temp_bedroom %} {% endif %} {{ average_temp/active_rooms|round(1) if active_rooms>0 else 77 }} # Python Scripts https://www.home-assistant.io/integrations/python_script ## Example 1 https://community.home-assistant.io/t/how-to-manually-set-state-value-of-sensor/43975/5 Scripts are placed in a python_scripts folder under the configuration directory, in my case it is /home/homeassistant/.homeassistant/python_scripts. You then need to either restart Home Assistant or click RELOAD SCRIPTS under Configuration, General, Configuration Reloading. For what it’s worth, I have been hunting for a solution to this problem and I finally decided to make a small script: ``` # python_scripts/set_state.py #================================================================================================== # python_scripts/set_state.py #================================================================================================== #-------------------------------------------------------------------------------------------------- # Set the state or other attributes for the entity specified in the Automation Action #-------------------------------------------------------------------------------------------------- inputEntity = data.get('entity_id') if inputEntity is None: logger.warning("===== entity_id is required if you want to set something.") else: inputStateObject = hass.states.get(inputEntity) inputState = inputStateObject.state inputAttributesObject = inputStateObject.attributes.copy() for item in data: newAttribute = data.get(item) logger.debug("===== item = {0}; value = {1}".format(item,newAttribute)) if item == 'entity_id': continue # already handled elif item == 'state': inputState = newAttribute else: inputAttributesObject[item] = newAttribute hass.states.set(inputEntity, inputState, inputAttributesObject) ``` With this script in place, the action could be: ``` action: service: python_script.set_state data_template: entity_id: Binary_sensor.sensor1 state: ON ``` ## Example 2 https://www.home-assistant.io/integrations/python_script#calling-services Start by enabling the Python script and create the first script. • Add to configuration.yaml: python_script: • Create folder /python_scripts • Create a file /python_scripts/hello_world.py in the folder and give it this content: ``` # `data` is available as builtin and is a dictionary with the input data. name = data.get("name", "world") # `logger` and `time` are available as builtin without the need of explicit import. logger.info("Hello {} at {}".format(name, time.time())) ``` • Start Home Assistant to reload the script configuration. • Call your new python_script.hello_world service (with parameters) from the Services, using the YAML mode. ``` service: python_script.hello_world data: name: "Input-Text" Running this script show absolutely no output on the screen, but it logs with level info. You must have the Logger enabled at least for level info. Your confiuration.yaml should include something like this. logger: default: info '''