Ist es möglich, auch einer Gruppe für einzelne Räume einen anderen Anzeigenamen zu verpassen?
Ein Beispiel bitte.
Gerne: Ich habe eine Gruppe "Türen und Fenster" und einen Raum "Übersicht". In letzterem möchte ich aber nur die offenen Türen und Fenster sehen. Lösen würde ich das über ein notify, das bei Öffnen bzw. schließen einer Tür/eines Fensters diese/s aus dem Raum nimmt oder zum Raum hinzufügt. Daher hätte ich die Gruppe im Raum "Übersicht" gerne als "Offene Türen und Fenster" angezeigt.
Dafür würde sich eher eine ReadingsGroup eignen in der dann nur offene Türen und Fenster aufgelistet werden. Die ReadingsGroup packst du dann in deinen Übersicht Raum.
siehe https://wiki.fhem.de/wiki/ReadingsGroup#Dynamische_Inhalte
Das Attribute valueFormat sollte dabei der für dich interessante Teil sein.
Sowas könnte man besser über eine teadingsgroup lösen, guck mal hier: https://forum.fhem.de/index.php?topic=46039.0
Ich habe mir für den Status der Türen eine sub gebaut, welche die offenen Türen zurück liefert, dass lässt sich für deinen Fall auch abändern bzw. anpassen.
sub statusTuerOffen() {
my @monitored=devspec2array(".*:FILTER=alias=Tür.*:FILTER=STATE!=closed");
my $cnt_devs=@monitored;
my $i = 0;
my $msgtext = "";
foreach(@monitored) {
$msgtext .= AttrVal($_,"alias",$_);
if ($i < $cnt_devs - 2) {
$msgtext .= ", ";
}
if ($i == $cnt_devs - 2) {
$msgtext .= " und ";
}
$i++;
}
return $msgtext if ($cnt_devs > 0);
}
Das "Grundgerüst" könntest du dafür nehmen oder wie oben schon gepostet mit readingsGroup.
VG
Frank
Zitat von: Manul am 30 April 2017, 18:23:58
Gerne: Ich habe eine Gruppe "Türen und Fenster" und einen Raum "Übersicht". In letzterem möchte ich aber nur die offenen Türen und Fenster sehen. Lösen würde ich das über ein notify, das bei Öffnen bzw. schließen einer Tür/eines Fensters diese/s aus dem Raum nimmt oder zum Raum hinzufügt. Daher hätte ich die Gruppe im Raum "Übersicht" gerne als "Offene Türen und Fenster" angezeigt.
define di_window DOIF
attr di_window state Offene Fenster: [@":open":$group eq "Türen und Fenster" and $_ eq "open","keine"]
Mit diesem Zweizeiler kannst du so etwas realisieren, siehe https://fhem.de/commandref_DE.html#DOIF_aggregation
Danke Euch allen! Das Problem an der readingsGroup ist, daß sie auch angezeigt wird, wenn sie leer ist. Ich habe es jetzt so gelöst, daß ich zwei Gruppen "Fenster und Türen" und "Offene Fenster und Türen" habe - die erste wird in den einzelnen Räumen angezeigt, die zweite nur auf der Übersichtsseite. Per notify füge ich den Türen und Fenstern dann beim Öffnen und Schließen den Raum "Übersicht" hinzu bzw. nehme ihn weg.
Die Variante mit nur einer Gruppe, die auf der Übersichtsseite anders benannt wird, würde mir besser gefallen. Kann nochmal jemand kurz bestätigen, daß das nicht geht?
@Damian: Auch eine schöne Lösung, vielen Dank für den Hinweis. Ich glaube aber, da kriege ich die Anzeige nicht so, wie ich sie gerne hätte.
Zitat von: Manul am 01 Mai 2017, 13:11:01
Danke Euch allen! Das Problem an der readingsGroup ist, daß sie auch angezeigt wird, wenn sie leer ist. Ich habe es jetzt so gelöst, daß ich zwei Gruppen "Fenster und Türen" und "Offene Fenster und Türen" habe - die erste wird in den einzelnen Räumen angezeigt, die zweite nur auf der Übersichtsseite. Per notify füge ich den Türen und Fenstern dann beim Öffnen und Schließen den Raum "Übersicht" hinzu bzw. nehme ihn weg.
Die Variante mit nur einer Gruppe, die auf der Übersichtsseite anders benannt wird, würde mir besser gefallen. Kann nochmal jemand kurz bestätigen, daß das nicht geht?
@Damian: Auch eine schöne Lösung, vielen Dank für den Hinweis. Ich glaube aber, da kriege ich die Anzeige nicht so, wie ich sie gerne hätte.
Durch deine Vorgehensweise änderst du ständig deine Konfiguration (fhem.cfg), wenn du damit leben kannst - ist ok.
zu DOIF: man kann die Trennzeichen als Zeichenketten ändern und auch die Aliasnamen anzeigen.
Zitat von: Damian am 01 Mai 2017, 18:03:12
Durch deine Vorgehensweise änderst du ständig deine Konfiguration (fhem.cfg), wenn du damit leben kannst - ist ok.
Zu welchen Problemen könnte das denn führen?
Zitat von: Damian am 01 Mai 2017, 18:03:12
zu DOIF: man kann die Trennzeichen als Zeichenketten ändern und auch die Aliasnamen anzeigen.
Ich habe das DOIF jetzt nochmal ausprobiert: Es funktioniert leider nicht. Es wird immer "keine" angezeigt, egal, ob eine Tür offen ist oder nicht.
Ich hatte noch eine andere Idee: Könnte man in einem notify die visibilty einer ReadingsGroup ändern, je nachdem, ob sie leer ist oder nicht? Gibt es eine Möglichkeit, in Perl die Anzahl der Mitglieder einer ReadingsGroup abzufragen?
Zitat von: Manul am 01 Mai 2017, 18:29:16
Zu welchen Problemen könnte das denn führen?
Das ist kein Problem, sondern eine Eigenschaft des Systems. Durch Änderung des Attributes ändert sich die Konfiguration, zu erkennen am roten Fragezeichen. Wenn du sie nicht speicherst ist die Änderung beim nächsten Booten weg.
ZitatIch habe das DOIF jetzt nochmal ausprobiert: Es funktioniert leider nicht. Es wird immer "keine" angezeigt, egal, ob eine Tür offen ist oder nicht.
Poste mal ein list vom offenen Fenster.
Zitat von: Damian am 01 Mai 2017, 19:47:27
Das ist kein Problem, sondern eine Eigenschaft des Systems. Durch Änderung des Attributes ändert sich die Konfiguration, zu erkennen am roten Fragezeichen. Wenn du sie nicht speicherst ist die Änderung beim nächsten Booten weg.
Ok. Ich denke, damit kann ich in diesem Fall leben - der Fensterzustand sollte flüchtig genug sein. ;)
Zitat von: Damian am 01 Mai 2017, 19:47:27
Poste mal ein list vom offenen Fenster.
Gerne:
Internals:
CUL_0_MSGCNT 15
CUL_0_RAWMSG A0C8DA64149BD34FD9F7F01DBC8::-63.5:CUL_0
CUL_0_RSSI -63.5
CUL_0_TIME 2017-05-01 20:35:02
DEF 49BD34
IODev CUL_0
LASTInputDev CUL_0
MSGCNT 15
NAME dg_sz_sco_balkon
NOTIFYDEV global
NR 39
STATE open
TYPE CUL_HM
lastMsg No:8D - t:41 s:49BD34 d:FD9F7F 01DBC8
peerList dg_sz_wt_WindowRec,dg_sz_ht_WindowRec,
protLastRcv 2017-05-01 20:35:02
protSnd 9 last_at:2017-05-01 20:35:02
protState CMDs_done
rssi_at_CUL_0 max:-63.5 min:-76 cnt:15 lst:-63.5 avg:-70.9
Readings:
2017-05-01 15:18:54 Activity alive
2017-04-29 20:30:09 D-firmware 1.0
2017-04-29 20:30:09 R-cyclicInfoMsg on
2017-04-29 20:30:10 R-dg_sz_ht_WindowRec-expectAES off
2017-04-29 20:30:10 R-dg_sz_ht_WindowRec-peerNeedsBurst on
2017-04-29 20:30:10 R-dg_sz_wt_WindowRec-expectAES off
2017-04-29 20:30:10 R-dg_sz_wt_WindowRec-peerNeedsBurst on
2017-04-29 20:30:09 R-eventDlyTime 0 s
2017-04-29 20:30:09 R-sabotageMsg on
2017-04-29 20:30:09 R-sign on
2017-04-29 20:30:09 RegL_00. 02:01 09:01 0A:FD 0B:9F 0C:7F 10:01 14:06 00:00
2017-04-29 20:30:09 RegL_01. 08:01 20:9C 21:00 30:06 00:00
2017-04-29 20:30:10 RegL_04.dg_sz_ht_WindowRec 01:01 00:00
2017-04-29 20:30:10 RegL_04.dg_sz_wt_WindowRec 01:01 00:00
2017-05-01 20:34:08 alive yes
2017-05-01 20:35:02 battery ok
2017-05-01 20:35:02 contact open (to VCCU)
2017-05-01 15:18:54 peerList dg_sz_wt_WindowRec,dg_sz_ht_WindowRec,
2017-05-01 20:34:08 recentStateType info
2017-05-01 20:34:08 sabotageError off
2017-05-01 20:35:02 state open
2017-04-29 11:12:03 trigDst_HM_4189FB noConfig
2017-04-29 11:12:03 trigDst_HM_440075 noConfig
2017-04-29 20:00:59 trigDst_dg_sz_ht noConfig
2017-04-29 16:41:25 trigDst_dg_sz_rt_heizung noConfig
2017-04-29 20:00:58 trigDst_dg_sz_wt noConfig
2017-05-01 20:35:02 trigger_cnt 219
Helper:
HM_CMDNR 141
mId 00C7
rxType 28
supp_Pair_Rep 0
Ack:
Expert:
def 1
det 0
raw 1
tpl 0
Io:
newChn +49BD34,00,01,00
nextSend 1493663702.64376
prefIO
rxt 2
vccu
p:
49BD34
00
01
00
Mrssi:
mNo 8D
Io:
CUL_0 -61.5
Prt:
bErr 0
sProc 0
sleeping 1
Rspwait:
Q:
qReqConf
qReqStat
Role:
chn 1
dev 1
Rpt:
IO CUL_0
flg A
ts 1493663702.54605
ack:
HASH(0x2463038)
8D8002FD9F7F49BD340101C800
Rssi:
At_cul_0:
avg -70.9
cnt 15
lst -63.5
max -63.5
min -76
Tmpl:
Attributes:
IODev CUL_0
actCycle 002:50
actStatus alive
alias Balkontür
autoReadReg 4_reqStatus
devStateIcon closed:fts_door@green open:fts_door_open@red
expert 2_raw
firmware 1.0
group Offene Fenster und Türen,Fenster und Türen
model HM-SEC-SCo
peerIDs 00000000,4189FB03,44007503,
room CUL_HM,Schlafzimmer,Übersicht
subType threeStateSensor
Hier das doif, vielleicht hab ich ja auch da was falsch gemacht:
defmod di_window DOIF
attr di_window state Offene Fenster: [@":open":$group eq "Fenster und Türen" and $_ eq "open","keine"]
setstate di_window Offene Fenster: keine
setstate di_window 2017-05-01 20:35:02 Device dg_sz_sco_balkon
setstate di_window 2017-05-01 18:19:16 cmd 0
setstate di_window 2017-05-01 20:35:02 state Offene Fenster: keine
Zitat von: Manul am 01 Mai 2017, 20:41:27
Ok. Ich denke, damit kann ich in diesem Fall leben - der Fensterzustand sollte flüchtig genug sein. ;)
Dennoch ist es ungünstig, denn das rote Fragezeichen brennt dann bei dir immer und du weißt nicht, ob eine ernsthafte Änderung der Konfiguration vorgenommen wurde oder eine temporäre.
Es liegt an der Tatsache, dass deine Devices in zwei Gruppen liegen. Es ist eine Perlabfrage, das könntest du ggf. so lösen.
attr di_window state Offene Fenster: [@":open":$group
=~ "Fenster und Türen" and $_ eq "open","keine"]
defmod listeOffeneFensterTueren readingsGroup FensterKontakt.*|TuerKontakt.*:state
attr listeOffeneFensterTueren alias Übersicht offener Fenster und Türen
attr listeOffeneFensterTueren group Wohnung
attr listeOffeneFensterTueren icon fts_window_1w
attr listeOffeneFensterTueren mapping %ALIAS
attr listeOffeneFensterTueren room AnniKraussStr
attr listeOffeneFensterTueren valueFormat {$VALUE !~ m/closed/?$VALUE:undef;;}
attr listeOffeneFensterTueren valueIcon {'state.open' => 'fts_window_1w_open@red','state.tilted'=>'fts_window_1w_tilt@orange','state.closed'=>'fts_window_1w@green'}
Zeigt nur offene oder gekippte Fenster an.
Danke Euch allen für die Vorschläge!
Bei der ReadingsGroup bleibt das Problem, daß sie auch angezeigt wird, wenn sie leer ist. Ich dachte, das könnte man per visibilty hide verhindern, das scheint aber für was anderes da zu sein.
Ich denke, ich lasse es erst mal, wie's ist, und denke in einer Weile, wenn ich etwas vertrauter mit FHEM bin, nochmal drüber nach.
Nach ein paar Tagen muß ich Damian recht geben: Das ständige rote Fragezeichen irritiert. Ansonsten ist die Anzeige aber genau so, wie ich sie gerne haben möchte: Sieht aus wie eine Gruppe, wird nur angezeigt, wenn auch tatsächlich Fenster offen sind, und jedes Fenster hat seine eigene Zeile inklusive devStateIcon.
Irgendjemand eine Idee, wie ich das auch ohne ständige Konfig-Änderungen hinbekommen könnte?
Hi Manul,
du kannst natürlich noch ein "save" hinterherschicken, um das rote Fragezeichen loszuwerden. Dann besteht aber die Gefahr, dass du "versehentlich" eine temporäre Änderung speicherst, weil irgendwer ein Fenster aufmacht...
Dann mach ich's lieber händisch. Ich habe ohnehin eine separate FHEMWEB-Instanz für Konfigurationsarbeiten, in der Ansichtsinstanz habe ich "save config" ausgeblendet. Trotzdem stellt mich diese Lösung nicht 100%ig zufrieden.
man kann ja prüfen wie viele änderungen es gibt und dann ein save ausführen.
Hab z.B. ein notify um uzsu widgets auf einen weekdaytimer zu übertragen.
Raw definition:
defmod profile2WeekdayTimer notify .*(Mo|Di|Mi|Do|Fr|Sa|So)\|\d\d:\d\d\|(enabled|disabled).* {\
my $profile = (split(": ", $EVENT, 2))[1];;\
return if(!$profile or $profile =~ /,\|/);;\
my @WeekdayTimer = devspec2array("TYPE=WeekdayTimer:FILTER=DEVICE=$NAME");;\
fhem("modify $_ $NAME $profile", 1) for(@WeekdayTimer);;\
fhem("save", 1) if(int(@structChangeHist) == int(@WeekdayTimer));;\
return;;\
}
Sehr schön, so werde ich's machen, vielen Dank!