Hallo,
ich bin gerade dabei, ein zugeschnittenes Modul zum Auslesen meiner Lüftungsanlage zu schreiben (und bei Erfolg natürlich bereitzustellen).
Der Rahmen steht bereits. Allerdings komme ich an der Stelle nicht weiter, an der ich zur Kommunikation mit der Anlage ein ECMDDevice einbetten will. Das neue Modul soll natürlich nicht nur das ECMDDevice verstecken, sondern bringt auch zugeschnittene Readings usw. mit.
Die Nutzung von ECMD / ECMDDevice mit der Anlage läuft außerhalb des Moduls bereits stabil.
Meine Frage lautet: Wie kann ich in einem Modul elegant (z.B. ohne Nutzung von sehr vielen fhem(..)-Kommandos) in einem Modul ein Device (hier ECMDDevice ) integrieren bzw. wrappen? Die Suche in den bestehenden Modulen nach Beispielen/Anregungen hat mich da bisher nicht weiter gebracht.
Gruß,
Mario
Hallo,
so ganz verstehe ich Deine Frage nicht.
Wenn Du ein bestehendes Modul nutzen willst, musst 'Du ein Objekt dieses Moduls immer instanzieren.
Du kannst natürlich dieses Objekt per define an Dein neues Modul übergeben oder dort gleich per
fhem-Befehl erzeugen.
fhem-Befehl:
Für die meisten Kommandos gibt es natürlich in der fhem.pl Subroutinen, so dass Du nicht
fhem("...."),
in Deinem perl-Code aufrufen musst.
Außerdem empfiehlt es sich, jene Routinen zu verwenden, die als Parameter für das Objekt einen Hash erwarten und nicht eine regex für den device-Namen.
Das spart dann auch Rechenzeit.
Gruß
Elektrolurch
Danke für die Antwort.
Um die Fragestellung klarer zu machen: Die Instanziierung eines Objektes außerhalb und dessen Übergabe an mein Modul wollte ich gerade vermeiden. Das wäre aus Anwendersicht die Notlösung. Das Objekt sollte in meinem Modul z.B. in der x_Define-Routine angelegt und dann zur Anbindung an die Anlage dienen.
Grüße,
Mario
Na ja, dann erzeuge Deine "Kommunikationsschnittstelle" (device) halt im define.
Es ist ja für den Anwender nicht sichtbar, dürfte also nicht stören.
Ich habe durch Deinen Hinweis gerade erst fhem.pl als "Dokumentation" der internen Kommandos zu nutzen gelernt.
Damit (und den vielen existierenden Modulen) komme ich weiter.
Danke,
Mario