IPSShadowing - eine Beschattungssteuerung

Das heißt im Endeffekt, dass man mit Umlauten nicht sauber arbeiten kann.
Den Hinweis, dass es in 4.1 besser gehen soll, kann ich nicht nachvollziehen. Ich habe 4.1 und da sind die Probleme immer noch da.

Hi Zeras,

welcher Hinweis, dass es mit 4.1 besser gehen soll?

Gruß
Maze

War das hier auch nur ein Wunsch?

Hallo Andreas,

wie kann ich Rollläden mittels Guid im Shadowing ansteuern ?

Danke, Grüße Alex

Verstehe die Frage nicht - welche GUID???

Er meint damit ob oder wie es möglich ist einen nicht in der IPSLibrary definiertes Device über IPSShadowing zu steuern. Es gibt ja Rollläden die nicht über eine natürliche IP-Symcon Instanzen gesteuert werden sondern über ein PHP Modul wie z.B. Dooya, Somfy RTS, Homepilot und weitere. Dafür haben die PHP Module ja jeweils eine Funktion z.B. Rauf, Runter, Stop und wie jedes andere Instanz in IP-Symcon hat ein PHP Modul auch eine eindeutige GUID pro Instanztyp.

Frage ist also wie steuert man ein PHP Modul aus IPSShadowing an?

Moin,

man muss in der IPSComponent einen neuen Typ für, in dem Fall, Shutter erzeugen. Dafür am besten das Dummy Script als Vorlage nehmen. In dem Script einfach die passenden Steuerbefehle eintragen. Bitte bedenken, das IPSShadowing nur hoch, runter und stop unterstützt. Keine Angabe der Fahrdauer.

So hatte ich es seinerzeit für Enocean gemacht.
Brownson hat das dann auch in die Library integriert.

Gruß
Maze

Heist das es reicht ein neues Skript anzulegen? Also Beispiel IPSComponentShutter_SomfyRTS und dann kopiert man da dann wie bei den anderen Skripten einfach die Funktion zum Ausführen von Rauf, Runter, Stop rein?


Oder muss da dann noch irgendwas gemacht werden?

Muss nen bissl
mehr gemacht werden.

Da ich gerade nicht am Pc sitze nur mal aus dem Kopf:

  1. In dem neuen Script eine neue Klasse anlegen.
  2. In dem Config File den Shuttern die neue Klasse zuweisen.

Denke das sollte soweit alles sein.

Gruß
Maze

Ich habe das in dem Dummy Modul so gelöst, da ich Probleme hatte, ein neues Modul zu registrieren.
Das geht seit einer Woche ganz gut.
IPS sendet die Befehle per Modbus an eine WAGO und diese hat ein Canbus Gateway, welches dann die Befehle an meine Can Componenten sendet.


		 * Hinauffahren der Beschattung
		 */
		public function MoveUp(){
			IPSLogger_Trc(__file__, 'Activate "MoveUp" of "DummyShutter" "'.$this->instanceId.'"');
			//die Stationsnummer des Rollladen übermitteln
			if (ModBus_WriteRegisterWord(11285 /*[Program\Rollladen\data\Rollladen Station]*/, $this->instanceId))
			{
				//dann die Aktion übermitteln (hoch, runter, stopp)
				if (ModBus_WriteRegisterWord(30597 /*[Program\Rollladen\data\Rollladen Aktion]*/, 2))
				{
					//dann Start übermitteln
					if (ModBus_WriteRegisterWord(44977 /*[Program\Rollladen\data\Rollladen FunktionStart]*/, 1))
					{
						IPS_Sleep(1000);
					}
				}	
			}					
		}

		
		/**
		 * @public
		 *
		 * Hinunterfahren der Beschattung
		 */
		public function MoveDown(){
			IPSLogger_Trc(__file__, 'Activate "MoveDown" of "DummyShutter" "'.$this->instanceId.'"');
			//die Stationsnummer des Rollladen übermitteln
			if (ModBus_WriteRegisterWord(11285 /*[Program\Rollladen\data\Rollladen Station]*/, $this->instanceId))
			{
				//dann die Aktion übermitteln (hoch, runter, stopp)
				if (ModBus_WriteRegisterWord(30597 /*[Program\Rollladen\data\Rollladen Aktion]*/, 1))
				{	
					//dann Start übermitteln
					if (ModBus_WriteRegisterWord(44977 /*[Program\Rollladen\data\Rollladen FunktionStart]*/, 1))
					{
						IPS_Sleep(1000);
					}
				}							

			}					
		}
		
		/**
		 * @public
		 *
		 * Stop
		 */
		public function Stop() {
			IPSLogger_Trc(__file__, 'Activate "Stop" of "DummyShutter" "'.$this->instanceId.'"');
			//die Stationsnummer des Rollladen übermitteln
			if (ModBus_WriteRegisterWord(11285 /*[Program\Rollladen\data\Rollladen Station]*/, $this->instanceId))
			{
				//dann die Aktion übermitteln (hoch, runter, stopp)
				if (ModBus_WriteRegisterWord(30597 /*[Program\Rollladen\data\Rollladen Aktion]*/, 0))
				{			
					//dann Start übermitteln
					if (ModBus_WriteRegisterWord(44977 /*[Program\Rollladen\data\Rollladen FunktionStart]*/, 1))
					{
						IPS_Sleep(1000);
					}
				}	
			}					
		}

	}

