Neues Modul readingsGroup

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

Vorheriges Thema - Nächstes Thema

gero

Hallo Andre,

ich habe jetzt die aktuelle Version aus dem svn am laufen:
- longpoll funktioniert jetzt
- Devicenamen werden nicht mehr überschrieben
- Der ! Operand funktioniert nicht bei Angaben der Form reading@{perl}, bei denen der perl code ein ungültiges (nicht vorhandenes) Device zurückliefert. (ich denke Schuld ist die Zeile 603 next if ( !$h ))

Die ersten beiden Punkte, waren wichtig für mich. Der letzte noch nicht funktionierende Punkt, fällt unter die Kategorie Kosmetik. Zumindest sollte das Verhalten in der command reference erwähnt werden.

Das Auffüllen der Zeilen mittels valueFormat hatte ich bisher verwendet.

Gruß,
Gero


Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

igami

Zitat von: gero am 26 November 2014, 14:09:07
- Devicenamen werden nicht mehr überschrieben

Kann man das optional machen? Ich habe readingsGroups in denen ich das als feature nutze

define rg_12220_1 readingsgroup EIB_1106:?alias,state,set@EIB_2000,?alias,<%fts_shutter_up>,<%fts_shutter_down>
attr rg_12220_1 commands   {'state' => 'trigger ntfy_rg $DEVICE $READING',  'rg_12220_1.fts_shutter_up' => 'set $DEVICE off',  'rg_12220_1.fts_shutter_down' => 'set $DEVICE on'}

das würde dann nicht mehr funktionieren. Das reading 'set' existiert natürlich nicht. Mit einem reset@$DEVICE kann man die Variable auch wieder resetten.

Zitat von: justme1968 am 25 November 2014, 23:22:47
@igami: das geht zur zeit aus zwei gründen nicht. zum einen kannst du wie du bemerkt hast kein attribut angeben und zum anderen ist an dieser stelle kein perl code erlaubt. ich muss mal überlegen wie man das lösen kann. bei deinem konkreten beispiel wüsste ich ab
gerne wozu :) wenn die readingsGroup alle devices im gleichen raum anzeigt hast du ja in diesem raum alles doppelt. einmal die normalen devices selber und einmal jedes device in der readingsGroup.

Um mir ein Interface für mein Smartphone zu schaffen, die anderen Gruppen werden dann mittels hiddengroup ausgeblendet. Ist aber bisher nur eine Idee. Die rg soll dann einfach in jeden Raum kopiert werden können ohne etwas ändern zu müssen :) Denke ich werde das aber eher mit einer sub lösen die mir die DEF der rg schreibt.

Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

gero

Zitat von: igami am 26 November 2014, 14:41:18
Kann man das optional machen? Ich habe readingsGroups in denen ich das als feature nutze
Dann aber bitte als gut dokumentiertes Extrafeature mit einer anderen Syntax (haben wir noch Sonderzeichen übrig? ;))und nicht als Seiteneffekt.
Ich befürchte aber, die readingsGroup ist schon komplex genug. Wenn noch mehr Features einfließen, wird sie für einen normalen User langsam nicht mehr bedienbar.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

justme1968

@igami: für handy und co interessiert dich sicher auch das hier: http://www.fhemwiki.de/wiki/ReadingsGroup#readingsGroup_Styling_mit_CSS

@gero:du kannst ab morgen ein ! auch vor dem mit @ angehängten device namen verwenden. du musst also !reading@!device schreiben.

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

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

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

dancatt

Zitat von: justme1968 am 25 November 2014, 23:22:47
@dancatt: das sollte eigentlich wie bisher gehen. ich habe es mit ein paar einfachen readingsGroups nachgestellt und hatte keine probleme. kannst du bitte auch mal etwas einfaches definieren. z.b. nur define rg readingsGroup <abc>,<%on>
Ich werde mir das am Wochenende nochmal anschauen.

ZitatWenn noch mehr Features einfließen, wird sie für einen normalen User langsam nicht mehr bedienbar.
Die Befürchtung habe ich auch. Vielleicht kann man die ReadingsGroup ja ganz simpel halten und per Plugins erweitern.
Vielleicht kommt aber auch bald dieser Helper von dem Andre schonmal geredet hat.
http://forum.fhem.de/index.php/topic,27353.msg202515.html#msg202515
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

justme1968

die helper kommen. ein teil davon wir vermutlich in richtung templates gehen die wiederverwendbar sind.

aber unabhängig davon: einfache dinge sind mit readingsGroup einfach. komplizierte dinge sind immer noch einfacher als alles selber von hand zu machen.

wenn jemand ideen für vereinfachungen hat immer her damit...

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

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

moonsorrox

