Compare commits

..

1 Commits

7 changed files with 54 additions and 39 deletions
+3 -2
View File
@@ -2,8 +2,9 @@
trigger: trigger:
platform: state platform: state
entity_id: binary_sensor.indkorsel_sensor_motion entity_id: binary_sensor.indkorsel_sensor_motion
to: 'on' to: 'on' condition:
actions: - condition: template
value_template: "{{ states('input_number.ai_gemini_calls_today') | int < 20 }}" actions:
- action: script.overvaagning - action: script.overvaagning
metadata: {} metadata: {}
data: {} data: {}
+9
View File
@@ -0,0 +1,9 @@
- alias: Reset AI Gemini Calls Daily
trigger:
platform: time
at: '00:00:00'
action:
- service: input_number.set_value
data:
entity_id: input_number.ai_gemini_calls_today
value: 0
@@ -1,15 +1,12 @@
- alias: Tesla failsafe charge - alias: Tesla failsafe charge
trigger: trigger:
- platform: time_pattern - platform: template
minutes: "/5"
condition:
- condition: template
value_template: > value_template: >
{% set deadline_ts = as_timestamp(states('input_datetime.tesla_charge_deadline')) %} {% set deadline_ts = as_timestamp(states('input_datetime.tesla_charge_deadline')) %}
{% set now_ts = as_timestamp(now()) %} {% set now_ts = as_timestamp(now()) %}
{{ (deadline_ts - now_ts) <= 3600 }} {{ (deadline_ts - now_ts) <= 3600 }} # 1 time = 3600 sekunder
condition:
- condition: numeric_state - condition: numeric_state
entity_id: sensor.tesla_kwh_needed entity_id: sensor.tesla_kwh_needed
above: 0 above: 0
@@ -2,8 +2,8 @@
trigger: trigger:
- platform: template - platform: template
value_template: > value_template: >
{{ (states('sensor.snowywhite_battery') | default(0)) | float >= {{ states('sensor.snowywhite_battery')|float >=
(states('number.snowywhite_charge_limit') | default(100)) | float }} states('number.snowywhite_charge_limit')|float }}
action: action:
- service: switch.turn_off - service: switch.turn_off
+7
View File
@@ -0,0 +1,7 @@
ai_gemini_calls_today:
name: AI Gemini Calls Today
min: 0
max: 50
step: 1
mode: box
unit_of_measurement: calls
+6 -3
View File
@@ -43,11 +43,14 @@ overvaagning:
eller stationære objekter. Hvis der ikke er nogen synlig årsag til eller stationære objekter. Hvis der ikke er nogen synlig årsag til
bevægelsen, svar blot med 'Ingen åbenlys bevægelse detekteret.' Hold bevægelsen, svar blot med 'Ingen åbenlys bevægelse detekteret.' Hold
beskeden kort og underholdende som en notifikation på Apple! beskeden kort og underholdende som en notifikation på Apple!
filenames: images:
- /config/www/indkorsel_snapshot.jpg - /config/www/indkorsel_snapshot.jpg
response_variable: generated_content response_variable: generated_content
action: google_generative_ai_conversation.generate_content action: ai_task.generate_data
- if: - service: input_number.set_value
data:
entity_id: input_number.ai_gemini_calls_today
value: "{{ states('input_number.ai_gemini_calls_today') | int + 1 }}"
- condition: template - condition: template
value_template: "{{ 'No Obvious Motion Detected.' in generated_content.text }}" value_template: "{{ 'No Obvious Motion Detected.' in generated_content.text }}"
then: then:
+15 -17
View File
@@ -1,29 +1,27 @@
binary_sensor: platform: template
sensors:
- name: tesla_charge_now - name: tesla_charge_now
state: > state: >
{% set deadline_raw = states('input_datetime.tesla_charge_deadline') %} {% set deadline = states('input_datetime.tesla_charge_deadline') %}
{% set deadline_ts = as_timestamp(deadline_raw) if deadline_raw not in ['unknown','unavailable',''] else none %}
{% set hours_needed = states('sensor.tesla_charge_hours_needed')|float(0)|round(0,'ceil') %} {% set hours_needed = states('sensor.tesla_charge_hours_needed')|float(0)|round(0,'ceil') %}
{% set prices = state_attr('sensor.energidataservice','today') + state_attr('sensor.energidataservice','tomorrow') %}
{% set prices = (state_attr('sensor.energidataservice','today') or [])
+ (state_attr('sensor.energidataservice','tomorrow') or []) %}
{# Filter valid price entries and apply deadline #}
{% set valid = [] %} {% set valid = [] %}
{# Filtrer kun timer før deadline #}
{% for p in prices %} {% for p in prices %}
{% if p.hour is defined and p.hour %} {% set slot_time = as_timestamp(strptime(p.hour,'%Y-%m-%dT%H:%M:%S')) %}
{% set ts = as_timestamp(p.hour) %} {% if slot_time <= as_timestamp(deadline) %}
{% if not deadline_ts or ts <= deadline_ts %}
{% set valid = valid + [p] %} {% set valid = valid + [p] %}
{% endif %} {% endif %}
{% endif %}
{% endfor %} {% endfor %}
{# Pick cheapest hours #} {# Sorter efter pris #}
{% set cheapest = (valid | sort(attribute='price'))[:hours_needed] %} {% set sorted = valid | sort(attribute='price') %}
{# Current hour #} {# Vælg de billigste slots der dækker ladetiden #}
{% set now_slot = now().replace(minute=0, second=0, microsecond=0).isoformat() %} {% set cheapest = sorted[:hours_needed] %}
{# Tjek om nuværende slot er i listen #}
{% set now_slot = now().replace(minute=(now().minute//15)*15, second=0, microsecond=0).isoformat() %}
{{ cheapest | selectattr('hour','equalto',now_slot) | list | count > 0 }} {{ cheapest | selectattr('hour','equalto',now_slot) | list | count > 0 }}