Sigma-Delta Output --> set_output mit lamba setzten klappt nicht, aber bei "slow_pwm" schon!

Sigma-Delta Output ist ne wunderschöne Funtion um zB. Fussbodenheizungen mittels PWM (Pulsweitenmodulation) quasi-analog zu regeln. Dies funktioniert bei mir seit einigen Jahren mittels eines kleinen ESP8266 einwandfrei.

Nun wollte ich manuell den output modifizieren mit der action Funktion des Homeassistant: output.set_level bzw. der Lambda-Funktion: id(xxx).set_level(0.5);

Auch das funktioniert einandfrei, solange der Level fix ist - so wie im o.g. Beispiel bei 0.5 Sobald aber eine id(xx).state Variable verwendet wird, streikt das System. Es compiliert , aber läuft nicht.

Das allerseltsamste ist, dass die set_level Funktion beim “slow_pwm” output das tut was es soll. Ich kann hier die Sollwerte über den HA verändern über die id(xx).state variable so wie ich will…

Ideen ???

Möglicherweise gibt es ein RAM/Heap/Stack Problem. Der ESP8266 ist da ja sehr begrenzt.
Hast du schon mal versucht erst den Wert einer Variablen zuzuweisen und dann in die Funktion einzusetzen?

           lambda: |-          
              float ledbrightness = (float) id(xxx).state;
              id(xxx).set_level(ledbrightness);

Hallo, ich verwende hier keinen 8266 mehr sondern einen esp32 wroom dh sollte genug RAM haben.
Aber die Idee mit der internen Variable ist gut.
Das probiere ich mal aus…

Hallo, hab Deinen Weg ausprobiert, aber leider kein Erfolg.

output:
  - platform: sigma_delta_output
    #- platform: slow_pwm
    pin: GPIO13
    id: slow_pwm_thsol
    #period: 1000ms
    update_interval: 1000ms
    inverted: false
    min_power: 0.40
    max_power: 1.00
script:
    #
  - id: thsol_power_set
    parameters:
      pwr: float
    # ------------------
    then:
      - lambda: |-
          //
          float l_pwr = pwr ;
          //
          if ( l_pwr < 0.4) {
            //
            id(slow_pwm_thsol).turn_off() ; 
            //
          } else {
            //
            id(slow_pwm_thsol).turn_on() ; 
            //
            id(slow_pwm_thsol).set_level(l_pwr);
            //
          }
          //

das funktioniert leider nicht. Wenn die Output-Platform “slow_pwm” gewählt wird, dann kann ich den output beliebig einstellen…