Projekte

um diese Projekte umzusetzen solltest du die Basics verinnerlichen. Ggf. verlinke ich die entsprechenden Beiträge zur Umsetzung im Projekt.

Abfallkalender

Was benötige ich?
Was benötige ich alles aus HACS?

button (7).png

Integration:
  • Waste Collection Schedule
Frontends:
  • Button-Card
  • Banner Card
  • Card-Mod
  • Layout-Card
  • Multiple Entity Row
iCal Datei
Kalenderdatei mit Müllterminen

Diese Datei findest meistens auf der Internetseite deines Mülldienstes. Falls du genau soviel Pech wie ich hast kannst du dir eine solche Datei relativ einfach auf https://ical.marudot.com/ selbst erstellen.
Zu speichern ist diese Datei im Homeassistant unter /config/www/
Config Einträge:

Beachte hier die type: diese müssen mit den Daten (Summary:) in deiner ICS übereinstimmen.

Configuration.yaml
waste_collection_schedule:
  sources:
    - name: ics
      args:
        file: "www/muell.ics"
      customize:
        - type: Restabfall
          alias: Restabfall
          icon: mdi:trash-can
        - type: Papiertonne
          alias: Papiertonne
          icon: mdi:trash-can
        - type: Bioabfall
          alias: Bioabfall
          icon: mdi:trash-can
        - type: Plastikabfall
          alias: Plastikabfall
          icon: mdi:trash-can

  fetch_time: "04:00"
  day_switch_time: "10:00"

 

Sensor.yaml einbinden (falls noch nicht erledigt)

Hiermit kannst du eine Sensor.yaml einbinden 

sensor: !include sensor.yaml

button (8).png

sensor.yaml
########################## Müllabfuhr ###########################

- platform: waste_collection_schedule
  name: Papierabfall_date
  value_template: '{{value.date.strftime("%d.%m.%Y")}}'
  types:
    - Papiertonne
- platform: waste_collection_schedule
  name: Papierabfall_collection
  value_template: "{{value.daysTo}}"
  types:
    - Papiertonne

- platform: waste_collection_schedule
  name: Restmuelltonne_date
  value_template: '{{value.date.strftime("%d.%m.%Y")}}'
  types:
    - Restabfall
- platform: waste_collection_schedule
  name: Restmuelltonne_collection
  value_template: "{{value.daysTo}}"
  types:
    - Restabfall

- platform: waste_collection_schedule
  name: Plastiktonne_date
  value_template: '{{value.date.strftime("%d.%m.%Y")}}'
  types:
    - Plastikabfall
- platform: waste_collection_schedule
  name: Plastikmuelltonne_collection
  value_template: "{{value.daysTo}}"
  types:
    - Plastikabfall

- platform: waste_collection_schedule
  name: Biotonne_date
  value_template: '{{value.date.strftime("%d.%m.%Y")}}'
  types:
    - Bioabfall
- platform: waste_collection_schedule
  name: Biotonne_collection
  value_template: "{{value.daysTo}}"
  types:
    - Bioabfall

- platform: waste_collection_schedule
  name: next_waste_collection_daysto
  details_format: upcoming
  value_template: '{{value.types|join(", ")}} in {{value.daysTo}} Tagen'

  #button-card#
- platform: waste_collection_schedule
  name: MyButtonCardSensor
  value_template: '{{value.types|join(", ")}}|{{value.daysTo}}|{{value.date.strftime("%d.%m.%Y")}}|{{value.date.strftime("%a")}}'
Dashboard Card
type: entities
entities:
  - entity: sensor.restmuelltonne_date
    style: |
      :host {
        color: grey;
      }      
    icon: mdi:delete-empty
    show_state: false
    type: custom:multiple-entity-row
    name: Restmüll
    secondary_info: false
    entities:
      - entity: sensor.restmuelltonne_collection
        name: Abholung in
        unit: Tage(n)
      - entity: sensor.restmuelltonne_date
        name: Datum
  - entity: sensor.biotonne_date
    style: |
      :host {
        color: brown;
      }  
    icon: mdi:bio
    show_state: false
    type: custom:multiple-entity-row
    name: Bio Müll
    secondary_info: false
    entities:
      - entity: sensor.biotonne_collection
        name: Abholung in
        unit: Tage(n)
      - entity: sensor.biotonne_date
        name: Datum
  - entity: sensor.papierabfall_date
    style: |
      :host {
        color: turquoise
      }  
    icon: mdi:tree
    show_state: false
    type: custom:multiple-entity-row
    name: Papiertonne
    secondary_info: false
    entities:
      - entity: sensor.papierabfall_collection
        name: Abholung in
        unit: Tage(n)
      - entity: sensor.papierabfall_date
        name: Datum
  - entity: sensor.plastiktonne_date
    style: |
      :host {
        color: yellow
      }  
    icon: mdi:recycle
    show_state: false
    type: custom:multiple-entity-row
    name: Plastik Sack
    secondary_info: false
    entities:
      - entity: sensor.plastikmuelltonne_collection
        name: Abholung in
        unit: Tage(n)
      - entity: sensor.plastiktonne_date
        name: Datum
  - entity: sensor.mybuttoncardsensor
    type: custom:button-card
    layout: icon_name_state2nd
    show_label: true
    label: |
      [[[
       var days_to = entity.state.split("|")[1]
       if (days_to == 0)
       { return "Heute" }
       else if (days_to == 1)
       { return "Morgen" }
       else
       { return "in " + days_to + " Tagen" }
      ]]]
    show_name: true
    name: |
      [[[
        return entity.state.split("|")[0]
      ]]]
    state:
      - color: red
        operator: template
        value: '[[[ return entity.state.split("|")[1] == 0 ]]]'
      - color: orange
        operator: template
        value: '[[[ return entity.state.split("|")[1] == 1 ]]]'
      - value: default
show_header_toggle: true
Automation

Hier meine Automation die mich per Push erinnert und zusätzlich per Alexa wenn wir zuhause sind.

Benachrichtigung um 21 Uhr am Vortag für Bio
alias: Benachrichtigung Müll Bio morgen
description: ""
trigger:
  - platform: time
    at: "21:01:00"
condition:
  - condition: state
    entity_id: sensor.biotonne_collection
    state: "1"
action:
  - service: notify.all_devices
    data:
      message: Biotonne raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Biotonne raus stellen!
mode: single
Benachrichtigung um 7 Uhr am Tag der Abholung für Bio
alias: Benachrichtigung Müll Biotonne
description: ""
trigger:
  - platform: time
    at: "07:00:00"
condition:
  - condition: state
    entity_id: sensor.biotonne_collection
    state: "0"
action:
  - service: notify.all_devices
    data:
      message: Biotonne raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Biotonne raus stellen!
mode: single
Benachrichtigung um 21 Uhr am Vortag für Restmüll

 

alias: Benachrichtigung Müll Rest morgen
description: ""
trigger:
  - platform: time
    at: "21:00:00"
condition:
  - condition: state
    entity_id: sensor.restmuelltonne_collection
    state: "1"
action:
  - service: notify.all_devices
    data:
      message: Restmüll raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Restmüll raus stellen!
mode: single
Benachrichtigung um 7 Uhr am Tag der Abholung für Restmüll

 

alias: Benachrichtigung Müll Restmüll
description: ""
trigger:
  - platform: time
    at: "07:00:00"
condition:
  - condition: state
    entity_id: sensor.restmuelltonne_collection
    state: "0"
action:
  - service: notify.all_devices
    data:
      message: Restmüll raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Restmüll raus stellen!
mode: single
Benachrichtigung um 21 Uhr am Vortag für Papier

 

alias: Benachrichtigung Müll Papier morgen
description: ""
trigger:
  - platform: time
    at: "21:00:00"
condition:
  - condition: state
    entity_id: sensor.papierabfall_collection
    state: "1"
action:
  - service: notify.all_devices
    data:
      message: Papiertonne raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Papiertonne raus stellen!
mode: single
Benachrichtigung um 7 Uhr am Tag der Abholung für Papier

 

alias: Benachrichtigung Müll Papier
description: ""
trigger:
  - platform: time
    at: "07:00:00"
condition:
  - condition: state
    entity_id: sensor.papierabfall_collection
    state: "0"
action:
  - service: notify.all_devices
    data:
      message: Papiertonne raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Papiertonne raus stellen!
mode: single
Benachrichtigung um 21 Uhr am Vortag für Plastik

 

alias: Benachrichtigung Müll Plastik morgen
description: ""
trigger:
  - platform: time
    at: "21:00:00"
