Tasmota Timer Werte im FHEM verändern / Ein Aus Schalten / Anzeigen?

Begonnen von Konfusius, 28 Mai 2022, 18:53:40

Vorheriges Thema - Nächstes Thema

Konfusius

Ich habe mir meine Aquariumlampe modifiziert, so dass sie mit einem Wemos D1 Mini und Tasmota gesteuert werden kann.
Bislang habe ich die Timerfunktion von Tasmota über die Tasmota Webseite des Devices benutzt.

Durch Neugier auf die FTUI3 Version, habe ich mir eine neue Tablet / Handy-Oberfläche für meine paar anzuzeigende / zu steuernden Sachen gebastelt und die Aquariumleuchte mit eingebaut.
Ein- Ausschalten und Dimmen geht nun damit auch. (Nur Weiss, aber auf 3 PWM Kanäle geteilt um die Last zu verteilen)

FRAGE:
Kann man mit FHEM die Timerzeiten der Tasmota Timer verändern, die Timer ein- und auschalten und die Schaltzeiten in der FTUI anzeigen lassen?
Oder sollte ich das mit FHEM selbst machen?
Es geht darum, die An- und Ausschaltzeiten festzulegen und über den Tag ab und zu etwas runter zu dimmen um Wolken zu simulieren. Eventuell etwas Nachtlicht.

EDIT:
Ich sehe gerade in den Readings alle Timer Werte stehen. Nach einem Neustart des Wemos D1 Mini waren die alle da.
Dann schau ich mal, wie ich weiter komme...

EDIT2:
Die Schaltzeiten anzeigen lassen ist kein Problem, sie zu beeinflussen schon.
Hier stehen die Befehle dazu:
https://tasmota.github.io/docs/Timers/
Wie sende ich so einen Befehl über MQTT2 von der FHEM FTUI3?



Konfusius

Also man kann tatsächlich den Timer über MQTT stellen.
Ich habe den MQTT Explorer benutzt und mir den Verkehr zwischen FHEM und dem Tasmota Device angesehen.
Dann noch die Dokumentation von Tasmota zu MQTT durchgelesen.
Mit diesem Befehl auf dem Bild stelle ich Timer1. (Das erste Zeichen im Befehl ist nur der Cursor)

Sende ich den Befehl mit z.B. geänderter Uhrzeit ab, dann bekomme ich die passende Statusmeldung zurück und in den Readings von FHEM steht bei Timer1_Time die neue Zeit.
Auch in der Tasmota Web UI sehe ich bei Timer1 nun die geänderte Zeit. Das passt.

Ich würde jetzt ein Dummy Device in FHEM anlegen, wo ich die Werte, die das "TimeSet" Modul vom FTUI3 erzeugt ablege
und dann einen Button im FTUI3 anlegen, der eine String Kette erzeugt in dem diese Werte vom Dummy Device eingesetzt werde?

Wie sendet man etwas direkt an ein anderes Device?
Wie würde ein Profi das lösen? Hat jemand eine bessere Idee für mich?




DetlefR

Hallo,

in dem Device, das die Readings vom Tasmota darstellt gibt es ein "IODev" unter "Internals". Das kann im allg. "set publish".
Damit musst du zusehen, wie du diesen Befehl hinbekommst.
set "IODEV" publish cmnd/"TASMOTA"/timer1 "JSON"
Das was in "" steht, muss entsprechend angepasst werden.

Ob das auf diese Weise sinnvoll ist, oder das ganze über FHEM z.B. mithilfe von "sunrise" und "sunset" oder eine Wettervorhersage zu lösen ist musst du selber entscheiden.

Gruß Detlef

Konfusius


DetlefR

Tasmota kann auch Web Request.
Einfacher wird es dadurch aber auch nicht. Die Befehle sind immer die gleichen. Für MQTT ist ja schon etwas da, dass den entsprechenden Befehl senden kann.