Genau Fonzo sagt es schon richtig , die Einbindung mittels PHP Modul

derzeit kann ich mittels

Homepilot_Up(InstanceID)

den Rolladen hochfahren, wenn ich nun das auf dieses Dummymodul übertrage :

/**
		 * @public
		 *
		 * Hinunterfahren der Beschattung
		 */
		public function MoveDown(){
			IPSLogger_Trc(__file__, 'Activate "MoveDown" of "DummyShutter" "'.$this->instanceId.'"');
			Homepilot_Up(InstanceID)										
		}

passiert leider nichts, habe schon den kompletten Thread durchsucht aber
so wie es ausschaut hat noch niemand ein solches Vorhaben oder Problem

Wenn dann muss es


/**
		 * @public
		 *
		 * Hinunterfahren der Beschattung
		 */
		public function MoveDown(){
			IPSLogger_Trc(__file__, 'Activate "MoveDown" of "DummyShutter" "'.$this->instanceId.'"');
			Homepilot_Down($this->instanceId);										
		}

lauten zum ausprobieren. Und das Device muss natürlich in den Konfig von IPSShadowing eingetragen sein sonst weis IPSShadowing ja nicht was es als ID nehmen soll.

Du weißt aber schon, dass du die UP Funktion in die Down Funktion geschrieben hast?

Kannst du in die Funktion Homepilot_Up noch etwas reinschreiben wie echo $InstanceID, damit man sieht was letztendlich ankommt.
Bei mir habe ich das auch in die Dummyfunktion geschrieben und das geht wunderbar.

Euer einziges Problem mit der Dummyfunktion ist, dass diese bei einem Update überschrieben wird.

Wenn eine extra Funktion erstellt wird, dann wird diese NICHT überschrieben :slight_smile:

Allerdings kann man seine Dummy ja immer wieder zurück überschreiben.
Gruß
Maze

Das habe ich aber nicht hinbekommen. Deshalb habe ich das Dummy Modul geändert.
Ich hatte schon eine neue Funktion geschrieben, aber das lief nicht.
Was muss man bei einer neuen Funktion beachten, damit diese funktioniert?

Sodele, jetzt mal ne kurz Anleitung vom PC aus:

Ihr müsst im Prinzip nur eine Datei erstellen und eine Datei anpassen:

  1. Neue Shutter-Klasse erstellen (zB aus dem Dummy-Modul): „IPSComponentShutter_EnoceanShutter.class.php“
    Hierbei muss die Klasse zum Klassen-Kontainer hinzugefügt werden mittels --> „class IPSComponentShutter_EnoceanShutter extends IPSComponentShutter“
    Wer mehr Informationen braucht, schaut am besten in das Skript hinein. Liegt im Verzeichnis: „\skripte\IPSLibrary\app\core\IPSComponent\IPSComponentShutter“

  2. Anpassen der Datei „IPSShadowing_Configuration.inc.php“:
    Hier muss die c_Property_Component auf die neue Klasse angepasst werden.
    zB: „c_Property_Component => ‚IPSComponentShutter_EnoceanShutter,12345‘“

Mehr sollte nicht notwendig sein.

Wenn das Ding dann stabil läuft, freut sich Andreas normalerweise über einen Hinweis und er baut die Klasse dann in IPSShadowing fix ein.

Gruß
Maze

@Fonzo der ; hat noch gefehlt war mein Fehler
@Zeras habe den Befehl hoch/runter verwechselt wurde angepasst
@maze das kann ich später probieren aber im moment passt der Skriptbefehl nicht.

Vielleicht kurz nochmal auf den Punkt