condition:
  - condition: state
    entity_id: sensor.plastikmuelltonne_collection
    state: "1"
action:
  - service: notify.all_devices
    data:
      message: Plastik raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Plastik raus stellen!
mode: single
Benachrichtigung um 7 Uhr am Tag der Abholung für Plastik

 

alias: Benachrichtigung Müll Plastik
description: ""
trigger:
  - platform: time
    at: "07:00:00"
condition:
  - condition: state
    entity_id: sensor.plastikmuelltonne_collection
    state: "0"
action:
  - service: notify.all_devices
    data:
      message: Plastik raus stellen
      title: Müllabfuhr
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Plastik raus stellen!
mode: single

Apple Watch & Carplay

Hier hab ich euch die entsprechenden Code Schnipsel für die Apple Watch abgelegt:

Nützliche Links:

Einbindung der iosactions.yaml

Erstellt euch eine iosactions.yaml und fügt folgenden Code in der configuration.yaml ein:

ios: !include iosactions.yaml
iOS Actions anlegen

Mit folgendem Code könnt ihr Actions anlegen:

actions:
  - name: Garage                    # Name der Aktion - wichtig für die Automationen 
    background_color: "#000000"     # Hintergrundfarbe des Buttons auf der Watch
    label:
      text: "Garage"                # Text auf der Watch
      color: "#ffffff"              # Textfarbe auf der Watch
    icon:
      icon: garage                  # MDI Icon auf der Watch
      color: "#00fff5"              # Farbe des Icons
Actions Automatisierung

Mit folgender Automatisierung kannst du alle Actions in einer Automatisierung abbilden:

alias: Apple Watch
description: ""
trigger:
  - platform: event
    event_type: ios.action_fired
    event_data:
      actionName: Garage
    id: Garage
  - platform: event
    event_type: ios.action_fired
    event_data:
      actionName: PC
    id: PC
condition: []
action:
  - if:
      - condition: trigger
        id:
          - Garage
    then:
      - service: script.toggle
        data: {}
        target:
          entity_id: script.garage_taster
  - if:
      - condition: trigger
        id:
          - PC
    then:
      - service: light.toggle
        data: {}
        target:
          entity_id: light.ambiente_pc
mode: single

Jetzt kommen wir zum Punkt Sensoren auf dem Zifferblatt anzeigen. Dies ist meines Erachtens sehr kompliziert und umfangreich.


Hier findest du die Dokumentation von Apple entsprechend dazu hier die Doku von Homeassistant

Hier ein paar Beispiele:

#### Sensor Wert auf zwei Nachkommastellen gerundet

{{ ((states('sensor.energy_production_today')) |float) |round(2) }}


#### Sensor Wert verdoppelt und auf zwei Nachkommastellen gerundet:

{{ (((states('sensor.energy_production_today')) |float) *2)  |round(1) }}

Balkonkraftwerk

Balkonkraftwerk

Code Schnipsel

Hier seht ihr meinen Code für die PV Einspeisung (Shelly 3em)

- sensor:
    - name: PV Einspeisung
      unit_of_measurement: "W"
      device_class: power
      state: "{{ states('sensor.total_power')|float if states('sensor.total_power') | int < 1 else 0 }}"

- sensor:
    - name: PV Einspeisung negiert
      unit_of_measurement: "W"
      device_class: power
      state: "{{ states('sensor.pv_einspeisung')|float * -1 }}"

Hier noch der Energy Sensor der Steckdose

- sensor:
    - name: "pv_anlage_smartenergy_metering_summation_delivered"
      device_class: energy
      state_class: total
      unit_of_measurement: "kWh"
      state: "0"
Balkonkraftwerk

Dachmontage

auf die genaue Verkabelung gehe ich nicht ein da es hier von Modell zu Modell unterschiede gibt bitte beachtet hier die Bedienungsanleitung.








Balkonkraftwerk

Meine Anlage

BambuLab Integration

Damit ihr euren BambuLab in Homeassistant integrieren könnt nutzt einfach folgende HACS Integration:

image.png

Benötigte HACS Cards:

Files: x1c files.zip

Als Dashboard könnt ihr folgenden Code für euch anpassen - hier musst du nur mit Notepad++ den Text "DEINBAMBU" mit deinem Druckernamen aus der Config ersetzen:

type: vertical-stack
cards:
  - type: picture-elements
    elements:
      - type: custom:config-template-card
        entities:
          - sensor.DEINBAMBU_ams_1_tray_1
        element:
          type: state-icon
          entity: sensor.DEINBAMBU_ams_1_tray_1
          icon: >-
            ${states['sensor.DEINBAMBU_ams_1_tray_1'].state != 'Empty'
            ? 'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 18%
          '--paper-item-icon-color': var(--tray_1_color)
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px var(--tray_1_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.DEINBAMBU_ams_1_tray_1
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 18%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: custom:config-template-card
        entities:
          - sensor.DEINBAMBU_ams_1_tray_2
        element:
          type: state-icon
          entity: sensor.DEINBAMBU_ams_1_tray_2
          icon: >-
            ${states['sensor.DEINBAMBU_ams_1_tray_2'].state != 'Empty'
            ? 'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 39%
          '--paper-item-icon-color': var(--tray_2_color)
          background-color: rgba(0,0,0,0.5)
          box-shadow: 0 0 5px 5px  var(--tray_2_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.DEINBAMBU_ams_1_tray_2
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 39%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: custom:config-template-card
        entities:
          - sensor.DEINBAMBU_ams_1_tray_3
        element:
          type: state-icon
          entity: sensor.DEINBAMBU_ams_1_tray_3
          icon: >-
            ${states['sensor.DEINBAMBU_ams_1_tray_3'].state != 'Empty'
            ? 'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 61%
          '--paper-item-icon-color': var(--tray_3_color)
          background-color: rgba(0,0,0,0.5)
          box-shadow: 0 0 5px 5px  var(--tray_3_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.DEINBAMBU_ams_1_tray_3
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 61%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: custom:config-template-card
        entities:
          - sensor.DEINBAMBU_ams_1_tray_4
        element:
          type: state-icon
          entity: sensor.DEINBAMBU_ams_1_tray_4
          icon: >-
            ${states['sensor.DEINBAMBU_ams_1_tray_4'].state != 'Empty'
            ? 'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 83%
          '--paper-item-icon-color': var(--tray_4_color)
          background-color: rgba(0,0,0,0.5)
          box-shadow: 0 0 5px 5px var(--tray_4_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.DEINBAMBU_ams_1_tray_4
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 83%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: state-badge
        entity: sensor.DEINBAMBU_ams_1_humidity_index
        style:
          top: 20%
          left: 29%
          color: transparent
      - type: state-badge
        entity: sensor.DEINBAMBU_ams_1_ams_temperature
        style:
          top: 20%
          left: 72%
          color: transparent
    image: /local/ams.png
    style: |
      ha-card {
        background: none !important;
        border: none !important;
        --tray_1_color: {% if is_state('sensor.DEINBAMBU_ams_1_tray_1', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.DEINBAMBU_ams_1_tray_1', 'Color') }}; {% endif %}
        --tray_2_color: {% if is_state('sensor.DEINBAMBU_ams_1_tray_2', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.DEINBAMBU_ams_1_tray_2', 'Color') }}; {% endif %}
        --tray_3_color: {% if is_state('sensor.DEINBAMBU_ams_1_tray_3', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.DEINBAMBU_ams_1_tray_3', 'Color') }}; {% endif %}
        --tray_4_color: {% if is_state('sensor.DEINBAMBU_ams_1_tray_4', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.DEINBAMBU_ams_1_tray_4', 'Color') }}; {% endif %}
        --tray_1_bg: {% if is_state_attr('sensor.DEINBAMBU_ams_1_tray_1', 'id', state_attr('sensor.DEINBAMBU_active_tray_index', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_2_bg: {% if is_state_attr('sensor.DEINBAMBU_ams_1_tray_2', 'id', state_attr('sensor.DEINBAMBU_active_tray_index', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_3_bg: {% if is_state_attr('sensor.DEINBAMBU_ams_1_tray_3', 'id', state_attr('sensor.DEINBAMBU_active_tray_index', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_4_bg: {% if is_state_attr('sensor.DEINBAMBU_ams_1_tray_4', 'id', state_attr('sensor.DEINBAMBU_active_tray_index', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
      }
  - type: picture-elements
    elements:
      - type: state-badge
        entity: sensor.DEINBAMBU_bed_temperature
        style:
          top: 75%
          left: 50%
          color: transparent
      - type: state-badge
        entity: sensor.DEINBAMBU_nozzle_temperature
        style:
          top: 32%
          left: 50%
          color: transparent
      - type: state-badge
        entity: sensor.DEINBAMBU_chamber_temperature
        style:
          top: 32%
          left: 80%
          color: transparent
      - type: state-icon
        entity: light.DEINBAMBU_chamber_light
        tap_action:
          action: toggle
        style:
          top: 32%
          left: 12%
          transform: scale(1.5,1.5)
        icon: mdi:led-strip
      - type: state-icon
        entity: light.switch_3d_drucker_licht
        tap_action:
          action: toggle
        style:
          top: 25%
          left: 12%
          transform: scale(1.5,1.5)
        icon: mdi:led-strip-variant
    image: /local/x1c.png
    style: |
      ha-card {
        background: none !important;
        border: none !important;
        --tray_0_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_0', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_0', 'color') }}; {% endif %}
        --tray_1_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_1', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_1', 'color') }}; {% endif %}
        --tray_2_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_2', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_2', 'color') }}; {% endif %}
        --tray_3_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_3', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_3', 'color') }}; {% endif %}
        --tray_0_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_0', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_1_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_1', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_2_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_2', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_3_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_3', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
      }

Briefkasten

Hardware
Ich kann euch hier nur den Aqara Fenster Kontaktsensor empfehlen da dieser wirklich günstig und gut ist.

Software

Du benötigst folgendes aus HACS:

button (7).png

Der Button zum anzeigen bzw. löschen der Briefkastenmeldung:

type: custom:mushroom-entity-card
entity: input_boolean.post
tap_action:
  action: call-service
  service: input_boolean.turn_off
  data: {}
  target:
    entity_id: input_boolean.post
  confirmation:
    text: Briefkasten geleert?
secondary_info: last-updated
icon_color: yellow

Automation:

alias: Benachrichtigung Post
description: ""
trigger:
  - type: opened
    platform: device
    device_id: 0d645b52a4bb04f517b43aa47b037a07
    entity_id: binary_sensor.lumi_lumi_sensor_magnet_aq2_on_off
    domain: binary_sensor
condition:
  - condition: state
    entity_id: input_boolean.post
    state: "off"
action:
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.post
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Die Post ist da!
    else:
      - service: notify.all_devices
        data:
          message: Post ist da!
          title: Briefkasten
mode: single

ESP Cam

Hardware
hier siehst du die Hardware die ich verwende

Software

image.png

Hier muss noch etwas vorbereitet werden:

Gehe in die Einstellungen und füge:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
in den additional board managern hinzu.

Jetzt kannst du noch den Board Manager installieren:


Sketch Code
#include "esp_camera.h"
#include <WiFi.h>
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h" //disable brownout problems
#include "soc/rtc_cntl_reg.h"  //disable brownout problems
#include "esp_http_server.h"

//Replace with your network credentials
const char* ssid = "WLAN NAME";
const char* password = "WLAN PASSWORT";

#define PART_BOUNDARY "123456789000000000000987654321"

// This project was tested with the AI Thinker Model, M5STACK PSRAM Model and M5STACK WITHOUT PSRAM
#define CAMERA_MODEL_AI_THINKER
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM

// Not tested with this model
//#define CAMERA_MODEL_WROVER_KIT

#if defined(CAMERA_MODEL_WROVER_KIT)
  #define PWDN_GPIO_NUM    -1
  #define RESET_GPIO_NUM   -1
  #define XCLK_GPIO_NUM    21
  #define SIOD_GPIO_NUM    26
  #define SIOC_GPIO_NUM    27
  
  #define Y9_GPIO_NUM      35
  #define Y8_GPIO_NUM      34
  #define Y7_GPIO_NUM      39
  #define Y6_GPIO_NUM      36
  #define Y5_GPIO_NUM      19
  #define Y4_GPIO_NUM      18
  #define Y3_GPIO_NUM       5
  #define Y2_GPIO_NUM       4
  #define VSYNC_GPIO_NUM   25
  #define HREF_GPIO_NUM    23
  #define PCLK_GPIO_NUM    22

#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
  #define PWDN_GPIO_NUM     -1
  #define RESET_GPIO_NUM    15
  #define XCLK_GPIO_NUM     27
  #define SIOD_GPIO_NUM     25
  #define SIOC_GPIO_NUM     23
  
  #define Y9_GPIO_NUM       19
  #define Y8_GPIO_NUM       36
  #define Y7_GPIO_NUM       18
  #define Y6_GPIO_NUM       39
  #define Y5_GPIO_NUM        5
  #define Y4_GPIO_NUM       34
  #define Y3_GPIO_NUM       35
  #define Y2_GPIO_NUM       32
  #define VSYNC_GPIO_NUM    22
  #define HREF_GPIO_NUM     26
  #define PCLK_GPIO_NUM     21

#elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
  #define PWDN_GPIO_NUM     -1
  #define RESET_GPIO_NUM    15
  #define XCLK_GPIO_NUM     27
  #define SIOD_GPIO_NUM     25
  #define SIOC_GPIO_NUM     23
  
  #define Y9_GPIO_NUM       19
  #define Y8_GPIO_NUM       36
  #define Y7_GPIO_NUM       18
  #define Y6_GPIO_NUM       39
  #define Y5_GPIO_NUM        5
  #define Y4_GPIO_NUM       34
  #define Y3_GPIO_NUM       35
  #define Y2_GPIO_NUM       17
  #define VSYNC_GPIO_NUM    22
  #define HREF_GPIO_NUM     26
  #define PCLK_GPIO_NUM     21

#elif defined(CAMERA_MODEL_AI_THINKER)
  #define PWDN_GPIO_NUM     32
  #define RESET_GPIO_NUM    -1
  #define XCLK_GPIO_NUM      0
  #define SIOD_GPIO_NUM     26
  #define SIOC_GPIO_NUM     27
  
  #define Y9_GPIO_NUM       35
  #define Y8_GPIO_NUM       34
  #define Y7_GPIO_NUM       39
  #define Y6_GPIO_NUM       36
  #define Y5_GPIO_NUM       21
  #define Y4_GPIO_NUM       19
  #define Y3_GPIO_NUM       18
  #define Y2_GPIO_NUM        5
  #define VSYNC_GPIO_NUM    25
  #define HREF_GPIO_NUM     23
  #define PCLK_GPIO_NUM     22
#else
  #error "Camera model not selected"
#endif

static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";

httpd_handle_t stream_httpd = NULL;

static esp_err_t stream_handler(httpd_req_t *req){
  camera_fb_t * fb = NULL;
  esp_err_t res = ESP_OK;
  size_t _jpg_buf_len = 0;
  uint8_t * _jpg_buf = NULL;
  char * part_buf[64];

  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
  if(res != ESP_OK){
    return res;
  }

  while(true){
    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      res = ESP_FAIL;
    } else {
      if(fb->width > 400){
        if(fb->format != PIXFORMAT_JPEG){
          bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
          esp_camera_fb_return(fb);
          fb = NULL;
          if(!jpeg_converted){
            Serial.println("JPEG compression failed");
            res = ESP_FAIL;
          }
        } else {
          _jpg_buf_len = fb->len;
          _jpg_buf = fb->buf;
        }
      }
    }
    if(res == ESP_OK){
      size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
      res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
    }
    if(res == ESP_OK){
      res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
    }
    if(res == ESP_OK){
      res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
    }
    if(fb){
      esp_camera_fb_return(fb);
      fb = NULL;
      _jpg_buf = NULL;
    } else if(_jpg_buf){
      free(_jpg_buf);
      _jpg_buf = NULL;
    }
    if(res != ESP_OK){
      break;
    }
    //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
  }
  return res;
}

void startCameraServer(){
  httpd_config_t config = HTTPD_DEFAULT_CONFIG();
  config.server_port = 80;

  httpd_uri_t index_uri = {
    .uri       = "/",
    .method    = HTTP_GET,
    .handler   = stream_handler,
    .user_ctx  = NULL
  };
  
  //Serial.printf("Starting web server on port: '%d'\n", config.server_port);
  if (httpd_start(&stream_httpd, &config) == ESP_OK) {
    httpd_register_uri_handler(stream_httpd, &index_uri);
  }
}

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
 
  Serial.begin(115200);
  Serial.setDebugOutput(false);
  
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG; 
  
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  
  // Camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }
  // Wi-Fi connection
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  Serial.print("Camera Stream Ready! Go to: http://");
  Serial.print(WiFi.localIP());
  
  // Start streaming web server
  startCameraServer();
}

void loop() {
  delay(1);
}
Verkabelung
hier ist es nun wichtig alles richtig zwischen CAM und FTDI zu verbinden:

bitte vergess nicht die hier Grau eingezeichneten Brücke
Flashing
Jetzt verbindest du deinen FTDI mit einem USB deines PCs und startest den Flashvorgang wiefolgt:

Board Typ auswählen (hier musste ich sehr weit runter scrollen)

COM Port wählen
Starte nun den Flash Vorgang mit dem Pfeil

Dein Ergebnis sollte wiefolgt aussehen:

Öffne jetzt den Serial Monitor

Jetzt musst du die Brücke entfernen und den RST Button auf der Cam drücken
Hier bekommst du dann folgende Ausgabe:

IP Adresse notieren
Einbinden in Homeassistant
Hier können wir die MJPEG Camera als Integration verwenden.
Also gehen wir zu unseren Integrationen und fügen diese hinzu:

Bitte beachtet hier den SSL Haken zu entfernen und vergesst das HTTP vor der URL nicht.
Alternative ESP Home

Als alternative kann man auch ESP Home verwenden hier ist die Kamera aber nicht ganz so flüssig:

esphome:
  name: cam-1
  platform: ESP32
  board: esp32dev  

# Enable logging
logger:

# Enable Home Assistant API
api:
    reboot_timeout: 0s

ota:

web_server:
  port: 80

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-Cam Fallback Hotspot"
    password: "C3FOhAPFtouw"

captive_portal:

# Example configuration entry
esp32_camera:
  external_clock:
    pin: GPIO0
    frequency: 20MHz
  i2c_pins:
    sda: GPIO26
    scl: GPIO27
  data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
  vsync_pin: GPIO25
  href_pin: GPIO23
  pixel_clock_pin: GPIO22
  power_down_pin: GPIO32

  # Image settings
  name: Cam 1
# Flashlight
output:
  - platform: gpio
    pin: GPIO4
    id: gpio_4

## GPIO_4 is the flash light pin
light:
  - platform: binary
    output: gpio_4
    name: cam-1-flashlight

Frigate NVR Kameraüberwachung mit Homeassistant

Hier findet ihr alles was ich im Video gezeigt habe:

Addon Repo:

https://github.com/blakeblackshear/frigate-hass-addons

Config:

mqtt:
  host: 192.168.178.199          #mqttserver ohne port
  user: mqtt_user                #mqttuser                                              
  password: 1234asdf             #mqttpassword
database:
  path: /config/frigate.db       

detectors:
  coral:
    type: edgetpu
    device: usb
#  cpu1:
#    type: cpu
#    num_threads: 3

cameras:
  Garten:                                                            #Kameraname
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/garten?video=copy&audio=aac    #RTSP Stream High Res
          input_args: preset-rtsp-restream
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/garten_sub?video=copy          #RTPS Stream Low Res
          input_args: preset-rtsp-restream
          roles:
            - detect
    detect:                                                        
      width: 2560
      height: 1440
      fps: 20
    objects:
      track:
        - person
        - cat
        - dog 
    snapshots:
      enabled: True
      timestamp: True
      bounding_box: True
      retain:
        default: 30
    record:
      enabled: True
      events:
        retain:
          default: 14

Gas Sensor

Hardware
was brauche ich dafür alles?

NodeMCU (ESP8266 CP2102 NodeMcu)
Netzteil
Crimp Set (oder fragt einen Bekannten)
Anschlussplan
welches Kabel ihr wo anschließt ist hier tatsächlich egal
ESP Code

Bitte am Anfang noch 

esp8266:                       # diese Line sollte schon vorhanden sein
  board: esp01_1m              # diese ebenso
  restore_from_flash: true

preferences:
  flash_write_interval: 5min
  
  
  
api:
  services:
    - service: update_counter_pulses
      variables:
        counter_pulses: int
      then:
        - globals.set:
            id: pulses_sum
            value: !lambda 'return counter_pulses;'

diesen Code an die Standart Config anfügen:

globals:
  - id: pulses_sum
    type: int
    restore_value: yes
    initial_value: '8504'  # hier kann der Gaszählerstand initialisiert werden - letze Stelle weglassen

binary_sensor:
  - platform: gpio
    id: internal_pulse_counter
    pin:
      number: GPIO5
      mode: INPUT_PULLUP
    name: "Live-Impuls"
    filters:
      - delayed_on: 10ms
    on_press:
      then:
        - lambda: id(pulses_sum) += 1;

sensor:
  - platform: template
    name: "Gasverbrauch_ESP"
    device_class: gas
    unit_of_measurement: "m³"
    state_class: "total_increasing"
    icon: "mdi:fire"
    accuracy_decimals: 2
    lambda: |-
      return id(pulses_sum) * 0.01;
Sensor.yaml
# Gaszähler, kommend von ESPHome, aufbereiten für Energy
- platform: template
  sensors:
    gasverbrauch:
      value_template:  >
          {% if states('sensor.gasverbrauch_esp') | float == 0 %}
            {{ states('sensor.gasverbrauch') }}
          {% else %}
            {{ states('sensor.gasverbrauch_esp') | float }}
          {% endif %}
      unit_of_measurement: m³
      device_class: gas
      attribute_templates:
        state_class: total_increasing

Hausverbrauch (Strom) messen incl. Dummy Sensoren

Hardware

Ich benutze für meinen kompletten Hausstrom einen Shelly und zwar dieses Modell

Integration in Homeassistant
Wie verbinde ich die drei Phasen eines Shellys?
Totaler Verbrauch in W (aktueller Verbrauch für dynamische Anzeige im Dashboard)
Die nachfolgenden Codes sind in der Template.yaml zu hinterlegen:

button (8).png


Totaler Verbrauch in Watt (fürs normale Dashboard)

- sensor:
    - name: "Total Power"
      unique_id: "Total_Power"
      device_class: power
      state_class: measurement
      unit_of_measurement: "W"
      state: >
        {{ 
        states('sensor.hausverbrauch_channel_a_power')| float(0) + 
        states('sensor.hausverbrauch_channel_b_power')| float(0) +
        states('sensor.hausverbrauch_channel_c_power')| float(0) 
        }}


Totaler Verbrauch in kWh (für Energy Dashboard):


- sensor:
    - name: "Total Energy Use"
      unique_id: "Total_Energy_Use"
      device_class: energy
      state_class: total
      unit_of_measurement: "kWh"
      state: >
        {{ 
        states('sensor.hausverbrauch_channel_a_energy')| float(0) + 
        states('sensor.hausverbrauch_channel_b_energy')| float(0) +
        states('sensor.hausverbrauch_channel_c_energy')| float(0) 
        }}


Totale Einspeisung in kWh (für Energie Dashboard):


- sensor:
    - name: "Total Energy Returned"
      unique_id: "Total_Energy_Returned"
      device_class: energy
      state_class: total
      unit_of_measurement: "kWh"
      state: >
        {{ 
        states('sensor.hausverbrauch_channel_a_energy_returned')| float(0) + 
        states('sensor.hausverbrauch_channel_b_energy_returned')| float(0) +
        states('sensor.hausverbrauch_channel_c_energy_returned')| float(0) 
        }}


Totale Einspeisung ( Gesamtstromverbrauch unter 0):


- sensor:
    - name: PV Einspeisung
      unique_id: "pv_einspeisung"
      unit_of_measurement: "W"
      device_class: power
      state: "{{ states('sensor.total_power')|float if states('sensor.total_power') | int < 1 else 0 }}"


Totale Einspeisung (als Positiv Wert):


- sensor:
    - name: PV Einspeisung negiert
      unique_id: "pv_einspeisung_negiert"
      unit_of_measurement: "W"
      device_class: power
      state: "{{ states('sensor.pv_einspeisung')|float * -1 }}"


Du hast alte Sensoren wo du die Historie behalten möchtest?

Dann lass uns einen Dummy Sensor in der template.yaml anlegen:

### DUMMY SENSOREN SHELLY3EM ###

- sensor:
    - name: "shellyem3_e89f6d85252d_channel_a_energy"   #hier musst du deinen alten Sensor anlegen
      device_class: energy
      state_class: total
      unit_of_measurement: "kWh"
      state: "0"

Heizungssteuerung

Meine Hardware

button (11).png

7MuIqYtcgWywoHFW-button-13.png

button (12).png

Benötigte Integrationen und Frontends aus HACS

Integrationen:

Frontends:

Family Group erstellen

Erstell dir eine groups.yaml 

group: !include groups.yaml

mit folgendem Code:

presence_home:
  name: family
  entities:
    - person.NAME1
    - person.NAME2
externen Tempsensor auf Climate erstellen (falls kein externer Sensor vorhanden)

In der Template.yaml folgenden Code hinzufügen:

- sensors:
    temperatur_NAME_temperature:
      value_template: "{{ state_attr('climate.HEIZUNGSNAME', 'current_temperature') }}"
      friendly_name: Temperatur - NAME
      unit_of_measurement: '°C'
      device_class: temperature
      icon_template: mdi:thermometer

Lüftungsempfehlung - Absolute Luftfeuchtigkeit

Wie lüfte ich richtig? Auf was muss ich achten? Macht es Sinn das Fenster zu öffnen?

Hierzu müssen wir die absolute Luftfeuchtigkeit g/m³ im Innenbereich mit dem Aussenbereich vergleichen. Also ist ein Sensor innen und aussen notwendig.

Eure Sensoren geben euch einen % Wert (relative Luftfeuchtigkeit) wieder. Diese sollte sich zwischen 40-60 % bewegen.

image.png

Hardware Empfehlungen:
Premium Variante:

Netatmo Weather Station und Netatmo Zusatzmodule

kein Zigbee erforderlich

Günstige Variante:

Aqara Temperatur und Feuchtigkeitssensor

Zigbee wird benötigt

relative Luftfeuchtigkeit in absolute Luftfeuchtigkeit umrechnen

Hierzu können wir einen Sensor erstellen:

Sensor.yaml:

- platform: template
  sensors:
    absolute_humidity_outside_sensor:
      friendly_name: "Absolute Feuchte Aussen Sensor"
      unit_of_measurement: "g/m^3"
      icon_template: mdi:water-percent-alert
      value_template: "{{ 1000*e**(19.016-(4064.95/(float(states('sensor.*******_TEMPERATUR'))+236.25)))
                                      *100/(461.66*(float(states('sensor.*******_TEMPERATUR'))+273.15)) * 
                                                    float(states('sensor.*******_Luftfeuchtigkeit'))/100 | float }}"

    absolute_humidity_buero:
      friendly_name: "Absolute Feuchte RAUMNAME"
      unit_of_measurement: "g/m^3"
      icon_template: mdi:water-percent-alert
      value_template: "{{ 1000*e**(19.016-(4064.95/(float(states('sensor.*******_temperature_2'))+236.25)))
                                      *100/(461.66*(float(states('sensor.*******_temperature_2'))+273.15)) * 
                                                    float(states('sensor.*******_humidity_2'))/100 | float }}"

Nachdem wir diese Sensoren erstellt haben möchten wir diese Information noch aufarbeiten und uns im Dashboard anzeigen lassen:

Mushroom Template Card

image.png

type: custom:mushroom-template-card
icon: mdi:window-shutter-auto
icon_color: |-
  {% if states('sensor.absolute_humidity_outside_sensor') | float <=
    states('sensor.absolute_humidity_schlafen') | float %} 
      green
  {% else %}
      red
  {% endif %}
primary: |-
  {% if states('sensor.absolute_humidity_outside_sensor') | float <=
     states('sensor.absolute_humidity_schlafen') | float %} 
      Lüften ok
  {% else %}
      Lüften sollte unterlassen werden
  {% endif %} 
Template Card fürs Dashboard (Chip Card)

image.png

type: custom:mushroom-chips-card
chips:
  - type: template
    icon: mdi:arrow-left
    tap_action:
      action: navigate
      navigation_path: /smartphone-1/0
  - type: entity
    entity: sensor.netatmo_mein_zuhause_weather_station_temperature
  - type: entity
    entity: sensor.lumi_lumi_weather_humidity
  - type: template
    icon: mdi:window-shutter-auto
    icon_color: |-
      {% if states('sensor.absolute_humidity_outside_sensor') | float <=
        states('sensor.absolute_humidity_wohnzimmer') | float %} 
          green
      {% else %}
          red
      {% endif %}
    content: |-
      {% if states('sensor.absolute_humidity_outside_sensor') | float <=
         states('sensor.absolute_humidity_wohnzimmer') | float %} 
          Lüften ok
      {% else %}
          Lüften sollte unterlassen werden
      {% endif %} 
Automationsvorlage Alexa Warnung
alias: Benachrichtigung Lüften Bad
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.fenster_bad_contact
    to: "on"
condition:
  - condition: numeric_state
    entity_id: sensor.absolute_humidity_bad
    below: sensor.absolute_humidity_outside_sensor
action:
  - service: notify.alexa_media
    data:
      message: >-
        ACHTUNG durch das Lüften erhöhst du die Luftfeuchtigkeit somit besteht
        Schimmelgefahr
      target:
        - media_player.badezimmer
      data:
        type: announce
mode: single

Lasst euch die Luftfeuchtigkeit und die Lüftungsempfehlung nebeneinander anzeigen

Jetzt seht ihr immer ob es sinnvoll ist die Fenster zu öffnen um eure Luftfeuchtigkeit im Raum zu reduzieren.

Mammotion Luba AWD Mähroboter

Fazit:

Ich kann den Luba Mammotion wirklich empfehlen. Bei meinem Grundstück fährt er nahezu perfekt und bringt mir neidische Blicke der Nachbarn ;) 

Man sollte jedoch immer im Vorfeld sein Grundstück analysieren. Hast du viele Bäume und wenig Sicht zum Himmel dann wirst du ggf. nicht so gute Ergebnisse erzielen können.

Schau dir auch gern unsere Mods für den Mammotion Luba an. 

Passwort Manager Vaultwarden (Bitwarden)

du möchtest deine Passwörter speichern und bei dir daheim lokal verwalten?

Welche Vorteile bietet Vaultwarden:

Die Installation ist denkbar einfach.

Installation

image.png

qazfJu8pSDaFamsP-image.png

Hier kannst du mit einem Reverse Proxy wie z.B. Nginx Proxy Manager oder Cloudflare eine Subdomain mit Zertifikat erstellen und deinen BW damit aufrufen.

image.png

DIESES PASSWORT WIRD DIR NICHT MEHR ANGEZEIGT DESHALB UNBEDINGT SICHER SPEICHERN

Konfigurationsbeispiel

Jetzt öffnest du BW Admin (Bitwarden) über folgende Adresse:

http://[IPADRESSE-von-homeassistant]:7277/admin

 Hier musst du das Passwort was du dir im letzten Schritt gespeichert hast eingetragen:

image.png

Hier solltest du nun einmal alles durchgehen und deinen Wünschen entsprechend anpassen. Ich zeige dir hier was ich angepasst habe:

Jetzt kannst du Anfangen dir ein Konto zu erstellen!

Pflanzsensor

Was benötige ich?
Downloads / Datenbank

db.png

pflanzen.png

Die benötigten Bilder müssen im Homeassistant unter /config/www/images/plants gespeichert werden (nicht alle)

Config Einträge
configuration.yaml

Hier brauchst du nur eine Plant.yaml inkludieren und danach gehts dort weiter

plant: !include plant.yaml
plant.yaml
Efeu:
  sensors:
    moisture: sensor.plant_2_moisture
    temperature: sensor.plant_2_temperature
    conductivity: sensor.plant_2_soil_conductivity
    brightness: sensor.plant_2_illuminance
  min_brightness: 500
  max_brightness: 45000
  min_temperature: 10
  max_temperature: 35
  min_moisture: 15
  max_moisture: 60
  min_conductivity: 350
  max_conductivity: 2000

Reolink Doorbell

Hi hier die versprochenen Automationen und Links die du benötigst um die Reolink einbinden zu können:

button.png

Motion Eye Einstellungen

Link zum Cam integrieren:

rtsp://IP_ADRESSE:554/h264Preview_01_main

Video Resolution: 1440x1024

Frame Rate: 20

Automationen in Homeassistant
Klingelbenachrichtigung per Alexa und Smartphone
alias: Benachrichtigung Haustür Klingel
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.reolink_video_doorbell_wifi_visitor_2    ### hier musst du deinen Visitor Sensor eintragen
    to: "on"
  - platform: state
    entity_id:
      - binary_sensor.reolink_video_doorbell_wifi_visitor   ### hier musst du deinen Visitor Sensor eintragen
    to: "on"
condition: []
action:
  - if:
      - condition: state
        entity_id: group.presence_home
        state: home
    then:
      - service: media_player.volume_set
        data:
          volume_level: 0.5
        target:
          entity_id:
            - media_player.badezimmer            ### hier kannst du deine Alexas eintragen
            - media_player.kuche                 ### hier kannst du deine Alexas eintragen
            - media_player.buro                  ### hier kannst du deine Alexas eintragen
            - media_player.wohnzimmer            ### hier kannst du deine Alexas eintragen
      - service: notify.alexa_media              ### hier kannst du deine Alexas eintragen
        data:
          data:
            type: announce
          target:
            - media_player.buro                  ### hier kannst du deine Alexas eintragen
            - media_player.kuche                 ### hier kannst du deine Alexas eintragen
            - media_player.wohnzimmer            ### hier kannst du deine Alexas eintragen
            - media_player.badezimmer            ### hier kannst du deine Alexas eintragen
            - media_player.schlafzimmer          ### hier kannst du deine Alexas eintragen
          message: jemand hat geklingelt         ### Benachrichtung die ausgegeben werden soll
      - delay:
          hours: 0
          minutes: 0
          seconds: 2
          milliseconds: 0
      - service: media_player.volume_set
        data:
          volume_level: 0.2
        target:
          entity_id:
            - media_player.badezimmer
            - media_player.kuche
            - media_player.buro
            - media_player.wohnzimmer
  - service: camera.snapshot
    data:
      filename: /media/local/haustuer.jpg
    target:
      entity_id: camera.camera4                 #### hier bitte eure Doorbell hinterlegen
  - service: notify.all_devices
    data:
      title: Haustür
      message: jemand hat geklingelt
      data:
        image: /media/local/local/haustuer.jpg
        actions:
          - action: URI
            title: Livestream
            uri: /smartphone-1/doorbell         ### hier kannst du direkt auf ein Dashboard verlinken mit deiner Camera
mode: single
Klingelbenachrichtigung aufs Smartphone
alias: Benachrichtigung Haustür Klingel
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.reolink_video_doorbell_wifi_visitor_2     ### hier deinen Visitor Sensor verwenden
    to: "on"
  - platform: state
    entity_id:
      - binary_sensor.reolink_video_doorbell_wifi_visitor
    to: "on"
condition: []
action:
  - service: camera.snapshot
    data:
      filename: /media/local/haustuer.jpg
    target:
      entity_id: camera.camera4      ### hier deine Cam hinterlegen
  - service: notify.all_devices      ### hier dein Device / Device Group hinterlegen für die Benachrichtigung 
    data:
      title: Haustür
      message: jemand hat geklingelt
      data:
        image: /media/local/local/haustuer.jpg
        actions:
          - action: URI
            title: Livestream
            uri: /smartphone-1/doorbell     ### hier dein Dashboard angeben um direkt dort hinspringen zu können

Rollosteuerung mit Rademacher Gurtwickler

Rademacher Set 23mm: https://t.ly/4Mo7

Rademacher Bridge (im Set enthalten): https://amzn.to/3CVOPBw

Rademacher 23mm: https://amzn.to/3NABKlO

Rademacher 23mm - große Rollos: https://amzn.to/3psCkdk

 

Automation
Rollo schließen
alias: Rollo schließen
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.beispiel
    to: "on"
action:
  - service: cover.close_cover
    data: {}
    target:
      entity_id:
        - cover.wohnzimmer
mode: single
Rollo öffnen (wenn Schlafzimmertür auf)
alias: Modus Schlafend deaktivieren
description: ""
trigger:
  - type: opened
    platform: device
    device_id: 1b3ae56f2a41e4894088ec6db7c70fdb
    entity_id: binary_sensor.fenster_schlafzimmertur_contact
    domain: binary_sensor
condition:
  - condition: time
    after: "05:30:00"
    before: "09:00:00"
action:
  - service: cover.open_cover
    data: {}
    target:
      entity_id: cover.wohnzimmer
  - service: cover.set_cover_position
    data:
      position: 60
    target:
      entity_id: cover.buro
mode: single

 

Strava Integration


API einrichten

Als erstes solltest du dir bei Strava die API Daten besorgen hier zu gehst du über diesen Link zu Strava

image.png

Die Callback-Domain muss zwingend my.home-assistant.io lauten

Als Logo könnt ihr gern einfach folgende Datei verwenden:

Logo :)

Integration

Jetzt müsst ihr euch noch eine Repo in HACS hinzufügen:

https://github.com/craibo/ha_strava

und euch dann die Integration Strava 2.0 installieren.

Hier müsst ihr nun folgende Werte eintragen:

1.PNG

Integration konfigurieren

Stellt euch ein wieviele Aktivitäten gesynced werden sollen.

image.png

Eure Einheit könnt ihr hier auch anpassen - erfordert einen Restart:

image.png

Zum Schluss noch die GeoCode Api einbinden:

GeoCode Registrierung

2.PNG

Unwetter und Regenradar mit Benachrichtigungen

Hier findet ihr die im Video gezeigten Cards und HACS Integrationen:

Blitzradar

image.png

aus HACS installieren und als Integration hinzufügen

Regenradar

image.png

aus HACS (Frontend) installieren und dann im Dashboard als Card hinzufügen.

image.png

Warnungen

Warnungen von Unwettern etc. greife ich über die Integration NINA ab hier braucht es keine gesonderte Installation aus HACS

Wetterstation

Die Ecowitt ist eine echte Alternative und wenn man sich den Preis anschaut dann muss ich ehrlich gestehen finde ich sie viel besser als eine vergleichbare Netatmo Wetterstation.

button.png

 

61w2i3P6oXL._SL1500_.png

Meine Homeassistant Card

Ich nutze hier die Platinum Weather Card mit folgender Config:

card_config_version: 8
entity_apparent_temp: sensor.easyweatherpro_v5_0_9_feels_like_temperature
entity_forecast_icon: weather.home
entity_humidity: sensor.easyweatherpro_v5_0_9_humidity
entity_pop: sensor.easyweatherpro_v5_0_9_rain_rate
entity_pos: sensor.easyweatherpro_v5_0_9_daily_rain_rate
entity_pressure: sensor.easyweatherpro_v5_0_9_absolute_pressure
entity_summary: weather.home
entity_sun: sun.sun
entity_temperature: sensor.easyweatherpro_v5_0_9_outdoor_temperature
entity_uv_alert_summary: sensor.easyweatherpro_v5_0_9_uv_index
entity_wind_bearing: sensor.easyweatherpro_v5_0_9_wind_direction
entity_wind_gust: sensor.easyweatherpro_v5_0_9_wind_gust
entity_wind_speed: sensor.easyweatherpro_v5_0_9_wind_speed
option_color_fire_danger: false
option_locale: de
option_pressure_decimals: 1
option_static_icons: true
option_time_format: 24hour
option_today_rainfall_decimals: true
section_order:
  - overview
  - extended
  - slots
  - daily_forecast
show_section_daily_forecast: false
show_section_extended: false
slot_l1: humidity
slot_l2: remove
slot_l3: wind
slot_l4: pressure
slot_l5: sun_next
slot_l6: remove
slot_l7: remove
slot_l8: remove
slot_r1: popforecast
slot_r2: remove
slot_r3: uv_summary
slot_r4: empty
slot_r5: sun_following
slot_r6: remove
slot_r7: remove
slot_r8: remove
type: custom:platinum-weather-card
view_layout:
  position: sidebar

[old version] Bambu X1C

Benötigte Addons

bitte bei der NodeRed Konfiguration ein Credential Secret vergeben 

image.png

hier legt ihr noch einen Login an:

- username: mqtt_user
  password: 1234asdf
NodeRed Vorbereitung

Vor dem Import müssen folgende Punkte in der unten zum Download angebotenen JSON mit "suchen&ersetzen" getauscht werden.

image.png

ich verwende hierzu Notepad+ und rufe diese Funktion mit Strg + F auf und wähle dort den Abschnitt ersetzen


{PRINTER_NAME}

 - keine Leerzeichen im Namen verwenden (Groß und Kleinschreibung beachten)

Nutzt ihr Bambu_X1C als Name kann meine Dashboard direkt verwendet werden


{PRINTER_IP}

zu finden auf dem Drucker unter Netzwerk

{PRINTER_SERIAL}

findet ihr im Drucker bei den Infos

{HA_MQTT_BROKER_HOST}

hier ist die IP Adresse vom MQTT Broker ohne Port zu hinterlegen 

solltet ihr Homeassistant OS nutzen mit dem Mosquitto Broker Addon ist es die IP vom Homeassistant wie das geht erfährst du HIER

download json.png

Einfügen der Config in NodeRed

Jetzt musst du diese Config noch in NodeRed importieren.

image.png

Jetzt drückt ihr noch auf Übernahme (deploy)

Jetzt sollte euer Flow etwa so aussehen:

image.png

MQTT Login eintragen in NodeRed

image.png

sollte hier nicht verbunden stehen habt ihr ein MQTT Problem 

Vermutlich müsst ihr hier noch euren Login ergänzen.

Mit Doppelklick auf HomeAssistant In öffnet sich ein kleines Fenster wo ihr den Abschnitt Server findet. Dahinter ist ein kleiner Stift zum bearbeiten. Hier müsst ihr unter Sicherheit noch eure MQTT Login Daten eintragen.

Jetzt drückt ihr noch auf Übernahme (deploy)

Jetzt sollten unter eure Geräten bei MQTT die Geräte sichtbar sein.

image.png

Mein Dashboard

image.png

 Benötigte Files:

x1c.png

ams.png

bitte unter config/www/ ablegen z.B. mit Studio Code Server im Homeassistant 

geht per drag&drop

image.png

Bitte noch per HACS folgendes Frontend herunterladen:

und dann einfach den folgenden Code als manuelle Karte hinzufügen:

YAML Code - Visuelle Karte
type: vertical-stack
cards:
  - type: picture-elements
    elements:
      - type: custom:config-template-card
        entities:
          - sensor.ams_0_bambu_x1c_tray_0
        element:
          type: state-icon
          entity: sensor.ams_0_bambu_x1c_tray_0
          icon: >-
            ${states['sensor.ams_0_bambu_x1c_tray_0'].state != 'Empty' ?
            'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 18%
          '--paper-item-icon-color': var(--tray_0_color)
          background-color: rgba(0,0,0,0.5)
          box-shadow: 0 0 5px 5px var(--tray_0_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.ams_0_bambu_x1c_tray_0
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 18%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: custom:config-template-card
        entities:
          - sensor.ams_0_bambu_x1c_tray_1
        element:
          type: state-icon
          entity: sensor.ams_0_bambu_x1c_tray_1
          icon: >-
            ${states['sensor.ams_0_bambu_x1c_tray_1'].state != 'Empty' ?
            'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 39%
          '--paper-item-icon-color': var(--tray_1_color)
          background-color: rgba(0,0,0,0.5)
          box-shadow: 0 0 5px 5px  var(--tray_1_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.ams_0_bambu_x1c_tray_1
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 39%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: custom:config-template-card
        entities:
          - sensor.ams_0_bambu_x1c_tray_2
        element:
          type: state-icon
          entity: sensor.ams_0_bambu_x1c_tray_2
          icon: >-
            ${states['sensor.ams_0_bambu_x1c_tray_2'].state != 'Empty' ?
            'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 61%
          '--paper-item-icon-color': var(--tray_2_color)
          background-color: rgba(0,0,0,0.5)
          box-shadow: 0 0 5px 5px  var(--tray_2_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.ams_0_bambu_x1c_tray_2
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 61%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: custom:config-template-card
        entities:
          - sensor.ams_0_bambu_x1c_tray_3
        element:
          type: state-icon
          entity: sensor.ams_0_bambu_x1c_tray_3
          icon: >-
            ${states['sensor.ams_0_bambu_x1c_tray_3'].state != 'Empty' ?
            'mdi:bullseye' : 'mdi:tray' }
        style:
          top: 28%
          left: 83%
          '--paper-item-icon-color': var(--tray_3_color)
          background-color: rgba(0,0,0,0.5)
          box-shadow: 0 0 5px 5px var(--tray_3_bg)
          border-radius: 50px
          '--mdc-icon-size': 2.4em
      - type: state-label
        entity: sensor.ams_0_bambu_x1c_tray_3
        attribute: type
        tap_action:
          action: none
        style:
          top: 77%
          left: 83%
          text-align: center
          font-size: 1em
          background-color: rgba(0,0,0,0.4)
          box-shadow: 0 0 5px 5px rgba(0, 0, 0, 0.4)
          border-radius: 50px
          pointer-events: none
      - type: state-badge
        entity: sensor.ams_0_bambu_x1c_humidity
        style:
          top: 15%
          left: 29%
          color: transparent
      - type: state-badge
        entity: sensor.ams_0_bambu_x1c_temp
        style:
          top: 15%
          left: 72%
          color: transparent
    image: /local/ams.png
    style: |
      ha-card {
        background: none !important;
        border: none !important;
        --tray_0_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_0', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_0', 'color') }}; {% endif %}
        --tray_1_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_1', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_1', 'color') }}; {% endif %}
        --tray_2_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_2', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_2', 'color') }}; {% endif %}
        --tray_3_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_3', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_3', 'color') }}; {% endif %}
        --tray_0_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_0', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_1_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_1', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_2_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_2', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_3_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_3', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
      }
  - type: picture-elements
    elements:
      - type: state-badge
        entity: sensor.x1c_bambu_x1c_bed_temperature
        style:
          top: 75%
          left: 50%
          color: transparent
      - type: state-badge
        entity: sensor.x1c_bambu_x1c_nozzle_temperature
        style:
          top: 32%
          left: 50%
          color: transparent
      - type: state-badge
        entity: sensor.x1c_bambu_x1c_chamber_temperature
        style:
          top: 32%
          left: 80%
          color: transparent
      - type: state-icon
        entity: light.x1c_bambu_x1c_chamber_light
        tap_action:
          action: toggle
        style:
          top: 32%
          left: 12%
          transform: scale(1.5,1.5)
    image: /local/x1c.png
    style: |
      ha-card {
        background: none !important;
        border: none !important;
        --tray_0_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_0', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_0', 'color') }}; {% endif %}
        --tray_1_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_1', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_1', 'color') }}; {% endif %}
        --tray_2_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_2', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_2', 'color') }}; {% endif %}
        --tray_3_color: {% if is_state('sensor.ams_0_bambu_x1c_tray_3', 'Empty') %} grey; {% else %} {{
            state_attr('sensor.ams_0_bambu_x1c_tray_3', 'color') }}; {% endif %}
        --tray_0_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_0', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_1_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_1', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_2_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_2', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
        --tray_3_bg: {% if is_state_attr('sensor.ams_0_bambu_x1c_tray_3', 'id', state_attr('sensor.current_ams_filament_in_use', 'id')) %} rgba(255, 255, 126, 0.5); {% else %} rgba(0,0,0,0.5); {% endif %}
      }


