Somfy RTS in IP Symcon über RTS485 Gateway einbinden

Hallo gdfe,

so Hauptarbeit ist geschafft, jetzt gehts an die Integration in die IPS Beschattungssteuerung - ohne die Anleitung hätte ich das niemals geschafft (allein der Hinweis + und - zu vertauschen - das halte ich ja für einen Bug - da wäre ich vermutlich nie drauf gekommen).

Nochmal besten Dank für die Doku - ohne die wärens X00 € für den Hugo gewesen :slight_smile:

Sehr gut, da werden einige Glückshormone frei, wenn die Rolläden das erste mal mit der PC Steuerung losfahren :wink:

die ± Sache muß nicht unbedingt ein Bug sein, das hängt wohl auch von der Pin Belegung des USB-RS485 Converters ab.

Die Integration ins IPS Shadowing ist ein Kinderspiel :wink:

Definitiv werden da Glückshormone frei. Habe übrigens 2 versch. RS485 Adapter probiert (Hexin, cti Nano) bei beiden waren + und - zu tauschen. Ich habe nochmal be Creston nachgelesen, da steht das Gateway könnte die aktuelle Position pollen. Im frame generator finde ich dafür keine Einstellungen. Schon mal probiert die Position zu pollen?

Beste Grüße
hoep

Das wäre natürlich der Überhammer, wenn das funktionieren würde.

Ich hab ein wenig herumexperimentiert, ich bekomm aber auf die diversen GET Befehle (Frame Count, Tilt Count usw.) immer die gleiche Antwort zurück, unabhängig von der Rolladenposition.

Unter http://www.somfyarchitecture.fr/downloads/buildings/somfy_crestron-hd.pdf ist die Rede, dass man auch pollen kann.
Das ist aber nur beim Crestron C2N-SCC-2 Interface vermerkt, beim RS 485 Gateway steht nix von Status poll dabei.

Ich befürchte, dass die aktuelle Positionsausgabe nicht unterstützt wird…

Mir ist mit Frame Count und Til Count auch noch keinen Durchbruch gelungen. Auch die bestätigte Übertragung um sicherzustellen, das der funkbefehl angekommen bzw. Ausgeführt worden ist hab ich noch nicht implementiert. Hat das schon wer umgesetzt?

Gesendet von meinem iPhone mit Tapatalk

Hallo zusammen,

bin nun über die suche auf diesen Thread gestoßen und habe dazu ein paar fragen.
ein Arbeiteskollege hat Somfy Rolladen mit RTS im Einsatz die er über die Fernbedienung steuern kann.
Meine Frage ist nun benötige ich dann trotzdem den Gateway?
Er möchte IP Symcon dazu verwenden um die Rolladen Zeitgesteuert Öffnen und Schließen lassen.

Danke im Voraus

LG uzwuz

Naja irgendein Gateway wird er schon benötigen, ist halt die Frage ob er schon eins besitzt bzw. was er ausgeben will.

Für die Lösung wird die Fernbedienung geopfert und als Gateway eine CCU oder ein Raspberry mit Funkmodul benötigt. Das Gateway in diesem Thread wäre noch eine Möglichkeit oder aber ein AIO Gateway mit dem AIOGateway PHP Modul, das kann auch Somfy RTS.

Najo, er kann ja die Fernbedienung nicht an den IP-Symcon Rechner anstecken :rolleyes:

Spass bei seite…es gibt mittlerweile kostengünstige Alternativen zum 500 € Somfy RTS Gateway.
z.b. von RFXcom… RFXtrx433E USB HA controller

Da bist mit 100 € dabei.

Wie wird das gute Stück denn in IPS angebunden?

Jan

via USB an den IPS Rechner

Also ich habe ihn im Einsatz und steuere damit meine Markisen - funzt!

Och, ich meinte doch wie „IM“ IPS und nicht wie „AM“ Rechner :rolleyes:

Jan

Man muss einen Seriellen Port zu dem Teil etablieren und dann entsprechende Befehle senden.

Ich kopier mal was aus meinem Script(Header) hier rein, vielleicht hilft das beim Verständnis, ansonsten einfach fragen.


