[Gelöst] Sonoff 4Ch Pro R2 mit Tasmota per MQTT2: PulseTime oder on-for-timer

Begonnen von JHo, 24 Juli 2019, 22:34:03

Vorheriges Thema - Nächstes Thema

TomLee

Dann hier nochmal die 2 Varianten:

inttimer1:select,0,10,20,30,40,50,60,70,80 cmnd/sonoffOBI/Backlog POWER 1; delay $EVTPART1; POWER 0
inttimer2:selectnumbers,2,10,3600,0,lin cmnd/sonoffOBI/Backlog POWER 1; delay $EVTPART1; POWER 0

TomLee

Zitat von: JHo am 25 Juli 2019, 08:21:52
Tasmota bietet als Command dafür PulseTime. Das funktioniert in der Konsole und kann nach Tasmota-Referenz auch per MQTT geschickt werden: cmnd/%topic%/<command> <parameter> Dabei muss die PulseTime vor einem "on" gesetzt werden und gilt dann bis zur nächsten Änderung auf für manuelle Schaltvorgänge über das WebIF bzw am Gerät.


Nur bis zur nächsten Änderung geht aber nicht, die pulsetime bleibt (ohne save) bis zu einem restart auch für jeden "on" Befehl erhalten (man möge mich verbessern wenn dem nicht so ist)  mein Workaround dazu pulsetime einfach vor jedem "on" vorsichtshalber ausschalten  :P :

on:noArg cmnd/sonoffOBI/Backlog pulsetime 0; POWER 1
inttimer:selectnumbers,1,100,64900,0,lin cmnd/sonoffOBI/Backlog pulsetime $EVTPART1; POWER 1


Nachteil, nur noch über FHEM einschalten , nicht mehr über das WebIF (sonst halt mit Timer) des Geräts, kann man aber verkraften denk ich.

Beta-User

...nur als Idee: SetExtensions wird erst aktiv, wenn "vorher" nichts anderes gefunden wird. Es sollte also gehen, direkt "on-for-timer" zu nutzen (k.A., ob das als Redingsname zulässig ist...):

on-for-timer {"cmnd/sonoffOBI/Backlog POWER ".$EVTPART1*10." 1; delay ".$EVTPART1*10."; POWER 0 0"}

Führt zwar ggf. zu doppeltem Ausschalten, dafür könnte man das "pro Kanal" in einem separaten Device unterbringen? (Ich fürchte, das pusetime-setzen via backlog ohne Kanal wirkt dann auf alle, und das ist ja ggf. nicht gewollt). Im Prinzip würde man das mit der pulsetime so gar nicht benötigen, sondern könnte auch direkt den delay verwenden, also so:
on-for-timer {"cmnd/sonoffOBI/Backlog POWER 1; delay ".$EVTPART1*10."; POWER 0"}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

ZitatIch fürchte, das pusetime-setzen via backlog ohne Kanal wirkt dann auf alle, und das ist ja ggf. nicht gewollt

Die Syntax ist PulseTime<x> <parameter>.

gibt man nur pulsetime an ist der erste gemeint, nicht alle.

JHo

Zitat von: TomLee am 25 Juli 2019, 12:27:48
Nur bis zur nächsten Änderung geht aber nicht, die pulsetime bleibt (ohne save) bis zu einem restart auch für jeden "on" Befehl erhalten (man möge mich verbessern wenn dem nicht so ist)  mein Workaround dazu pulsetime einfach vor jedem "on" vorsichtshalber ausschalten  :P :
Mit "bis zur nächsten Änderung" meine ich die Änderung der Pulsetime: Wird eine PulseTime gesetzt, bleibt sie bis zum nächsten Setzen einer Pulsetime genau so vorhanden und greift bei allen Schaltvorgängen über MQTT, WebIF oder direkt am Gerät. Bei Neustart des Sonoff müsste auf eine zuvor mit Savedata gespeicherte Pulsetime gegangen werden.
In meinem Fall wäre es mir lieber, auf eine Default-Anschaltdauer von 10 Minuten oder so zu gehen, anstatt unter Umständen ewig zu bewässern.

Allen anderen: vielen Dank für euren Input! Werde ich mal ausprobieren und insbesondere die Infos zu on-for-timer merken. Das hatte ich bislang echt immer so verstanden, dass die unterstützten Geräte das dann autark machen. Nicht, weil ich FHEM nicht stabil genug finde, sondern viel mehr an der 100%igen Zuverlässigkeit der Hardware zweifele, auf der FHEM läuft bzw. mit der FHEM den Ausschaltbefehl schickt.
1: FHEM auf Ubuntu, MAX!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, diverse LaCrosse-Sensoren, per remote angebundene DS18B20-Sensoren
2: FHEM auf Raspi 3, Max!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, ht_pitiny-Adapter zu Junkers FW120