Dummy Modul :

	IPSUtils_Include ('IPSComponentShutter.class.php', 'IPSLibrary::app::core::IPSComponent::IPSComponentShutter');

	class IPSComponentShutter_Dummy extends IPSComponentShutter {

		private $instanceId;
	
		/**
		 * @public
		 *
		 * Initialisierung eines IPSComponentShutter_Dummy Objektes
		 *
		 * @param integer $instanceId InstanceId des Dummy Devices
		 */
		public function __construct($instanceId) {
			$this->instanceId = IPSUtil_ObjectIDByPath($instanceId);
		}

		/**
		 * @public
		 *
		 * Funktion liefert String IPSComponent Constructor String.
		 * String kann dazu benützt werden, das Object mit der IPSComponent::CreateObjectByParams
		 * wieder neu zu erzeugen.
		 *
		 * @return string Parameter String des IPSComponent Object
		 */
		public function GetComponentParams() {
			return get_class($this).','.$this->instanceId;
		}

		/**
		 * @public
		 *
		 * Function um Events zu behandeln, diese Funktion wird vom IPSMessageHandler aufgerufen, um ein aufgetretenes Event 
		 * an das entsprechende Module zu leiten.
		 *
		 * @param integer $variable ID der auslösenden Variable
		 * @param string $value Wert der Variable
		 * @param IPSModuleShutter $module Module Object an das das aufgetretene Event weitergeleitet werden soll
		 */
		public function HandleEvent($variable, $value, IPSModuleShutter $module){
		}

		/**
		 * @public
		 *
		 * Hinauffahren der Beschattung
		 */
		public function MoveUp(){
			IPSLogger_Trc(__file__, 'Activate "MoveDown" of "DummyShutter" "'.$this->instanceId.'"');
			Homepilot_Up($this->instanceId);
		}
		
		/**
		 * @public
		 *
		 * Hinunterfahren der Beschattung
		 */
		public function MoveDown(){
			IPSLogger_Trc(__file__, 'Activate "MoveDown" of "DummyShutter" "'.$this->instanceId.'"');
			Homepilot_Down($this->instanceId);
		}
		
		/**
		 * @public
		 *
		 * Stop
		 */
		public function Stop() {
			IPSLogger_Trc(__file__, 'Activate "Stop" of "DummyShutter" "'.$this->instanceId.'"');
			Homepilot_Stop($this->instanceId);
		}

	}

	/** @}*/

und Shadowing Konfiguration :

 
	function get_ShadowingConfiguration() {
		return array(
			c_ShadowingDevice_1 =>	array(
				c_Property_ShadowingType	=> c_ShadowingType_Shutter,
				c_Property_Name				=> 'Bad',
				c_Property_Component		=> 'IPSComponentShutter_Dummy,36233 /*[Test\Rademacher Modul\Bad]*/',
				c_Property_TimeOpening		=> 0,
				c_Property_TimeClosing		=> 0,
				c_Property_TimePause		=> 0,
				c_Property_TempSensorIndoor	=> '',
				),
			c_ShadowingDevice_2 =>	array(
				c_Property_ShadowingType	=> 	c_ShadowingType_Shutter,
				c_Property_Name				=> 'Fitness',
				c_Property_Component		=> 'IPSComponentShutter_Dummy,40659 /*[Test\Rademacher Modul\Fitness]*/',
				c_Property_TimeOpening		=> 	0,
				c_Property_TimeClosing		=> 	0,
				c_Property_TimePause		=> 	0,
				c_Property_TempSensorIndoor	=> '',
				),

Beim hoch oder runter fahren des Rollladen „Bad“ erhalte ich zwei
Fehlermeldungen und es bewegt sich nichts :

15.01.2017 12:40:32*| PHP*| Error: Warning: Division by zero
   Error in Script C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSShadowing\IPSShadowing_Device.class.php on Line 568
  134 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
   37 in scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
  568 in scripts\IPSLibrary\app\modules\IPSShadowing\IPSShadowing_Device.class.php (call IPSLogger_PhpErrorHandler)
   41 in scripts\IPSLibrary\app\modules\IPSShadowing\IPSShadowing_RefreshTimer.ips.php (call Refresh)
   
   15.01.2017 12:40:32*| ScriptEngine*| Ergebnis für Ereignis 29567
<br />
<b>Warning</b>:  Division by zero in <b>C:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSShadowing\IPSShadowing_Device.class.php</b> on line <b>568</b><br />
<br />
<b>Warning</b>:  Eigenschaft Debug nicht gefunden in <b>C:\IP-Symcon\scripts\__ipsmodule.inc.php</b> on line <b>260</b><br />
<br />
<b>Warning</b>:  Eigenschaft DeviceID nicht gefunden in <b>C:\IP-Symcon\scripts\__ipsmodule.inc.php</b> on line <b>260</b><br />
<br />
<b>Warning</b>:  Dieses Modul hat SendDataToParent nicht implementiert in <b>C:\IP-Symcon\scripts\__ipsmodule.inc.php</b> on line <b>290</b><br />

Beim hinter fahren den Rollladen im Fitness Raum fährt
der Rolladen auf 14% und stoppt dann aber es wird keine
Fehlermeldung abgesetzt…

Erkennt jemand irgendwo einen Fehler ?

Grüße Alex

Wieso sind die Zeiten für öffnen und schließen auf 0?

damit sie bis zum fest eingestellten Anschlag fahren oder dies nicht so ?

Denke nicht.

Wenn ich mich recht entsinne, dann hat Andreas das so in seinen Routinen umgesetzt, dass er immer Fahrzeiten berechnet, wie lange die Dauer zwischen Fahr-Befehl und Stop-Befehl ist. So berechnet er auch die Positionen 25,50,75,90%.

Funktioniert bei mir auch nicht ganz und ich habe ein paar Sachen angepasst und werde es auch noch weiter machen.

Gib mir die Schließen und Öffnen Zeiten an. Denke dann sollte es laufen.

Öffnen dauert oftmals länger, da das Eigengewicht die Geschwindigkeit etwas bremst.

Gruß
Maze