Beschattung mit Eltako FSB61NP-230V - Hardware Instanz und IPSShadowing?

Hallo,

ich beschäftige mich gerade einen Rollladen mit IPS und EnOcean (Eltako) anzusteuern und kommt nicht richtig weiter.
(Bin auch in dem Thema Beschattung neu :wink:

Es würde mich freuen, wenn da jemand etwas dazu sagen könnte…

1.)
Es geht los mit der EnOcean-Instanz für den FSB61NP-230V von Eltako. Da sehe ich nur den „Eltako Schaltaktor“ und den „RCM 1XX Schaltaktor Universell“.

Welchen nehme ich da ?

  • Der „Eltako Schaltaktor“ funktioniert soweit, ich bekomme aber keine Rückmelde-ID eingelernt. Ohne Rückmelde-ID kriege ich aber in IPS gar nicht mit, wie die Rollläden stehen ?
  • Der „RCM 1XX Schaltaktor Universell“ hat keine Rückmelde-ID, dafür aber eine „Expert“-Einstellung, die sich mir nicht erschließt…
    -> Also den „Eltako Schaltaktor“ genommen.
  1. )
    Ich habe dann eine Instanz vom Shutter-modul erstellt und das dazugehörige Hardware-Steuerungsscript mit der EnOcean UUID erweitert. Das scheint zu funktionieren und ich kann über die Instanz hoch/runter fahren bzw. stoppen…
    So wie ich verstanden habe, muss man nun den Rollladen „einlernen“ über die verschiedenen Positionen. OK, das steht noch an.
    Frage: Danach sollte das Modul stehen und da muss ich nicht mehr ran ? Richtig?

3.) Ich habe auch ein Auge auf die IPS Library Beschattungssteuerung geworfen und die interessiert mich als Alternative zu dem Shutter-Modul. Also heruntergeladen und da scheitere ich nun beim Parametrieren…

In der IPSShadowing_Configuration.inc.php kommt am Ende der Eintrag:

		return array(
			c_ShadowingDevice_1 =>	array(
				c_Property_ShadowingType	=> c_ShadowingType_Shutter,
				c_Property_Name				=> 'Flur',
				c_Property_Component         => 'IPSComponentShutter_Dummy,12345',
				c_Property_TimeOpening		=> 35,
				c_Property_TimeClosing		=> 35,
				c_Property_TimeDimoutUp		=> 2,
				c_Property_TimeDimoutDown	=> 3,
				c_Property_TimePause		=> 1,
				c_Property_TempSensorIndoor	=> '',
				),
	   );

Was trage ich denn dort bei der "c_Property_Component " ein ?

Im Comment steht

	 * Der Eintrag "c_Property_Component" spezifiziert die Hardware, es kann jeder "Shutter" Component String Konstruktor
	 * angegeben werden. Detailiertere Informationen kann man auch im core Modul IPSComponent finden.

Hmmm ? Wie bitte ? :wink:

Mir ist klar dass dort irgendwie die Verbindung zur Hardware passiert, aber was muss ich da tun bzw eintragen um die Verbindung zu der EnOcean Aktor Instanz herzustellen?

Merci für Rückmeldungen,

Oliver

Pfad in IPS:
Program - IPSLibrary - app - core - IPSComponent - IPSComponentShutter - … Große Auswahl

In Deinem Fall also wahrscheinlich ‚IPSComponentShutter_Enocean,12345‘

Gruß
Bruno

Hello,

gut, und die „12345“ bleibt so oder kommt da die ID der Instanz des Aktors ?

Merci für die prompte Antwort.

Oli

Natürlich die ID, welchen Sinn sollen die Zahlen sonst haben :wink:

:wink: yeah… habs begriffen…

Ok, jetzt habe ich folgende Instanz des EnOcean Aktors:

