ich würde mir gerne für meine Homematic-Geräte (und später vielleicht auch andere) gerne ein Modul mit einer Art „DeviceProxy“ Funktion erstellen. Idee ist es dabei, die physikalische Gerätehierarchie in einem Zweig und die Proxy Hiearchie in einem anderen Zweig liegen zu haben.
Bedient und auch gesteuert soll nur über die Proxies werden. In Abhängigkeit vom HM Gerät und einem „Funktionsprofil“, das ich auswählen kann, soll mir eine Instanz passende Variablen anbieten. So kann ich beispielsweise für ein Funktionsprofil „Licht“ automatisch Variablen mit Zustand (zum Schalten), aber auch Einschaltdauer, Betriebsstundenzähler usw. mit Samt der zugehörigen Funktionalität erzeugen.
So ungefähr könnte das aussehen:
Meine Fragen dazu:
[ul]
[li]Ist es möglich, innerhalb eines solchen Moduls eine eigene Vererbungshierarchie, auch mit abstrakten Klassen, aufzubauen? Es könnte ja z.b. sinnvoll sein, alles „Schaltbare“ in einer Basisklasse zu hinterlegen, und dann Steckdosen, Lampen etc. in Spezialisierungen auszuprägen. Habe keine Idee, wo und wie ich das im PHP Code unterbringen kann.[/li][li]Wie wickle ich am besten die Kommunikation mit der Homematic Instanz ab? D.h. was wäre der beste Weg, um auf Ereignisse aus den Variablen der Instanz zu reagieren und umgekehrt Variablen der Instanz zu bedienen? Vorstellbar wäre das Anlegen von Ereignissen, aber das stelle ich mir auf Dauer recht unübersichtlich vor.[/li][/ul]
Tommi, und auch ich selbst nutzen in unseren Modulen gerne mal eine Basisklasse.
Und letztens habe ich dann noch angefangen bestimmte Funktionen mit Traits anzuhängen: PHP: Traits - Manual
IrgendwasBase extends ipsmodule
echteKlasse extends IrgendwasBase
use meineSchalterKlasse;
Ich hoffe, ich darf nochmal drei Fragen loswerden.
Also ich bin jetzt soweit, dass ich in einer Testinstanz meines Moduls JSON Daten vom Homematic Socket empfange und verarbeiten kann. Darin stecken die Adresse (z.B. JEQ1234:2) sowie HM-Datenpunktname und -wert.
Jetzt habe ich in meiner form.json einen Instanzselektor, der mit die entsprechende Modulproperty als Integer setzt.
Damit bin ich aber noch nicht bei der String-Adresse, die in den JSON Daten steckt. Also habe ich versucht, eine weitere Property zu registrieren, die bei ApplyChanges als String die Adresse aus der Instanz holt. Dabei fiel mir auf, dass ich den Wert dieser Property nicht setzen kann. Also habe ich stattdessen eine Instanzvariable mit dem Ident „HMAddress“ angelegt und gesetzt, das funktioniert gut. Wenn ich jetzt die JSON Daten empfange, muss ich allerdings immer einen Stringvergleich zwischen der Adresse im JSON Objekt und der eigenen Adresse durchführen, um zu wissen, dass die Daten für diese Instanz bestimmt sind.
Meine Fragen dazu sind:
[ul]
[li]Ist das Vorgehen so korrekt?[/li][li]Was ist überhaupt der Unterschied zwischen „Properties“ und „Variablen“ (RegisterPropertyX vs. RegisterVariableX)?[/li][li]Was ist bei „parentRequirements“ in der module.json der korrekte Wert für meinen Fall? Ich habe dort jetzt die ID des HM Sockets stehen, aber z.B. beim Modul IPSHomematicExtended steht dort etwas anderes ("{75B6B237-A7B0-46B9-BBCE-8DF0CFE6FA52}"), das mir nicht bekannt ist und ich auch nicht in der Modulliste finde.[/li][/ul]