ZitatIch würde jetzt ein Dummy Device in FHEM anlegen, wo ich die Werte, die das "TimeSet" Modul vom FTUI3 erzeugt ablege
und dann einen Button im FTUI3 anlegen, der eine String Kette erzeugt in dem diese Werte vom Dummy Device eingesetzt werde?

Und dann ein Notify das auf diese Änderung reagiert und dann den entsprechenden Befehl sendet.
Ungefähr so.
define n_aquatimer notify AquaDummy:Timeset:.* {
my $json=ReadingsVal("AquaDummy","Timeset","");
fhem("set IODev publish cmnd/tasmota/timer1 $json");

AquaDummy ist der Name das dummy und Timeset das Reading in dem der neue timereintrag.

Beta-User

 ;D ich frage mich ja immer mal wieder, warum man auf den Gedanken kommt, irgendwelche Workarounds zu bauen, wenn man auch den direkten Weg gehen kann:
einfach die setList ergänzen, z.B.?
Wir haben schon einige Beispiele, in denen "beliebige Texte" (auch im JSON-Format) direkt aus einem MQTT2_DEVICE versendet werden können... Man muss nur danach suchen/fragen.

Bleibt die Frage, wie man den JSON zusammenbaut. MAn. sollte man die Infos auf dem Tasmota und in FHEM möglichst synchron halten, also auch auswerten, was ggf. direkt per Web-Interface geändert wurde und das/die Readings entsprechend zusammenbasteln.
Für "Zeitpläne" mit on/off könnte man dafür auch weekprofile nutzen, das dann auch mit MQTT2_DEVICE umgehen kann, aber zum einen ist mir unbekannt, ob es dafür ein FTUI-Widget gäbe, und zum anderen ist das Umwandeln (und empfangende Auswerten) von Zeitplänen relativ aufwändig. Vermutlich würde es sich für Tasmota aber lohnen, da was zu basteln. Ist doch relativ weit verbreitet...
Falls jemand vorhandenen Code dafür sucht: im Ebus-attrTemplate-Paket ist was zu finden.
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

Konfusius

Zitat;D ich frage mich ja immer mal wieder, warum man auf den Gedanken kommt, irgendwelche Workarounds zu bauen, wenn man auch den direkten Weg gehen kann:
einfach die setList ergänzen, z.B.?

Das liegt wohl daran, dass ich Techniker und nicht Programmierer bin und bei weitem nicht alle Möglichkeiten des FHEM und des FTUI3 /JavaScripts als Anfänger kenne.
Also versuche ich mit meinem bisherigen bescheidenden Wissen die Sache hinzubekommen.
Deshalb fragte ich ja auch am Anfang des Threads, ob jemand eine bessere Idee hat.
Ich suche auch keine fertige Lösung, sondern versuche autodidaktisch etwas zu lernen.
Praktisch macht die Sache mit dem Timer doch wenig Sinn, aber um etwas über die Materie zu lernen schon.

Ich weiß, euch Profis nerven solche Beiträge bestimmt und die "dummen" Fragen darin. Habt etwas Nachsicht mit mir. Mir macht das einfach Freude, mit dem FTUI3 meine 3 Lampen,
die Müll-Termine und das Wetter anzeigen zu lassen. 
Neben dem Senden von MQTT Befehlen kann ich jetzt also auch noch was über setList lernen. Wie schön...

Da ich im Tasmota Timer nur die Zeiten ändern will, wollte ich den Tasmota Befehlssatz aus dem Bild einfach nur als Zeichenkette fest verwenden und nur die Zeit als Variable ändern.
Ich habe dazu ein Popup auf der Zeitanzeige der Aquariumlampe, in dem das "TimeSet" steckt und wollte einen Button nutzen um den fertigen Befehl (Zeichenkette) damit abzusetzen und das Popup zu schließen.
Im Augenblick versuche ich noch einen festen MQTT-Befehl wie "on" oder"off" mit dem Button an die Lampe zu senden. Den Befehl kenne ich ja nun durch den MQTT Explorer und die Doku.
Aber immer fehlt es mir an Grundwissen. Was brauche ich für das FTUI3 an Kenntnissen? Javascript?

Beta-User

Hmmm, mit javascript kenne ich mich nicht aus, aber wenn es einfach nur darum geht, einen irgendwie gearteten Zeitpunkt in einen JSON reinzuknödeln und eine einfache Möglichkeit in setList zu haben, hier ein Schnippsel aus "tasmota_zigbee2tasmota_light_dimmer":

attr DEVICE setList on CMNDTOPIC/ZbSend {"device":"0xDEV_ID","send":{"Power":"On"}}\
  off CMNDTOPIC/ZbSend {"device":"0xDEV_ID","send":{"Power":"Off"}}\
  brightness:colorpicker,BRI,0,5,254 CMNDTOPIC/ZbSend { "device":"0xDEV_ID", "send":{"Dimmer":$EVTPART1} }


Hier würde dir also
set DEVICE brightness 08:15
die "08:15" in den JSON hinten zaubern. Ein ZigBee-Dimmer kann damit vermutlich nichts anfangen, aber als Anschauungsmaterial sollte es auch für einen Techniker ok sein ;D ...

Ich hätt's dir auch "fertig" gebastelt, aber Text aus Bildern abzutippen ist gar nicht meins...
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

DetlefR

FTUI ist nun auch nicht unbedingt mein Ding.
Aber wie Beta-User schon gesagt hat. Ein einfaches ON/OFF oder was auch immer zu senden ist kein Problem.
Ich würde vorschlagen, du bringst das ganze erst mal auf der FHEM Seite zum laufen und bindest dann FTUI anhand von Beispielen ein. Bzw. da wird sich dann auch wer finden, der hilft.
So wie ich das bisher verstanden habe, ist der D1 Mini schon in FHEM eingebunden. Dann schick doch mal die Konfiguration. list -r DEIND1MINI
Das ganze dann schön in Code Tags verpacken und hier einstellen. Dann haben wir was konkretes worüber wir reden können.

Gruß Detlef

Konfusius

Das mit "setList" ist eine gute Idee.
Ich habe diese nun durch einen Eintrag
timer1:noArg cmnd/tasmota_2CA303/TIMER1 {"Enable":1,"Mode":0,"Time":07:30","Window":0,"Days":"1111111","Repeat":1,"Output":1,"Action":1}
ergänzt.
Gehe ich im FHEM oben auf "set" und wähle nun "timer1" und klicke "set", dann geht der Befehl auch raus und setzt meinen Timer auf die erstmal feste Zeit.
Im FTUI3 sehe ich diese Zeit dann auch in der Timer Zeitanzeige des FTUI3 Felds.

Aber ich schaffe es nicht diesen Befehl in das FTUI3 auf einen Button zu legen. Der Button hängt an den Befehl immer noch "on" und "off" ran, was dazu führt
das im Logfile des MQTT" Devices nur ein Error gemeldet wird.

Hier der Auszug, oben richtig im FHEM ausgelöst:
2022-06-02_18:55:06 Aquariumlampe timer1: set
2022-06-02_18:55:06 Aquariumlampe rgb: BFBFBF
2022-06-02_18:55:06 Aquariumlampe Timer1_Mode: 0
2022-06-02_18:55:06 Aquariumlampe Timer1_Time: 07:30
2022-06-02_18:55:06 Aquariumlampe Timer1_Output: 1
2022-06-02_18:55:06 Aquariumlampe Timer1_Repeat: 1
2022-06-02_18:55:06 Aquariumlampe Timer1_Action: 1
2022-06-02_18:55:06 Aquariumlampe Timer1_Window: 0
2022-06-02_18:55:06 Aquariumlampe Timer1_Days: 1111111
2022-06-02_18:55:06 Aquariumlampe Timer1_Enable: 1
2022-06-02_18:55:06 Aquariumlampe rgb: BFBFBF
2022-06-02_18:55:23 Aquariumlampe timer1: set
2022-06-02_18:55:23 Aquariumlampe rgb: BFBFBF
2022-06-02_18:55:23 Aquariumlampe Timer1: Invalid JSON


Die letzte Zeile der Button des FTUI3 mit der Errormeldung. Der Button hat folgenden Code:
<ftui-button size="large" (value)="Aquariumlampe:timer1">set</ftui-button>

Wie verhindere ich das da immer on und off rangehängt wird?

EDIT1:
<ftui-button size="large" @click="sendFhem('set Aquariumlampe timer1')">set</ftui-button>
so gehts,
Nun die Zeit ändern können

DetlefR

Erst mal was zum nachlesen https://wiki.fhem.de/wiki/FTUI_Widget_Datetimepicker
Dort gibt es ein Beispiel "Nur Zeitauswahl - Abstand 5min". Da muss aber noch irgendwie "timeron" rein. Ich habe das gleich mal erweitert. Wenn es einen Timer zum Einschalten gibt, dann soll es bestimmt auch noch einen zum Ausschalten geben. ;)
Dann die angepasste setListattr Aquariumlampe setList timeron cmnd/tasmota_2CA303/timer1 {"timer":"$EVTPART1"}\
timeroff cmnd/tasmota_2CA303/timer2 {"timer":"$EVTPART1"}\
power:on,off cmnd/tasmota_2CA303/power $EVTPART1

Das gute an den Tasmota Timern. Wenn sie einmal gesetzt sind, brauchen sie nicht jedes Mal komplett geändert werden.
Ändere den Knopf mal wieder und ersetze timer1 durch power.
<ftui-button size="large" (value)="Aquariumlampe:power">set</ftui-button>


Konfusius

#11
Ich bin mit dem neuen FTUI3 unterwegs. Da benutze ich das "Timeset" widget.
Mal sehen, ob das damit auch geht.

ZitatDas gute an den Tasmota Timern. Wenn sie einmal gesetzt sind, brauchen sie nicht jedes Mal komplett geändert werden.

Heißt das, dass ich die Zeit einzeln setzen kann, ohne den gesamten String ?

EDIT: Das geht genau so?! Danke
timer1:noArg cmnd/tasmota_2CA303/TIMER1 {"Time":"07:50"}


Kann ich statt "7:50" nicht den Wert aus einem Userreading einsetzen? Das Userreading ist ein Dummydevice "Timeset" und das Userreading ist "TimesetTime".

DetlefR

ZitatKann ich statt "7:50" nicht den Wert aus einem Userreading einsetzen? Das Userreading ist ein Dummydevice "Timeset" und das Userreading ist "TimesetTime".
Da kann ich nun wirklich nicht helfen, ohne dass die beiden device mal gesehen haben. So mit "list -r Dummydevice"

Konfusius

Das ist schon alles, ganz simpel.
Mit dem Timeset Widget stelle ich den Wert TimesetTime.

DetlefR

 :( Ein "list -r Timeset" in der Kommandozeile von FHEM wäre einfacher gewesen. Aber egal.
Du sagst, mit dem Timeset widget in FTUI3 kannst du dort die Zeit einstellen. Dann steht doch bestimmt in der Konfiguration irgendwo "Timeset" und "TimesetTime". Ändere das doch mal in "Aquariumlampe" und "timeron" und dann ändere noch die "setList" von "Aquariumlampe" nach meinem Beispiel.

attr Aquariumlampe setList timeron cmnd/tasmota_2CA303/timer1 {"timer":"$EVTPART1"}\
timeroff cmnd/tasmota_2CA303/timer2 {"timer":"$EVTPART1"}\
power:on,off cmnd/tasmota_2CA303/power $EVTPART1


Eine Frage noch. Soll es nur einen Einschalttimer geben oder auch noch einen zweiten zum Ausschalten?

Edit: Anstelle von list -r timset geht auch ein klick unten auf "Raw definition"