image.png

YAML Code - Print Details
type: vertical-stack
cards:
  - type: custom:mushroom-title-card
    title: ''
    subtitle: Print Details
    alignment: center
  - type: custom:mushroom-entity-card
    entity: sensor.x1c_bambu_x1c_stage
    name: Task
    icon: mdi:file-tree
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-entity-card
        entity: sensor.x1c_bambu_x1c_print_progress
        name: Fortschritt
        icon: mdi:progress-clock
      - type: custom:mushroom-entity-card
        entity: sensor.x1c_bambu_x1c_subtask
        name: Druckobjekt
        icon: mdi:ufo
  - type: vertical-stack
    cards: []
  - type: custom:mushroom-entity-card
    entity: sensor.x1c_bambu_x1c_print_remaining_time
    name: Verbleibend
    icon: mdi:clock-time-eight

 

 


 

image.png

YAML Code - Fans
type: entities
entities:
  - entity: sensor.x1c_bambu_x1c_cooling_fan
    name: Bauteillüfter
  - entity: sensor.x1c_bambu_x1c_big_fan1
    name: Bauteil Zusatzlüfter
  - entity: sensor.x1c_bambu_x1c_big_fan2
    name: Gehäuse Lüfter
  - entity: sensor.x1c_bambu_x1c_heatbreak_fan
    name: Hotend Lüfter