und in der Config folgendes:

			c_ShadowingDevice_2 =>	array(
				c_Property_ShadowingType	=> 	c_ShadowingType_Shutter,
				c_Property_Name				=> 'Flur',
				c_Property_Component		=> 'IPSComponentShutter_Enocean,51734',
				c_Property_TimeOpening		=> 	30,
				c_Property_TimeClosing		=> 	30,
				c_Property_TimePause		=> 	1,
				c_Property_TempSensorIndoor	=> '',

die anderen beiden sind noch auf „Dummy“

Yippie :wink: Es schaltet schon mal in der Hardware wenn ich z. B. auf „Manuell runter“ gehe… Kurz danach kommt aber folgender Fehler:

Kann das an der Instanz liegen ? (Von wegen Wurzelobjekt kann nicht geändert werden ?

Merci :wink:

Da muss Andreas oder sonst einer mit Enocean ran, leider keine Ahnung :o

Die Anbindung hatte noch einen Fehler, habs gefixed --> Update liegt auf meine Development Repository:


	IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
	$moduleManager = new IPSModuleManager('IPSComponent', 'https://raw.github.com/brownson/IPSLibrary/Development/');
	$moduleManager->UpdateModule();

Heo

Ok. Super. Vielen Dank

Ich komme morgen früh dazu, das Update durchzuführen… Dann melde ich wie es lief :wink:

Gracias, Oli

Good morning :wink:

also, upgedated und jetzt läuft es los… Super, Merci !

Erstmal bin ich ziemlich beeindruckt über das Script - Respekt ! Echt…

Dann doch noch ein kleiner Fehler…

Wenn ich nun den Rolle aktiviere - manuell nach unten - dann startet es soweit gut.
Drücke ich dann, während er fährt auf „Stop“ (Runter - Stop - Hoch) , dann erscheint folgende Meldung:

Anhalten tut er jedoch… :wink:

Merci nochmals…

Grüße,

Oli

Mach nochmals ein Update, da war noch ein Fehler in der Stop Funktion (ist ohne Enocean schwierig zu testen…)

Hello,

wunderbar - Fehler gefixed…

Vielen Dank !

Grüße,

Oli

Hallo,

ich wollte euch hierzu fragen ob mir jemand sagen kann wie ich den FSB61NP genau einlernen kann/soll.

Grundsätlich bekomme ich es mit dem „Eltako Schaltaktor“ hin zu schalten. Nur was lege ich auf „an“ was auf „aus“?
Lerne ich mit Pos.1, 2, oder 3 ein? In welchen Schritten muss ich dann in IPS drucken.
Zudem komme ich nicht mit dem Rückkanal klar. In der Anleitung gibts was von Bestätigungsdiagrammen. Nur bekomme ich da nie was zurück. Wie im ersten Post ja bereits schon beschrieben. Habt ihr das hinbekommen?

Ich habe nun schon 2 abende versucht und so einige Varianten ausprobiert, nur was is sinnvoll?

Wäre euch sehr Dankbar, mir das kurz schritt für schritt mitzuteilen .
Danke Gruß
Joschi

Hallo,

das einlernen ist etwas trickreich, da der Aktor das Bestätigungstelegramm erst sendet, wenn er die „Endposition“ erreicht hat - und gleichzeitig IPS mind. 2 Impulse abwartet. Bei mir klappt:

  • IPS einlernen wie in jeden anderen Aktor.
  • Melde ID wie ansonsten auch einlernen - der Aktor schaltet 5 mal (ich habe die Stellung GSx verwendet)
  • IPS erkennt nichts - klar, der Rollo ist ja „nicht oben=Endposition“ angekommen. IPS - FENSTER OFFEN LASSEN!
  • Den Aktor auf minimale Fahrzeit drehen (unterer Drehschalter auf Min)
  • mit den Tastern (PTM2xx) mit denen Du die Rollos schalten willst nun solange immer wieder „nach oben“ fahren, solange bis IPS eine ID erkennt.

Grüße,
Kai

Hallo,

nachdem ich nun fast das gesamte Forum bzgl. Eltako bzw. EnOceaon durchforstet habe muss ich nun auch mal eine Frage stellen, die thematisch gut zum Thread passt.

Ich betreibe IPS v3 mit dem IPSShadowing Modul v2.50.7.
Ich habe ein für den FSB61NP einen Eltako Schaltaktor eingelernt (AN - rauf, AUS- stop, AUS - runter, AN - stop).
Die entsprechende IntanzID habe ich in der IPSShadowing_Configuration.inc.php mit eingefügt:


function get_ShadowingConfiguration() {
		return array(
			c_ShadowingDevice_2 =>	array(
				c_Property_ShadowingType	=> 	c_ShadowingType_Shutter,
				c_Property_Name			=> 'Dummy Pinnwand',
				c_Property_Component		=> 'IPSComponentShutter_Enocean,14120',
				c_Property_TimeOpening	=> 	30,
				c_Property_TimeClosing		=> 	30,
				c_Property_TimePause		=> 	1,
				c_Property_TempSensorIndoor	=> '',
				),
	   );

Bisher habe ich keinerlei Sensorik in Verwendung und habe deshalb die DEFINES alle so belassen wie sie waren.

Jetzt die eigentliche Frage:
Kann es sein dass das Skript IPSComponentShutter_Enocean.class.php evtl. nicht ganz fehlerfrei ist, da es mir nicht möglich ist über die Web GUI meinen Rollladen zu stoppen. Wie bereits oben beschrieben ist das Stoppen je nach Status entweder die AN oder AUS Taste.
Habe ich beim Einlernen etwas nicht beachtet oder sonst irgendwas falsch gemacht. Kann mir vorstellen, dass sich sonst mehr Leute über eine fehlende Stopfunktionalität beschwert hätten :wink:

Gruß, Rico

Hallo Rico,

habe die Implementierung im Wesentlichen vom IPS Shuttermodul übernommen, kann Dir aber auch nicht garantieren ob es funktioniert.

Hier mal ein Auszug aus der Implementierung:


		public function MoveUp(){
			if(!GetValue($this->isRunningId)) {
				ENO_SwitchMode($this->instanceId, true);
				SetValue($this->isRunningId, true);
			}
		}

		public function MoveDown(){
			if(!GetValue($this->isRunningId)) {
				ENO_SwitchMode($this->instanceId, false);
				SetValue($this->isRunningId, true);
			}
		}

		public function Stop() {
			if(GetValue($this->isRunningId)) {
				$value = GetValue(IPS_GetObjectIDByIdent("StatusVariable", $this->instanceId));
				ENO_SwitchMode($this->instanceId, $value);
				SetValue($this->isRunningId, false);
			}
		}

Du kannst es mal manuell testen mit:

Hoch


    ENO_SwitchMode(12345, true);

Stop


    ENO_SwitchMode(12345, true);

Runter


    ENO_SwitchMode(12345, false);

Stop


    ENO_SwitchMode(12345, false);

Hallo Andreas,

der Auszug kommt mir bekannt vor :slight_smile: Dass das vom Shutterskript stammt dachte ich mir schon fast.
Das manuelle Testen funtkioniert einwandfrei, entspricht exakt dem AN und AUS Schalter Verhalten im IPS.
Ich hab mal versucht die Stop() Funktion im IPSComponentShutter_Enocean.class.php Skript anzupassen und jetzt funtioniert es. Es war nötig sich den derzeitigen gedrückten Zustand zu merken. Evtl. kann man das ja so oder angepasst übernehmen.


[...] Änderungen im ctr
$this->isRunningId = IPS_CreateVariable(1 /*Integer*/);
[...]               

               /**
		 * @public
		 *
		 * Stop
		 */
		public function Stop() 
		{
			$running = GetValue($this->isRunningId);
			if($running != 0) 
			{
				if ($running == 1)
				{
					ENO_SwitchMode($this->instanceId, true);
				}
				else if ($running == 2)
				{
					ENO_SwitchMode($this->instanceId, false);
				}
				SetValue($this->isRunningId, 0);
			}
		}

Bin mir aber nicht sicher was die Änderung des Variablentyps für Auswirkungen auf die GUI hat. Kannst du ja evtl. mal rüber schauen.

Ach und da fällt mir noch ein, dass ich nun als Aktor Instanz den RCM1xx Schaltaktor (Universell) verwendet habe und musste nun die Schaltzustände invertieren.

Ein weiteres Problem habe ich mir dem Empfang der Schaltzustände des FSB61NP, der sendet diese wohl nur wenn der Rollladen seine Endpostion erreicht hat. Sodass man sich wohl stets auf die Zeit des Öffnens und Schließens des Rollladens verlassen muss. Was ist eigentlich mit einer leichten Zeitlichen Abweichung von einer halben Sekunde, wird IPS dann nicht irgendwann asynchron ?

Des weiteren kommt die IPSShadowing Automatik durcheinander wenn ich den Aktor manuell bediene und mit manuell meine ich nicht einen angelernten Taster sondern einen direkt angeschlossenen Taster am Schalteingang des Aktors. Da besteht wohl keine Chance, dass das IPS benachrichtigt wird. GIbt es evtl. eine Art Reset bei dem man in einen definierten Zustand zurückkeheren kann ?

Gruß, Rico

Hallo Rico,

hab zwar noch nicht verstanden, wieso das vorher nicht funktioniert hat, aber da es ohnehin noch keiner in Verwendung hat, hab ich den Code einfach mal übernommen…

Hallo Andreas,

vorher wurde sich lediglich gemerkt ob der Rollladen aktiv war oder nicht. Da die Logik der Stop() Funktion erst aufgerufen wird wenn der Rollladen in Bewegung ist wurde ENO_SwitchMode immer nur mit einem Schaltzustand (true) aufgerufen. Das hat halt nur geklappt wenn der Rollladen nach unten unterwegs war.

Gruß, Rico

Habe mich weiter mit dem IPSComponentShutter_Enocean.class.php Skript beschäftigt.
Es hatte noch ein Problem: Fährt man ein Rollladen runter und drückt direkt „Hoch“ (ohne auf Stop zu drücken) funktioniert es nicht. Man muss noch ein Stop() mit einbauen.
Hier mal das komplette Skript:


<?
	/**@addtogroup ipscomponent
	 * @{
	 *
 	 *
	 * @file          IPSComponentShutter_Enocean.class.php
	 * @author        Andreas Brauneis
	 *
	 *
	 */

   /**
    * @class IPSComponentShutter_Enocean
    *
    * Definiert ein IPSComponentShutter_Enocean Object, das ein IPSComponentShutter Object für Enocean implementiert.
    *
    * @author Andreas Brauneis
    * @version
    * Version 2.50.1, 31.01.2012<br/>
    */

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

	class IPSComponentShutter_Enocean extends IPSComponentShutter {

		private $instanceId;
		private $isRunningId;

		/**
		 * @public
		 *
		 * Initialisierung eines IPSComponentShutter_Enocean Objektes
		 *
		 * @param integer $instanceId InstanceId des Enocean Devices
		 */
		public function __construct($instanceId) {
			$this->instanceId = IPSUtil_ObjectIDByPath($instanceId);
			$this->isRunningId  = @IPS_GetObjectIDByIdent('runningMode', $this->instanceId);
			if($this->isRunningId===false) {
				$this->isRunningId = IPS_CreateVariable(1 /*Integer*/);
				IPS_SetParent($this->isRunningId, $this->instanceId);
				IPS_SetName($this->isRunningId, 'RunningMode');
				IPS_SetIdent($this->isRunningId, 'runningMode');
				IPS_SetInfo($this->isRunningId, "This Variable was created by Script IPSComponentShutter_Enocean");
			}
		}

		/**
		 * @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){
			$name = IPS_GetName($variable);
			throw new IPSComponentException('Event Handling NOT supported for Variable '.$variable.'('.$name.')');
		}

		/**
		 * @public
		 *
		 * Hinauffahren der Beschattung
		 */
		public function MoveUp()
		{
			$running = GetValue($this->isRunningId);
			
			if ($running == 2)
			{
				$this->Stop();
				IPS_Sleep(1000);
				$running = GetValue($this->isRunningId);
			}

			if ($running == 0) 
			{
				ENO_SwitchMode($this->instanceId, true);
				SetValue($this->isRunningId, 1);
			}
		}

		/**
		 * @public
		 *
		 * Hinunterfahren der Beschattung
		 */
		public function MoveDown()
		{
			$running = GetValue($this->isRunningId);
			
			if ($running == 1)
			{
				$this->Stop();
				IPS_Sleep(1000);
				$running = GetValue($this->isRunningId);
			}

			if($running == 0) 
			{
				ENO_SwitchMode($this->instanceId, false);
				SetValue($this->isRunningId, 2);
			}
		}

		/**
		 * @public
		 *
		 * Stop
		 */
		public function Stop() 
		{
			$running = GetValue($this->isRunningId);
			if($running != 0) 
			{
				if ($running == 1) 
				{
					ENO_SwitchMode($this->instanceId, false);
				} 
				else if ($running == 2) 
				{
					ENO_SwitchMode($this->instanceId, true);
				} 
				
				SetValue($this->isRunningId, 0);
			}
		}
	}

	/** @}*/
?>

Evtl hilft es ja jemandem.

Noch eine Frage, kann man auf das Ereignis „Tastendruck“ eines Schaltaktors reagieren bzw ein Skript ausführen lassen ?

Gruß, Rico

Hallo Rico

Habe Dein Script bzw. Aenderung mal ausprobiert und soweit funktioniert es auch.

Es gibt nur ein einziges Problem, was aber auch schon bei Andreas Variante der Fall war. Ich habe einen externen Switch direkt an den Jalousie Aktuator (Eltako) angelernt. Die Aktuator Instanz bekommt auch die Rueckkanalinfo mit (true/false) ob der Switch gedrueckt wurde oder nicht, aber leider bekommt das Shadowing Script dies nicht mit.

Irgend eine Idee wie das Script erweitert werden kann, dass es auch mit einem externen Switch / Feedback funktioniert ?