FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fstefan1960 am 23 Februar 2017, 23:10:21

Titel: Kann man einem Dummy direkt den Wert eines Readings zuweisen? (gelöst)
Beitrag von: fstefan1960 am 23 Februar 2017, 23:10:21
Hallo,

um einem Dummy den Wert eines Readings zuzuweisen, hampele ich derzeit mit PERL und Zwischenvariable herum:

{ my $a = ReadingsVal('wetteronline','fc0_chOfRain11','50') ;; fhem "set RegenRisk $a" }

(hier wird die Regenwahrscheinlichkeit der jeweils nächsten Stunden über ein at dem Dummy "RegenRisk" zugewiesen)

Es klappt schon, erscheint mir aber vergleichsweise "unelegant".

Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: vbs am 23 Februar 2017, 23:33:01
Normalerweise würde man wohl ein notify auf fc0_chOfRain11 reagieren lassen und im Handler dem Dummy den Wert zuweisen.
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: fiedel am 24 Februar 2017, 04:26:02
Dafür bietet sich auch ein ReadingsProxy an.
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: DeeSPe am 24 Februar 2017, 12:30:01
Im fhem fehlt das Reading welches gesetzt werden soll und dann würde ich statt set lieber setreading nehmen!
{fhem "setreading RegenRisk ".ReadingsVal('wetteronline','fc0_chOfRain11','50')}

Gruß
Dan
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: Thorsten Pferdekaemper am 24 Februar 2017, 12:47:25
Hi,
ich frage mich, warum überhaupt. Warum muss das in einem Dummy stehen, wenn es doch schon in [wetteronline:fc0_chOfRain11] steht?
Wenn man die ursprüngliche Anforderung kennen würde, könnte man vielleicht etwas besseres empfehlen.
Gruß,
   Thorsten
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: DeeSPe am 24 Februar 2017, 12:55:15
Zitat von: Thorsten Pferdekaemper am 24 Februar 2017, 12:47:25
ich frage mich, warum überhaupt. Warum muss das in einem Dummy stehen, wenn es doch schon in [wetteronline:fc0_chOfRain11] steht?

Das habe ich mich allerdings auch gefragt!
Da man aber die konkreten Anforderungen nicht kennt, kann man auch nur auf das gefragte antworten... ;)

Gruß
Dan
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: Thorsten Pferdekaemper am 24 Februar 2017, 13:04:53
Zitat von: DeeSPe am 24 Februar 2017, 12:55:15Da man aber die konkreten Anforderungen nicht kennt, kann man auch nur auf das gefragte antworten... ;)
Ok, dann mach ich das mal.
Je nachdem, an welcher Stelle man das haben will, müsste auch das gehen:

set RegenRisk [wetteronline:fc0_chOfRain11]

Das geht auch außerhalb von DOIF.
Gruß,
   Thorsten
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: fstefan1960 am 24 Februar 2017, 13:23:46
Vielen Dank für die Beiträge, ich probier die mal durch. Weil die Frage nach den Anforderungen kam:

Ich möchte in TabletUI immer den gerade nächsten Regenwahrscheinlichkeitswert anzeigen lassen. Dazu muss ich dort ein data-device benennen. Das ist bei mir der/das Dummy "RegenRisk".
Um 7 Uhr liest ein at-Kommando also die Regenwahrscheinlichkeit um 9 Uhr aus und schreibt die in das Dummy. Um 10 Uhr wird der 12-Uhr-Wert gelesen etc.

Mir fiel nicht ein, wie ich das sonst ausgeben kann. Ich muss ja im Laufe des Tages immer auf ein anderes Reading zugreifen.

Und deshalb brauche ich den Wert nicht nur in einem Reading.

Gesucht habe ich (wenn es denn geht) nach etwas wie

set RegenRisk [wetteronline:fc0_chOfRain11]

Super, danke.
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: vbs am 24 Februar 2017, 14:56:54
Zitat von: DeeSPe am 24 Februar 2017, 12:30:01
Im fhem fehlt das Reading welches gesetzt werden soll und dann würde ich statt set lieber setreading nehmen!
{fhem "setreading RegenRisk ".ReadingsVal('wetteronline','fc0_chOfRain11','50')}
Ich glaub, das klappt so nicht. Bei "setreading" muss immer ein Name eines Readings mitgegeben werden. Ich finde auch "setreading" sehr "lowlevelig", da man damit beliebige Readings ohne Prüfung setzen kann. Ich finde es schicker, per Attribute "readingslist" im dummy zu definieren, welche Readings erlaubt sind und dann ein normales set nutzen "set RegenRisk wetter <wert>".
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: DeeSPe am 24 Februar 2017, 15:14:28
Du hast Recht!
Ist mir auf dem Handy beim Kopieren untergegangen.
Habe ich im Satz davor ja auch geschrieben dass das Reading fehlt!
Num ist bei Zahlenwerten auch besser! Z.B.:
{fhem "setreading RegenRisk risk ".ReadingsNum("wetteronline","fc0_chOfRain11",50)}

Klar, über set ist schöner, aber das entsprechende set muss dann auch konfiguriert werden.
Mit setreading muss man vorher nichts konfigurieren.

Gruß
Dan
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: Thorsten Pferdekaemper am 24 Februar 2017, 15:32:20
Zitat von: vbs am 24 Februar 2017, 14:56:54Ich finde es schicker, per Attribute "readingslist" im dummy zu definieren,...
Noch schicker finde ich, wenn man erst gar keinen Dummy definert:

setreading wetteronline regenRisiko [wetteronline:fc0_chOfRain11]

Warum sollte man wegen einem Reading gleich ein ganzes Device definieren?
Gruß,
   Thorsten
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: vbs am 24 Februar 2017, 15:44:23
Zitat von: Thorsten Pferdekaemper am 24 Februar 2017, 15:32:20

setreading wetteronline regenRisiko [wetteronline:fc0_chOfRain11]

Bin mir nicht sicher, ob ich verstanden habe, was du damit erreichen willst. Aber du kannst das gleiche vermutlich einfacher über ein userReading machen.
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: Thorsten Pferdekaemper am 24 Februar 2017, 15:48:22
Zitat von: vbs am 24 Februar 2017, 15:44:23
Bin mir nicht sicher, ob ich verstanden habe, was du damit erreichen willst.
Ich will erreichen, dass kein neues Device angelegt werden muss. Das finde ich nämlich immer etwas unübersichtlich.

Zitat
Aber du kannst das gleiche vermutlich einfacher über ein userReading machen.
Genau das, was ich geschrieben habe, schon. Aber fstefan1960 will ja (soweit ich es verstanden habe) zeitgesteuert verschiedene Readings zuweisen. Das geht mit einem userReading meiner Meinung nach nicht, da ein userReading bei Änderungen am Device getriggert wird. D.h. userReading ist wie notify, er braucht aber ein at.

Gruß,
   Thorsten
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: vbs am 24 Februar 2017, 16:02:54
Ok, verstehe, da hast du schon recht. Ich find diese vielen Geräte auch etwas sperrig, ist aber eben "fhemisch". Sicherlich auch Geschmackssache, aber ich bin da auch nicht so ein Freund davon, mit setreading in fremde Geräten zu schreiben. Durchbricht mMn die Kapselung/Modularisierung.
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: Thorsten Pferdekaemper am 24 Februar 2017, 16:06:53
Zitat von: vbs am 24 Februar 2017, 16:02:54Sicherlich auch Geschmackssache, aber ich bin da auch nicht so ein Freund davon, mit setreading in fremde Geräten zu schreiben. Durchbricht mMn die Kapselung/Modularisierung.
Naja, das sind alles meine Geräte, da kann ich doch reinschreiben was ich will... ;-)
Siehst Du da ein tatsächliches Problem oder nur ein "philosophisches"? Ok, theoretisch kann es passieren, dass nach einem Update das Device ein gleichnamiges Reading hat, aber das ist schon eher ein theoretischer Fall.
Gruß,
   Thorsten
Titel: Antw:Kann man einem Dummy direkt den Wert eines Readings zuweisen?
Beitrag von: vbs am 24 Februar 2017, 16:18:01
Naja ich sag mal zu 80% aus Prinzipienreiterei und zu 20% aus Angst vor echten Problemen ;)
Einem Gerät steht es jederzeit frei (auch ohne Update) ein Reading mit beliebigem Namen anzulegen. Ich würde mir auf jeden Fall eine Art Namespace durch ein Präfix im Namen (z.B. "user_" oder so) gönnen. Auch um später meine injizierten Readings wiederfinden zu können. Ich hab schon öfter mal "Datenleichen" in Form von Readings wiedergefunden, die ich irgendwann mal händisch in irgendwelchen Geräten angelegt hab. Teilweise wusste ich dann selbst nicht mehr, ob das Reading wirklich nativ zum Gerät gehört oder von mir händisch angelegt wurde. Fühlt sich einfach unsauber an für mich. Aber klar, zig Dummies anzulegen ist auch nicht nur schön :)