FHEM - Hausautomations-Systeme > KNX/EIB

10_KNX.pm Neue Version - support

<< < (10/14) > >>

lichtimc:
Danke dir!  :)
lg

Amenophis86:
Ich hätte noch eine Idee eines Features, was sicher keine Eile hat aber mir heute in den Sinn kam. Es wäre cool, wenn man bei jedem Device angeben könnte, dass manche Werte des Device nach einem Neustart + eine Zeit X (selbst wählbar) abgerufen werden bzw. auf den Bus gesendet werden. Ich hatte heute länger FHEM auf Grund von Update und Backup ausgeschaltet und einige Zustände haben natürlich nicht gepasst und dabei kam mir die Idee.

Edit:
Und natürlich könnte man das mit Notify / Doif auch selbst umsetzen aber nativ wäre schöner :)

erwin:
Die Idee find ich gut, ein Status vom KNX-Bus holen...
Ich habe noch keine Idee, wie realisieren, ich werde mal versuchen, eine Liste zu erstellen, mit allen GAD'S die das (theoretisch) unterstützen.
Das sind mal alle, die "get" in der def haben (sicher),... und auch alle, die kein "set" oder "listenonly" (nicht so sicher) haben...
Auf dieser Basis könnte man so was ähnliches wie ein notify machen, die mittels regex oder Attribut vom User die gewünschten devices weiter selektiert und das get ausführt....
Auslösen das Ganze dann - entweder ein paar Sekunden nach FHEM-start, oder per User command...

Ist das in etwa die Richtung, in die du gedacht hast ?
l.g. erwin

 

Amenophis86:
Richtig, get und listenonly wären auch meine Favoriten.

Allerdings würde ich nicht alles auf einmal abfragen. Ich hatte zum Beispiel dran gedacht zwei Attribute pro Device. Attr1 = Die Zeit in Sekunden nach dem Start, wann der Status abgefragt werden soll
Attr2 = für welche GA es gilt, wenn zB mehr als eine GA pro Device definiert sind.

Man könnte die beiden auch zusammen fassen in einem und logisch in der Definition des Attr trennen.

Vorteil wäre, dass ich nicht direkt alles Abfrage und vielleicht den Bus überlaste. Es würde quasi pro Device ein internerTimer gestartet, der nach Ablauf die hinterlegte GA abfragt.

GammaTwin:
Grüße,

ich habe mir dazu folgendes DOIF gebaut. Wichtiger Punkt war, dass ich die Telegramme pro Sekunde begrenzt habe. Sonst hat der Bus "busy" gemeldet.
Ein Voraussetzung für dieses DOIF ist, dass meine Devices alle mit nosuffix versehen sind.
Ich frage auch reine set-GAs und listenonly-GAs nicht ab.
Als Ergebnis bekommt man noch die Anzahl aller GAs und set, set/get, get, listenonly und vergessene nosuffix.


--- Code: ---defmod di_KNX_Status_Aktualisierung DOIF ([$SELF:KNX_Aktualisierung] eq "on" and [?$SELF:KNX_Aktualisierung_Zustand] ne "WIP") {\
 fhem("set $SELF KNX_Aktualisierung_Zustand WIP");;\
 my @aKNXDevice=devspec2array("TYPE=KNX");;\
 my $iDevGesamt=0;;\
 my $iSleep=0;;\
 my $iAnzGAget=0;;\
 my $iAnzGAset=0;;\
 my $iAnzGAlistenonly=0;;\
 my $iAnzGAsetget=0;;\
 my $iNosuffix=0;;\
 my $TelegrammeProSek=5;;\
 foreach my $KNXDevice (@aKNXDevice) {\
  my $KNXDev=InternalVal($KNXDevice,'DEF','NIX');;\
  my @aKNXAdress=split(/ /,$KNXDev);;\
  my $iDev=0;;\
  foreach my $KNXAdress (@aKNXAdress) {\
   $iDev++;;\
   $iDevGesamt++;;\
   if ($KNXAdress !~ m/(\:set\:nosuffix|\:listenonly\:nosuffix)$/) {\
    fhem("sleep ".int($iSleep / $TelegrammeProSek).";; get $KNXDevice g$iDev",1);;\
$iSleep++;;\
fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzAbfrageIst $iSleep",1);;\
if ($KNXAdress =~ m/(\:get\:nosuffix)$/) {\
$iAnzGAget++;;\
} elsif ($KNXAdress !~ m/(\:nosuffix)$/) {\
$iNosuffix++;;\
} else { $iAnzGAsetget++;; };;\
   };;\
   if ($KNXAdress =~ m/(\:set\:nosuffix)$/) { $iAnzGAset++;; };;\
   if ($KNXAdress =~ m/(\:listenonly\:nosuffix)$/) { $iAnzGAlistenonly++;; };;\
  };;\
 };;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzGAget $iAnzGAget",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzGAset $iAnzGAset",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzGAlistenonly $iAnzGAlistenonly",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzGAsetget $iAnzGAsetget",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzNosuffixIst $iNosuffix",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzAbfrageMax $iSleep",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzAbfrageIst 0",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF AnzGA $iDevGesamt",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF KNX_Aktualisierung_Zustand bereit",1);;\
 fhem("sleep ".int($iSleep / $TelegrammeProSek).";; set $SELF KNX_Aktualisierung off",1);;\
} DOELSEIF ([$SELF:KNX_Aktualisierung] eq "off" and [?$SELF:KNX_Aktualisierung_Zustand] eq "WIP") (\
 sleep 1;; set $SELF KNX_Aktualisierung on\
) DOELSEIF ([$SELF:KNX_Aktualisierung] eq "on" and [?$SELF:KNX_Aktualisierung_Zustand:sec] > 1200) (\
 set $SELF KNX_Aktualisierung_Zustand bereit;; set $SELF KNX_Aktualisierung on\
)
attr di_KNX_Status_Aktualisierung do always
attr di_KNX_Status_Aktualisierung readingList KNX_Aktualisierung KNX_Aktualisierung_Zustand AnzAbfrageIst AnzAbfrageMax AnzGA AnzGAget AnzGAlistenonly AnzGAset AnzGAsetget AnzNosuffixIst
attr di_KNX_Status_Aktualisierung setList KNX_Aktualisierung:on,off KNX_Aktualisierung_Zustand:bereit,WIP
attr di_KNX_Status_Aktualisierung stateFormat state <br/> KNX_Aktualisierung_Zustand
attr di_KNX_Status_Aktualisierung userReadings ProzentAbfrage { if (ReadingsNum($NAME, 'AnzAbfrageMax', '') > 0) {int(100 * ReadingsNum($NAME, 'AnzAbfrageIst', '') / ReadingsNum($NAME, 'AnzAbfrageMax', ''))} else {0}}
attr di_KNX_Status_Aktualisierung webCmd KNX_Aktualisierung:ProzentAbfrage
attr di_KNX_Status_Aktualisierung widgetOverride ProzentAbfrage:slider,0,1,100
--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln