PWM mit ESP8266

Begonnen von andies, 01 Januar 2026, 15:02:13

Vorheriges Thema - Nächstes Thema

andies

Und heute wurde mal geröstet. Also, Dinge, die in der Theorie super funktionieren, klappen in der Praxis gar nicht. Ich war davon ausgegangen, dass ich einfach eine PID-Steuerung nutze. Das geht aber nicht. Der Röster ist so "robust", dass er auf Eingaben nur wenig bis gar nicht richtig reagiert bzw wenn, dann sehr heftig. Eine echte Steuerung findet eigentlich nur bei Werten zwischen 90 und 127 statt (alles darunter ist für den Röstvorgang nicht brauchbar), der eingebaute slider viel zu grob und man muss teilweise Werte feinsteuern. Also habe ich mit ChatGPT alles neu programmiert und mir keinen slider, sondern einzelne Buttons gebaut. Dazu eine Anzeige der letzten Werte, damit  man sieht, wie heiß es im Röster ist.

Ich merke noch, das ich das ein paar mal ausprobieren muss, bis das wirklich handhabbar wird. Aber es ist schon bedeutend einfacher als vorher und wieder anders, als geplant. Anbei ein Screenshot sowie die Datei selbst. Wer das für sich nutzen will, muss die devices anpassen; ich poste mal hier meinen Röster:
defmod Roester MQTT2_DEVICE DVES_8E6455
attr Roester IODev Mosquitto
attr Roester readingList DVES_8E6455:stat/tasmota_8E6455/RESULT:.* { json2nameValue($EVENT) }\
DVES_8E6455:tele/tasmota_8E6455/LWT:.* LWT\
DVES_8E6455:cmnd/tasmota_8E6455/POWER:.* POWER\
DVES_8E6455:cmnd/tasmota_8E6455/Wiper:.* Wiper1\
DVES_8E6455:tele/tasmota_8E6455/INFO1:.* { json2nameValue($EVENT) }\
DVES_8E6455:tele/tasmota_8E6455/INFO2:.* { json2nameValue($EVENT) }\
DVES_8E6455:tele/tasmota_8E6455/INFO3:.* { json2nameValue($EVENT) }\
DVES_8E6455:tele/tasmota_8E6455/STATE:.* { json2nameValue($EVENT) }\
DVES_8E6455:tele/tasmota_8E6455/SENSOR:.* { json2nameValue($EVENT) }\
DVES_8E6455:tasmota/discovery/84F3EB8E6455/config:.* { json2nameValue($EVENT) }\
DVES_8E6455:tasmota/discovery/84F3EB8E6455/sensors:.* { json2nameValue($EVENT) }\
DVES_8E6455:stat/tasmota_8E6455/POWER:.* POWER\
DVES_8E6455:stat/tasmota_8E6455/STATUS8:.* { json2nameValue($EVENT) }\
DVES_8E6455:stat/tasmota_8E6455/STATUS:.* { json2nameValue($EVENT) }\
DVES_8E6455:stat/tasmota_8E6455/UPGRADE:.* { json2nameValue($EVENT) }\
DVES_8E6455:stat/tasmota_8E6455/LOGGING:.* LOGGING
attr Roester setList on:noArg cmnd/tasmota_8E6455/POWER ON \
off:noArg cmnd/tasmota_8E6455/POWER OFF \
Wiper1:slider,0,1,127 cmnd/tasmota_8E6455/Wiper %v
attr Roester userReadings istTemperatur {my $t=ReadingsVal($name,"MAX31855_Temperature",undef);; return if(!defined($t));; return if($t !~ /^-?\d+(\.\d+)?$/);; return $t} state {my $lwt=ReadingsVal($name,"LWT","");; return "offline" if($lwt ne "" && $lwt !~ m/Online/i);; my $p=ReadingsVal($name,"POWER","");; return lc($p) if($p ne "");; return "unknown"}
Wahrscheinlich braucht man die vielen Loggings nicht und auch meine heftige Berechnung der IstTemperatur ist eventuell unnötig. Ich lasse es drin, weil die Angaben in der html darauf basieren. Bitte auch den Verweis auf die eCharts in der HTML beachten, der muss uU auch angepasst werden-
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

DerD

Hi Andies,
so ganz verstehe ich deine Erklärungen zwar nicht, und ich kenne den Regler aus Tasmota nicht, aber bei PID hat man ja immer 3 Parameter, du sprichst nur von einem. Und wenn die Kennlinie des Rösters bei unterschiedlicher Bohnenmenge sich ändert, brauchst du schon viel Glück, nicht auch die Parameter ändern zu müssen - zumindest wenn es eine schnellstmögliche Aufheizung ohne Überschwingen werden soll. Sonst tut es ja auch einfaches On/off oder eben Powereinstellung 0-100%.

Loggst du den Reglerwert auch mit? Es wäre hilfreich zu sehen, wie Temp und Regler sich über die Zeit verhalten.
Gruß,
Dieter

andies

Ja genau das ist das Problem: Jede Bohnenmenge benötigt anscheinend andere Parameter. Ich bin da wahnsinnig geworden. Ich habe den Reglerwert gelogged und die ausgegebene Temperatur und ChatGPT gebeten, mir daraus die Parameter zu rechnen. Da kam nur Unsinn heraus, auch nachdem ich selbst versucht hatte das zu verstehen. Es fing schon damit an, dass bei einer Bohnenmenge von 250g die Höchsttemperatur trotz durchgesteuerter Regelung nicht erreicht wurde, man aber bei 200g sehr früh drosseln musste. Das ist eben ein sehr preiswerter Heimröster und wenn ich den PID-Regler "spiele", ist das einfacher.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann