Rademacher Homepilot 1 oder 2 Modul

Hallo Zusammen,

ich habe mir auf Basis des SymconHUE Moduls von taxanos https://www.symcon.de/forum/threads/28799-Philips-HUE-Modul ein Radermacher Homepilot Modul erzeugt.

Die Anwendung ist ähnlich komfortabel. Folgende Aktoren und Sensoren sind bei mir oder bei anderen Nutzern im Einsatz und werden unterstützt:

[ul]
[li]Gurtwickler RolloTron und RolloTron Comfort[/li][li]Rollmotoren[/li][li]Schaltaktoren einfach / 2-fach[/li][li]Dimmer[/li][li]Umweltsensor[/li][li]Sonnensensor[/li][li]Bewegungsmelder / Aktor 9484[/li][li]Connect-Aktor [/li][li]Universal-Aktor[/li][li]RolloTube[/li][li]Raumthermostat[/li][li]Rauchmelder[/li][li]SX5 Garagentorantrieb (Ansteuerung noch nicht vollständig getestet)[/li][/ul]

Die Einrichtung erfolgt über die Modulverwaltung von Symcon. Jetzt kann eine neue Instanz vom Typ „Homepilot Bridge“ angelegt und konfiguriert werden. Nach dem Starten des „Gräte abgleichs“, wird für jeden Aktor (Knoten) oder Sensor eine Instanz in der angegebenen Kategorie bzw. jede Gruppe in der angegebenen Gruppenkategorie angelegt. Ihr müsst somit nicht selber für jeden Knoten eine Instanz anlegen.

Die Installation als Modul erfolgt per git. https://github.com/BrMrx/SymconHP.git

[ul]
[li]Zuerst tragt Ihr die https://github.com/BrMrx/SymconHP.git unter Module ein.[/li][li]Dann könnt Ihr Unter I/O Instanzen eine Homepilot Bridge anlegen[/li][li]Hier müsst Ihr einen HOST (Name oder IP_Adresse) eintragen.[/li][li]Unter Intervall wird eingestellt in welchem Zyklus der aktuelle Status abgefragt werden soll (0-inaktiv)[/li][li]Nun wählt Ihr noch in welcher Kategorie die Knoten (Aktoren) und unter welcher Kategorie die Sensoren gespeichert werden soll[/li][li]Im Anschluss „Geräte abgleichen“ und fertig.[/li][/ul]
Der Button „Status abgleichen“ fragt die aktuellen Status der Lampen ab.

Linearisierung der Rolladenpositionen
Da die prozentualen Positionen der RolloTron Gurtwickler in der Regel nicht mit den realen Positionen der Rollade übereinstimmen gibt es die Möglichkeit die Position durch 3 Stützpunkte pro Knoten zu liniarisieren. Hierzu fährt man die realen Rolladenpositionen 25%, 50% und 75% an und notiert sich die angezeigten Prozentwerte. Dannach werden die notierten Werte in die Konfiguration der einzelnen Knoten eingetragen. Nach der Übernahme der Konfiguration werden die Werte bei der Anzeige und Ansteuerung entsprechend liniarisiert. D.h. möchte man die Rollade zu 50% schließen muss man den Wert nun auch genau 50% vorgeben.

Erweiterung in Version 1.1:
Zusätzliche Variable zum Steuern der Rolladen/Dimmer <<,Stop,>>, 0%,25%,50%,75%,100%
Hierzu gibt es auch weitere öffentliche Funktionen:

[ul]
[li]HP_DirectionUp(Id)[/li][li]HP_DirectionStop(Id)[/li][li]HP_DirectionDown(Id)[/li][/ul]

Erweiterung in Version 1.2:

[ul]
[li]Fehlerkorrekturen für IP-Symcon Version 4.2[/li][li]Unterstützung der Rollmotoren[/li][/ul]

Erweiterung in Version 1.3:

[ul]
[li]Der Bewegungsmelder / Aktor 9484 wird nun voll unterstützt[/li][/ul]

Erweiterung in Version 1.4:

[ul]
[li]Der Garagentorantrieb SX5 wird nun unterstützt[/li][/ul]

Erweiterung in Version 1.5:

[ul]
[li]Connect-Aktor und RolloTube unterstützt[/li][/ul]

Erweiterung in Version 1.6:

[ul]
[li]Universal-Aktor unterstützt[/li][li]Sensorwerte ‚Rauch‘, ‚Batterie-Status‘, ‚Aktueller Sollwert‘, ‚Schließer‘ und ‚HomePilot-Zone‘ werden unterstützt[/li][/ul]

Erweiterung in Version 1.7:

[ul]
[li]kleiner Fehlerkorrekturen[/li][/ul]

Erweiterung in Version 1.8:

[ul]
[li]Raumthermostat wird als Aktor unterstützt[/li][/ul]

Erweiterung in Version 1.9:

[ul]
[li]Raumthermostat Relais und Sollwert werden unterschieden[/li][/ul]

Erweiterung in Version 1.10:

[ul]
[li]Raumthermostat Relaisstatus wird ausgelesen[/li][/ul]

Erweiterung in Version 1.11:

[ul]
[li]Troll Comfort wird unterstützt[/li][/ul]

Erweiterung in Version 1.12:

[ul]
[li]Troll Basis wird unterstützt[/li][/ul]

Erweiterung in Version 1.13:

[ul]
[li]Troll Basis und Troll Comfort wurden in einigen Funktionen nicht korrekt unterstützt[/li][/ul]

Erweiterung in Version 2.00:

[ul]
[li]Korrekturen für den Betrieb mit IP-Symcon 5.0[/li][/ul]

Erweiterung in Version 2.01:

[ul]
[li]Kommafehler behoben, die Modulkonfiguration konnte nicht mehr geladen werden[/li][/ul]

Erweiterung in Version 3.00:

[ul]
[li]Unterstützung des neuen Homepiloten Api ab Firmwareversion 5.0 Die genutzte Version muss in der Bridge als Parameter eingestellt werden.[/li][/ul]

Erweiterung in Version 3.01:

[ul]
[li]Debug Option hinzugefügt[/li][/ul]

Erweiterung in Version 3.02:

[ul]
[li]Geräte mit did 1 (Device Id) funktionieren nun auch. Das kommt nur bei neuen nicht upgedateten Homepiloten vor die kein Backup eingespielt bekommen haben.[/li][/ul]

Erweiterung in Version 3.03:

[ul]
[li]BugFix im Instanz Dialog für die Knoten. Die Linearisierungswerte werden nun als Integerwerte verarbeitet und auf Min/Maxwerte geprüft[/li][/ul]

Im Anhang die Aufzeichnung der DuoFern Umweltsensordaten durch IP-Symcon 4.2 und die Darstellung in einem Highcharts Diagramm.

Finde ich super das jemand der die Geräte auch besitzt ein Modul schreibt.

Ich würde noch Funktionen zum Setzten der Rollladen Position ergänzen.

Du kannst Dich auch gern hier bedienen
GitHub - Wolbolar/IPSymconHomepilot: IP-Symcon Modul für Homepilot

Wenn Dein Modul dann in der Mehrheit verwendet wird würde ich den IPSymconHomepilot Repository dann in Zukunft löschen weil ich selber das Gerät auch nicht besitzte und das Modul auch nicht weiterentwickeln werde.

Die Rolladenpositionen können gesetzt werden. Derzeit wird dafür ein Slider angezeigt. Es ist jedoch ohne weiteres möglich das Profil auf das allgemeine Profil ~Shutter.Assoziation zu ändern. Dann hast du die Positionierung mit einzelnen Prozentwerten.
Damit das dann auch noch etwas mit der tatsächlichen Positionierung zu tun hat, habe ich eine Liniearisirung mit Stützpunkten ergänzt.
Normalerweise ist der Rolladen bereits bei 60% fast geschlossen. Das wird damit ausgeglichen.

Siehe Screenshot

mit ~Shutter.Assoziation:

Ich meinte damit das Du Public Funktionen bereitstellst um z.B. über ein Skript zu schalten. Aber ich habe mir das nicht näher angeschaut ich besitze die Hardware ja nicht

Das sind die public Funktionen das Interfaces:


	// Abgleich aller Knoten
	HP_SyncDevices(int $bridgeId);

	// Abgleich des Status aller Knoten
	HP_SyncStates(int $bridgeId);

	// Liefert zu einer UniqueID die passende Lampeninstanz
	HP_GetDeviceByUniqueId(int $bridgeId, int $uniqueId);

	// Abgleich des Status eines Knoten (HP_SyncStates sollte bevorzugewerden,
	// da direkt alle Lampen abgeglichen werden mit nur 1 Request zur Homepiloten)
	HP_RequestData(int $lightId);

	// Anpassung eines Parameter
	//
	// Mögliche Keys (ja nach Typ unterschiedlich):
	// _______________ Schaltaktor _________________
	// SWITCH       -> true oder false für an/aus
	//
	// _______________ RolloTron / Rohraktor _______
	// SHUTTER      -> true oder false für geschlossen/offens
	// SHUTTERPOS   -> Werte für eine Rollladenposition zwichen 0 und 100%
	// SHUTTERCMD   -> Werte für eine Rollladenposition zwichen 0 und 100% in 25% Schritten
	// AUTOMATIC    -> true oder false für Automatik an/aus
	//
	// _______________ Dimmer ______________________
	// DIMMERSTATE  -> true oder false für an/aus
	// DIMMERPOS    -> Werte für eine Helligkeit zwichen 0 und 100%
	// DIMMERCMD    -> Werte für eine Dimmerposition zwichen 0 und 100% in 25% Schritten
	//
	// _______________ Für Sensoren ________________
	// SUN          -> Sonne erkannt / nicht erkannt
	// RAIN         -> Regen erkannt / nicht erkannt
	// LUX          -> Lichtwert in Lux
	// WIND         -> Windgweschwindigkeit in m/s
	// TEMPERATURE  -> Temperatur in Grad C
	// SUNHEIGHT    -> Sonnehöhe in Grad
	// SUNDIRECTION -> Sonnenrichtung in Grad
	// ACTTIME      -> Aktualisierungszeit als string

	// Liefert einen Lampenparameter je nach Parameter (s.o.)
	HP_GetValue(int $lightId, string $key);
	
	// Staus setzen: Ein/Aus geschlossen/offen
	HP_SetState(int $lightId, bool $value)
	HP_GetState(int $lightId)
	
	// Position setzen (Werte zwichen 0 - 100%)
	HP_SetPosition(int $lightId, int $value)
	HP_GetPosition(int $lightId)
	
	// Automatik Ein/Ausschalten
	HP_SetAutomatic(int $lightId, bool $value)
	HP_GetAutomatic(int $lightId)

	// Lampe einschalten (Richtung 100%), Rollladen runterfahren (Richtung 0%)
	HP_DirectionUp(int $lightId)
	// Dimmvorgang stoppen, Rollladen stoppen
	HP_DirectionStop(int $lightId)
	// Lampe ausschalten (Richtung 0%), Rollladen runterfahren (Richtung 100%)
	HP_DirectionDown(int $lightId)


Zusätzliche Variable zum Steuern der Rolladen/Dimmer <<,Stop,>>, 0%,25%,50%,75%,100%
Hierzu gibt es auch weitere öffentliche Funktionen:

[ul]
[li]HP_DirectionUp(Id)
[/li][li]HP_DirectionStop(Id)
[/li][li]HP_DirectionDown(Id)
[/li][/ul]

Beispiel:

Da fehlt ein s bei Zustand. :wink:

:banghead:
Danke für den Hinweis. Habe es bereits im Modul korrigiert.

und Rollladen schreibt sich im deutschen mit 3 lll :wink:

Aber erst seit kurzem :wink: … Laut Duden von 1986 wird Roll-laden nur beim Trennen mit drei l geschrieben.
Ich habe mein Abi 83 gemacht und seit dem nur noch C,C++ und ein bisschen php geschrieben.
Aber für alle die mit der „neuen“ Rechtschreibung aufgewachsen sind werde ich mal sehen das ich alles auf Rollladen abändere :wink:
Es betrifft aber sowieso nur die Readme Infos

Ich finde das auch grausam, da wird man zum Analphabeten gemacht was Jahre lang richtig war :eek:. Mir dreht es teilweise den Magen um wenn ich sehe was man heute alles schreiben kann und das dann auch noch richtig ist „Portmonee“ ist nur ein Beispiel davon wenn man versucht Französisch in unerkenntliches Deutsch anzupassen.

Ich habe ein Problem mit den Funktionsdeklarationen:
In der IP Symcon Doku ist die Funktion RequestData folgendermaßen deklariert:

Nur wenn ich meine RequestData Funktion auch so deklariere bekomme ich folgende Fehlermeldung:

Das scheint mir ein Fehler in der Dokumentation oder der Deklaration der basis Klasse zu sein.

Ausserdem habe ich folgendes Problem:
Für die Funktion ApplyData die es in der zentralen Device Klasse sowohl für Sensoren als auch für Knoten gibt kann ich keinen hint angeben da es sich um ein Objekt handelt.

Die Funktion wird auch nur von der Bridge zur allgemeinen Daten Aktualisierung mit einem Objekt aufgerufen. Nun gibt es aber leider keine friend Anweisung in php… die bräuchte ich für die Bridge. Gibt es da eine sinnvolle Lösung?
Es gibt auch keinen Hint für Objekt oder?

Vielleicht kann mir ja hier jemand weiterhelfen?

Keine Ahnung was Du da machst aber da musst Du schon den Code zeigen sonst kann man Dir da auch nicht helfen.

Warum nimmst Du eigentlich nicht
GitHub - Wolbolar/IPSymconHomepilot: IP-Symcon Modul für Homepilot

als Grundlage und erweiterst das so wie Du das brauchst? Da ist alles schon drinnen mit Request Action und Forward über einen Splitter.

Ich habe dein Modul mal ausprobiert und hatte direkt jede Menge Fehlermeldungen im WebFrontend … Ausserdem fand ich den objektorientierten Ansatz des HUE Moduls sehr gut.

Mein Modul funktioniert doch einwandfrei, da brauche ich doch keine andere Basis!
Alle Befehle gehen, die Daten werden zyklisch aktualisiert …
Es werden Sensoren und Aktoren unterstützt …
D.h. mein Modul kann bereits alles was ich brauche. Ich kümmere mich gerade um Verschönerungen wie z.B. das eliminieren von Warnmeldungen.

Dabei bin ich auf folgende Problematik gestossen:

In der Dokumentation zur IP-Symcon Modulentwicklung ist die Funktion RequestAction folgendermassen angegeben:

void RequestAction ( [b]string[/b] $Ident, [b]string[/b] $Wert )

Wenn ich die Funktion in meiner Klasse aber so deklariere gibt es eine Fehlermeldung. Ich muss die Funktion also ohne type hint deklarieren. Das halte ich für einen Fehler in der IP-Symcon Dokumentation!
Das Beispiel in der Dokumentation ist auch dann ohne typ hint.

Das finde ich unschön vor allem da IP-Symcon zu meiner ApplyData Funktion eine Warnung wegen nicht deklariertem Typen hint ausgibt.
Hier würde mir dein Modul nicht weiterhelfen da du ein zyklisches Auslesen der aktuellen Daten aus dem Homepiloten ja gar nicht realisiert hattest.

Bei der ApplyData Funktion handelt es sich um eine Funktion die von der Homepilot Bridge zur Aktualisierung der Daten eines einzelnen Knoten/Sensors mit einem Antwort Objekt des Homepiloten aufgerufen wird.
Da die Bridge die Funktion aufrufen können muss kann ich die Funktion nicht protected deklarieren. Somit steht sie bei den allgemeinen API Funktionen als HP_ ApplyData / HPSensor_ApplyData zur Verfügung.
In C++ würde man in der Knoten / Sensor Klasse die Bridge als friend Klasse deklarieren, damit dürfte die Bridge dann auf die protected Methoden der Knoten /Sensor Klassen zugreifen ohne das diese Funktion als API Methode zur Verfügung stehen. Das gibt es aber in php so nicht…

Irgend eine Idee dazu?

Das war überhaupt nicht als Vorwurf gemeint. Ob Dein Modul funktioniert oder nicht kann ich nicht beurteilen da ich die Hardware gar nicht besitzte.

Was ich damit meinte ist warum kopierst Du Dir nicht das aus anderen Modulen raus was Du brauchst


public function RequestAction($Ident, $Value)
		{	

		}

funktioniert einwandfrei.


public function ApplyChanges()
		{
			//Never delete this line!
			parent::ApplyChanges();
			
	
		}

Funktioniert auch einwandfrei.

Ich will doch die Funktion meines Moduls gar nicht in Frage stellen …
Ich habe mir ja auch alles aus einem funktionierendem Modul zusammenkopiert … und dann mit meinen vorhanden Homepilot Skripten zum laufen gebracht.
Als Vorlage habe ich das HUE Modul von texanos genommen - ohne Splitter. Wofür der da ist erschließt sich mir noch nicht so ganz…
Ich denke texanos hat sich um die Warnungen des IP-Symcon Modul Loaders nicht gekümmert. Das wollte ich jetzt machen. Bis auf eine Warnung sind auch alle raus.

Meine Frage war warum die Funktion RequestAction in der Doku mit hint angegeben ist aber dann nicht mit hint typen deklariert werden darf? Das das ganze funktioniert wenn ich es ohne hint deklariere weiss ich …
Es ist halt korrekter wenn Funktionen mit festen Typen auch so deklariert werden. Also vielleicht eher eine Frage die ein Verantwortlicher von IP-Symcon beantworten kann.

Meine zweite (eher allgemeine php) Frage betraf das Aufrufen von protected Funktionen durch eine friend Klasse … was es so in php nicht zu geben scheint.

Das lässt sich auch nicht beantworten ohne den Code zu kennen. Aber grundsätzlich kann eine protected Funktion von einer vererbten Klasse ausgerufen werden.

Sichtbarkeit

Das ist doch Quark, und hatte ich traxanos auch schon Mal geschrieben.
Dafür ist der Datenaustausch gedacht:
Datenfluss — IP-Symcon :: Automatisierungssoftware

Du umgehst das ganze aktuell mit deinen Public Methoden :wink:

Oder ist diese Funktion für einen Timer?
Habe mir den Code jetzt nicht angesehen…
Michael