Ankündigung

Einklappen
Keine Ankündigung bisher.

bosch Smart Home Raumtemperatur II über zigbee2mqtt wie auf Ausgang wirken lassen.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    bosch Smart Home Raumtemperatur II über zigbee2mqtt wie auf Ausgang wirken lassen.

    Hi,
    ich versuche einen Bosch Smart Home Raumtemperaturrelger II auf eine Fußbodenheizung wirken zu lassen aber fühle ich mich, als hätte ich von HASS keine Ahnung.

    Ich habe also via Zigbee2mqtt einen "bosch Smart Home Raumtemperatur II" eingebunden, ging wunderbar und ich habe jetzt alles in HASS, was ich meiner Meinung nach bräuchte und auch noch bidirektional. Aber wie sage ich dem Teil jetzt, es soll z.b. auf einen Relais Ausgang wirken zum testen? Ich habe hier eine Shelly Plug und wollte damit etwas spielen und bei den Kindern im Bad eine Heizmatte zum testen an/aus machen. Quasi "PWM Simulieren"... wenn ich den verschiedenen Anleitungen von Simon42 folge, lande ich z.b. bei der "HASmartThermostat" Integration. Die hat aber wieder eigene Sollwerte und Betriebsmodi. Klar ich kann die Isttemperatur vom Bosch damit verbinden und dann wirkt er auf den von mir ausgewählten Ausgang, aber dann ist die Sollwertverstellung vom Bosch nicht möglich und eigentlich ist das ja doppelt.. mir fehlt ja "nur" die Wirkung auf den Ausgang. Muss ich das dann z.b. über C.A.F.E. machen oder über ein Skript?
    Kann mich da bitte kurz wer in die richtige Richtung schupsen? DANKE!

    Gruß
    Roman

    PS:Es sollte ein HASS Anfänger Forum geben.
    Zuletzt geändert von BadSmiley; Heute, 11:17.
    Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

    #2
    Edit3: So, jetzt geht es wie gedacht:

    1. unter config/blueprints/automation/<ordner>/​ eine Datei wie z.b. pwm_fubu.yaml ablegen und folgenden Code rein kopieren:

    Code:
    blueprint:
      name: PWM Heizungssteuerung (P-Regler, Heizart wählbar → Shelly)
      description: >
        Berechnet selbst einen Stellwert (0–100 %) aus der Regelabweichung
        zwischen Soll- und Ist-Temperatur eines Climate-Thermostats (P-Regler
        mit Proportionalband) und gibt diesen als PWM-Signal (getaktetes Ein/Aus)
        auf einen Schaltausgang aus.
    
        Über die Heizart werden erprobte Voreinstellungen für Proportionalband
        und Zykluszeit gewählt. Im Modus "Benutzerdefiniert" greifen stattdessen
        die manuell eingestellten Werte.
    
        Voreinstellungen je Heizart:
          - Fußbodenheizung: Proportionalband 3,5 °C, Zykluszeit 20 min (träge)
          - Heizkörper:      Proportionalband 1,5 °C, Zykluszeit 15 min
          - Konvektor/Lüfter: Proportionalband 1,0 °C, Zykluszeit 10 min (flink)
          - Benutzerdefiniert: nutzt die manuellen Felder unten
    
        Hinweis: Reiner P-Regler -> es bleibt eine kleine bleibende
        Regelabweichung (Ist pendelt sich knapp unter Soll ein).
      domain: automation
      input:
        climate_entity:
          name: Thermostat (Climate-Entität)
          description: Liefert Ist-Temperatur (current_temperature) und Soll-Temperatur.
          selector:
            entity:
              domain: climate
        setpoint_attribute:
          name: Soll-Attribut
          description: >
            Welches Attribut den Sollwert enthält. target_temp_low für Geräte mit
            Heiz-/Kühlbereich, temperature für normale Thermostate.
          default: target_temp_low
          selector:
            select:
              options:
                - label: target_temp_low (Heiz-/Kühlbereich)
                  value: target_temp_low
                - label: temperature (Standard-Sollwert)
                  value: temperature
        switch_entity:
          name: Schaltausgang
          description: Der Schalter/Aktor, der getaktet werden soll (z. B. Shelly).
          selector:
            entity:
              domain: switch
        heating_type:
          name: Heizart
          description: >
            Bestimmt die Voreinstellungen für Proportionalband und Zykluszeit.
            Bei "Benutzerdefiniert" greifen die manuellen Felder darunter.
          default: heizkoerper
          selector:
            select:
              options:
                - label: Fußbodenheizung (träge)
                  value: fussboden
                - label: Heizkörper
                  value: heizkoerper
                - label: Konvektor / Lüfter (flink)
                  value: konvektor
                - label: Benutzerdefiniert
                  value: custom
        custom_proportional_band:
          name: "Benutzerdef.: Proportionalband (°C)"
          description: >
            Nur wirksam, wenn Heizart = Benutzerdefiniert. Temperaturspanne
            unterhalb des Sollwerts, über die von 0 % auf 100 % hochgeregelt wird.
          default: 2.0
          selector:
            number:
              min: 0.5
              max: 5.0
              step: 0.1
              unit_of_measurement: "°C"
              mode: slider
        custom_cycle_time:
          name: "Benutzerdef.: Zykluszeit"
          description: >
            Nur wirksam, wenn Heizart = Benutzerdefiniert. Muss in 60 aufgehen.
          default: "15"
          selector:
            select:
              options:
                - label: 5 Minuten
                  value: "5"
                - label: 10 Minuten
                  value: "10"
                - label: 15 Minuten
                  value: "15"
                - label: 20 Minuten
                  value: "20"
                - label: 30 Minuten
                  value: "30"
        min_einschaltzeit:
          name: Minimale Einschaltzeit (Sekunden)
          description: >
            Stellwerte, die eine kürzere Einschaltzeit als diesen Wert ergeben,
            werden auf 0 gesetzt (verhindert sehr kurze, sinnlose Schaltimpulse).
          default: 30
          selector:
            number:
              min: 0
              max: 120
              step: 5
              unit_of_measurement: s
              mode: slider
    
    mode: restart
    
    triggers:
      # Regulärer Zyklustakt (jede Minute, gefiltert per Condition)
      - trigger: time_pattern
        minutes: "/1"
        id: zyklus
      # Sofort neu rechnen, wenn sich der Sollwert ändert
      - trigger: state
        entity_id: !input climate_entity
        attribute: !input setpoint_attribute
        id: sollwert
    
    variables:
      climate_entity: !input climate_entity
      switch_entity: !input switch_entity
      setpoint_attribute: !input setpoint_attribute
      heating_type: !input heating_type
      custom_band: !input custom_proportional_band
      custom_cycle: !input custom_cycle_time
      min_ein: !input min_einschaltzeit
      # Voreinstellungen je Heizart auflösen
      prop_band: >
        {% if heating_type == 'fussboden' %} 3.5
        {% elif heating_type == 'heizkoerper' %} 1.5
        {% elif heating_type == 'konvektor' %} 1.0
        {% else %} {{ custom_band }}
        {% endif %}
      cycle_min: >
        {% if heating_type == 'fussboden' %} 20
        {% elif heating_type == 'heizkoerper' %} 15
        {% elif heating_type == 'konvektor' %} 10
        {% else %} {{ custom_cycle }}
        {% endif %}
      ist_temp: "{{ state_attr(climate_entity, 'current_temperature') | float(0) }}"
      soll_temp: "{{ state_attr(climate_entity, setpoint_attribute) | float(0) }}"
      abweichung: "{{ soll_temp - ist_temp }}"
      # P-Regler: lineare Begrenzung auf 0..100 % über das Proportionalband
      stellwert: >
        {% set p = (abweichung / (prop_band | float) * 100) %}
        {{ [[p, 0] | max, 100] | min | round(1) }}
      ein_sekunden_roh: "{{ (cycle_min | int * 60 * (stellwert / 100)) | int(0) }}"
      # Mindest-Einschaltzeit erzwingen
      ein_sekunden: "{{ ein_sekunden_roh if ein_sekunden_roh >= (min_ein | int) else 0 }}"
    
    conditions:
      # Sollwert-Trigger immer durchlassen; Zeit-Trigger nur zu Zyklusbeginn
      # (z. B. bei 15 min: :00, :15, :30, :45)
      - condition: template
        value_template: >
          {{ trigger.id == 'sollwert'
             or now().minute % (cycle_min | int) == 0 }}
    
    actions:
      - choose:
          # Stellwert 0 (oder unter Mindestzeit) -> komplett aus
          - conditions:
              - "{{ ein_sekunden <= 0 }}"
            sequence:
              - action: switch.turn_off
                target:
                  entity_id: "{{ switch_entity }}"
          # Stellwert >= 100 -> dauerhaft an
          - conditions:
              - "{{ stellwert >= 100 }}"
            sequence:
              - action: switch.turn_on
                target:
                  entity_id: "{{ switch_entity }}"
        default:
          # Teil-Last: an, warten, aus
          - action: switch.turn_on
            target:
              entity_id: "{{ switch_entity }}"
          - delay:
              seconds: "{{ ein_sekunden }}"
          - action: switch.turn_off
            target:
              entity_id: "{{ switch_entity }}"​
    Zuletzt geändert von BadSmiley; Heute, 12:57.
    Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

    Kommentar

    Lädt...
    X