Automation: Drucker ausschalten nach Druck incl. Abkühlungsphase

Damit der Drucker sich nach dem Druck automatisch abschaltet könnt ihr folgende Automation nutzen:

YAML Code
alias: 3D Drucker automatische Abschaltung
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.x1c_bambu_x1c_heatbreak_fan
    below: 1
condition: []
action:
  - service: switch.turn_off
    data: {}
    target:
      entity_id: switch.STECKDOSE-DRUCKER   # hier bitte den Switch der smarten Steckdose angeben
  - service: automation.turn_off
    data: {}
    target:
      entity_id: automation.3d_drucker_automatische_abschaltung
mode: single

ich habe mir hier zusätzlich einen Button gebaut welchen ich aktivieren und deaktivieren kann um diese Automation zu steuern.

image.png

YAML Code - Automatisierungsbutton
type: custom:mushroom-template-card
primary: Abschaltung nach Druck
secondary: '{{ states(''sensor.x1c_bambu_x1c_print_remaining_time'') }} Minuten verbleibend'
icon: mdi:timer
icon_color: |-
  {% if is_state('automation.3d_drucker_automatische_abschaltung', 'on') %}
    yellow
  {% endif %}
tap_action:
  action: call-service
  service: automation.toggle
  data: {}
  target:
    entity_id: automation.3d_drucker_automatische_abschaltung
