Hauptmenü

PWM (für arme)

Begonnen von Gerdi68, 28 Februar 2018, 16:15:12

Vorheriges Thema - Nächstes Thema

Gerdi68

Hallo,

mit folgendem Code:

defmod Heizung_A5 DOIF ([ESPEasy_ESP_1_Temp:Temperature] < 2.5) (set dummy 0;; set ESPEasy_ESP_2_A0 on;; sleep 3;; set ESPEasy_ESP_2_A0 off;; sleep 6;; set dummy on)
attr Heizung_A5 do always

defmod ESPEasy_ESP_1_Temp ESPEasy 192.168.178.130 80 espBridge ESP_1_Temp
attr ESPEasy_ESP_1_Temp IODev espBridge
attr ESPEasy_ESP_1_Temp Interval 300
attr ESPEasy_ESP_1_Temp group ESPEasy Device
attr ESPEasy_ESP_1_Temp presenceCheck 1
attr ESPEasy_ESP_1_Temp readingSwitchText 1
attr ESPEasy_ESP_1_Temp room ESPEasy
attr ESPEasy_ESP_1_Temp setState 3

defmod ESPEasy_ESP_2_A0 ESPEasy 192.168.178.131 80 espBridge ESP_2_A0
attr ESPEasy_ESP_2_A0 IODev espBridge
attr ESPEasy_ESP_2_A0 Interval 300
attr ESPEasy_ESP_2_A0 eventMap /mcpgpio 1 on:off/mcpgpio 1 off:on
attr ESPEasy_ESP_2_A0 group ESPEasy Device
attr ESPEasy_ESP_2_A0 presenceCheck 1
attr ESPEasy_ESP_2_A0 readingSwitchText 1
attr ESPEasy_ESP_2_A0 room ESPEasy
attr ESPEasy_ESP_2_A0 setState 3
attr ESPEasy_ESP_2_A0 webCmd on:off


wollte ich erreichen, das ein Relais (low active) in Abhängigkeit der Außentemperatur geschaltet wird.
In der nächsten Stufe wären Temperaturbereiche abgefragt worden.

Aber soweit ist es noch nicht.
Die (relativ) kurze Zeit war hier nur zum testen ob überhaupt etwas passiert. Später wäre es im Minutenbereich gewesen.

Der "dummy" ist nur zum debuggen eingebaut.
Wenn das Relais geschaltet wurde, dann (mindestens sehr oft (wenn nicht sogar immer, das ließ sich im Event-Monitor irgendwann nicht mehr genau erkennen)) auch entsprechend den vorgegebenen Sekunden.
Der letzte dummy war, um das sleep nicht als letzten Befehl enden zu lassen. Stand so im Wiki.

Was wohl nicht richtig klappt, ist das triggern des DOIF.
Das scheint nicht (sofort wieder) ausgelöst zu werden. Teilweise vergingen mehrere Minuten bis die Schleife wieder durchlief.

Die Temperatur kommt von einem ESP8266 und der Status steht dann hin und wieder auf absent.
Aber...
Genau dieser Temperaturwert wird alle 120 Sekunden neu gesendet und erscheint ohne "Abbrüche" auch in einem Plot.


1. Frage:
Sieht jemand einen (Denk)Fehler? Wonach soll ich suchen?

2. Frage: (womit die erste hinfällig wäre)
Gibt es eine elegantere Lösung? (Zu bedenken wäre, das später zur Außentemperaturbereiche eine unterschiedliche Pulsweite erzeugt werden soll.)

PS: Das PWM-Modul habe ich mr dafür auch schon angeschaut.
Jedoch sehe ich keine Möglichkeit, die "echte" Temperatur des zu heizenden zu erfassen und damit den PID-Regler berechnen zu lassen.



Vielen Dank für eure Hilfe :)

Frank_Huber

#1
Auf den ersten Blick ist der Syntax falsch.
Befehle werden bei DOIF mit klammern getrennt.
defmod Heizung_A5 DOIF ([ESPEasy_ESP_1_Temp:Temperature] < 2.5) (set dummy 0,set ESPEasy_ESP_2_A0 on,sleep 3,set ESPEasy_ESP_2_A0 off,sleep 6,set dummy on)
attr Heizung_A5 do always


eleganter (wegen den Pausen wäre:
defmod Heizung_A5 DOIF ([ESPEasy_ESP_1_Temp:Temperature] < 2.5) (set dummy 0) (set ESPEasy_ESP_2_A0 on) (set ESPEasy_ESP_2_A0 off) (set dummy on)
attr Heizung_A5 do always
attr Heizung_A5 wait 0,0,3,6


Eigene Befehlsblöcke und mit wait Attribut verzögert.
Du könntest die Aufgabe aber auch direkt in ESPeasy über die Regeln abfangen. dann würde es auch laufen wenn FHEM mal nicht erreichbar ist.


EDIT: Korrektur von nils_ eingearbeitet

nils_

kleine korrektur...
beim wait müssten es Kommas sein. Doppelpunkte trennt DOIF von DOELSEIF usw. ( http://commandref.fhem.de/commandref_DE.html#DOIF_wait )


defmod Heizung_A5 DOIF ([ESPEasy_ESP_1_Temp:Temperature] < 2.5) (set dummy 0) (set ESPEasy_ESP_2_A0 on) (set ESPEasy_ESP_2_A0 off) (set dummy on)
attr Heizung_A5 do always
attr Heizung_A5 wait 0,0,3,6
viele Wege in FHEM es gibt!

Frank_Huber

Zitat von: nils_ am 28 Februar 2018, 16:43:02
kleine korrektur...
beim wait müssten es Kommas sein. Doppelpunkte trennt DOIF von DOELSEIF usw. ( http://commandref.fhem.de/commandref_DE.html#DOIF_wait )


defmod Heizung_A5 DOIF ([ESPEasy_ESP_1_Temp:Temperature] < 2.5) (set dummy 0) (set ESPEasy_ESP_2_A0 on) (set ESPEasy_ESP_2_A0 off) (set dummy on)
attr Heizung_A5 do always
attr Heizung_A5 wait 0,0,3,6

Danke! Hab ich wohl ausm Kopf verwechselt. ist oben korrigiert.

Gerdi68

Vielen Dank!

Ich probiere das heute Abend aus und werde dann eine Rückmeldung geben.

Gerdi68

Vielen Dank erstmal.
Es klappt noch nicht so wirklich :(

Werde die Tage das Verbose hochschrauben und dann weiter probieren.