# SerialPort.BAUD_38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE
#
# PREFIX    = 0C1A
# DEV_TYPE  = 00 (RFY) | 01 (RFY-EXT)
# SEQ-NUM	= XY (01)
# UNIT-ID   = 000000-FFFFFF (021501 | 022501)
# UNIT-CODE = 01-04 (00 ALL)
# COMMAND   = 00 = STOP | 01 = UP(REIN) | 03 = DOWN(RAUS) | 07 = PROGRAM
# DATA      = 0000000000
#
# Examples
# Set mode command for controller (optional)
# 0D000000035300000C2F00000000
#
# Command UP
# 0C1A000102250101010000000000
# $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
#
# SPRT_SendText(<serial port id> , $str);
#

Sieht nicht ganz so schön aus, aber man muss halt Befehlsketten zusammenbauen und dann an den seriellen Port senden!

VG Heiko

Hi,

was kommt dann nach dem Skript?
Ich will von Openhab wechseln, da klappt die Steuerung über RFXCOM sehr gut. Device-ID habe ich also.
Ist das Präfix frei wählbar?
Wie bekomme ich den seriellen Port am Raspi raus, gebe ich da einfach /dev/ttyUSB1 z.B. an?

Ich hatte den Kopf meines Scriptes eingestellt um die wichtigsten Infos wie man den RFXCOM ansteuert darzulegen.
Da ich nur 3 Markisen damit steuere, habe ich dann im „nachfolgenden“ Script meine persönliche Ansteuerung codiert.
Diese ist aber wirklich auf die schnelle hingerotzt und wollte mir nicht die Blöße geben es hier zu veröffentlichen.
Wenn Du mit den Infos aus dem Script-Kopf nicht zurechtkommst, melde Dich einfach nochmal.

HINWEIS: In der Zwischenzeit muss man SPRT_SendText(xxxx /[RFXCOM]/ , $str); verwenden anstatt ComPort_SendText!!!

Meinst Du mit Präfix die „0C1A“ Zeichenfolge - nein - die ist fest vorgegeben!

Gute Frage, das hängt davon ab was sonst noch alles an Deinem Raspi hängt und wie er die Reihenfolge festlegt.
Bei mir ist es /dev/ttyUSB0.

Viel Erfolg!

Hallo Peter,

ich schreib jetzt mal meine Lösung hier ins Forum (nicht per PN) - dann haben alle was davon.

Was habe ich an Markisen?

  • Ich habe 2 Markisen
  • Eine Markise hat noch ein Volant (via Solar-Motor)

Wie steuere ich es?

  • alle Markisen werden mit einem einzigen Script gesteuert
  • pro Markise gibt es eine Integer-Variable mit einem speziellen Profil (siehe Anhang)
  • über die Profilwerte werden die Befehle (0 = My/Stop, 1 = Rein, 3 = Raus) gesteuert (siehe Anhang)
  • Jede Variable hat in der Beschreibung per Doppelpunk den eigenen Code hinterlegt [Floor:Id:Nummer:Code] (siehe Anhang)
  • Im Webfront sind dann die Variablen einfach eingebunden