On / Off Button mit Sicherheitsfeature

Du möchtest die smarte Steckdose an deinem Drucker nur ausschalten können wenn der Drucker abgekühlt und fertig ist?

Dazu erstellst du folgendes Script:

YAML Code - Script
alias: 3D Drucker ausschalten
sequence:
  - if:
      - condition: numeric_state
        entity_id: sensor.x1c_bambu_x1c_heatbreak_fan
        above: 1
    then:
      - service: notify.alexa_media
        data:
          target:
            - media_player.buro
            - media_player.kuche
            - media_player.wohnzimmer
            - media_player.badezimmer
            - media_player.schlafzimmer
          data:
            type: announce
          message: Ausschalten nicht möglich wegen aktivem Druck
    else:
      - service: switch.toggle
        data: {}
        target:
          entity_id: switch.3d_drucker_on_off                       #hier musst du deine Steckdose angeben
      - service: button.press
        data: {}
        target:
          entity_id: button.x1c_bambu_x1c_reset_filter
mode: single

Jetzt musst du dir nur noch den Button dafür erstellen und dann bist du fertig!

image.png

YAML Code für Button
type: custom:mushroom-entity-card
entity: switch.3d_drucker_on_off
icon: mdi:power
icon_color: yellow
layout: horizontal
name: X1 Carbon
secondary_info: none
tap_action:
  action: call-service
  service: script.3d_drucker_ausschalten
  data: {}
  target: {}

