Hallo, hab da mal ne etwas blöde Frage.
Ich möchte gerne für einige Devices in der Weboberfläche einen extra Befehl hinterlegen.
Mit fertigen Einstellungen geht das ja via webcmd, aber ginge sowas zb auch mit einem frei definierbaren setreading?
Würde mir gerne eine Art Reset erstellen, der bestimmte Readings auf Standardwerte zurücksetzt.
Ja, das geht via EventMap, hier ein Beispiel:
defmod Regelung_Raumtemp DOIF {\
if ([$SELF:reset_Raumtemp] eq 'true') {\
# Irgendwelcher Code
set_Reading('reset_Raumtemp', 'false');;\
}
}
attr Regelung_Raumtemp eventMap /reset_Raumtemp true:reset_Raumtemp/foo 1:bar/
attr Regelung_Raumtemp readingList reset_Raumtemp foo
attr Regelung_Raumtemp setList reset_Raumtemp # Bin ich nicht sicher, ob es das überhaupt braucht!
attr Regelung_Raumtemp webCmd enable:disable:reset_Raumtemp:bar
Ist jetzt für ein DOIF, sollte denke ich aber grundsätzlich für alle Devices gehen?
Ich habe 2 eigene webCmds definiert, reset_Raumtemp und bar. Beide brauchen noch ein entsprechend setzbare Readings, darum kümmert sich readingList. Ich habe bewusst für den Cmd bar das Reading foo verwendet um zu zeigen, das Cmd und Readingname nicht gleich sein müssen. Die Magie passiert nun via eventMap: dort gibst du an, was genau für ein Reading du mit deinem Cmd setzen möchtest, also der Cmd bar setzt das Reading foo auf 1.
reset_Raumtemp wird noch im DOIF Block ausgewertet, so kannst du auch komplexere Vorgänge steuern.
Ich hoffe, es ist alles klar. Ist eine coole Möglichkeit und unkompliziert Befehle auszuführen, ich nutze die sehr oft! So hast du auch ohne zusätzliche UI eine kleine Steuerzentrale, siehe Anhang.
Zitat von: ansgru am 06 März 2023, 14:41:54
Ist jetzt für ein DOIF, sollte denke ich aber grundsätzlich für alle Devices gehen?
eventMap gibt es für jedes Device, allerdings readingList nicht.
Ich würde als Lösungsvorschlag cmdalias einbringen.
Damit kann man sich jeden beliebigen Befehl bauen und dann per webCmd auf der Oberfläche verfügbar machen.
z.B.
define d dummy
attr d webCmd mySet
define ca_d_mySet cmdalias set d mySet AS setreading d myTestReading TEST
Beim Aufruf von "set d mySet" wird das Reading 'myTestReading' mit dem Wert 'TEST' geschrieben.
Es kann an dieser Stelle auch beliebiger Perl-Code ausgeführt werden, z.B. (selbes Ergebnis wie oben, nur als Perl):
define ca_d_mySet cmdalias set d mySet AS {fhem 'setreading d myTestReading TEST'}
Gruß
Dan
Sehr cool, kannte ich noch gar nicht! Die Funktionsweise erschloss sich bei mir erst nach einigem Grübeln:
Ich überschreibe quasi mit cmdalias den Befehl "set d mySet" durch "setreading d myTestReading TEST". Das bringt erstmal nix, die Magie findet statt weil der webcmd "mySet" von dem Device "d" intern ein "set d mySet" auslöst, das wird dann durch den cmdalias eben umgemünzt in ein "setreading ..."
Habe ich das richtig verstanden? Vorteil: geht für alle Devices, Nachteil: der Ausführungsbefehl ist vom Device getrennt im cmdalias hinterlegt, das muss man beachten wenn man z.B. ein Device umbenennt weil dann der cmdalias manuell nachgeführt werden muss.
Zitat von: ansgru am 06 März 2023, 16:24:50
Sehr cool, kannte ich noch gar nicht! Die Funktionsweise erschloss sich bei mir erst nach einigem Grübeln:
Ich überschreibe quasi mit cmdalias den Befehl "set d mySet" durch "setreading d myTestReading TEST". Das bringt erstmal nix, die Magie findet statt weil der webcmd "mySet" von dem Device "d" intern ein "set d mySet" auslöst, das wird dann durch den cmdalias eben umgemünzt in ein "setreading ..."
Habe ich das richtig verstanden? Vorteil: geht für alle Devices, Nachteil: der Ausführungsbefehl ist vom Device getrennt im cmdalias hinterlegt, das muss man beachten wenn man z.B. ein Device umbenennt weil dann der cmdalias manuell nachgeführt werden muss.
Das hat Du bis auf das Überschreiben richtig verstanden.
Überschrieben wird nichts denn "set d mySet" gab es ja vorher nicht.
Der set-Befehl erscheint auch nicht unter den Settern im Device.
Gruß
Dan
Das ist im Prinzip genau das was ich suche.
Der einzige Nachteil ist wie ansgru schon schrieb, dass er bei Device-Änderung händisch nachgeflegt werden muss.
Ich wollte das für meine Dummy-Devices nutzen die alle einen Tageszähler haben welcher um Mitternacht erhöht wird und je nach Inhalt des Dummy bei bestimmten Tagesanzahlen Meldungen ausgibt. Das Reading heißt in allen Dummy's "days" und soll einfach auf Null zurückgesetzt werden.
Gäbe es theoretisch eine Möglichkeit das generisch zu schreiben, so dass ein Zusatzdevice vom Typ Aliascmd auf alle Dummy's reagiert?
Zitat von: Superposchi am 06 März 2023, 18:21:51
Gäbe es theoretisch eine Möglichkeit das generisch zu schreiben, so dass ein Zusatzdevice vom Typ Aliascmd auf alle Dummy's reagiert?
Die gibt es sogar praktisch!
define d7 dummy
attr d7 webCmd resetDays
define d8 dummy
attr d8 webCmd resetDays
define d9 dummy
attr d9 webCmd resetDays
define ca_d_resetDays cmdalias set d[7-9] resetDays AS setreading $EVTPART0 days 0
Gruß
Dan
Perfekt, muss ich zwar meine Dummys umbenennen, aber das ist das kleinere Übel.
Und soll ja eh nur eine Übergangslösung sein bis das neue FTUI funktioniert.
Ungetestet sollte es auch so funktionieren:
define ca_d_resetDays cmdalias set (Bernd|Inge|Heinz) resetDays AS setreading $EVTPART0 days 0
Gruß
Dan
Bei einem Dummy getestet und funktioniert perfekt.
Ich erlaube mir noch einen Querverweis für alle die, welchen diesen Thread lesen: es wäre schön, wenn man diese custom webCmds mit einem Icon versehen könnte welches je nach Wert eines Readings eine andere Farbe/Form etc. annimmt, z.B. für einen Toggle webCmd. Leider geht das nicht mit cmdIcon, siehe https://forum.fhem.de/index.php?topic=71637.0 (https://forum.fhem.de/index.php?topic=71637.0) Das geht nur mit devStateIcon, dieses Icon ist dann aber vom webCmd getrennt.
Devstateicon ist ja da um den jeweiligen Status des Device abzubilden.
Webcmd erlaubt es dem Anwender hingegen einem Device persönliche Befehle mitzugeben.
Da ist glaube ich wenig bis gar keine Verbindung. Ein Befehl ändert sich nicht, daher auch "sein" Icon nicht. Anders als eben der state des Device.
Zitat von: Superposchi am 07 März 2023, 07:59:58
Da ist glaube ich wenig bis gar keine Verbindung. Ein Befehl ändert sich nicht, daher auch "sein" Icon nicht. Anders als eben der state des Device.
Glauben heißt nicht (besser) wissen...
devStateIcon erlaubt Perl, und damit kann man im Ergebnis alles mögliche auswerten und auch mehr oder weniger jeden beliebigen FHEM-Befehl absetzen. Wenn du aber eh' in Richtung FTUI willst, ist das vermutlich nicht die Lösung, in die du viel Zeit investieren willst.
Spätestens jetzt sind wir beim Popcorn angekommen...
Popcorn ist nicht so meins ::) Nur kurz als Erläuterung: es wäre schön, wenn man cmdIcons wie oben von mir erwähnt auch Reading-abhängig setzen könnte, z.B. für folgenden Verwendungszweck: ich habe eine Temperaturregelung die ich hin- und herswitchen möchte zwischen sagen wir Tag- und Nachtschaltung. Dafür habe ich ein webcmd definiert, das wird durch ein cmdicon dargestellt. Leider kann ich nun das cmdicon nicht so ändern, dass das entsprechende Umschalticon jenach Position Tag oder Nacht z.B. eine andere Farbe annimmt.
Im Anhang ein Beispiel für ein Toggle, es ändert sich nur das devStateIcon (die Lampe), das cmdIcon (Pfeile) kann ich leider nicht beeinflussen.
Möchte nicht zu sehr offtopic gehen, ich dachte, ich erwähne das der Vollständigkeitshalber weil es ein schöner Thread ist der verschiedene Möglichkeiten für eigene webCmds aufzeigt.
Zitat von: ansgru am 07 März 2023, 11:31:22
Popcorn ist nicht so meins ::) Nur kurz als Erläuterung: es wäre schön, wenn man cmdIcons wie oben von mir erwähnt auch Reading-abhängig setzen könnte, z.B. für folgenden Verwendungszweck: ich habe eine Temperaturregelung die ich hin- und herswitchen möchte zwischen sagen wir Tag- und Nachtschaltung. Dafür habe ich ein webcmd definiert, das wird durch ein cmdicon dargestellt. Leider kann ich nun das cmdicon nicht so ändern, dass das entsprechende Umschalticon jenach Position Tag oder Nacht z.B. eine andere Farbe annimmt.
Im Anhang ein Beispiel für ein Toggle, es ändert sich nur das devStateIcon (die Lampe), das cmdIcon (Pfeile) kann ich leider nicht beeinflussen.
Möchte nicht zu sehr offtopic gehen, ich dachte, ich erwähne das der Vollständigkeitshalber weil es ein schöner Thread ist der verschiedene Möglichkeiten für eigene webCmds aufzeigt.
Das kann man doch mit devStateIcon machen!
Das kann nämlich nicht nur je nach Zustand das Icon/Farbe wechseln, sondern auch den Setter der benutzt werden soll wenn man darauf klickt.
Soweit ich weiß gehen irgendwie auch mehrere devStateIcon, das benutze ich aber (bisher) nicht.
Gruß
Dan
Ah sehr cool, wieder was gelernt, danke dir! Mehrere devStateIcons gehen, siehe https://forum.fhem.de/index.php?topic=97586.0 (https://forum.fhem.de/index.php?topic=97586.0)
Ok, denkst dabei an die Prämisse mit einem webcmd 2 verschiedene Befehle je nach Zustand abzusetzen.
Dafür ist webcmd aber nicht gemacht soweit ich das verstehe.
Sinnvollerweise müsstest du dann mit webcmd einen Befehl für Tagmodus und einen für Nachtmodus erstellen, beiden jeweils ein Icon zuweisen und dir den Zustand per devstateicon.
Oder halt wie DeeSPe es geschrieben hat
Nicht ganz, ich wollte, dass das cmdIcon sich ändert je nach Zustand -> ein einzelner webCmd toggleNachtTag schaltet ein Reading Modus um von Tag auf Nacht und umgekehrt. Je nach Zustand von diesem Reading Modus würde ich dann gerne ein anderes Icon verwenden. Das geht bei cmdIcon eben nicht. Dan hat netterweise gezeigt, dass man das alles mit devStateIcon lösen kann.