Wie sieht nun das Script dazu aus (Achtung: kann man besser machen :wink:


<?
# SerialPort.BAUD_38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE
#
# PREFIX    = 0C1A
# DEV_TYPE  = 00 (RFY) | 01 (RFY-EXT)
# SEQ-NUM	= XY (01)
# UNIT-ID   = 000000-FFFFFF (021501 | 022501)
# UNIT-CODE = 01-04 (00 ALL)
# COMMAND   = 00 = STOP | 01 = UP(REIN) | 03 = DOWN(RAUS) | 07 = PROGRAM
# DATA      = 0000000000
#
# Examples
# Set mode command for controller (optional)
# 0D000000035300000C2F00000000
#
# Command UP
# 0C1A000102250101010000000000
# $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
#

if ($_IPS['SENDER'] == "WebFront" || $_IPS['SENDER'] == "RunScript") {
	SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
	$array = IPS_GetObject($_IPS['VARIABLE']);

	$UNIT_OK = true;
	$UNIT_CMD = $_IPS['VALUE'];
	list ($UNIT_FLOOR, $UNIT_ID, $UNIT_NUM, $UNIT_CODE) = explode(":", $array['ObjectInfo']);
	//echo $UNIT_FLOOR.":".$UNIT_ID.":".$UNIT_NUM.":".$UNIT_CODE;

	if ($UNIT_ID == 25) {
		# WOHNZIMMER
		if ($UNIT_CODE == 1) {
			# WOHNZIMMER 01
			if ($UNIT_CMD == 0) {
				# 02250101 STOP
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else if ($UNIT_CMD == 1) {
				# 02250101 - REIN
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else if ($UNIT_CMD == 3) {
				# 02250101 - RAUS
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x01).chr(0x03).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else {
				$UNIT_OK = false;
			}
		}
		else if ($UNIT_CODE == 2) {
			# WOHNZIMMER 02
			if ($UNIT_CMD == 0) {
				# 02250102 STOP
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x02).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else if ($UNIT_CMD == 1) {
				# 02250102 - REIN
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x02).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else if ($UNIT_CMD == 3) {
				# 02250102 - RAUS
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x25).chr(0x01).chr(0x02).chr(0x03).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else {
				$UNIT_OK = false;
			}
		}
		else {
			$UNIT_OK = false;
		}
	}
	else if ($UNIT_ID == 15) {
		# KUECHE
		if ($UNIT_CODE == 1) {
			# KUECHE 01
			if ($UNIT_CMD == 0) {
				# 02250101 STOP
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x15).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else if ($UNIT_CMD == 1) {
				# 02250101 - REIN
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x15).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else if ($UNIT_CMD == 3) {
				# 02250101 - RAUS
				$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x02).chr(0x15).chr(0x01).chr(0x01).chr(0x03).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			}
			else {
				$UNIT_OK = false;
			}
		}
		else {
			$UNIT_OK = false;
		}
	}
	else {
		$UNIT_OK = false;
	}

	if ($UNIT_OK == true) {
		# SEND DATA - SPRT_SendText
		SPRT_SendText(55611 /*[RFXCOM]*/ , $str);
		IPS_Sleep(200);
	}
}
?>

Soo, hoffe das hilft bei der eigenen Ansteuerung :loveips:

Ciao Heiko

Variable-Markisen.PNG

Hi Heiko,

danke für dein Skript. Was ich nicht verstehe:

Die Unit-ID ist ja 6-stellig - im Script fragst du zuerst ab, ob die Unit-ID 25 ist. Wie kommst du darauf? Liest das dein Script aus der Beschreibung aus, die du an der Variablen hinterlegt hast?

Danke!

Hallo Peter,

ja, es wird aus der Beschreibung gelesen!

Ich habe mein Haus nach einem numerischen System aufgebaut. Die Etagen sind von 0 bis 4 durchnummeriert (0=Aussengelände bis 4=Dachgeschoss). Die Zimmer haben alle eine Nummer, also die Küche die 1 und das Wohnzimmer die 2. Markisen haben bei mir die Systemnummer 5.

Das ergibt dann:

02:15:xx:xx für Küche im Erdgeschoss
02:25:xx:xx für Wohnzimmer im Erdgeschoss

Meine Markise im Wohnzimmer hat noch einen Volant, darum zwei mal die 25 und dann Code 01 für Markise und 02 für Volant.

Das ergibt dann: <ETAGE>:<ZIMMERCODE>:<GERÄTENUMMER>:<CODE>

02:15:01:01 für Markise Küche
02:25:01:01 für Markise Wohnzimmer
02:25:01:02 für Volant Markise Wohnzimmer

Verständlich?

Ciao Heiko

Ja, soweit klar.

Ich habe 2 meiner Raffstores zum Testen per RFXCOM Manager angelernt, fahren hoch und runter.

Device-ID 010101
Unit 1 (also 01 für das Skript)
Sequenze 4 (also 04 für das Skript)

Wenn ich jetzt den Befehl für My / Stop senden will, müsste das doch so aussehen:

 

if ($UNIT_ID == 01) { 
        if ($UNIT_CODE == 01) { 
            if ($UNIT_CMD == 0) { 
                # My / STOP 
                $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x04).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00); 

Ich habe den Skript-Teil

    //echo $UNIT_FLOOR.":".$UNIT_ID.":".$UNIT_NUM.":".$UNIT_CODE; 

Wieder aktiviert, sehe aber im Ablauf des Skriptes nichts. Ich denke hier steckt schon vorher ein Fehler, da ich ja zumindest 01:01:01:01 sehen müsste.

Wenn ich den Befehl für My im Webfrontend abschicke, erhalte ich Fehler 01:01:01:01 (so steht es auch in der Beschreibung der entsprechenden Variable…

Hi Peter,

wenn Du zwei Rollos hast brauchste ja auch 2 IDs, z.B. 01010101 und 02010101?!?

Poste doch mal dein komplettes Script und welcher Fehler kommt (Meldungsfenster)?

Ciao Heiko