image.png

*big thanks to WolfwithSword for the great NodeRed Code


[old version] Bambu X1C Bugfix MQTT Connection

hier eine kleine Zusammenfassung was geändert werden muss:

image.png

Doppelklick auf Bambu X1C und dann

image.png

hier auf den Stift.

image.png

 Passt den Port auf 8883 an und aktiviert TLS.

Danach gehts in den Sicherheits Tab.

image.png

hier fügt ihr als Benutzer bblp ein und als Passwort den Code von eurem Drucker.

Energy Dashboard - richtig einrichten

Als erstes legen wir uns einen Helfer für den Strompreis an:

Strompreis Helfer anlegen

Als erstes legen wir einen Helfer für unseren Strompreis fest. Hierzu gehen wir auf Einstellungen - Geräte Dienste - Helfer:

image.png

Hier müssen wir folgende Config eintragen:

image.png

Schrittgröße:

0,0001

Maßeinheit:

EUR /kWh
optional falls nicht vorhanden - template.yaml anlegen

Solltest du noch keine Template yaml haben legen wir diese jetzt an. Füge folgenden Code in der configuration.yaml ein:

template: !include template.yaml

das sollte dann in etwa so aussehen:

image.png

jetzt musst du noch die template.yaml als Datei im selben Ordner wie die configuration.yaml anlegen.

