Frage zu $hash->{Clients}

Begonnen von Markus Bloch, 29 Oktober 2016, 15:57:18

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zusammen,

ich bin aktuell dabei die Developer-Doku im Wiki zum Thema "zweistufiges Modulkonzept" zu überarbeiten (http://www.fhemwiki.de/wiki/DevelopmentModuleIntro#Zweistufiges_Modell_f.C3.BCr_Module).

Ich studiere momentan den Quellcode um selber zu verstehen wie das alles funktioniert.

Aktuell stocke ich jedoch bei der Client-List, welche ein physisches Modul entweder in %modules oder in $hash pro Definiton setzen muss, damit AssignIoPort() ein IO-Device finden kann. Ich habe auf meinem System mal ein "list .* Clients" durchgeführt und erhalte folgendes:
CUL                      :FS20:FHT.*:KS300:USF1000:BS:HMS: :CUL_EM:CUL_WS:CUL_FHTTK:CUL_HOERMANN: :ESA2000:CUL_IR:CUL_TX:Revolt:IT:UNIRoll:SOMFY: :STACKABLE_CC:CUL_RFR::CUL_TCM97001:CUL_REDIRECT:
FritzBox_AHA             :FBDECT:
panStamp_Shield          :SWAP:


Nach meinem aktuellen Verständnis handelt es sich hierbei um eine durch Doppelpunkt getrennte Liste an regulären Ausdrücken, welche an das entsprechende physische Modul (CUL, FBAHA, panStamp) Daten per IOWrite() senden dürfen.

Das heißt, dass alle Definitionen, deren Modulname auf eines dieser Ausdrücke passt, können das physische Modul als IO-Device nutzen.

Nun wundert mich es, warum die Liste immer mit Doppelpunkt anfangt und endet, und dass Leerzeichen enthalten sind (leere Regexp?). Hat das einen tieferen Hintergrund? Ich konnte mir auf Basis des Source-Codes keinen Reim drauf bilden.

Oder habe ich das falsch interpretier? :/

Vielen Dank für die Hilfe.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Dr. Boris Neubert

Hallo Markus,

einem (logischen) Client wird das zuletzt definierte physische Gerät, das das Modul des Clients in "Clients" listet, als IODev zugewiesen (kann durch attr vom Anwender überschrieben werden). Dann benutzt der logische Client die Routinen des physischen Gerätemoduls für IO.

So wie ich Zeile 4331 in fhem.pl lese, braucht man die Doppelpunkte am Anfang und Ende nicht.

Viele Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Markus Bloch

Hallo Boris,

Zitat von: Dr. Boris Neubert am 29 Oktober 2016, 16:10:23
So wie ich Zeile 4331 in fhem.pl lese, braucht man die Doppelpunkte am Anfang und Ende nicht.

So sehe ich das auch. Die Doppelpunkte dienen lediglich als Trennzeichen. Die leeren Elemente aus Leerzeichen bzw am Anfang & Ende werden eh übergangen.

Ich möchte mich nur versichern, dass das korrekt ist, daher die Frage in die große Runde.

Gruß
Markus

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

ich meine die : an anfang und ende sind ein überbleibsel als es computeClientArray noch nicht gab und mehrfach direkt auf {Clients} zugegriffen wurde. da wurde dann per regex auf :$client: geprüft ohne anfang und ende der liste extra zu behandeln.

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

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

Markus Bloch

Hi Andre,

stimmt. Ich habe soeben mal in der SVN Historie gesucht und Revision 3236 gefunden in der die Funktion computeClientArray() eingeführt wurde. Vorher wurde es, wie Du schon sagst, direkt in Dispatch auf ":$mod:" geprüft.

Vielen Dank

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)