Home Assistant: Fensterstatus, Regenschutz, Einbruchwarnung für Camper/Haus (mit Floorplan)🚐

Willkommen zu unserem neuen Video! Erfahre, wie Home Assistant dein Zuhause, ob mobil oder nicht schützt, indem es offene Fenster oder Türen erkennt, und damit vor Regen warnt und Einbrüche verhindert! Entdecke auch unseren Camper-Floorplan und triff unseren spannenden Gast, der dir auch einen Einblick in seine Lösungen gibt. Verpasse nicht diese spannende Einführung in die Welt der Smart (mobil) Home-Sicherheit!

Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

Vielen Dank für eure Unterstützung!

In meinem Shop findest du auch die verwendeten Produkte * aus dem Video

Um Alarmo installieren zu können benötigst du HACS. Wie du HACS installierst, erfährst du in diesem Video:

YouTube player

Wie du Home Assistant auf deinem Raspberry PI 4 oder 5 für z.B. deinen Camper installieren kannst, zeige ich dir in diesem kurzen Video:

YouTube player

Den Kanal von Daniel (smarthomeyourself) findest du hier:

Das ausführliche Alarmo Tutorial von Daniel könnt ihr hier finden:

YouTube player

Vielen Dank auch an Maxx für sein tolles Berechnungstool und natürlich auch für seine Klasse Videos im Blick auf Dashboards und Flurplänen. Schaut bei ihm gerne mal vorbei:

Position auf der Picture Elements Card berechnen! Von Pixel auf % – Smart Home Bastler

Den Kanal von Maxx findest du hier: Kanal

Im Video zeige ich euch , wie ihr einen einfachen Flurplan erstellt. Egal ob Camper oder Haus. Hier habt ihr den Beispielcode (Bildelemente Karte) aus dem Video:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
type: picture-elements
elements:
- type: state-icon
entity: binary_sensor.fenster_hinten
style:
top: 43%
left: 4%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.fenster_hinten_rechts
style:
top: 85%
left: 21%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.fenster_mitte_rechts
style:
top: 85%
left: 48%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.fenster_vorne_rechts_unten
style:
top: 85%
left: 73%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.fenster_vorne_rechts_oben
style:
top: 85%
left: 78%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.fenster_hinten_links
style:
top: 10%
left: 21%
'--mdc-icon-size': 100%
background_colour: green
color: transparent
- type: state-icon
entity: binary_sensor.fenster_vorne_links
style:
top: 10%
left: 74%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.dachluke_hinten
style:
top: 48%
left: 22%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.dachluke_mitte
style:
top: 48%
left: 48%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.dachluke_vorne
style:
top: 48%
left: 74%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.dachluke_mitte_links
style:
top: 29%
left: 41%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: binary_sensor.tuer
style:
top: 73%
left: 36%
'--mdc-icon-size': 100%
color: transparent
- type: state-icon
entity: input_boolean.unterwegs
tap_action:
action: toggle
style:
top: 88%
left: 34%
'--mdc-icon-size': 100%
color: transparent
image: /local/images/510TK.png
type: picture-elements elements: - type: state-icon entity: binary_sensor.fenster_hinten style: top: 43% left: 4% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.fenster_hinten_rechts style: top: 85% left: 21% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.fenster_mitte_rechts style: top: 85% left: 48% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.fenster_vorne_rechts_unten style: top: 85% left: 73% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.fenster_vorne_rechts_oben style: top: 85% left: 78% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.fenster_hinten_links style: top: 10% left: 21% '--mdc-icon-size': 100% background_colour: green color: transparent - type: state-icon entity: binary_sensor.fenster_vorne_links style: top: 10% left: 74% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.dachluke_hinten style: top: 48% left: 22% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.dachluke_mitte style: top: 48% left: 48% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.dachluke_vorne style: top: 48% left: 74% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.dachluke_mitte_links style: top: 29% left: 41% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: binary_sensor.tuer style: top: 73% left: 36% '--mdc-icon-size': 100% color: transparent - type: state-icon entity: input_boolean.unterwegs tap_action: action: toggle style: top: 88% left: 34% '--mdc-icon-size': 100% color: transparent image: /local/images/510TK.png
type: picture-elements
elements:
  - type: state-icon
    entity: binary_sensor.fenster_hinten
    style:
      top: 43%
      left: 4%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.fenster_hinten_rechts
    style:
      top: 85%
      left: 21%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.fenster_mitte_rechts
    style:
      top: 85%
      left: 48%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.fenster_vorne_rechts_unten
    style:
      top: 85%
      left: 73%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.fenster_vorne_rechts_oben
    style:
      top: 85%
      left: 78%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.fenster_hinten_links
    style:
      top: 10%
      left: 21%
      '--mdc-icon-size': 100%
      background_colour: green
      color: transparent
  - type: state-icon
    entity: binary_sensor.fenster_vorne_links
    style:
      top: 10%
      left: 74%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.dachluke_hinten
    style:
      top: 48%
      left: 22%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.dachluke_mitte
    style:
      top: 48%
      left: 48%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.dachluke_vorne
    style:
      top: 48%
      left: 74%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.dachluke_mitte_links
    style:
      top: 29%
      left: 41%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: binary_sensor.tuer
    style:
      top: 73%
      left: 36%
      '--mdc-icon-size': 100%
      color: transparent
  - type: state-icon
    entity: input_boolean.unterwegs
    tap_action:
      action: toggle
    style:
      top: 88%
      left: 34%
      '--mdc-icon-size': 100%
      color: transparent
image: /local/images/510TK.png

Um die Fenster zu überwachen wurde auch eine kleine Automatisierung vorgestellt.

Den YAML Code dazu findest du hier:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Benachrichtigung , wenn Fenster noch geöffnet ist
description: ""
trigger:
- platform: state
entity_id:
- input_boolean.unterwegs
to: "on"
- platform: time_pattern
minutes: /30
condition:
- condition: and
conditions:
- condition: state
entity_id: binary_sensor.fenster_und_dachluken
state: "on"
- condition: state
entity_id: input_boolean.unterwegs
state: "on"
action:
- service: notify.notify
metadata: {}
data:
message: >-
Achtung: {{ expand('binary_sensor.fenster_und_dachluken') |
selectattr('state','eq','on') | map(attribute='name') | list | join
(',\n') }} ist noch geöffnet
mode: single
alias: Benachrichtigung , wenn Fenster noch geöffnet ist description: "" trigger: - platform: state entity_id: - input_boolean.unterwegs to: "on" - platform: time_pattern minutes: /30 condition: - condition: and conditions: - condition: state entity_id: binary_sensor.fenster_und_dachluken state: "on" - condition: state entity_id: input_boolean.unterwegs state: "on" action: - service: notify.notify metadata: {} data: message: >- Achtung: {{ expand('binary_sensor.fenster_und_dachluken') | selectattr('state','eq','on') | map(attribute='name') | list | join (',\n') }} ist noch geöffnet mode: single
alias: Benachrichtigung , wenn Fenster noch geöffnet ist
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.unterwegs
    to: "on"
  - platform: time_pattern
    minutes: /30
condition:
  - condition: and
    conditions:
      - condition: state
        entity_id: binary_sensor.fenster_und_dachluken
        state: "on"
      - condition: state
        entity_id: input_boolean.unterwegs
        state: "on"
action:
  - service: notify.notify
    metadata: {}
    data:
      message: >-
        Achtung: {{ expand('binary_sensor.fenster_und_dachluken') |
        selectattr('state','eq','on') | map(attribute='name') | list | join
        (',\n') }} ist noch geöffnet
mode: single

Update 01.07.2024: Da mich schon ein paar Fragen zur Einbindung des Rauchmelders ereilt haben, möchte ich euch das Script für den Aqara Rauchmelder hier noch ergänzend zur Verfügung stellen.

Script Sirene einschalten:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Rauchmelder Sirene einschalten
sequence:
- device_id: cb8b15beb28b9adf6ddcc79b2d193bea
domain: select
entity_id: 1a08cf7364ee5aee41aba55636f6db6b
type: select_option
option: alarm
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- device_id: cb8b15beb28b9adf6ddcc79b2d193bea
domain: select
entity_id: 1a08cf7364ee5aee41aba55636f6db6b
type: select_option
option: mute
description: ""
icon: mdi:alarm-light
alias: Rauchmelder Sirene einschalten sequence: - device_id: cb8b15beb28b9adf6ddcc79b2d193bea domain: select entity_id: 1a08cf7364ee5aee41aba55636f6db6b type: select_option option: alarm - delay: hours: 0 minutes: 0 seconds: 5 milliseconds: 0 - device_id: cb8b15beb28b9adf6ddcc79b2d193bea domain: select entity_id: 1a08cf7364ee5aee41aba55636f6db6b type: select_option option: mute description: "" icon: mdi:alarm-light
alias: Rauchmelder Sirene einschalten
sequence:
  - device_id: cb8b15beb28b9adf6ddcc79b2d193bea
    domain: select
    entity_id: 1a08cf7364ee5aee41aba55636f6db6b
    type: select_option
    option: alarm
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - device_id: cb8b15beb28b9adf6ddcc79b2d193bea
    domain: select
    entity_id: 1a08cf7364ee5aee41aba55636f6db6b
    type: select_option
    option: mute
description: ""
icon: mdi:alarm-light

Rauchmelder Sirene ausschalten:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Rauchmelder Sirene ausschalten
sequence:
- device_id: cb8b15beb28b9adf6ddcc79b2d193bea
domain: select
entity_id: 1a08cf7364ee5aee41aba55636f6db6b
type: select_option
option: mute
description: ""
icon: mdi:alarm-light-off
alias: Rauchmelder Sirene ausschalten sequence: - device_id: cb8b15beb28b9adf6ddcc79b2d193bea domain: select entity_id: 1a08cf7364ee5aee41aba55636f6db6b type: select_option option: mute description: "" icon: mdi:alarm-light-off
alias: Rauchmelder Sirene ausschalten
sequence:
  - device_id: cb8b15beb28b9adf6ddcc79b2d193bea
    domain: select
    entity_id: 1a08cf7364ee5aee41aba55636f6db6b
    type: select_option
    option: mute
description: ""
icon: mdi:alarm-light-off

Home Assistant: EVCC-Daten zu dynamischen Strompreisen auslesen, visualisieren und damit rechnen

Verwandle dein Smart Home mit dynamischen Strompreisen! In diesem Video zeigen wir dir, wie du mit Home Assistant und EVCC nicht nur die aktuellen Strompreise ausliest, sondern auch visualisierst und clever damit rechnest. Spare bares Geld und optimiere deinen Energieverbrauch – jetzt reinschauen und profitieren! Plus: Erfahre alles über eine exklusive Bonusautomatisierung, die dir noch mehr Effizienz bringt! 💡🔌💸

Wenn du mehr über EVCC kennenlernen willst, dann findest du hier weitere nützliche Informationen.

Aus meiner Sicht ist EVCC nicht nur eine Managementsoftware für eure Wallbox und Elektroauto. Mit EVCC könnt ihr unabhängig von der Schnittstelle eures Wechselrichters, Batteriespeichers, dynamischen Stromanbieter etc… auf aufbereiteten Daten agieren und diese für tolle Automatisierungen und Visualisierungen in Home Assistant nutzen.

Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

https://amzn.to/3KsGngK

Um die Inhalte besser verstehen zu können, empfehle ich euch folgende Videos ebenfalls anzuschauen:

YouTube player
Hier erfährst du in wenigen Minuten, wie man HACS installiert.
YouTube player
Basisinstallation der Software EVCC
YouTube player
In diesem Video zeige ich euch, wie man mit Home Assistant aus den Daten von EVCC MQTT Sensoren erstellt.

Links , in denen ihr weitere Informationen findet:

Restful Sensor in der Configuration.yaml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sensor:
- platform: rest
name: EVCC Tariff Forecast
unique_id: evcc_tariff_forecast
resource: http://192.168.101.3:7070/api/tariff/grid
value_template: "{{value_json.result.rates[0].price}}"
json_attributes:
- result
scan_interval: 60
sensor: - platform: rest name: EVCC Tariff Forecast unique_id: evcc_tariff_forecast resource: http://192.168.101.3:7070/api/tariff/grid value_template: "{{value_json.result.rates[0].price}}" json_attributes: - result scan_interval: 60
sensor:

  - platform: rest
    name: EVCC Tariff Forecast
    unique_id: evcc_tariff_forecast
    resource: http://192.168.101.3:7070/api/tariff/grid
    value_template: "{{value_json.result.rates[0].price}}"
    json_attributes:
       - result
    scan_interval: 60

Template Helfer : sensor.evcc_tibber_forecast_max_value_today

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', now().strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt', now().strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | max }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', now().strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt', now().strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | max }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', now().strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt', now().strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | max }}

Template Helfer: evcc_tibber_forecast_min_value_today

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', now().strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt', now().strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | min }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', now().strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt', now().strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | min }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', now().strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt', now().strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | min }}

Template Helfer: evcc_tibber_forecast_max_value_tomorrow

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', (now() + timedelta(days=1)).strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt',(now() + timedelta(days=1)).strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | max | default(0) }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', (now() + timedelta(days=1)).strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt',(now() + timedelta(days=1)).strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | max | default(0) }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', (now() + timedelta(days=1)).strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt',(now() + timedelta(days=1)).strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | max | default(0) }}

Template Helfer: evcc_tibber_forecast_min_value_tomorrow

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', (now() + timedelta(days=1)).strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt',(now() + timedelta(days=1)).strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | min| default(0) }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', (now() + timedelta(days=1)).strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt',(now() + timedelta(days=1)).strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | min| default(0) }}
{{state_attr('sensor.evcc_tariff_forecast', 'result')['rates'] | selectattr('start', 'ge', (now() + timedelta(days=1)).strftime('%Y-%m-%dT00:00:00%z')) | selectattr('start','lt',(now() + timedelta(days=1)).strftime('%Y-%m-%dT23:59:59%z')) | map(attribute='price') | min| default(0) }}

