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:
+22 -24
View File
@@ -1,29 +1,27 @@
binary_sensor: platform: template
- name: tesla_charge_now sensors:
state: > - name: tesla_charge_now
{% set deadline_raw = states('input_datetime.tesla_charge_deadline') %} state: >
{% set deadline_ts = as_timestamp(deadline_raw) if deadline_raw not in ['unknown','unavailable',''] else none %} {% set deadline = states('input_datetime.tesla_charge_deadline') %}
{% 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 valid = [] %}
{% set hours_needed = states('sensor.tesla_charge_hours_needed') | float(0) | round(0, 'ceil') %} {# Filtrer kun timer før deadline #}
{% for p in prices %}
{% set slot_time = as_timestamp(strptime(p.hour,'%Y-%m-%dT%H:%M:%S')) %}
{% if slot_time <= as_timestamp(deadline) %}
{% set valid = valid + [p] %}
{% endif %}
{% endfor %}
{% set prices = (state_attr('sensor.energidataservice','today') or []) {# Sorter efter pris #}
+ (state_attr('sensor.energidataservice','tomorrow') or []) %} {% set sorted = valid | sort(attribute='price') %}
{# Filter valid price entries and apply deadline #} {# Vælg de billigste slots der dækker ladetiden #}
{% set valid = [] %} {% set cheapest = sorted[:hours_needed] %}
{% for p in prices %}
{% if p.hour is defined and p.hour %}
{% set ts = as_timestamp(p.hour) %}
{% if not deadline_ts or ts <= deadline_ts %}
{% set valid = valid + [p] %}
{% endif %}
{% endif %}
{% endfor %}
{# Pick cheapest hours #} {# Tjek om nuværende slot er i listen #}
{% set cheapest = (valid | sort(attribute='price'))[:hours_needed] %} {% set now_slot = now().replace(minute=(now().minute//15)*15, second=0, microsecond=0).isoformat() %}
{{ cheapest | selectattr('hour','equalto',now_slot) | list | count > 0 }}
{# Current hour #}
{% set now_slot = now().replace(minute=0, second=0, microsecond=0).isoformat() %}
{{ cheapest | selectattr('hour','equalto',now_slot) | list | count > 0 }}