TomLee

on-for-timer {"cmnd/sonoffOBI/Backlog POWER 1; delay ".$EVTPART1*10."; POWER 0"}

es müssen einfache ' sein

on-for-timer {"cmnd/sonoffOBI/Backlog POWER 1; delay '.$EVTPART1*10.'; POWER 0"}

sonst bekommt man eine Fehlermeldung beim übernehmen (attr drücken).

Klappt aber nicht jetzt steht wie bei mir vorhin 2 in $EVTPART1 und der set befehl on-for-timer ist nun immer vorbelegt mit dem zuletzt verwendetem Wert mit einem set davorgestellt bspw. set 9


Beta-User

Zitat von: JHo am 25 Juli 2019, 13:11:10
Bei Neustart des Sonoff müsste auf eine zuvor mit Savedata gespeicherte Pulsetime gegangen werden.
In meinem Fall wäre es mir lieber, auf eine Default-Anschaltdauer von 10 Minuten oder so zu gehen, anstatt unter Umständen ewig zu bewässern.
Du kannst die 10 Min ja ohne weiteres via backlog wie beschrieben in alle Kanäle schreiben und dann ein "SaveData 1;" an's Ende anfügen ;) .

Zitat von: TomLee am 25 Juli 2019, 12:51:54
Die Syntax ist PulseTime<x> <parameter>.

gibt man nur pulsetime an ist der erste gemeint, nicht alle.
Danke für den Hinweis. (Wieder was gelernt, auch wenn ich damit im Moment mangels Hardware nichts anzufangen weiß ;D ).

Zitat von: TomLee am 25 Juli 2019, 13:12:54
Klappt aber nicht
Wenn, dann könnten ggf. überall einfache quotes helfen (liegt evtl. an den nicht escapten ";"):
on-for-timer {'cmnd/sonoffOBI/Backlog POWER 1; delay '.$EVTPART1*10.'; POWER 0'}

Ist aber alles nach wie vor ungetestet...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

Gut ist das es grundsätzlich funzen sollte, weil das klappt:
on-for-timer {"cmnd/sonoffOBI/Backlog POWER 1; delay $EVTPART1;POWER 0"}

Alles andere klappt nicht sobald gerechnet werden soll, den Punkt hinten bin ich mir nicht sicher ob der korrekt ist 8) daher hab ich ihn manchmal raus genommen, getestet hab ich auch noch die geschweiften nur um EVTPART1 in allen möglichen Varianten, das Kommando wird immer ausgeführt (von daher die ; zu escapen sinnfrei) aber delay ist immer 2:

on-for-timer {"cmnd/sonoffOBI/Backlog POWER 1; delay '.$EVTPART1*10'; POWER 0"}
on-for-timer {"cmnd/sonoffOBI/Backlog POWER 1; delay '.$EVTPART1*10.'; POWER 0"}
on-for-timer {'cmnd/sonoffOBI/Backlog POWER 1; delay ".$EVTPART1*10."; POWER 0'}
on-for-timer {'cmnd/sonoffOBI/Backlog POWER 1; delay ".$EVTPART1*10"; POWER 0'}



on-for-timer {"cmnd/sonoffOBI/Backlog POWER 1; delay ".$EVTPART1*10."; POWER 0"}
syntax error at (eval 3425984) line 1, near "10."; POWER 0""


on-for-timer {'cmnd/sonoffOBI/Backlog POWER 1; delay '.$EVTPART1*10'; POWER 0'}
syntax error at (eval 3426774) line 1, near "10'; POWER 0'"


ZitatWieder was gelernt, auch wenn ich damit im Moment mangels Hardware nichts anzufangen weiß  

Ausrede  8) Ich mein in Erinnerung zu haben du hast vor einiger Zeit erwähnt mind. einen Wemos D1 Mini zu besitzen.  :P

Beta-User

Dann halt vorher rechnen...:

on-for-timer {my $duration = $EVTPART1*10; 'cmnd/sonoffOBI/Backlog POWER 1; delay '.$duration.'; POWER 0'}
Und das mit der Bedeutung der Quotes und der Funktion der Punkte solltest du dir nochmal ansehen, das sieht mir etwas sehr nach trial&error aus :D .