Für die Visualisierung habe ich die Apex Chart Card aus dem Video ein wenig optimiert. Hier findet ihr die optimierte Variante als Code Beispiel ( die nötigen MQTT Sensoren aus EVCC findet ihr weiter unten ) :

Weitere Infos zum Umgang mit der Apex Chart Card, habe ich in diesem Video erklärt:

YouTube player
Forecastdaten mit Apex Chart Card visualisieren.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
type: custom:apexcharts-card
apex_config:
chart:
height: 268px
all_series_config:
unit: kWh
header:
title: Evcc Tibber Forecast
show: true
standard_format: true
show_states: true
colorize_states: true
graph_span: 2d
span:
start: day
offset: '+0'
now:
show: true
label: Jetzt
yaxis:
- id: kwh
min: 0
apex_config:
tickAmount: 5
- id: header
show: false
series:
- entity: sensor.evcc_tariff_forecast
yaxis_id: kwh
type: area
name: Forecast heute
color: green
data_generator: >
let now = new Date().getTime();
let rates = entity.attributes.result.rates;
let filteredRates = rates.filter(rate => new Date(rate["start"]).getTime()
<= now);
return filteredRates.map(rate => [new Date(rate["start"]).getTime(),
rate["price"]]);
show:
legend_value: false
in_header: false
stroke_width: 4
float_precision: 2
extend_to: false
- entity: sensor.evcc_tariff_forecast
yaxis_id: kwh
type: area
name: Forecast heute (nach Jetzt)
color: yellow
data_generator: >
let now = new Date().getTime()- 3600000;
let rates = entity.attributes.result.rates;
let filteredRates = rates.filter(rate => new Date(rate["start"]).getTime()
> now);
return filteredRates.map(rate => [new Date(rate["start"]).getTime(),
rate["price"]]);
show:
legend_value: false
in_header: false
stroke_width: 4
float_precision: 2
extend_to: false
- entity: sensor.evcc_tariff_grid
color: green
yaxis_id: header
name: Aktueller Preis
unit: ' € '
float_precision: 2
show:
legend_value: true
in_header: true
in_chart: false
- entity: sensor.evcc_tibber_forecast_min_value_today
color: yellow
yaxis_id: header
name: Min(heute)
unit: ' € '
float_precision: 2
show:
legend_value: true
in_header: true
in_chart: false
- entity: sensor.evcc_tibber_forecast_max_value_today
color: yellow
yaxis_id: header
name: Max(heute)
unit: ' € '
float_precision: 2
show:
legend_value: true
in_header: true
in_chart: false
- entity: sensor.evcc_tibber_forecast_min_value_tomorrow
color: yellow
yaxis_id: header
name: Min(morgen)
unit: ' € '
float_precision: 2
show:
legend_value: true
in_header: true
in_chart: false
- entity: sensor.evcc_tibber_forecast_max_value_tomorrow
color: yellow
yaxis_id: header
name: Max(morgen)
unit: ' € '
float_precision: 2
show:
legend_value: true
in_header: true
in_chart: false
type: custom:apexcharts-card apex_config: chart: height: 268px all_series_config: unit: kWh header: title: Evcc Tibber Forecast show: true standard_format: true show_states: true colorize_states: true graph_span: 2d span: start: day offset: '+0' now: show: true label: Jetzt yaxis: - id: kwh min: 0 apex_config: tickAmount: 5 - id: header show: false series: - entity: sensor.evcc_tariff_forecast yaxis_id: kwh type: area name: Forecast heute color: green data_generator: > let now = new Date().getTime(); let rates = entity.attributes.result.rates; let filteredRates = rates.filter(rate => new Date(rate["start"]).getTime() <= now); return filteredRates.map(rate => [new Date(rate["start"]).getTime(), rate["price"]]); show: legend_value: false in_header: false stroke_width: 4 float_precision: 2 extend_to: false - entity: sensor.evcc_tariff_forecast yaxis_id: kwh type: area name: Forecast heute (nach Jetzt) color: yellow data_generator: > let now = new Date().getTime()- 3600000; let rates = entity.attributes.result.rates; let filteredRates = rates.filter(rate => new Date(rate["start"]).getTime() > now); return filteredRates.map(rate => [new Date(rate["start"]).getTime(), rate["price"]]); show: legend_value: false in_header: false stroke_width: 4 float_precision: 2 extend_to: false - entity: sensor.evcc_tariff_grid color: green yaxis_id: header name: Aktueller Preis unit: ' € ' float_precision: 2 show: legend_value: true in_header: true in_chart: false - entity: sensor.evcc_tibber_forecast_min_value_today color: yellow yaxis_id: header name: Min(heute) unit: ' € ' float_precision: 2 show: legend_value: true in_header: true in_chart: false - entity: sensor.evcc_tibber_forecast_max_value_today color: yellow yaxis_id: header name: Max(heute) unit: ' € ' float_precision: 2 show: legend_value: true in_header: true in_chart: false - entity: sensor.evcc_tibber_forecast_min_value_tomorrow color: yellow yaxis_id: header name: Min(morgen) unit: ' € ' float_precision: 2 show: legend_value: true in_header: true in_chart: false - entity: sensor.evcc_tibber_forecast_max_value_tomorrow color: yellow yaxis_id: header name: Max(morgen) unit: ' € ' float_precision: 2 show: legend_value: true in_header: true in_chart: false
type: custom:apexcharts-card
apex_config:
  chart:
    height: 268px
all_series_config:
  unit: kWh
header:
  title: Evcc Tibber Forecast
  show: true
  standard_format: true
  show_states: true
  colorize_states: true
graph_span: 2d
span:
  start: day
  offset: '+0'
now:
  show: true
  label: Jetzt
yaxis:
  - id: kwh
    min: 0
    apex_config:
      tickAmount: 5
  - id: header
    show: false
series:
  - entity: sensor.evcc_tariff_forecast
    yaxis_id: kwh
    type: area
    name: Forecast heute
    color: green
    data_generator: >
      let now = new Date().getTime();

      let rates = entity.attributes.result.rates;

      let filteredRates = rates.filter(rate => new Date(rate["start"]).getTime()
      <= now);

      return filteredRates.map(rate => [new Date(rate["start"]).getTime(),
      rate["price"]]);
    show:
      legend_value: false
      in_header: false
    stroke_width: 4
    float_precision: 2
    extend_to: false
  - entity: sensor.evcc_tariff_forecast
    yaxis_id: kwh
    type: area
    name: Forecast heute (nach Jetzt)
    color: yellow
    data_generator: >
      let now = new Date().getTime()- 3600000;

      let rates = entity.attributes.result.rates;

      let filteredRates = rates.filter(rate => new Date(rate["start"]).getTime()
      > now);

      return filteredRates.map(rate => [new Date(rate["start"]).getTime(),
      rate["price"]]);
    show:
      legend_value: false
      in_header: false
    stroke_width: 4
    float_precision: 2
    extend_to: false
  - entity: sensor.evcc_tariff_grid
    color: green
    yaxis_id: header
    name: Aktueller Preis
    unit: ' € '
    float_precision: 2
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.evcc_tibber_forecast_min_value_today
    color: yellow
    yaxis_id: header
    name: Min(heute)
    unit: ' € '
    float_precision: 2
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.evcc_tibber_forecast_max_value_today
    color: yellow
    yaxis_id: header
    name: Max(heute)
    unit: ' € '
    float_precision: 2
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.evcc_tibber_forecast_min_value_tomorrow
    color: yellow
    yaxis_id: header
    name: Min(morgen)
    unit: ' € '
    float_precision: 2
    show:
      legend_value: true
      in_header: true
      in_chart: false
  - entity: sensor.evcc_tibber_forecast_max_value_tomorrow
    color: yellow
    yaxis_id: header
    name: Max(morgen)
    unit: ' € '
    float_precision: 2
    show:
      legend_value: true
      in_header: true
      in_chart: false

Alle diese Daten habe ich auch aus EVCC extrahiert. Hier findet ihr die nötigen MQTT-Sensoren:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mqtt:
sensor:
- name: "EVCC Grid Power"
unique_id: evcc_grid_power
state_topic: "evcc/site/gridPower"
unit_of_measurement: "W"
availability_topic: "evcc/status"
- name: "EVCC PV Power"
unique_id: evcc_pv_power
state_topic: "evcc/site/pvPower"
#value_template: "{{ value | round(1) }}"
unit_of_measurement: "W"
availability_topic: "evcc/status"
- name: "EVCC Tariff Grid"
unique_id: evcc_tariff_grid
state_topic: "evcc/site/tariffGrid"
unit_of_measurement: "EUR/kWh"
availability_topic: "evcc/status"
- name: "EVCC Tariff Feed In"
unique_id: 3bd64d9d-0e8d-41ad-9db3-b0a4774120c1
state_topic: "evcc/site/tariffFeedIn"
unit_of_measurement: "EUR/kWh"
availability_topic: "evcc/status"
- name: "EVCC geladen an Wallbox"
unique_id: evcc_geladen_an_Wallbox
state_topic: "evcc/site/statistics/total/chargedKWh"
unit_of_measurement: "kWh"
availability_topic: "evcc/status"
device_class: energy
state_class: total_increasing
- name: "EVCC Hausverbrauch"
unique_id: evcc_hausverbrauch
state_topic: "evcc/site/homePower"
unit_of_measurement: "W"
availability_topic: "evcc/status"
- name: "EVCC Battery Power"
unique_id: evcc_battery_Power
state_topic: "evcc/site/batteryPower"
unit_of_measurement: "W"
availability_topic: "evcc/status"
mqtt: sensor: - name: "EVCC Grid Power" unique_id: evcc_grid_power state_topic: "evcc/site/gridPower" unit_of_measurement: "W" availability_topic: "evcc/status" - name: "EVCC PV Power" unique_id: evcc_pv_power state_topic: "evcc/site/pvPower" #value_template: "{{ value | round(1) }}" unit_of_measurement: "W" availability_topic: "evcc/status" - name: "EVCC Tariff Grid" unique_id: evcc_tariff_grid state_topic: "evcc/site/tariffGrid" unit_of_measurement: "EUR/kWh" availability_topic: "evcc/status" - name: "EVCC Tariff Feed In" unique_id: 3bd64d9d-0e8d-41ad-9db3-b0a4774120c1 state_topic: "evcc/site/tariffFeedIn" unit_of_measurement: "EUR/kWh" availability_topic: "evcc/status" - name: "EVCC geladen an Wallbox" unique_id: evcc_geladen_an_Wallbox state_topic: "evcc/site/statistics/total/chargedKWh" unit_of_measurement: "kWh" availability_topic: "evcc/status" device_class: energy state_class: total_increasing - name: "EVCC Hausverbrauch" unique_id: evcc_hausverbrauch state_topic: "evcc/site/homePower" unit_of_measurement: "W" availability_topic: "evcc/status" - name: "EVCC Battery Power" unique_id: evcc_battery_Power state_topic: "evcc/site/batteryPower" unit_of_measurement: "W" availability_topic: "evcc/status"
mqtt: 

  sensor:
   - name: "EVCC Grid Power"
     unique_id: evcc_grid_power
     state_topic: "evcc/site/gridPower"
     unit_of_measurement: "W"
     availability_topic: "evcc/status"
     
   - name: "EVCC PV Power"
     unique_id: evcc_pv_power
     state_topic: "evcc/site/pvPower"
     #value_template: "{{ value | round(1) }}"
     unit_of_measurement: "W"
     availability_topic: "evcc/status"
     
   - name: "EVCC Tariff Grid"
     unique_id: evcc_tariff_grid
     state_topic: "evcc/site/tariffGrid"
     unit_of_measurement: "EUR/kWh"
     availability_topic: "evcc/status"

   - name: "EVCC Tariff Feed In"
     unique_id: 3bd64d9d-0e8d-41ad-9db3-b0a4774120c1
     state_topic: "evcc/site/tariffFeedIn"
     unit_of_measurement: "EUR/kWh"
     availability_topic: "evcc/status"
     
   - name: "EVCC geladen an Wallbox"
     unique_id: evcc_geladen_an_Wallbox
     state_topic: "evcc/site/statistics/total/chargedKWh"
     unit_of_measurement: "kWh"
     availability_topic: "evcc/status"
     device_class: energy
     state_class: total_increasing

   - name: "EVCC Hausverbrauch"
     unique_id: evcc_hausverbrauch
     state_topic: "evcc/site/homePower"
     unit_of_measurement: "W"
     availability_topic: "evcc/status"
     
   - name: "EVCC Battery Power"
     unique_id: evcc_battery_Power
     state_topic: "evcc/site/batteryPower"
     unit_of_measurement: "W"
     availability_topic: "evcc/status"

Bonus shell_command Sensor für das Deaktivieren der EVCC Batteriemanagement Funktion über die REST API von EVCC in der Configuration.yaml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
shell_command:
batterie_aus: curl -X POST http://192.168.101.3:7070/api/batterydischargecontrol/false
batterie_an: curl -X POST http://192.168.101.3:7070/api/batterydischargecontrol/true
shell_command: batterie_aus: curl -X POST http://192.168.101.3:7070/api/batterydischargecontrol/false batterie_an: curl -X POST http://192.168.101.3:7070/api/batterydischargecontrol/true
shell_command:
  batterie_aus: curl -X POST http://192.168.101.3:7070/api/batterydischargecontrol/false
  batterie_an: curl -X POST http://192.168.101.3:7070/api/batterydischargecontrol/true

Automatisierung , um bei sehr günstigem Strompreis ( Preis liegt unter der Einspeisevergütung) den Batteriespeicher zu laden:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Speicher Laden und abschalten, da so günstiger
description: ""
trigger:
- platform: numeric_state
entity_id:
- sensor.evcc_tariff_grid
below: sensor.evcc_tariff_feed_in
id: Es ist günstiger aus dem Netz zu beziehen
- platform: numeric_state
entity_id:
- sensor.evcc_tariff_grid
id: Es ist teurer aus dem Netz zu beziehen
above: sensor.evcc_tariff_feed_in
- platform: numeric_state
entity_id:
- sensor.evcc_battery_soc
above: 99
id: Speicher hat 100 % erreicht
condition:
- condition: time
after: "06:00:00"
before: "20:00:00"
action:
- choose:
- conditions:
- condition: trigger
id:
- Es ist günstiger aus dem Netz zu beziehen
sequence:
- service: shell_command.batterie_aus
metadata: {}
data: {}
- device_id: 1659e926aef842a56f4fc8960bf10ca1
domain: select
entity_id: 6427b7e3fd03320c47261c2767cc0c41
type: select_option
option: Charge from Solar Power and Grid
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- device_id: 1659e926aef842a56f4fc8960bf10ca1
domain: number
entity_id: cedb1c19907bf5f26d82807c7a46b72e
type: set_value
value: 36000
- conditions:
- condition: trigger
id:
- Es ist teurer aus dem Netz zu beziehen
sequence:
- service: shell_command.batterie_an
metadata: {}
data: {}
- device_id: 1659e926aef842a56f4fc8960bf10ca1
domain: select
entity_id: 6427b7e3fd03320c47261c2767cc0c41
type: select_option
option: Maximize Self Consumption
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- device_id: 1659e926aef842a56f4fc8960bf10ca1
domain: number
entity_id: cedb1c19907bf5f26d82807c7a46b72e
type: set_value
value: 3600
- conditions:
- condition: and
conditions:
- condition: trigger
id:
- Speicher hat 100 % erreicht
- condition: numeric_state
entity_id: sensor.evcc_tariff_grid
below: sensor.evcc_tariff_feed_in
sequence:
- device_id: 1659e926aef842a56f4fc8960bf10ca1
domain: select
entity_id: 6427b7e3fd03320c47261c2767cc0c41
type: select_option
option: Solar Power Only (Off)
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- device_id: 1659e926aef842a56f4fc8960bf10ca1
domain: number
entity_id: cedb1c19907bf5f26d82807c7a46b72e
type: set_value
value: 36000
mode: single
alias: Speicher Laden und abschalten, da so günstiger description: "" trigger: - platform: numeric_state entity_id: - sensor.evcc_tariff_grid below: sensor.evcc_tariff_feed_in id: Es ist günstiger aus dem Netz zu beziehen - platform: numeric_state entity_id: - sensor.evcc_tariff_grid id: Es ist teurer aus dem Netz zu beziehen above: sensor.evcc_tariff_feed_in - platform: numeric_state entity_id: - sensor.evcc_battery_soc above: 99 id: Speicher hat 100 % erreicht condition: - condition: time after: "06:00:00" before: "20:00:00" action: - choose: - conditions: - condition: trigger id: - Es ist günstiger aus dem Netz zu beziehen sequence: - service: shell_command.batterie_aus metadata: {} data: {} - device_id: 1659e926aef842a56f4fc8960bf10ca1 domain: select entity_id: 6427b7e3fd03320c47261c2767cc0c41 type: select_option option: Charge from Solar Power and Grid - delay: hours: 0 minutes: 0 seconds: 10 milliseconds: 0 - device_id: 1659e926aef842a56f4fc8960bf10ca1 domain: number entity_id: cedb1c19907bf5f26d82807c7a46b72e type: set_value value: 36000 - conditions: - condition: trigger id: - Es ist teurer aus dem Netz zu beziehen sequence: - service: shell_command.batterie_an metadata: {} data: {} - device_id: 1659e926aef842a56f4fc8960bf10ca1 domain: select entity_id: 6427b7e3fd03320c47261c2767cc0c41 type: select_option option: Maximize Self Consumption - delay: hours: 0 minutes: 0 seconds: 10 milliseconds: 0 - device_id: 1659e926aef842a56f4fc8960bf10ca1 domain: number entity_id: cedb1c19907bf5f26d82807c7a46b72e type: set_value value: 3600 - conditions: - condition: and conditions: - condition: trigger id: - Speicher hat 100 % erreicht - condition: numeric_state entity_id: sensor.evcc_tariff_grid below: sensor.evcc_tariff_feed_in sequence: - device_id: 1659e926aef842a56f4fc8960bf10ca1 domain: select entity_id: 6427b7e3fd03320c47261c2767cc0c41 type: select_option option: Solar Power Only (Off) - delay: hours: 0 minutes: 0 seconds: 10 milliseconds: 0 - device_id: 1659e926aef842a56f4fc8960bf10ca1 domain: number entity_id: cedb1c19907bf5f26d82807c7a46b72e type: set_value value: 36000 mode: single
alias: Speicher Laden und abschalten, da so günstiger
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.evcc_tariff_grid
    below: sensor.evcc_tariff_feed_in
    id: Es ist günstiger aus dem Netz zu beziehen
  - platform: numeric_state
    entity_id:
      - sensor.evcc_tariff_grid
    id: Es ist teurer aus dem Netz zu beziehen
    above: sensor.evcc_tariff_feed_in
  - platform: numeric_state
    entity_id:
      - sensor.evcc_battery_soc
    above: 99
    id: Speicher hat 100 % erreicht
condition:
  - condition: time
    after: "06:00:00"
    before: "20:00:00"
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Es ist günstiger aus dem Netz zu beziehen
        sequence:
          - service: shell_command.batterie_aus
            metadata: {}
            data: {}
          - device_id: 1659e926aef842a56f4fc8960bf10ca1
            domain: select
            entity_id: 6427b7e3fd03320c47261c2767cc0c41
            type: select_option
            option: Charge from Solar Power and Grid
          - delay:
              hours: 0
              minutes: 0
              seconds: 10
              milliseconds: 0
          - device_id: 1659e926aef842a56f4fc8960bf10ca1
            domain: number
            entity_id: cedb1c19907bf5f26d82807c7a46b72e
            type: set_value
            value: 36000
      - conditions:
          - condition: trigger
            id:
              - Es ist teurer aus dem Netz zu beziehen
        sequence:
          - service: shell_command.batterie_an
            metadata: {}
            data: {}
          - device_id: 1659e926aef842a56f4fc8960bf10ca1
            domain: select
            entity_id: 6427b7e3fd03320c47261c2767cc0c41
            type: select_option
            option: Maximize Self Consumption
          - delay:
              hours: 0
              minutes: 0
              seconds: 10
              milliseconds: 0
          - device_id: 1659e926aef842a56f4fc8960bf10ca1
            domain: number
            entity_id: cedb1c19907bf5f26d82807c7a46b72e
            type: set_value
            value: 3600
      - conditions:
          - condition: and
            conditions:
              - condition: trigger
                id:
                  - Speicher hat 100 % erreicht
              - condition: numeric_state
                entity_id: sensor.evcc_tariff_grid
                below: sensor.evcc_tariff_feed_in
        sequence:
          - device_id: 1659e926aef842a56f4fc8960bf10ca1
            domain: select
            entity_id: 6427b7e3fd03320c47261c2767cc0c41
            type: select_option
            option: Solar Power Only (Off)
          - delay:
              hours: 0
              minutes: 0
              seconds: 10
              milliseconds: 0
          - device_id: 1659e926aef842a56f4fc8960bf10ca1
            domain: number
            entity_id: cedb1c19907bf5f26d82807c7a46b72e
            type: set_value
            value: 36000
mode: single

Viel Spaß 🙂

Wenn ihr ebenfalls noch Automatisierungsideen oder Lösungen in diesem Zusammenhang habt, kommt gerne auf meinen Discord Server und präsentiert dort eure Lösung.

Home Assistant: Der ultimative Fernzugriff für dein Home Assistant und mehr !

Entdecke die ultimative Lösung für sichere Verbindungen zu deinem Home Assistant! In diesem Video zeige ich dir, wie du mithilfe von Wireguard auf einem V-Server in der Cloud eine absolut sichere Verbindung herstellen kannst. Egal, ob du IPV4, IPV6, DSLite verwendest oder von unterwegs aus zugreifen möchtest – dieser Guide deckt alle Szenarien ab. Ob dein Home Assistant sich in einem Camper, Boot oder zu Hause befindet, diese Methode ermöglicht nicht nur einen direkten Zugriff, sondern auch die Verbindung zu allen anderen Geräten in deinem Netzwerk. Erlebe die Freiheit und Sicherheit einer Wireguard VPN V-Server Variante für dein Smart Home Setup. Schließe dich uns an und entdecke, wie einfach es sein kann, deine Verbindungen zu schützen und gleichzeitig volle Kontrolle über dein Zuhause zu behalten!

Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

Firmware des Mango Routers:

GL.iNet download center (gl-inet.com)

Den Router und auch andere GliNet Router mit mehr Leistung, findest du in meinem Shop * :

V-Server Konsolen Befehle:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ssh root@dieipdeinesvservers
ssh root@dieipdeinesvservers
ssh root@dieipdeinesvservers

Damit wird eine ssh Konsolenverbindung zum V-Server aufgebaut

Um alle Updates des Betriebssystems durchzuführen, werden folgende Befehle benötigt:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt-get update
sudo apt-get upgrade
sudo apt-get update sudo apt-get upgrade
sudo apt-get update
sudo apt-get upgrade

Nun wird überprüft ob die Firewall des Betriebssystems deaktiviert ist. Da wir in der V-Server Verwaltungskonsole eine Firewall haben, wird für unseren Einsatzzweck keine zweite Firewall benötigt.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ufw status
ufw status
ufw status

Ist die Firewall aktiv, deaktivieren wir diese.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ufw disable
ufw disable
ufw disable

Um alle Pakete aus den Netzwerken richtig zu routen, muss das IPv4 Forwarding aktiviert sein.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd /etc/
nano sysctl.conf # öffnet den Editor zur Bearbeitung der Konfiguration
cd /etc/ nano sysctl.conf # öffnet den Editor zur Bearbeitung der Konfiguration
cd /etc/
nano sysctl.conf # öffnet den Editor zur Bearbeitung der Konfiguration

Entferne das „#“ vor dem Parameter „net.ip4.ip_forward=1“

Nun wird der Dienst neu gestartet:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo sysctl -p
sudo sysctl -p
sudo sysctl -p

Installation des Wireguard VPN-Servers:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
curl -L https://install.pivpn.io | bash
curl -L https://install.pivpn.io | bash
curl -L https://install.pivpn.io | bash

Alle nun angezeigten Fenster bestätigen, bis die Aufforderung kommt einen User anzulegen, dort legen wir dann einen User und ein Password unserer Wahl an ( für die folgende Schritte füge ich Screenshots ein):

Alle weiteren Schritte mit OK bestätigen und am Ende des Prozesses Reboot durchführen.

Um nun auch in die Netzwerke routen zu können , müssen folgende Einstellungen in der wg0.conf ergänzt werden.

Dazu brauchen wir zunächst den Namen des Netzwerkadapters:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ifconfig
ifconfig
ifconfig
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nano /etc/wireguard/wg0.conf
nano /etc/wireguard/wg0.conf
nano /etc/wireguard/wg0.conf

Jetzt wird das Routing für PostUp und PostDown konfiguriert, dazu füge hinter ListenPort folgende Zeilen in der wg0.conf ein ( ersetze ggf. ens6 durch den Namen deines Netzwerkadapters):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens6 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens6 -j MASQUERADE
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens6 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens6 -j MASQUERADE
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens6 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens6 -j MASQUERADE

Als nächster Schritt muss bei jeder Änderung in der wg0.conf das Tunnelinterface neu gestartet werden.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wg-quick down wg0
wg-quick up wg0
wg-quick down wg0 wg-quick up wg0
wg-quick down wg0
wg-quick up wg0

Nun kann ein neuer VPN Client erzeugt werden:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pivpn add
pivpn add
pivpn add

Jetzt können wir die Konfigurationsdaten kopieren:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nano /home/vpn/configs/video_rechner.conf
nano /home/vpn/configs/video_rechner.conf
nano /home/vpn/configs/video_rechner.conf

Die Daten aus der Konfiguration kopieren wir uns in die Zwischenablage.

Nun brauchen wir für unseren Rechner einen Client. Diesen findet ihr unter:

Installation – WireGuard

Nach der Installation wird die Software gestartet und auf dem Rechner ein neuer Tunnel erstellt. Die kopierten Daten werden dort eingefügt

Ist dieser schritt erfolgt, kann der Tunnel aktiviert werden:

Nachdem der Tunnel aufgebaut wurde, können wir uns auf den V-Server wieder an der Konsole anmelden und den Status der Clients überprüfen:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pivpn clients
pivpn clients
pivpn clients

HomeAssistant WireguardClient Integration – Vorbereitungen

Wir legen einen neuen Client an, und nennen diesen z.B. homeassistant. Die Schritte sind die selben, wie im obigen Abschnitt.

Wir kopieren uns die Client Konfigurationsdaten aus dem Verzeichnis /home/vpn/homeassistant.conf ( die Schritte gleichen dem obigen Prozess)

Installation des Wireguard Clients im Add-On Store

Repository Url:

https://github.com/bigmoby/hassio-repository-addon

Wir übertragen aus den gespeicherten Informationen die Daten in die Konfiguration des Add-Ons

Nachdem der Client gestartet wurde, kontrollieren wir auf unserem V-Server , ob die Verbindung hergestellt werden konnte.

Wurden Daten gesendet und empfangen, steht die Verbindung

Um den Client (IP 172.16.0.18 ) im gesamten Netzwerk verfügbar zu machen, muss eine Route in der wg0.conf eingefügt werden.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nano /etc/wireguard/wg0.conf
nano /etc/wireguard/wg0.conf
nano /etc/wireguard/wg0.conf

Beim Peer „homeassistant“ fügen wir nun unter AllowedIPs die IPAdresse des Home Assistant Clients hinzu.

Danach führen wir einen Reboot des V-Server aus ( Wenn die Firewall Regeln noch nicht gehärtet wurden, funktioniert auch ein wg-quick down wg0 und wg-quick up wg0 )

Mit route kann man nach dem Reboot kontrollieren, ob die Route gesetzt wurde.

Alle weiteren Schritte wiederholen sich und sind im Video ausführlich beschrieben. Es wird noch gezeigt, wie man ein Handy verbindet und auf einem mobilen Router den Zugriff auf das Netzwerk hinter dem Router erlaubt.

Home Assistant: Wie du HACS installierst (in 3 Minuten )

Dieses Video ist ein weiterer Teil meiner Basics Reihe. Hier zeige ich dir kurz und knapp, wie du HACS den Home Assistant Community Store auf deiner Home Assistant Instanz installierst.

Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

In meinem Shop findest du weitere interessante Produkte *

Tippe das im Add-On Terminal ein:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wget -O - https://get.hacs.xyz | bash -
wget -O - https://get.hacs.xyz | bash -
wget -O - https://get.hacs.xyz | bash -

Home Assistant: Wie du HA auf deinem Raspberry PI 4 oder PI 5 installierst ( unter 4 Min)

Dieses Video ist ein Teil meiner neuen Basics Reihe. Hier zeige ich dir in kurzen und kompakten Schritten, wie du Home Assistant auf deinem Raspberry Pi bringst. Egal ob Pi4 oder Pi5.

Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

In meinem Shop findest du neben dem Raspberry Pi4 und Pi5 auch weitere interessante Produkte *

Links:

Installation – Home Assistant (home-assistant.io)

Home Assistant in Aktion: Anwesenheitssimulation leicht gemacht. Auch für Einsteiger !

Erlebe die Zukunft des Wohnens mit Home Assistant! Entdecke, wie du spielend leicht eine überzeugende Anwesenheitssimulation erstellst – perfekt auch für Neueinsteiger. Tauche ein in die Welt der DIY-Hausautomatisierung und sichere dein Zuhause mit innovativer Technologie.

Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

In meinem Shop findest du interessante Produkte *

Hier findest du meine Beispielautomatisierung:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Video_Präsenzsimulation_Urlaub
description: ""
trigger:
- platform: sun
event: sunset
offset: "-00:30:00"
condition: []
action:
- repeat:
sequence:
- service: light.turn_off
metadata: {}
data: {}
target:
entity_id: light.lichtergruppe1
- delay:
minutes: "{{ range(2,5) | random }}"
- service: light.turn_on
metadata: {}
data_template:
entity_id: |
{{ state_attr('light.lichtergruppe1','entity_id') | random }}
- delay:
minutes: "{{ range(2,5) | random }}"
- service: light.turn_off
metadata: {}
data: {}
target:
entity_id: light.lichtergruppe2
- delay:
minutes: "{{ range(2,5) | random }}"
- service: light.turn_on
metadata: {}
data_template:
entity_id: |
{{ state_attr('light.lichtergruppe2','entity_id') | random }}
while:
- condition: and
conditions:
- condition: time
before: "23:00:00"
- condition: state
entity_id: input_boolean.urlaubsmodus
state: "on"
- if:
- condition: or
conditions:
- condition: trigger
id:
- Urlaub ist beendet
- condition: and # im Video fehlte diese logische & Verknüpfung mit dem Zustand des Urlaubsmodus
conditions:
- condition: trigger
id:
- Es wird nun geschlafen
- condition: state
entity_id: input_boolean.urlaubsmodus
state: "on"
then:
- service: light.turn_off
metadata: {}
data: {}
target:
entity_id:
- light.lichtergruppe1
- light.lichtergruppe2
mode: single
alias: Video_Präsenzsimulation_Urlaub description: "" trigger: - platform: sun event: sunset offset: "-00:30:00" condition: [] action: - repeat: sequence: - service: light.turn_off metadata: {} data: {} target: entity_id: light.lichtergruppe1 - delay: minutes: "{{ range(2,5) | random }}" - service: light.turn_on metadata: {} data_template: entity_id: | {{ state_attr('light.lichtergruppe1','entity_id') | random }} - delay: minutes: "{{ range(2,5) | random }}" - service: light.turn_off metadata: {} data: {} target: entity_id: light.lichtergruppe2 - delay: minutes: "{{ range(2,5) | random }}" - service: light.turn_on metadata: {} data_template: entity_id: | {{ state_attr('light.lichtergruppe2','entity_id') | random }} while: - condition: and conditions: - condition: time before: "23:00:00" - condition: state entity_id: input_boolean.urlaubsmodus state: "on" - if: - condition: or conditions: - condition: trigger id: - Urlaub ist beendet - condition: and # im Video fehlte diese logische & Verknüpfung mit dem Zustand des Urlaubsmodus conditions: - condition: trigger id: - Es wird nun geschlafen - condition: state entity_id: input_boolean.urlaubsmodus state: "on" then: - service: light.turn_off metadata: {} data: {} target: entity_id: - light.lichtergruppe1 - light.lichtergruppe2 mode: single
alias: Video_Präsenzsimulation_Urlaub
description: ""
trigger:
  - platform: sun
    event: sunset
    offset: "-00:30:00"
condition: []
action:
  - repeat:
      sequence:
        - service: light.turn_off
          metadata: {}
          data: {}
          target:
            entity_id: light.lichtergruppe1
        - delay:
            minutes: "{{ range(2,5) | random }}"
        - service: light.turn_on
          metadata: {}
          data_template:
            entity_id: |
              {{ state_attr('light.lichtergruppe1','entity_id') | random }}
        - delay:
            minutes: "{{ range(2,5) | random }}"
        - service: light.turn_off
          metadata: {}
          data: {}
          target:
            entity_id: light.lichtergruppe2
        - delay:
            minutes: "{{ range(2,5) | random }}"
        - service: light.turn_on
          metadata: {}
          data_template:
            entity_id: |
              {{ state_attr('light.lichtergruppe2','entity_id') | random }}
      while:
        - condition: and
          conditions:
            - condition: time
              before: "23:00:00"
            - condition: state
              entity_id: input_boolean.urlaubsmodus
              state: "on"
  - if:
      - condition: or
        conditions:
          - condition: trigger
            id:
              - Urlaub ist beendet
          - condition: and # im Video fehlte diese logische & Verknüpfung mit dem Zustand des Urlaubsmodus
            conditions:
              - condition: trigger
                id:
                  - Es wird nun geschlafen
              - condition: state
                entity_id: input_boolean.urlaubsmodus
                state: "on"
    then:
      - service: light.turn_off
        metadata: {}
        data: {}
        target:
          entity_id:
            - light.lichtergruppe1
            - light.lichtergruppe2
mode: single

Möchte man die Automatisierung direkt beenden, wenn z.B. 23:00 Uhr ist , oder der Urlaubsmodus beendet wird, dann kann man die Automatisierung in den Modus „Neustart“ setzen.

Hier ein Beispiel dazu:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Video_Präsenzsimulation_Urlaub
description: ""
trigger:
- platform: sun
event: sunset
offset: "-00:30:00"
- platform: state
entity_id:
- input_boolean.urlaubsmodus
to: "off"
id: Urlaub ist beendet
- platform: time
at: "23:00:00"
id: Es ist 23 Uhr
condition: []
action:
- repeat:
sequence:
- service: light.turn_off
metadata: {}
data: {}
target:
entity_id: light.lichtergruppe1
- delay:
minutes: "{{ range(2,5) | random }}"
- service: light.turn_on
metadata: {}
data_template:
entity_id: |
{{ state_attr('light.lichtergruppe1','entity_id') | random }}
- delay:
minutes: "{{ range(2,5) | random }}"
- service: light.turn_off
metadata: {}
data: {}
target:
entity_id: light.lichtergruppe2
- delay:
minutes: "{{ range(2,5) | random }}"
- service: light.turn_on
metadata: {}
data_template:
entity_id: |
{{ state_attr('light.lichtergruppe2','entity_id') | random }}
while:
- condition: and
conditions:
- condition: time
before: "23:00:00"
- condition: state
entity_id: input_boolean.urlaubsmodus
state: "on"
- if:
- condition: or
conditions:
- condition: trigger
id:
- Urlaub ist beendet
- condition: and # im Video fehlte diese logische & Verknüpfung mit dem Zustand des Urlaubsmodus
conditions:
- condition: trigger
id:
- Es wird nun geschlafen
- condition: state
entity_id: input_boolean.urlaubsmodus
state: "on"
then:
- service: light.turn_off
metadata: {}
data: {}
target:
entity_id:
- light.lichtergruppe1
- light.lichtergruppe2
mode: restart
alias: Video_Präsenzsimulation_Urlaub description: "" trigger: - platform: sun event: sunset offset: "-00:30:00" - platform: state entity_id: - input_boolean.urlaubsmodus to: "off" id: Urlaub ist beendet - platform: time at: "23:00:00" id: Es ist 23 Uhr condition: [] action: - repeat: sequence: - service: light.turn_off metadata: {} data: {} target: entity_id: light.lichtergruppe1 - delay: minutes: "{{ range(2,5) | random }}" - service: light.turn_on metadata: {} data_template: entity_id: | {{ state_attr('light.lichtergruppe1','entity_id') | random }} - delay: minutes: "{{ range(2,5) | random }}" - service: light.turn_off metadata: {} data: {} target: entity_id: light.lichtergruppe2 - delay: minutes: "{{ range(2,5) | random }}" - service: light.turn_on metadata: {} data_template: entity_id: | {{ state_attr('light.lichtergruppe2','entity_id') | random }} while: - condition: and conditions: - condition: time before: "23:00:00" - condition: state entity_id: input_boolean.urlaubsmodus state: "on" - if: - condition: or conditions: - condition: trigger id: - Urlaub ist beendet - condition: and # im Video fehlte diese logische & Verknüpfung mit dem Zustand des Urlaubsmodus conditions: - condition: trigger id: - Es wird nun geschlafen - condition: state entity_id: input_boolean.urlaubsmodus state: "on" then: - service: light.turn_off metadata: {} data: {} target: entity_id: - light.lichtergruppe1 - light.lichtergruppe2 mode: restart
alias: Video_Präsenzsimulation_Urlaub
description: ""
trigger:
  - platform: sun
    event: sunset
    offset: "-00:30:00"
  - platform: state
    entity_id:
      - input_boolean.urlaubsmodus
    to: "off"
    id: Urlaub ist beendet
  - platform: time
    at: "23:00:00"
    id: Es ist 23 Uhr
condition: []
action:
  - repeat:
      sequence:
        - service: light.turn_off
          metadata: {}
          data: {}
          target:
            entity_id: light.lichtergruppe1
        - delay:
            minutes: "{{ range(2,5) | random }}"
        - service: light.turn_on
          metadata: {}
          data_template:
            entity_id: |
              {{ state_attr('light.lichtergruppe1','entity_id') | random }}
        - delay:
            minutes: "{{ range(2,5) | random }}"
        - service: light.turn_off
          metadata: {}
          data: {}
          target:
            entity_id: light.lichtergruppe2
        - delay:
            minutes: "{{ range(2,5) | random }}"
        - service: light.turn_on
          metadata: {}
          data_template:
            entity_id: |
              {{ state_attr('light.lichtergruppe2','entity_id') | random }}
      while:
        - condition: and
          conditions:
            - condition: time
              before: "23:00:00"
            - condition: state
              entity_id: input_boolean.urlaubsmodus
              state: "on"
  - if:
      - condition: or
        conditions:
          - condition: trigger
            id:
              - Urlaub ist beendet
          - condition: and # im Video fehlte diese logische & Verknüpfung mit dem Zustand des Urlaubsmodus
            conditions:
              - condition: trigger
                id:
                  - Es wird nun geschlafen
              - condition: state
                entity_id: input_boolean.urlaubsmodus
                state: "on"
    then:
      - service: light.turn_off
        metadata: {}
        data: {}
        target:
          entity_id:
            - light.lichtergruppe1
            - light.lichtergruppe2
mode: restart

Wie du HACS installierst um die Integration von Simon zu nutzen, findest zu hier:

YouTube player

Simon vom Kanal Simon42 hat die HACS Integration Presence Simulation vorgestellt. Vielleicht eine alternative Lösung für Euch.

YouTube player

Camper-Upgrade: Mit Home Assistant zum smarten Reiseerlebnis! Interesse geweckt?

YouTube player

Willst du deinen Camping-Urlaub auf ein neues Level bringen? In diesem Video brauche ich deine Unterstützung! Ich plane, einen Camper – sei es ein Wohnwagen oder Wohnmobil – mit Home Assistant und verschiedenen Sensoren intelligent zu machen. Doch bevor ich starte, möchte ich wissen: Interessiert dich das? Lass es mich in den Kommentaren auf meinem Youtube Kanal https://www.youtube.com/@smarthome_more wissen und lass uns gemeinsam dieses aufregende Projekt angehen!

Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

In meinem Shop findest du interessante Produkte *