WikiJS/homeassistant/HA_part_1.md

11 KiB
Raw Permalink Blame History

title description published date tags editor dateCreated
Homeassistant Part 1 1 2024-02-18T08:04:27.217Z markdown 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 Lets 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 Lets 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 ▪ 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/hostshttp://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

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 its 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
'''