Mehrere Geräte aus Readingsproxy ansteuern (oder Alternative)

Begonnen von flummy1978, 27 September 2019, 13:04:55

Vorheriges Thema - Nächstes Thema

flummy1978

Hallo zusammen,

vorneweg, eine kleine Erklärung warum ich hier eine Lösung suche:

ich versuche in meiner Programmierung der Fhem Geräte auf ein wenig Struktur zu achten. Das Bedeutet ich versuche darauf zu achten, dass z.B. eben nicht mehrere Funktionen das Gleiche bewirken und ich somit nicht weiß wer was warum geschaltet hat. Oder auch die Strukturen bei zu behalten indem ich z.B. mit set Rollo_........ alle Rollos fahren kann oder mit set Licht_OG_....alle Lichter im OG bedienen kann usw.
Zu dieser Struktur zählt eben auch die Menge der Devices möglichst klein zu halten. D.h. ich möchte gern möglichst übersichtlich bleiben (auch wenn das nicht immer gelingt  ::) )

Nun zu meinem Anregen:
Das unten gelistete list ist vom device "read_OG_SZ_conditions" in diesem readingsproxy befinden sich aktuell übersichtlich Geräte die ich (fast) nur beobachten und selten steuern möchte. Die Ausgabe dieser sieht dann so aus wie auf dem Screenshot unten zu sehen.

Nun würde ich gern die darin befindlichen Symbole auch anklicken und die entsprechenden Geräte auch ansteuern wollen... Hier tue ich mir ehrlicherweise sehr schwer setFn getFn oder valueFn in diesem Zusammenhang zu verstehen. Bin ich hier überaupt auf dem richtigen Weg ? 
Man muss da zu sagen, dass die beiden Icons readings verwenden, die sich in dem readingsproxy befinden (werden gesetzt, sobald sich was relevantes ändert) aber auf unterschiedliche Devices zugreifen nämlich eben .....OG_SZ_SD_02Bett_LI und OG_SZ_SD_01Bett_RE....

Ich würde mich freuen, wenn mir da jemand nen Schubs in die richtige Richtung geben kann.

Natürlich bin ich auch alternativen Möglichkeiten gegenüber offen, wie ich eine solche Übersicht darstellen kann, ohne für jedes Device eine eigene Auflistung zu starten etc. Hab irgendwo mal gelesen dass hier jemand über 200 Devices hat und nicht eines davon ein Dummy ist. Das ist zwar nicht mein Ziel, aber ich habe Configs gesehen in denen 20 Dummys ein Device geschaltet haben, oder überwacht haben. DAS zu vermeiden, ist defintiv mein Ziel.

Internals:
   CHANGED   
   DEF        OG_SZ_SD_02Bett_LI:.*|OG_SZ_SD_01Bett_RE:.*
   DEVICE     OG_SZ_SD_02Bett_LI
   FUUID      5cdc9348-f33f-8d79-ca64-a9fc7166c923ad30
   NAME       read_OG_SZ_conditions
   NOTIFYDEV  OG_SZ_SD_02Bett_LI,global
   NR         145
   NTFY_ORDER 50-read_OG_SZ_conditions
   READING    .*|OG_SZ_SD_01Bett_RE
   STATE      <table>
<tr>
<td style="width:90px; font-weight:bold">
Raum:
</td>
<td>
20.8°C (67.1%)</td>
</tr>
<tr>
<td style="width:90px; font-weight:bold">
Licht:
</td>
<td>25 lx</td>
</tr>
<tr>
<td style="width:90px; font-weight:bold">
Bett<br> Andreas:
</td>
<td>
read1:off
29.3
°C</td>
</tr>
<tr>
<td style="width:90px; font-weight:bold">
Bett<br> Yvonne:
</td>
<td>
read2:off
30.4
°C</td>
</tr>
</table>
   TYPE       readingsProxy
   CONTENT:
     OG_SZ_SD_02Bett_LI 1
   READINGS:
     2019-09-27 12:48:10   Bett_a_POWER1   off
     2019-09-27 12:48:10   Bett_a_Temperature 29.3
     2019-09-27 12:48:10   Bett_y_POWER1   off
     2019-09-27 12:48:10   Bett_y_Temperature 30.4
     2019-09-27 12:48:10   Humidity        67.1
     2019-09-27 12:48:10   Illuminance     25
     2019-09-27 12:48:10   Temperature     20.8
     2019-09-26 19:12:28   lastCmd         on
     2019-09-26 18:45:05   state           20.9
Attributes:
   DbLogExclude .*
   alias       
   devStateIcon read1.on:own-bed_heat@red read1.off:own-bed_heat@green read2.on:own-bed_heat@red read2.off:own-bed_heat@green
   event-on-change-reading .*
   group      Allgemeines
   icon       rc_INFO2
   room       Schlafzimmer
   setList    off on
   sortby     1
   stateFormat <table>
<tr>
<td style="width:90px; font-weight:bold">
Raum:
</td>
<td>
[$name:Temperature]°C ([$name:Humidity]%)</td>
</tr>
<tr>
<td style="width:90px; font-weight:bold">
Licht:
</td>
<td>[$name:Illuminance] lx</td>
</tr>
<tr>
<td style="width:90px; font-weight:bold">
Bett<br> Andreas:
</td>
<td>
read1:[$name:Bett_a_POWER1]
[$name:Bett_a_Temperature]
°C</td>
</tr>
<tr>
<td style="width:90px; font-weight:bold">
Bett<br> Yvonne:
</td>
<td>
read2:[$name:Bett_y_POWER1]
[$name:Bett_y_Temperature]
°C</td>
</tr>
</table>
   userReadings Illuminance { ReadingsVal("OG_SZ_SD_01Bett_RE","BH1750_Illuminance",0)}


Vielen Dank im Voraus

Grüße
Andreas

Beta-User

Interessanter Ansatz, so einen readingsProxy habe ich zugegebenermaßen auch noch nicht gesehen.

Für mich war mit ReadingsProxy bisher immer der Gedanke verbunden, einen Kanal aus einem mehrkanaligen Device schaltbar zu machen (z.B. das GästeWLAN an einer Fritzbox).

Für sowas wie du hier zeigst, hätte ich her ReadingsGroup verwendet, da kann man dann auch einfacher Befehle hinter alle möglichen Elemente der Gruppe legen.

Wenn es darum geht, den Status von mehreren Geräten zusammenzufassen und zu visualisieren (z.B. alle Rollläden offen oder geschlossen), solltest du mal einen Blick auf structure werfen.

Hoffe, das hilft dir irgendwie weiter,

Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

flummy1978

Hallöchen,

natürlich hilft mir das Ganze schon mal im Ansatz, weil ich ja immer lernen will und mir die von Dir genannten Funktionen wieder Optionen (für andere Male) anbieten:

readingsProxy: Ich hab ehrlicherweise noch nie nen richtigen Sinn hinter dieser Funktion gesehen. Dein Beispiel ist dafür natürlich perfekt. ABER ... und da ist wieder mein Ansatz: Wenn ich einen Button mache um GästeWlan einzuschalten, einen um Wlan generell aus zu schalten, einen für systemupdate usw hätte ich wieder 10 devices, die jeweils aus Text ---- ICON bestehen? Genau das würde ich gerne mit dem o.g. Beispiel vermeiden wollen.

ReadingsGroup: Jetzt bin ich total verwirrt.... Egal wie oft ich es in Funktion gesehen habe und wo ich es selbst eingesetzt habe. Überall war für mich immer die Funktion für ReadingsGroup: "lese aus x Devices das reading "bla", "blubb" und "blabla" aus und verarbeite es entsprechend) Aber das habe ich ja bei mir nicht ? In dem einen Device ist es POWER1 wo anders ist es SI7021_Temperature oder DS18B20_Temperature um bei diesem Beispiel zu bleiben. Das wäre natürlich beim Gemisch der Angaben von Fenster, Licht und Funktionen noch wilder .....  :o
Zum anderen ärgert mich immernoch der Anzeigefehler bei Readingsgroup, sobald man ein mehrzeiliges State hat ( was ich mittlerweile öfter benutze) und auf Attribute zugreift. Bisher dort aber leider niemand drauf eingegangen ist, wie man das lösen könnte :( ( Link: Readingsgroup und mehrzeiliges STATE verschiebt Ausgabe )

structure: Muss ich mir auf jeden Fall noch mal genauer anschauen, habe ich bisher sicher unterschätzt, aber außer in der o.g. Funktion "set ROLLO_OG..... " oder "set LICHT_EG...." habe ich bisher nicht mehrere Gruppen nutzn müssen...

Ich frage mich, wie manche es darstellen, dass man ein Gerät hat das KEINEN Titel oder Überschrift / Icon hat so dass man die ganze Reihe für eine Übersicht nutzen könnte. Also in meine Beispiel wäre das die Spalte wo das [ i ] Icon ist.....

Grüße
Andreas

Beta-User

...nicht so einfach, immer den optimalen Weg zu finden, gibt ja praktisch immer mehrere...

Zu ReadingsProxy: Das war nur ein "schnelles Beispiel", besser erklärt ist es evtl. mit einem 1-wire-Device mit mehreren schaltbaren Kanälen/Relays: Will man für die z.B. "on-for-timer" nutzen, muß es per on/off in state schaltbar sein => ergo _muß_ man in diesen Fällen das Device doppeln. In meinem Beispiel könnte man das z.B. nutzen, um in einem vielen Nutzern zugänglichen Bereich ein klickbares Icon anzubieten, ohne gleich alle Readings der Fritte zeigen zu müssen...

ReadingsGroup: Das war "vor" den mehrzeiligen STATE-Optionen auch das Mittel der Wahl, um ein Device aufzuhübschen. Man kann da durchaus auch auf unterschiedliche Readings zugreifen und das sauber gruppieren, hier z.B. Messwerte aus zwei MySensors-Nodes:
define rgTemperaturen_Heizung readingsGroup <
%temp_temperature>,,
MYSENSOR_96:,,temperature24,temperature23 \
MYSENSOR_98:,,temperature27,temperature28 \
MYSENSOR_98:,,temperature23,temperature22 \
MYSENSOR_98:,,temperature23,temperature24\
MYSENSOR_98:,,temperature25,temperature26 \
MYSENSOR_96:,,temperature26,temperature27 \
MYSENSOR_98:,,temperature29,temperature30 \
MYSENSOR_98:,,temperature27,temperature31
attr rgTemperaturen_Heizung alias Vor- und Rücklauftemperaturen
attr rgTemperaturen_Heizung nonames 1
attr rgTemperaturen_Heizung room Heizung
attr rgTemperaturen_Heizung valueFormat %.1f °C

Zu der STATE-Mehrzeiligkeit@RG kann ich wenig sagen, ich nutze das eher, um direkt die Readings anzuzeigen, nicht den STATE. Dann bekommt man auch Icons usw. weg, denke ich. Und der Zugriff auf Attribute sollte auch gehen, sehe da kein großes Problem (außer, dass man wissen muß, wie man mit nicht vergebenen Attributen ggf. umgehen muß; dazu siehe evtl. die Beispiele im Wiki zu AutoshuttersControl).

structure hat in der Tat ein paar Funktionen, die sich einem erst erschließen, wenn man länger dabei ist (z.B. das delay...). viel Spaß beim Einarbeiten.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

flummy1978

Hallo Beta,

vielen lieben dank noch mal für die Auswahl der Beispiele. Ich schaue mir einiges davon noch mal in Ruhe an, wenn ich mein System resettet hab ( nicht mein Fhem, sondern mein eigenes - Ich fahre ab Sonntag zum Oktoberfest und werde dort resetten  ;D ). Bis dahin wären noch weitere Beispiele / Hilfestellungen (vielleicht auch von anderen) möglich.

OT mehrzeiliges STATE und readingsgroup ... Wenn Du Lust hast, schau Dir mal den Beitrag an, dann verstehst Du was ich meine - Würde mich freuen...
In keinem Device wird das STATE angezeigt, sondern auch nur readings. Aber: Habe ich ein Device mit mehrzeiligem STATE verschiebt sich alles. Habe ich readingsgroup und device identisch, bis auf ein einzeiliges STATE, verschiebt sich nichts ;(

Grüß
Andreas