Ich habe sogar 3 WeMoS rumfahren, davon 2 im Einsatz (einer als MiLight-Bridge mit sidoh-firmware, einer mit Tasmota als IR-Gateway) und noch diverse ESP8266 in verschiedenen Bauformen im Keller rumfliegen :P . Aber deswegen packe ich die ungenutzten Biester noch lange nicht aus, und die die ich "produktiv" im Einsatz habe, fasse ich auch nicht ohne Not an...
Wofür habe ich euch?



EDIT:
Eventuell muß man auch die allgemeine Vorgehensweise für ";" verwenden, bitte testen, wenn das obige nicht geht:
on-for-timer {my $duration = $EVTPART1*10; "cmnd/sonoffOBI/Backlog POWER 1;; delay $duration;; POWER 0"}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

Zitat von: Beta-User am 25 Juli 2019, 16:12:19
on-for-timer {my $duration = $EVTPART1*10; 'cmnd/sonoffOBI/Backlog POWER 1; delay '.$duration.'; POWER 0'}

Der Pöbel hat es getestet und befindet es für gut. :P




Zitat
Wofür habe ich euch?

ZitatIn meiner Ausbildungsfirma gab es einen Abteilungsleiter, der nach der Device gehandelt hat "wer sich für unentbehrlich hält, fliegt raus". Inzwischen habe ich in 35 Jahren Berufsleben sehr gut verstanden, was er damit meinte.

Frag mich nicht wie ich jetzt auf die Verbindung komme !

Beta-User

 ;D ;D ;D
Wenn du auf einen meiner "Lieblingsknöpfe" (sch... WLAN-Gedönse...) drückst, bekommst du, was du erwartest :P .

Mal im Ernst: Das, was heute in den attrTemplates steckt, ist zum allergrößten Teil nicht auf meinem Mist gewachsen, sondern haben Leute beigetragen, die in vielen Bereichen (u.A. Perl) deutlich mehr auf dem Kasten haben als meinereiner... Bin also definitiv (und zum Glück) verzichtbar 8)

Was jetzt den on-for-timer-Code @tasmota angeht:
Muß ich wohl bei Gelegenheit irgendwie in die template-file aufnehmen. Jemand eine Idee, wo das gut aufgehoben ist?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Den on-for-timer-Code habe ich eben mit dem "Basis"-Power1-tasmota-Template ins svn geschubst (falls ihn mal wieder jemand suchen sollte)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

JHo

1: FHEM auf Ubuntu, MAX!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, diverse LaCrosse-Sensoren, per remote angebundene DS18B20-Sensoren
2: FHEM auf Raspi 3, Max!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, ht_pitiny-Adapter zu Junkers FW120

Beta-User

Zitat von: JHo am 31 Juli 2019, 14:02:34
Ein Traum - vielen lieben Dank für die Unterstützung!
Thx, auch an TomLee für's Testen und die Basisidee mit dem backlog.

Markierst du den Thread dann bitte noch als [gelöst]?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

JHo

Sorry, ich muss das nochmal aufgreifen, die Lösung hat einen Haken:
Tasmota-Delay kann nur maximal 5 Minuten. Wird ein Delay über 3600 (Zehntelsekunden) übergeben, dann springt Tasmota auf 2 (Zehntelsekunden)... sollte meiner Meinung nach so nicht (ohne Hinweis) in den Templates stehen.

Ich behelfe mir jetzt damit, dass ich tatsächlich eine PulseTime übergebe. Das setList schaut nun so aus: on-for-timer {my $duration = $EVTPART1+100; 'cmnd/DVES_5A0F82/Backlog pulseTime1 '.$duration.'; POWER1 1'}
, womit ich Werte ab 12 (Sekunden) "richtig" übergebe - darunter wird immer mindestens 11,x Sekunden angeschaltet. Tasmotas pulseTime zählt von 0 bis 111 in Zehntelsekunden, danach in Sekunden. Das müsste man noch mit abfangen, um richtig korrekt zu sein, aber ich bekomme keine Bedingung im setList unter... geht sowas überhaupt wie (WENN $EVTPART1>=111 DANN ... SONST die Variante mit +100)?

Viele Grüße
Jan
1: FHEM auf Ubuntu, MAX!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, diverse LaCrosse-Sensoren, per remote angebundene DS18B20-Sensoren
2: FHEM auf Raspi 3, Max!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, ht_pitiny-Adapter zu Junkers FW120