Zitat von: justme1968 am 26 November 2014, 11:29:08
du solltest sie von vorn herein so definieren das nur die devices drin sind die du auch drin haben willst. also z.b. auf TYPE=WeekdayTimer.
mmh ich verstehe grad gar nichts  :-\
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

justme1968

beschreib doch noch mal ganz genau was du machen möchtest und wie es aussehen soll. wie deine devices heissen und was es für devices sind. auch die die jetzt gerade mit drin und nicht drin sein sollen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

StefanW

Hallo!

Ich möchte eine wertabhängige Farbgebung von einem Temperatursensor darstellen.
Allerdings haut das irgendwie nicht hin.
Ich bekomme bei einer Temp von 4.3°C den Wert in blau angezeigt.

Als valueStyle hab ich folgendes eingegeben:
{ if($READING eq "temperature" && $VALUE > 17){ 'style="color:green"' }elsif( $READING eq "temperature" && $VALUE <= 17 ){ 'style="color:blue"' }elsif( $READING eq "temperature" && $VALUE <= 10 ){ 'style="color:yellow"' }elsif( $READING eq "temperature" && $VALUE <= 4 ){ 'style="color:orange"' }elsif( $READING eq "temperature" && $VALUE <= 0 ){ 'style="color:red"' }else{ 'style="color:gray"' } }

Wo liegt da mein Fehler?
Mit anderen Tempwerten und nur 3 Farben funktioniert es bei anderen Sensoren wunderbar.

gero

Naja, 4.3 ist eben auch kleiner als 17.
Dreh deine Bedingungen um und fang bei dem kleinsten Wert an.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

StefanW

Alles klar, Danke!
Jetzt funktioniert es.

moonsorrox

Zitat von: justme1968 am 26 November 2014, 19:19:32
beschreib doch noch mal ganz genau was du machen möchtest und wie es aussehen soll. wie deine devices heissen und was es für devices sind. auch die die jetzt gerade mit drin und nicht drin sein sollen.
also ich möchte aus einem DOIF Modul die Zeiten in einer kleinen Übersicht anzeigen lassen. Momentan habe ich dort in dem Modul 5 Timer drin, (es kommen später noch welche dazu)
Diese Zeiten möchte ich getrennt nach Wochentag und Wochenende anzeigen lassen und diese sollen wie schon oben auf den Screenshots zu sehen eine Bezeichnung haben, dies klappt ja auch schon zum Teil, nur was nicht klappt ist die Anzeige getrennt nach Wochentag und Wochenende, da habe ich etliche Versuche hinter mir und aufgegeben.
Es sollen also 3 Spalten sein
1. Spalte der Alias Name 2. Spalte Zeiten Wochentag 3. Spalte Zeiten Wocheende

Das Devices heißt di_Aussenlampe (später kommt noch eines dazu di_zufall_Aussenlampe ist aber noch nicht fertig)
hier mal der Code dazu:
define di_Aussenlampe DOIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))\
    (set WegLampe_Sw_01 on)\
DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))\
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)\
DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))\
    (set WegLampe_Sw_02 off)\
attr di_Aussenlampe room Automation


Ein list auf das device sieht so aus:
Internals:
   CFGFN      ./FHEM/automation.cfg
   DEF        ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",1200,"17:00","22:20")}|12345] or [{sunset("CIVIL",800,"17:00","22:20")}|06]))
    (set WegLampe_Sw_01 on)
DOELSEIF ( [Zeitsteuerung] eq "Dämmerung" and ([{sunset("CIVIL",9000,"19:00","22:20")}|0123456]))
    (set WegLampe_Sw_01 off,set WegLampe_Sw_02 on)
