Gibt es eigentlich einen Weg, einen Dummy im Webfrontend mit einem Label zu versehen?
Also angenommen ich habe einen Dummy der "Tage_seid" heisst und dessen Wert jeden Tag um eines ansteigt, dann würde ich gerne noch daneben im Webfrontend z.b. "Geburtstag" schreiben wollen.
Z.B. da wo eine WebCmd stehen würde (was hier nicht definiert ist) (attr WebCmD kann ich nicht nehmen, weil jemand der da aus versehen draufdrückt, den Inhalt des Dummys verändert)
Mir ist klar, dass ich auch den Dummy gleich Tage_seid_Geburtstag nennen könnte, dass ist aber nur bei diesem vereinfachten Beispiel möglich und nicht bei meinem konkreten (etwas komplexeren) Anwendungsfall.
Und wo wir schon dabei sind: Könnte ich den Zahlenwert des Dummys bei bestimmten Wertebereichen in einer anderen Farbe darstellen lassen ähnlich ValueStyle bei ReadingsGroup?
alias Attribut?
für einfache fälle den alias und für alles andere eine readingsGroup. da kannst du formatieren und beschriften wie du magst.
wenn du den dummy nur verwendest um einen wert zu speichern kannst du das reading mit dem wert (oder auch mehrere) direkt in die readingGroup schreiben und diese sich selber anzeigen lassen.
dann brauchst du denn dummy gar nicht mehr.
gruss
andre
Ja, an Alias erinnert ich mich auch, ich finde es nur nicht. Laut Commandref hat Dummy kein Attribut namens Alias. (oder ich blind bin). Wie sieht die Syntax genau aus?
ReadingsGroup wäre nett würde auch gleich mein Farbproblem lösen. Aber ich brauche meiner aufassung nach schon einen Dummy, da ich ja Werte berechne.
ReadingsGroup für Dummys (Doppelscherz).... auch auf die Gefahr hin hier als Volldepp durchzugehen: Was sind denn die "Readings" eines Dummys bzw einer Gruppe von Dummys? Bei Zahlen als Inhalt des Dummies kann ich ja nicht über Konstruktionen wie .*:[Mm]einText oder so gehen.
Ich meine, ich benutze sowohl
define battStatus readingsGroup .*:[Bb]attery
als auch
define CUL1RSSI readingsGroup CUL1_RSSI=.*:+CUL1_RSSI,+CUL1_TIME
Aber wie müsste das den bei Dummys definiert sein? Dummys sind ja keine Devices.
Oder denke ich da zu kompliziert?
Öhm, auch auf die Gefahr hin, als Neuling hier in ein Fettnäpfchen zu treten - hat nicht im Prinzip *jede* Definition in FHEM das Attribut "alias" (sowas wie ein "common attribute")? Müßte doch im Prinzip so funktionieren:
attr Tage_seit alias Tage seit Geburtstag
...oder bin ich da in irgendeine Falle getappt...? :o
LG
McCavity
jedes fhem device hat ein attribut alias (und auch ein comment attribut).
dummys sind auf dieser ebene ganz normale fhem devices und du kannst attr und setreading genau so verwenden wie für jedes andere device und du kannst sie in/mit einer readingsGroup anzeigen.
was heisst du berechnest werte? wenn du das ergebnis einer berechnung mit setreading in einen dummy schreibst kannst du es ganz genau so in die readingGroup (oder jedes andere fhem device) stecken.
mach doch mal ein ganz konkretes beispiel.
gruss
andre
Zitatdummys sind auf dieser ebene ganz normale fhem devices und du kannst attr und setreading genau so verwenden wie für jedes andere device und du kannst sie in/mit einer readingsGroup anzeigen.
Hm. Okay.
Zitatwas heisst du berechnest werte? wenn du das ergebnis einer berechnung mit setreading in einen dummy schreibst kannst du es ganz genau so in die readingGroup (oder jedes andere fhem device) stecken.
Ja, kann ich natürlich. Die Werte sind nur ein Zahlenwert, der eben die geschätzte Restlaufzeit ergibt. Der wird durch simpel Zeit und Stellvorgänge reduziert.
Zeit wird z.b. schlicht so abgebildet:
define Ventil_1_Flur_count at +*01:00:00 {fhem("set Ventil_1_Flur_ " . (Value("Ventil_1_Flur_")-1))}
Stellvorgänge ziehen mit einer ähnlichen Mimik weiter Werte ab. Wenn ich die Batterie wechsle kommt als Startvalue eine noch zu ermittelnde Zahl rein, als Schätzung aktuell 40.000.
Mir schwebt jetzt isrgendwas vor, das so aussieht:
define FHT8v_Batt readingsGroup (hier verliessen sie ihn)
attr FHT8v_Batt room Status
attr FHT8v_Batt valueStyle {($VALUE < 1000)?'style="color:red"':($VALUE < 4000)?'style="color:yellow"':($VALUE > 3999)?'style="color:green"':undef}
Zitat von: McCavity am 10 Februar 2015, 07:15:29
Öhm, auch auf die Gefahr hin, als Neuling hier in ein Fettnäpfchen zu treten - hat nicht im Prinzip *jede* Definition in FHEM das Attribut "alias" (sowas wie ein "common attribute")? Müßte doch im Prinzip so funktionieren:
attr Tage_seit alias Tage seit Geburtstag
...oder bin ich da in irgendeine Falle getappt...? :o
McCavity
Nope, absolut nicht. Das einzige Thema ist, das ich auf die Schnelle in der Commandref nicht finden konnte wo steht wie das Attribut genau formatiert sein muss. Ich finde das immer noch nicht.
(Gut, jetzt weiss ich es ja.)
du speicherst den wert so:define Ventil_1_Flur_count at +*01:00:00 {fhem("setreading FHT8v_Batt Ventil_1_Flur ". (Value("Ventil_1_Flur_")-1))}
und zeigst ihn so an:define FHT8v_Batt readingsGroup FHT8v_Batt:Ventil_1_Flur
attr FHT8v_Batt valueStyle { return 'style="color:red' if($VALUE < 1000); return 'style="color:yellow' if($VALUE < 4000); return undef;}
und wenn du mehr als einen wert hast steckst du ihn mit einem eigenen reading namen in die gleiche readingGroup und zeigst sie dann alle auf ein mal an:define FHT8v_Batt readingsGroup FHT8v_Batt:.*
gruss
andre
Cool, danke. Mit ein paar Ideen die Puschel in einem anderen Thread geäussert hat bin ich jetzt erstmal gut versorgt!
Kaffe machen und los gehts. Um 2 Uhr will ich fertig sein! ;D
Edit:
Fertig.
Funktioniert einwandfrei.
Was mach ich jetzt bis 2 Uhr?
ZitatWas mach ich jetzt bis 2 Uhr?
Deine Lösung hier posten?
Ich will nicht unbedingt dumm sterben sondern noch was lernen solange es geht :P
Ist ja nix grossartiges:
Ich verwende die Ventile alle nur indirekt also per FHT80b.
Daher habe ich für jedes Ventil ein Dummy angelegt:
define Batterie_Atellier dummy
Ich habe beobachtet, das die Batterien grob 18 Monate halten, das sind grob 13.000 Stunden
Der Dummy wird mit dem Wert 13.000 initial befüllt. dann wird jede Stunde "1" abgezogen und das ergebniss per setreadings gesetzt:
define Batterie_Atellier_count at +*01:00:00 {fhem("setreading FHT8v_ Batterie_Atellier ". (Value("Batterie_Atellier")-1))}
Dann wird das per readingsGroup angezeigt (Der Unterstrich am Ende dient nur der besseren Lessbarkeit):
define FHT8v_ readingsGroup FHT8v_:.*
Die Werte werden eingefärbt:
attr FHT8v_ valueStyle {($VALUE < 240)?'style="color:red"':($VALUE < 1000)?'style="color:yellow"':($VALUE > 999)?'style="color:green"':undef}
Rot ist also 240 Stunden = 10 Tage
und gelb 1000 Stunden = 41 Tage
Das muss man ggf nachjustieren
Die Farben gefallen mit eigentlich besser als die Werte auf OK oder LOW zu mappen (was ich zuerst machen wollte), und man hat noch folgenden Vorteil:
Wenn man die Batterien wechselt, wird der Dummy irgendeinen Wert haben, entweder positiv (Batterie früher leer als erwartet) oder negativ (Batterie hat länger gehalten). In beiden Fällen wird der Wert einfach von 13.000 subtriert und man erhält den NEUEN, genauern intialen Wert.
Bis hier hin funktioniert das bestens.
Nächste Schritte:
- Überlegen ob es sich lohnt, die Anzahl der Tempänderungen zu berücksichtigen. Man könnte den Wert deutlich höher setzen und jede Tempänderung die tatsächlich zum FHT80 gesendet wird als decrement benutzen. Ich bin davon aber zwischenzeitlich wieder abgekommen, weil ich mich frage ob sich das lohnt. Die Tempänderungen sind je Raum über's Jahr im Schnitt gleich, eventuell erhält man da weniger zusätzliche Genauigkeit als man glaubt.
- Berechnung des neuen Initialwertes automatisieren.
Mehr isset eigentlich nicht.
Vielen dank an alle, habe ne Menge gelernt.
(das ich nach 6 Jahren FHEM nicht wusste wie attr Alias genau geht ist schon bisschen peinlich, ich weiss.)
schön das es so schnell ging.
noch ein vorschlag: das du werte berechnest die zu einem schon vorhandenen device gehören brauchst du doch kein dummy sondern kannst die werte direkt in das zugehörige device stecken. dann hast du zum einen alles zusammen und zum anderen deutlich weniger devices.
fhem muss für einige dinge die komplette device liste durchgehen und das geht schneller je weniger devices es gibt.
gruß
andre
Ich hab kein Device. Ich steuere meine FHT8v nur über die FHT80b. Die sind nicht einzeln angelegt, Fhem kennt die nicht.
Hallo,
ja das ... so ... ok ...
Wieder was gelernt - danke.
Ist auch schick und "etwas" einfacher *hüstel*
Ich dachte FHEm kennt deine FHT8v aber so - ja - so geht das auch.
Im Endeffekt führen ja viele Wege zum Ziel ;)
Wenn es so für dich passt ist es ja ok (und ich sag danke das ich wieder was lernen durfte) 8)
Grüße
Nö, ich hab zu danken.
Und übrigens: Funktioniert nicht. :o
Ich habe es erst gar nicht bemerkt.
Das hier ist eigentlich quatsch:
define Batterie_Atellier dummy
define Batterie_Atellier_count at +*01:00:00 {fhem("setreading FHT8v_ Batterie_Atellier ". (Value("Batterie_Atellier")-1))}
Ist mir zuerst gar nicht aufgefallen, weil es nach einer Stunde so aussah als ginge es. Aber im Grunde macht der Kram nur folgendes: Er setzt die Readings jede Stunde auf den Wert den der Dummy hat -1.
Er zählt nicht wie eigentlich geplant die den Wert der readings jede Stunde runter. Da am Anfang nach einer Stunde der Readingswert aber 1 kleiner war als der Wert im Dummy, hab ich gedacht: Na bitte geht!
Mir ist erst gar nicht aufgefallen, dass da tagelang der selbe Wert drin stand, erst als Aufgrund eines anderen Fehlers einige der Dummys ohne Wert da standen und die readings dann auf -1 wechselten und auch so blieben, viel es mir wie Schuppen aus den Haaren.
Dies hier
define Batterie_Atellier_count at +*01:00:00 {fhem("setreading FHT8v_ Batterie_Atellier ". (Value("Batterie_Atellier")-1))}
muss ich so abändern, dass der neue readings Wert der alte Readingswert -1 ist. Die Dummys braucht man eigentlich gar nicht.
Wie ermittelt man den Value des Readings an der Stelle ? ich kriege die Syntax nicht richtig hin.
sag ich doch das die dummys unnötig sind :)
den altern wert bekommst du mir ReadingsVal. das ganze müsste also vermutlich in etwa so ausschauen:define Batterie_Atellier_count at +*01:00:00 {fhem("setreading meinDevice meinReading". (ReadingsVal("meinDevice", "meinReading",999)-1))}
gruss
andre
Naja, machmal stehe ich eben aufm Schlauch.
THX.
define Batterie_Atellier_count at +*01:00:00 {fhem("setreading meinDevice meinReading". (ReadingsVal("meinDevice", "meinReading",999)-1))}
Wofür sind die ,999 ?
Ah, Defaultwert, solange setreading noch nichts anderes festgelegt hat.