FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bruchflieger am 02 Oktober 2018, 23:01:35

Titel: Relais an ESPEasy Device nur für 1 sek einschalten?
Beitrag von: Bruchflieger am 02 Oktober 2018, 23:01:35
Hallo,

Ich lasse seit einigen Tagen schon die an mehreren ESPEasy Devices angeschlossenen Temperatursensoren an der Heizungsanlage loggen und möchte nun auch pöh a pöh die Schalthandlungen und Steuerungsaufgaben an FHEM übergeben.
Knackpunkt ist derzeit die Stellung des Mischers für den Heizkreis - der wird einfach durch anlegen der Netzspannung an wahlweise 2 Leitungen auf oder zu gefahren. Zum Stellen wir das je nach Abweichung vom Sollwert 1 Sekunde oder länger getaktet.
Die Verknüpfung zur Regelung ist noch nicht die Frage die ich stellen möchte, im Moment bräuchte ich einen Tipp, wie ich die Taktung auf 1 Sekunde eingestellt bekomme.

Mit dem Befehl
set ESPEasy_Wemos_D1_Rel1 on;define a_ESPEasy_Wemos_D1_Rel1 at +00:00:01 set ESPEasy_Wemos_D1_Rel1 off
schaltet das Relais nach kurzer Verzögerung (2sek) ein, aber erst nach weiteren ca. 3 Sekunden wieder aus. Leider wird das zu lange sein, da ich so den Mischer mit hoher Wahrscheinlichkeit dazu bekommen werde, andauernd auf und zu zu fahren, um die gewünschte Temperatur am Ausgang einzustellen.

Hat da jemand einen Tipp?
(ich weiß, dass die Befehle auch erst noch durchs Netzwerk gesandt und dann vom Empfänger interpretiert werden müssen und sich so nochmal Verzögerungen ergeben können, aber kann man das nicht doch irgendwie hintricksen, dass die Einschaltdauer passt? )
PS: mit at +00:00:02 dauert der Schaltimpuls auch nur noch ca. 2 Sek - ich hätts aber schon gern auf 1 sek reduziert...

Andernfalls würde ich versuchen, den Mischer mit einem kräftigen Modellbauservo zu stellen - aber da muss ich auch erst wieder das Wiki weiter durchforsten, wie das funktionieren wird...

Nachtrag:
Das Element (Relais) ist so definiert:
define ESPEasy_Wemos_D1_Rel1 ESPEasy <IP-Adresse> 80 ESPBridge Wemos_D1_Rel1
attr ESPEasy_Wemos_D1_Rel1 IODev ESPBridge
attr ESPEasy_Wemos_D1_Rel1 Interval 2000
attr ESPEasy_Wemos_D1_Rel1 devStateIcon .*off:FS20.off .*on:FS20.on
attr ESPEasy_Wemos_D1_Rel1 eventMap /gpio 0 on:on/gpio 0 off:off/
attr ESPEasy_Wemos_D1_Rel1 group ESPEasy Device
attr ESPEasy_Wemos_D1_Rel1 icon sani_pump
attr ESPEasy_Wemos_D1_Rel1 presenceCheck 1
attr ESPEasy_Wemos_D1_Rel1 readingSwitchText 1
attr ESPEasy_Wemos_D1_Rel1 room ESPEasy
attr ESPEasy_Wemos_D1_Rel1 setState 3


Im ESPEasy Controller ist ein Device als Switch Input definiert, der an FHEM den aktuellen Status meldet.

-> Warum das nun auch einfach so als Ausgang funktioniert, weiß ich nicht, ich vermute aber dass es mit dem Eintrag zur eventMap zusammenhängen könnte...
Titel: Antw:Relais an ESPEasy Device nur für 1 sek einschalten?
Beitrag von: ollir am 02 Oktober 2018, 23:58:56
Schau mal in der Doku zum Modul unter "LongPulse"
LongPulse
Direct pulse control of output pins (duration in s)

    arguments: <pin> <0|1|off|on> <duration>
    example: set <esp> longpulse 1 on 0

Titel: Antw:Relais an ESPEasy Device nur für 1 sek einschalten?
Beitrag von: bartman121 am 03 Oktober 2018, 09:38:12
solche Steuerungsaufgaben über WLAN sind nicht zuverlässig. Die Zeitdauer für das Relais selbst, muss vom ESP geregelt sein.

WLAN ist nicht Echtzeit-fähig (https://de.wikipedia.org/wiki/Echtzeit#Reaktionszeit).

Wie bereits erwähnt, du musst LongPulse nutzen.


Ich kenne das Modul-ESPEasy selbst nicht, aber laut [url=https://wiki.fhem.de/wiki/ESPEasy#on-for-timer_und_off-for-timer]WIKI (https://www.letscontrolit.com/wiki/index.php/GPIO#Commands) scheint LongPulse dort schon implementiert zu sein.
Titel: Antw:Relais an ESPEasy Device nur für 1 sek einschalten?
Beitrag von: Bruchflieger am 03 Oktober 2018, 14:27:07
Hallo,

vielen Dank für den Tipp - genau das hab ich gebraucht... Befehle werden zwar mit einer kleinen Verzögerung ausgeführt, aber die ist irrelevant - wichtig ist, dass die Taktung des geschalteten Impulses stimmt, und das macht es jetzt - danke nochmal für den Tipp.
für die interessierten Nachbauer der Code für ein Relais um es wahlweise 0,5s, 1s, 2s, 3s, 4s oder 5s zu tankten:
#### Relais für Mischer auf Taktung ####
define R_Mischer_auf dummy
attr R_Mischer_auf room ESPEasy
attr R_Mischer_auf webCmd p05:p1:p2:p3:p4:p5

define n_Relais_1_p05 notify R_Mischer_auf:p05 { GetHttpFile("<IP>", "/control?cmd=pulse,0,1,500") }
attr n_Relais_1_p05 room ESPEasy

define n_Relais_1_p1 notify R_Mischer_auf:p1 { GetHttpFile("<IP>", "/control?cmd=longpulse,0,1,1") }
attr n_Relais_1_p1 room ESPEasy

define n_Relais_1_p2 notify R_Mischer_auf:p2 { GetHttpFile("<IP>", "/control?cmd=longpulse,0,1,2") }
attr n_Relais_1_p2 room ESPEasy

define n_Relais_1_p3 notify R_Mischer_auf:p3 { GetHttpFile("<IP>", "/control?cmd=longpulse,0,1,3") }
attr n_Relais_1_p3 room ESPEasy

define n_Relais_1_p4 notify R_Mischer_auf:p4 { GetHttpFile("<IP>", "/control?cmd=longpulse,0,1,4") }
attr n_Relais_1_p4 room ESPEasy

define n_Relais_1_p5 notify R_Mischer_auf:p5 { GetHttpFile("<IP>", "/control?cmd=longpulse,0,1,5") }
attr n_Relais_1_p5 room ESPEasy 


<IP> ist durch die IP-Adresse des ESP-Boards zu ersetzen.

Dann wäre der nächste Schritt der Vergleich zwischen SOLL- und IST-Wert des Mischers, mit der Entscheidung welcher Takt in welche Richtung zu wählen ist und danach 20...30 sek zu warten, um das Ergebnis beurteilen zu können - das Wasser muss ja erstmal gepumpt werden und das Rohr + Fühler nach dem Mischer auf die neue Temperatur bringen... - ggf. mag mir schon mal jemand noch einen Stubs in die passende Richtung geben, dann fällt die Suche leichter ;)
Titel: Antw:[gelöst] Relais an ESPEasy Device nur für 1 sek einschalten?
Beitrag von: bartman121 am 03 Oktober 2018, 15:29:58
Hallo,

ACHTUNG: GetHtttpFile müsste m.M.n. Blocking sein. Wenn dein ESP mal aus irgendwelchen Gründen nicht antwortet, dann blockierst du dein FHEM.
ZitatEs ist zu beachten, dass bei den Funktionen

GetHttpFile()
GetFileFromURL
GetFileFromURLQuiet
HttpUtils_BlockingGet

ein sogenannter "blockierender" Aufruf durchgeführt wird. Das bedeutet, dass FHEM bei einem Aufruf einer dieser Funktionen solange wartet und dabei absolut nichts macht, bis die Antwort vom HTTP-Server eintrifft und die Funktion damit beendet ist.

GetHttpFile  -> Umbau zu NonBlocking (https://forum.fhem.de/index.php?topic=39124.0)

Deine notifies sehen schrecklich aus, mach es doch bitte wie im Wiki für ESPEasy beschrieben ist:
https://wiki.fhem.de/wiki/ESPEasy#on-for-timer_und_off-for-timer





Titel: Antw:[gelöst] Relais an ESPEasy Device nur für 1 sek einschalten?
Beitrag von: Bruchflieger am 04 Oktober 2018, 10:36:25
Hallo,

Danke für den Hinweis. Blockieren möchte ich Fhem natürlich nicht.
Zitat von: bartman121 am 03 Oktober 2018, 15:29:58
Deine notifies sehen schrecklich aus, mach es doch bitte wie im Wiki für ESPEasy beschrieben ist:

sorry, ich hab die auch nur von jemand abgeschrieben... - Google seit ner Woche nach "FEHM ESPEASY Relais" und Varianten davon, und die von dir benannte Wiki-Seite war nicht unter den Ergebnissen...
Werde ich zum Wochenende weiter probieren und dann hier wieder posten...
Titel: Antw:Relais an ESPEasy Device nur für 1 sek einschalten?
Beitrag von: billy-boy am 04 Oktober 2018, 12:22:33

Moin

Vielleicht solltest du dir das mal angucken: https://wiki.fhem.de/wiki/Heizung:_Verbrauchsoptimierung,_Radiator/Fu%C3%9Fboden-Steuerung

Anstatt der Regelung mit Doif-Modul habe ich das mit PID20 realisiert.
Läuft schon seit geraumer Zeit zufriedenstellend.

Der Stellmotor wird hier erklärt.
https://wiki.fhem.de/wiki/STELLMOTOR

Gruß

brisco-schneider