DOELSEIF ([Zeitsteuerung] eq "Dämmerung" and ([00:15|01234] or [01:15|56]))
    (set WegLampe_Sw_02 off)



   NAME       di_Aussenlampe
   NR         1997
   NTFY_ORDER 50-di_Aussenlampe
   STATE      cmd_3
   TYPE       DOIF
   Readings:
     2014-11-27 00:15:00   cmd_event       timer_4
     2014-11-27 00:15:00   cmd_nr          3
     2014-11-27 00:15:00   state           cmd_3
     2014-11-27 01:12:12   timer_1_c1      27.11.2014 17:14:47|12345
     2014-11-27 01:12:12   timer_2_c1      27.11.2014 17:08:07|06
     2014-11-27 01:12:12   timer_3_c2      27.11.2014 19:24:47|0123456
     2014-11-27 01:12:12   timer_4_c3      28.11.2014 00:15:00|01234
     2014-11-27 01:15:00   timer_5_c3      28.11.2014 01:15:00|56
   Condition:
     0           InternalDoIf('Zeitsteuerung','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1           InternalDoIf('Zeitsteuerung','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{2},$wday,"0123456"))
     2          InternalDoIf('Zeitsteuerung','STATE','') eq "Dämmerung" and (DOIF_time_once($hash->{timer}{3},$wday,"01234") or DOIF_time_once($hash->{timer}{4},$wday,"56"))
   Days:
     0          12345
     1          06
     2          0123456
     3          01234
     4          56
   Devices:
     0           Zeitsteuerung
     1           Zeitsteuerung
     2           Zeitsteuerung
     all         Zeitsteuerung
   Do:
     0          set WegLampe_Sw_01 on
     1          set WegLampe_Sw_01 off,set WegLampe_Sw_02 on
     2          set WegLampe_Sw_02 off
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           Zeitsteuerung:STATE
     1           Zeitsteuerung:STATE
     2           Zeitsteuerung:STATE
     all         Zeitsteuerung:STATE
   Readings:
   Realtime:
     0          17:14:47
     1          17:08:07
     2          19:24:47
     3          00:15:00
     4          01:15:00
   State:
   Time:
     0          {sunset("CIVIL",1200,"17:00","22:20")}
     1          {sunset("CIVIL",800,"17:00","22:20")}
     2          {sunset("CIVIL",9000,"19:00","22:20")}
     3          00:15:00
     4          01:15:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
     2           3  4
Attributes:
   room       Automation


Die Readingsgroup sieht momentan so aus:
define ZeitenRG readingsGroup <Wegbeleuchtung>,<Wochentag>,<Wochenende> di_Aussenlampe
attr ZeitenRG alias Weg Beleuchtung
attr ZeitenRG group Zeiten
attr ZeitenRG mapping { 'timer_1_c1' => 'Weg vorn & Gerätehaus EIN WoTag', 'timer_2_c1' => 'Weg vorn & Gerätehaus EIN WoEnde', 'timer_3_c2' => 'Umschaltung Weg Hinten EIN', 'timer_4_c3' => 'Weg Hinten AUS WoEnde', 'timer_5_c3' => 'Weg Hinten AUS WoTag' }
attr ZeitenRG nameStyle style="color:lightgreen"
attr ZeitenRG nostate 1
attr ZeitenRG notime 1
attr ZeitenRG room Licht Eingang
#{substr((ReadingsVal( "di_Aussenlampe", "timer_1_c1","")),0,19)},<Zeit>
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

justme1968

so langsam verstehe ich was du möchtest...

ich war davon ausgegangen das du WeekdayTimer verwendest um deine lampen zu steuern.

das problem beim DOIF ansatz ist das DOIF keine feste zuordnung zwischen timer und der von dir semantisch damit verbunden Aufgabe hat. wenn du die reihenfolge in deinem DOIF define änderst macht timer1 plötzlich etwas anderes. d.h. du vermischst in einem device unterschiedliche logische aufgaben die du zwar kennst, aber die dem device nicht anzusehen sind, und möchtest diese dann mehr oder minder automatisch wieder auseinander dröseln.

readingsGroup ist dazu ausgelegt starre zusammenhänge immer wider gleich darzustellen. d.h. das gleiche reading aus unterschiedlichen devices in einer tabelle gleich anzuzeigen. du hast aber ein device mit unterschiedlichen readings die gleich dargestellt werden sollen. das passt so nicht richtig und deshalb deine schwierigkeit das abzubilden.

was spricht denn dagegen pro aufgabe einen eigen (Weekday)Timer zu haben (oder von mir aus auch ein DOIF)? dann ist es kein problem eine readingsGroup zu bauen die für alle timer jeweils den alias als beschhreibung der aufgabe anzeigt und nur noch die zeiten trennt. d.h. du hast mehrere devices die mit gleichem reading die gleich dargestellt werden sollen.

die readingsGroup würde dann etwa so aussehen:efine ZeitenRG readingsGroup <Wegbeleuchtung>,<Wochentag>,<Wochenende> TYPE=DOIF:timer.*
attr ZeitenRG mapping $ALIAS
attr ZeitenRG valueFormat formatTimer($DEVICE,$READING)


und in formatTimer machst du die komplette formatierung.

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

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

moonsorrox

vielen Dank andré das du dir soviel Mühe gibst mir zu helfen.
Ich werde dies nachher mal probieren umzusetzen, mal schauen was dabei raus kommt.
Das DOIF wollte ich eigentlich so lassen, da es jetzt auch mit Hilfe des Forums sehr gut seit 3 Tagen läuft, wenn ich mir jetzt mal so das List vom DOIF anschaue sehe ich so einige Readings
Realtime:
     0          17:14:47
     1          17:08:07
     2          19:24:47
     3          00:15:00
     4          01:15:00

mit denen man eigentlich etwas anfangen könnte, naja ich werde mal noch weiter tüfteln... und fragen  ;)
Danke nochmals...  :D
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM