Somfy RTS in IP Symcon über RTS485 Gateway einbinden

Du kannst es Dir auch ganz einfach machen …

2 Scripte - für jedes Rollo eins und da hard codiert die Zeichenfolgen rein. Damit kannst Du schnell die Fehler im Script elemenieren.

Man muss das ja nicht so machen wie ich :wink:

Ciao Heiko

Hier das angepasste Script (dein Wohnen 2 habe ich jetzt erstmal so gelassen, ich will jetzt erstmal 2 Raffstore zum Fahren bringen).

Im Anhang die Screenshots aus dem RFXCOM Manager.
Danke schon mal für deine Hilfe!

<? 
# 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); 
# $str=chr(0x0C).chr(0x1A).chr(0xDEV_TYPE).chr(SEQ-NUM).chr(UNIT-ID Part1).chr(UNIT-ID Part2).chr(UNIT-ID Part3).chr(UNIT-CODE).chr(COMMAND).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 == 01) { 
        # WOHNZIMMER 
        if ($UNIT_CODE == 01) { 
            # WOHNZIMMER 01 
            if ($UNIT_CMD == 0) { 
            	# 01010101 STOP 
                # $str=chr(0x0C).chr(0x1A).chr(0xDEV_TYPE).chr(SEQ-NUM).chr(UNIT-ID Part1).chr(UNIT-ID Part2).chr(UNIT-ID Part3).chr(UNIT-CODE).chr(COMMAND).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
				$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); 
            } 
            else if ($UNIT_CMD == 1) { 
                # 01010101 - REIN 
                $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x04).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00); 
            } 
            else if ($UNIT_CMD == 3) { 
                # 01010101 - RAUS 
                $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x04).chr(0x01).chr(0x01).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) { 
                # 01010102 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) { 
                # 01010102 - 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) { 
                # 01010 - 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 == 01) { 
        # Wohnzimmer Seite 
        if ($UNIT_CODE == 1) { 
            # KUECHE 01 
            if ($UNIT_CMD == 0) { 
                # 02250101 STOP 
                $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x07).chr(0x01).chr(0x01).chr(0x02).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(29127 /*[RFXCOM433E]*/, $str); 
        IPS_Sleep(200); 
    } 
} 
?> 

Anhänge :slight_smile:

010101_65793 Wohnen Seite.png

010102_65794 Wohnen Hinten.png

Bildschirmfoto 2018-01-06 um 21.35.10.png

Gib doch bitte nochmal die Codierung für Deine 2 Rollos durch?

Raffstore 1 = aabbccdd

Raffstore 2 = eeffgghh

Der Anhang fehlt!

Hi Peter,

ich habe das jetzt mal für Deine 2 Raffstores bei mir nachprogrammiert (01010101 & 01010201). Bei der Sequenznummer handelt es sich um eine fortlaufende Nummer die der Manager immer hochzählt. Ich nutze immer eine 01 - damit funktioniert es bei mir :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);  
# $str=chr(0x0C).chr(0x1A).chr(0xDEV_TYPE).chr(SEQ-NUM).chr(UNIT-ID Part1).chr(UNIT-ID Part2).chr(UNIT-ID Part3).chr(UNIT-CODE).chr(COMMAND).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_NUM == 01) {  
        # Raffstore 01  
        if ($UNIT_CMD == 0) {  
            # 01010101 STOP  
            # $str=chr(0x0C).chr(0x1A).chr(0xDEV_TYPE).chr(SEQ-NUM).chr(UNIT-ID Part1).chr(UNIT-ID Part2).chr(UNIT-ID Part3).chr(UNIT-CODE).chr(COMMAND).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00); 
            $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
			echo "Raffstore 01 - STOP".PHP_EOL;  
        }  
        else if ($UNIT_CMD == 1) {  
            # 01010101 - REIN  
            $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);  
			echo "Raffstore 01 - REIN".PHP_EOL;  
        }  
        else if ($UNIT_CMD == 3) {  
            # 01010101 - RAUS  
            $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x01).chr(0x03).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);  
			echo "Raffstore 01 - RAUS".PHP_EOL;  
        }  
        else {  
            $UNIT_OK = false;  
        }  
    }  
    else if ($UNIT_NUM == 02) {  
        # Raffstore 02
        if ($UNIT_CMD == 0) {  
            # 01010201 STOP  
            $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x01).chr(0x02).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);  
			echo "Raffstore 02 - STOP".PHP_EOL;  
        }  
        else if ($UNIT_CMD == 1) {  
            # 01010201 - REIN  
            $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x01).chr(0x02).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);  
			echo "Raffstore 02 - REIN".PHP_EOL;  
        }  
        else if ($UNIT_CMD == 3) {  
            # 01010201 - RAUS  
            $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x01).chr(0x02).chr(0x01).chr(0x03).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);  
			echo "Raffstore 02 - RAUS".PHP_EOL;  
        }  
        else {  
            $UNIT_OK = false;  
        }  
    }  
    else {  
        $UNIT_OK = false;  
    }  

    if ($UNIT_OK == true) {  
        # SEND DATA - SPRT_SendText  
        //SPRT_SendText(29127 /*[RFXCOM433E]*/, $str);
		$hex = bin2hex($str);
		echo $hex;
        IPS_Sleep(200);  
    }  
}  
?>

Bei mir hat es ohne Fehler funktioniert, also die richtige Meldung bei der ausgewählten Aktion im WebFront.

Ansonsten müssen wir mal telefonieren.

Ciao Heiko

Nachtrag, hast Du Dich mit dem Manager disconnected? Sonnst funktioniert das alles nicht!

Ja, habe die Programmierung auf nem anderen Rechner gemacht. Ich schaue mir das morgen nochmal an und gebe dann Rückmeldung. Danke!

Hallo Heiko,

ich habe gerade zu allererst dein Raumschema übernommen und mein Haus in Geschosse, Räume und Art (05 Markise äh Raffstore :)) aufgeteilt. Dadurch ergibt sich z.B. für den Raffstore im Wohnzimmer hinten: 02:04:05:01.

Und siehe da, es geht :slight_smile:

In der GUI wirft mir IPS noch einfach „FEHLER“ aus, ohne weitere Angaben. Ich denke, das bekomme ich aber noch weg. Ich lerne jetzt erstmal einen weiteren Raffstore ein, ggf. ist der Fehler dann ja auch weg…

Danke für deine Hilfe!

Ach ja, bekommst du über den RFXCOM auch hin, das du den Status deiner Markise siehst, wenn du mit der Fernbedienung oder dem Taster die Markise rein und rausfährst? Ich habe alle meine Raffstores mit Fernbedienungen ausgestattet, die natürlich auch benutzt werden. Daher wäre es natürlich super, den Status dennoch in IPS zu sehen.

Nachtrag: Nach einem Neustart von IPS geht es nicht mehr :confused::banghead:

Serielle Schnittstelle okay?

Gesendet von iPhone mit Tapatalk

Ich würde sagen, ja - daran hat sich ja nichts geändert. Vll können wir doch mal telefonieren oder per Teamviewer draufschauen?

Hallo,

ich muss sagen ich bin echt begeistert. Ich möchte mich hier bedanken! Das ist echt ein tolles Teil.
Das RFXtrx433E funktioniert bei mir perfekt und kostet im Vergleich zu den von SOMFY angebotenen „Lösungen“ einen bruchteil.

Hier noch mein Script welches ich bei Variablenänderung (ausgelöst durch Telegramme am KNX Bus) ausführe…


 <?
# 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
# 0x04 -> Alle SOMFY Motoren
# STOP
# $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x00).chr(0x04).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
# UP
$str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x00).chr(0x04).chr(0x01).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);
# DOWN
# $str=chr(0x0C).chr(0x1A).chr(0x00).chr(0x01).chr(0x01).chr(0x00).chr(0x04).chr(0x01).chr(0x03).chr(0x00).chr(0x00).chr(0x00).chr(0x00).chr(0x00);


    $UNIT_OK = true;
    //echo $UNIT_FLOOR.":".$UNIT_ID.":".$UNIT_NUM.":".$UNIT_CODE;


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