Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

Pfriemler

Zitat von: justme1968 am 23 April 2015, 08:28:17
...sollte als ab morgen gehen.

Genau. Heute geht's nämlich noch nicht  ;)
Wie ich in valueFormat die Ausfilterung von "ok" und "Nicht-Geräten" und der einen Ausnahme gleichzeitig löse, dazu fehlte mir gestern der Hirnschmalz, aber es bleibt natürlich Plan B. Eigentlich ist es ganz klar für die Übersichtsseite (nur lowBatt: "ok" oder Attribut "IODev" nicht vorhanden oder serialNr=X > undef, sonst "niedrig"), aber in der Gesamtübersicht bräuchte ich eine Verkettung mit drei Ausgaben (Nicht-Gerät und Ausnahmegerät > undef, der Rest in "ok" oder "niedrig je nach Value). Zur Not müsste ich da halt "low" akzeptieren, geht auch.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

frank

Zitataber es bleibt natürlich Plan B. Eigentlich ist es ganz klar für die Übersichtsseite (nur lowBatt: "ok" oder Attribut "IODev" nicht vorhanden oder serialNr=X > undef, sonst "niedrig"), aber in der Gesamtübersicht bräuchte ich eine Verkettung mit drei Ausgaben (Nicht-Gerät und Ausnahmegerät > undef, der Rest in "ok" oder "niedrig je nach Value). Zur Not müsste ich da halt "low" akzeptieren, geht auch.
hmmmm...  *kopfkratz*  ...hmmmm.   ???
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

kvo1

Hallo zusammen,
ich möchte gern in Abhängigkeit des Zustandes eines readings einen Teil der restlichen readings (bzw all)
ausblenden.

die rg sieht so aus
define rg_text readingsGroup squeeze_pi3:currentTitle,currentArtist
attr rg_text group Titel_und_Interpret
attr rg_text noheading 1
attr rg_text nonames 0
attr rg_text notime 1
attr rg_text room SB_PLAYER
attr rg_text style style="color:blue;;text-align:center;;font-size:15px"


Hier wird also der Name des Device selbst sowie der Titel und der Artist angezeigt!
wenn der Player (squeeze_pi3) ausgeschaltete wird, sollen die beiden readings Titel und Artist ausgeblendet werden. Mein Ansatz

attr rg_text valueFormat {if($READING eq "state" && $VALUE eq "off" ) currentTitle => "", currentArtist => "" }
oder
attr rg_text valueFormat {if( ReadingsVal(squeeze_pi3, "state", "off") eq "off" ) currentTitle => "", currentArtist => ""  }

scheint irgendwie ein Problem zu haben ???? habe schon gesucht und Wiki (mehrfach) gelesen.

hat jemand eine Idee.....
Danke vorab
kvo1
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

justme1968

die kannst du variante mit perl code und die hash variante nicht auf diese art mischen. das geht nur anders rum. also etwa so:attr rg_text valueFormat { currentTitle => '{return "" if( ReadingsVal($DEVICE, "state", "off") eq "off" ); return $VALUE;}', currentArtist =>  '{return "" if( ReadingsVal($DEVICE, "state", "off") eq "off" ); return $VALUE;}' }

wenn es sowieso nur die beiden readings sind geht auch ein einfaches:attr rg_text valueFormat {return "" if( ReadingsVal($DEVICE, "state", "off") eq "off" ); return $VALUE;}

wenn dein player aber ausgeschaltet wird während die readingsGroup angezeigt wird würde sie in beiden fällen nicht aktualisiert weil die readingsGroup nicht weiss das die anzeige der beiden readings von state abhängt.

viel besser ist es wenn du in einem notify auf off direkt im device die beiden readings mit setreading korrigierst. dann bekommt es auch die readingsGroup mit und alles geht automatisch.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

kvo1

Hallo Andre,

hier .....
attr rg_text valueFormat { currentTitle => '{return "" if( ReadingsVal($DEVICE, "state", "off") eq "off" ); return $VALUE;}', currentArtist =>  '{return "" if( ReadingsVal($DEVICE, "state", "off") eq "off" ); return $VALUE;}' }

kam eine Fehlermeldung...

lag an den fehlenden Semikolon .....
attr rg_text valueFormat { currentTitle => '{return "" if( ReadingsVal($DEVICE, "state", "off") eq "off" );; return $VALUE;}', currentArtist =>  '{return "" if( ReadingsVal($DEVICE, "state", "off") eq "off" );; return $VALUE;}' }

Zitatwenn dein player aber ausgeschaltet wird während die readingsGroup angezeigt wird würde sie in beiden fällen nicht aktualisiert weil die readingsGroup nicht weiss das die anzeige der beiden readings von state abhängt.

viel besser ist es wenn du in einem notify auf off direkt im device die beiden readings mit setreading korrigierst. dann bekommt es auch die readingsGroup mit und alles geht automatisch.
genau das war dann auch das Problem, es wird nicht aktualisiert !
Habe das Ein- / Ausblenden der rgr über ein DOIF gelöst !

Danke und Gruss
klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

justme1968

die 'fehlen' nur wenn du es direkt in der config einträgst. wenn du es über die detail ansicht eingibt passt es.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

kvo1

Zitat von: justme1968 am 29 April 2015, 20:04:49
die 'fehlen' nur wenn du es direkt in der config einträgst. wenn du es über die detail ansicht eingibt passt es.

gruss
  andre
:-[ erwischt  :-[

gruss klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

optimizer

Hi,

bestimmt nur eine Kleinigkeit für euch:
Meine Stromverbrauchstabelle soll auf Readings des statistics-Modul zugreifen (stat... u. stat...Last). Im Bild Soll_mit Markierung.jpg habe ich die Werte markiert, die ich gerne hätte.

In attr valueFormat habe ich deshalb versucht spaltenweise zu formatieren:  {c:1 => (split(' ',$VALUE))[1], c:2 => (split(' ',$VALUE))[1], c:3 => (split(' ',$VALUE))[4]} (geht nicht)

Bei nur einem Spalten-Format {c:1 => (split(' ',$VALUE))[1]} werden alle Werte gleich formatiert (Ist2.jpg) - unabhängig von der Spalte  :( .
Gibts noch einen Trick?

Gruß
Karlheinz

Elektrolurch

Hallo Andre,

baue gerade eine zentrale Konsole für meine Sonos-Player auf Basis einer readingsGroup und brauche mal einen Tipp.

Die Bedienungskonsole soll SonosCC heißen und oben soll über eine Auswahlliste (Menü) ein Player ausgewählt werden.
Der Rest darunter soll den Status und die Bedienungselemente des ausgewählten Players anzeigen.
Also so was in dem Stil:

define SonosCC-rg readingsGroup SonosCC:Master <{ReadingsVal('SonosCC','Master','nicht gefunden');;}>:Volume,Bass,Treble

In dem reading Master von SonosCC steht dann Player1...Player3, der im Menü ausgewählte Player.
Player1...3 sind vom Typ SONOSPLAYER.

Ich habe jetzt die Befürchtung, dass über die Indirektion (Devicename kommt über die Funktion ReadingsVal longpoll nicht mehr funktioniert, d.h. wenn sich bspw. Volume des ausgewählten Players ändert, dass dies in der rg nicht aktualisiert wird.

Wenn dem so sein sollte, sehe ich zwei Workarounds:

1. Voluem,Bass,Treble usw. werden readings von SonosCC und ein  notify auf alle SONOSPLAYER überträgt die Änderungen der Werte für den gerade ausgewählten Player in die SonosCC.

2. Die rg-Definition sieht so aus:

define SonosCC_rg readingsGroup SonosCC:Master Player1:Volume,Bass,Treble Player2:Volume,Bass,Treble..... Playern:Volume,Bass,Treble

Es wird dann über ein valueFormat für Volume,Bass,Treble eine Funktion gebaut, die für alle Player undef zurückliefert, bis auf den gerade in SonosCC:Master ausgewählrten Player.
Ein bißerl Overhead, aber longpoll müsste ja dann funktionieren.

Gibt es noch eine andere Mölgichkeit?

P.S.: Da kommt noch mehr hinein:
Gruppieren und Ungruppieren von Playern
Auswahl von Playlisten, Favorieten und Radiosendern
Navigation über die Musikbibliothek per Genre, Interpret oder Album....

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

longpoll funktioniert für solche 'indirekten' readings nur dann wenn du das reading von dem sie abhängen auch mit angibst. einfach mit @ an die schliessende geschweifte klammer angehängt. vor das grösser zeichen.

die <{...}@reading> variante ist aber eigentlich 'veraltet' das meiste geht mit der neuen !reading variante besser. diese kann man auch von aussen durch ein trigger <rg> <reading> zur aktualisierung zwingen.

ansonsten gibt es über die berechnung erweiterungen aus dem anderen thread bald die möglichkeit abhängigkeiten von zellen innerhalb einer readingsGroup anzugeben und bei änderungen einer zelle automatisch änderungen in den abhängigen zellen anzustossen.

schau dir auf jeden fall mal diesen beitrag hier: http://forum.fhem.de/index.php/topic,14163.msg193890.html#msg193890 an und frag mal bei der-Lolo nach. wir hatten genau mit so einer 'indirekten' steuerung schon angefangen. er hatte schon implementiert das man in der linken spalte das gerät auswählt und dann in der mittleren spalte steuern kann.


für die gruppierung der sonos player gibt es irgendwo im forum schon mal einen ansatz über eine readingGroup. das ist aber glaube ich auch nicht fertig geworden.


die auswahl von favoriten und radio sondern sollte kein problem sein. da gibt es schon einige beispiele. inklusive icons.


für das blättern durch die ganze bibliothek habe ich gerade etwas in arbeit das genau so ausschaut wie die auswahl in der sonos anwendung. das braucht aber noch eine weile bis es fertig ist.


gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

danke für die Antwort.
Ich habe noch eine Bitte, ist wohl verloren gegangen.
Ich hatte doch vor einiger Zeit mal das Problem, dass ich direkt an eine readingsGroup eine Menüliste angehängt habe, um damit bspw. die Ansicht umzuschalten.
per
command {'Ansicht' => 'Ansicht:',...

Leider bringt dann die Funktion

readingsGroup_set

eine Fehlermeldung. Könntest Du am Schluß der Funktion vor der Fehlermeldung folgende Zeile einfügen:


# eigenes reading?
return undef if(exists($hash->{READINGS}{$cmd}));

  return "Unknown argument $cmd, choose one of $list";
}


Danke.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

privat58

Hallo,
kann man eigentlich mit valueStyle ein anderes Reading nutzen, um z.Bsp. die Farbe zu ändern. Ich habe leider kein Beispiel gefunden.
Hintergrund ist folgender. Ein Klimalogg pro ist in fhem eingebunden und die Temperaturen  der Sensoren werden im Floorplan angezeigt, ich würde gern eine andere Farbe nutzen, um anzuzeigen wenn die Batterie des Sensors alle wird. Die Temperaturen werden so von mir genutzt:
define Bienen1 readingsGroup KLIMALOGG:TempSensor4
attr Bienen1 fp_Wetter 10,570
attr Bienen1 group z_Anzeige
attr Bienen1 mapping { 'TempSensor4' => 'Bienen 1:' }
attr Bienen1 noheading 1
attr Bienen1 nolinks 1
attr Bienen1 notime 1
attr Bienen1 style style="font-size:35px"
attr Bienen1 valueFormat %.1f&degC

Die Batterie hat folgendes reading "KLIMALOGG:BatterieSensor4" mit dem Wert 0 und 1.
Dank an Euch im Voraus
Steffen

justme1968

@Elektrolurch: kannst du mir bitte ein kurzes beispiel mit zwei oder drei dummys dafür machen?

@privat58: ja. das geht natürlich. du brauchst etwas in der art:attr Bienen1 valueStyle { temperature => '{...}' }

und im ... teil kannst du den style mit perl code und ReadingsVal($DEVICE,'BatterieSensor4','0') bestimmen.

die wichtige einschränkung ist das der temperatur wert nicht per longpoll auf die neue farbe geändert wird wenn sich der batterie stand ändert sondern immer nur aktualisiert wird wenn sich die temperatur ändert.

wenn du die farbe auch direkt live ändern möchtest wenn sich der batterie wert ändert brauchst du noch ein notify das ein künstliches temperatur event triggert.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

Zitat:
@Elektrolurch: kannst du mir bitte ein kurzes beispiel mit zwei oder drei dummys dafür machen?

...für die Ergänzung um die eine Zeile????

Wir hatten das doch schon weiter oben, da gab es ja einen Bug, wenn ein reading der readingGroup angezeigt wurde. Die Endlosschleife hast Du ja ausgebaut, jetzt geht es nur noch darum, dass beim

attr command das set funktioniert.

define myrg readingsGroup myrg:Ansicht
attr myrg commands {'Ansicht' => 'Ansicht:Normal,Expert'}


macht ja dann:

set myrg Ansicht Normal
und das wird derzeit durch die readingsGroup_set
blockiert.
Daher die Ergänzung vor der Fehlerbehandlung.


Habe die Zeile bei mir schon seit Wochen lokal in der 33_readingsGroup.pm eingefügt und funktioniert alles.
Muss nur bei jedem update die Ergänzung wieder von Hand einpflegen.
Elektrolurch
configDB und Windows befreite Zone!

privat58

@justme1968:
Ups, jetzt bin ich überfordert, aber schön das es funktionieren kann. Wofür steht das "temperature=>"?
Es ist schwer, einen Akkuzustand "1"zu simulieren. Könnte es so funktionieren?
attr Bienen1 valueStyle { temperature => '{ReadingsVal($DEVICE,'BatterieSensor4','0')?'style="color:black"':'style="color:red"'}

Ansonsten muss ich mal schauen, ob ich noch ein paar leere Batterien habe.
Steffen