Inhalt für die template.yaml

Als erstes saldieren wir die Werte unseres Zählers (in meinem Fall Shelly 3em pro):

- sensor:
    - name: "Power Total" 
      unique_id: power_total
      unit_of_measurement: W
      device_class: power
      state_class: measurement
      state: >
        {{ 
        states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_a_active_power')|float(0) +
        states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_b_active_power')|float(0) +
        states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_c_active_power')|float(0) }}
      availability: >
        {{ 
          [ states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_a_active_power')|float(0) ,
            states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_b_active_power')|float(0) ,
            states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_c_active_power')|float(0) ] | map('is_number') | min }}

Du kannst hier auch mehrere Werte anfügen oder reduzieren. Hierfür musst du die Zeilen 9-11 und entsprechend 14-16 anpassen - hier ein kleines Beispiel solltest du nur einen Sensor haben:

- sensor:
    - name: "Power Total"
      unique_id: power_total
      unit_of_measurement: W
      device_class: power
      state_class: measurement
      state: >
        {{ states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_a_active_power')|float(0) }}
      availability: >
        {{ 
          [ states('sensor.shellypro3em_XXXXXXXXXXXXXXXXX_phase_a_active_power')|float(0) ) ] | map('is_number') | min }}

Ich empfehle dir hier immer diesen Weg zu gehen weil du bei einem Wechsel der Zähleinheit einfach hier nur deinen Sensor anpassen musst und dein Energydashboard etc. einfach weiterläuft.

 Jetzt kommen wir zum Netzbezug und der Netzeinspeisung:

Netzbezug
- sensor:
    - name: "Power vom Netz (Watt)" 
      unique_id: power_vom_netz
      unit_of_measurement: W
      device_class: power
      state_class: measurement
      state: >
        {% if states('sensor.power_total') | float(0) >= 0 %}
            {{states('sensor.power_total') | float(0) | round (3) }}
        {% else %}
            {{(states ('0.0') | float(0)) |round(3) }}
        {% endif %}
      availability: >
        {{ 
          [ states('sensor.power_total') ] | map('is_number') | min }}

Solltest du eine PV Anlage verwenden müssen wir auch noch die Netzeinspeisung konfigurieren - falls du keine besitzt kannst du einfach zum Punkt Helfer weiterspringen.

Netzeinspeisung
- sensor:
    - name: "Power ins Netz (Watt)" 
      unique_id: power_ins_netz
      unit_of_measurement: W
      device_class: power
      state_class: measurement
      state: >
        {% if states('sensor.power_total') | float(0) < 0 %}
            {{(states('sensor.power_total') | float(0))*-1 | round (3) }}
        {% else %}
            {{(states ('0.0') | float(0)) |round(3) }}
        {% endif %}
      availability: >
        {{ 
          [ states('sensor.power_total') ] | map('is_number') | min }}

Als nächstes kommt noch die Eigenverbrauchs Berechnung hier musst du :

Eigenverbrauch
- sensor:
    - name: "PV Eigenverbrauch (Watt)" 
      unique_id: pv_eigenverbrauch_watt
      state_class: measurement
      icon: mdi:transmission-tower
      unit_of_measurement: W
      device_class: power
      state: >
        {% if states('sensor.power_total') | float(0) < 0 %}
            {{ ( (states('sensor.power_total') | float(0) ) + (states('sensor.SENSOR VON DEINER PV MESSUNG') | float(0) ) ) | round (3) }}
        {% else %}
            {{ states('sensor.SENSOR VON DEINER PV MESSUNG') | round (3) }}
        {% endif %}
      availability: >
        {{ 
          [ states('sensor.power_total'),
            states('sensor.switch_pv_power') ] | map('is_number') | min }}

Hier musst du nun in Zeile 10 und 12 deinen Watt-Sensor (Power) von der PV Anlage eintragen

Ersparnis PV Anlage berechnen
- sensor: 
    - name: "PV Vorteil"
      unique_id: pv_vorteil
      unit_of_measurement: EUR/h
      state: >
        {{ states('sensor.pv_eigenverbrauch_watt')|float(0) * states('input_number.strompreis')|float(0)/1000 }}

Jetzt legen wir noch ein paar Helfer an:

Helfer

image.png

Hier legen wir jeweils einen Integration - Riemann Summenintegralsensor an:

Netzverbrauch =

image.png

Netzeinspeisung =

image.png

Ersparnis = 

image.png

Jetzt musst du diese Helfer nur noch richtig in deinem Energy Dashboard einfügen und du bist fertig ;)

Energy Dashboard

Hierzu gehen wir auf Einstellungen - Dashboards - Energie

image.png

image.png

jetzt werden bei dir folgende Fehler aufschlagen:

image.png

das ist soweit auch korrekt. Warte einfach bis die Sensoren einiges an Daten gesammelt haben (spätestens nach einer Stunde sollten die Fehler verschwunden sein)


Für ein eigenes Dashboard hab ich euch hier noch ein paar Infos hinterlegt:

Eigene Übersichtsseite

Die Normalen Cards von Homeassistant findet ihr hier

Ich verwende noch zusätzlich die :

Power Flow Card Plus