Pokeys/Modbus in Shutter Control Modul einbinden

Hallo zusammen,

mithilfe von Helmut habe ich es jetzt geschafft, meine beiden Dachfensterollos über IPS zu steuern.
Jetzt würde ich natürlich gerne auch einzelne Positionen Anfahren können und würde dazu gerne
das Modul Shutter Control benutzen.

Mit folgenden Befehelen kann ich die beiden Rollos jetzt steuern


//Rollo Arbeitszimmer Auf
ModBus_WriteCoil(26335, true);
ModBus_WriteCoil(26335, false);

//Rollo Arbeitszimmer Stop
ModBus_WriteCoil(27210, true);
ModBus_WriteCoil(27210, false);

//Rollo Arbeitszimmer Ab
ModBus_WriteCoil(48606, true);
ModBus_WriteCoil(48606, false);

//Rollo Gäste-WC OG Auf
ModBus_WriteCoil(52992, true);
ModBus_WriteCoil(52992, false);

//Rollo Gäste-WC OG Stop
ModBus_WriteCoil(20002, true);
ModBus_WriteCoil(20002, false);

//Rollo Gäste-WC OG Ab
ModBus_WriteCoil(39965, true);
ModBus_WriteCoil(39965, false);

Jetzt weiß ich aber nicht, was ich als Sendeinstanz angeben muss, weil ich ja für jeden Befehl eine eigene Instanz habe.
Ähnlich geht es mir beim Shutter Controll Script:


<?
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $_IPS['INSTANCE']); /* InstanceID */
//IPS_LogMessage("Direction", $_IPS['DIRECTION']); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $_IPS['DURATION']); /* ms */

if($_IPS['SENDER'] != "ShutterControl")
    die("This script can only be started by the ShutterControl Module");

define("SC_DIRECTION_STOP", 0);
define("SC_DIRECTION_UP", 1);
define("SC_DIRECTION_DOWN", 2);

$instance = IPS_GetInstance($_IPS['INSTANCE']);
switch($instance['ModuleInfo']['ModuleID'])
{
    case "{CB197E50-273D-4535-8C91-BB35273E3CA5}": //ModBus Address
        switch($_IPS['DIRECTION'])
        {
            case SC_DIRECTION_STOP:
        		    ModBus_WriteCoil($_IPS['INSTANCE'], true);                    
        		    ModBus_WriteCoil($_IPS['INSTANCE'], false);
                break;
            case SC_DIRECTION_UP:
        		    ModBus_WriteCoil($_IPS['INSTANCE'], true);
        		    ModBus_WriteCoil($_IPS['INSTANCE'], false);
                break;
            case SC_DIRECTION_DOWN:
        		    ModBus_WriteCoil($_IPS['INSTANCE'], true);
        		    ModBus_WriteCoil($_IPS['INSTANCE'], false);
                break;
        }
        break;
    default:
        die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
?>

Kann mir da jemand auf die Sprünge helfen? Vielen Dank!

Gruß Basti

P.S.: Hier nochmal der Objektbaum:

Hallo zusammen,

ich habe jetzt die letzten Tage nochmal rumgebastelt, aber so richtig habe ich das noch nicht raus. Kann es sein, dass Modbus und Shutter Control nicht zusammen geeignet sind? Ich bräuchte ja 3. Sendeinstanzen (STOP, AUF, AB), da ich für jeden Befehl eine eigene Instanz habe.

Ich habe das ganze mal so umgangen indem ich einfach als Sendeinstanz eine beliebige der drei (STOP, AUF, AB) Modubus Instanzen ausgewählt habe und das Script mit festen Objekt ID’s versehen.


<?
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $_IPS['INSTANCE']); /* InstanceID */
//IPS_LogMessage("Direction", $_IPS['DIRECTION']); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $_IPS['DURATION']); /* ms */

if($_IPS['SENDER'] != "ShutterControl")
    die("This script can only be started by the ShutterControl Module");

define("SC_DIRECTION_STOP", 0);
define("SC_DIRECTION_UP", 1);
define("SC_DIRECTION_DOWN", 2);

$instance = IPS_GetInstance($_IPS['INSTANCE']);
switch($instance['ModuleInfo']['ModuleID'])
{
    case "{CB197E50-273D-4535-8C91-BB35273E3CA5}": //ModBus Address
        switch($_IPS['DIRECTION'])
        {
            case SC_DIRECTION_STOP:
        		    ModBus_WriteCoil(27210 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Stop]*/, true);
					 ModBus_WriteCoil(27210 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Stop]*/, false);
                break;
            case SC_DIRECTION_UP:
        		   ModBus_WriteCoil(26335 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Auf]*/, true);
					ModBus_WriteCoil(26335 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Auf]*/, false);
                break;
            case SC_DIRECTION_DOWN:
        		    ModBus_WriteCoil(48606 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Ab]*/, true);
					 ModBus_WriteCoil(48606 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Ab]*/, false);
                break;
        }
        break;
    default:
        die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
?>

Aber das kann doch keine Lösung sein? Funktioniert das einfach nicht, oder übersehe ich etwas? Um einen Befehl auszuführen, muss die Variable immer erst auf true und dann auf false gesetzt werden, nach dem false schaltet das Relais. Deswegen passt das einzige Thema was ich in der Forensuche gefunden habe leider nicht: Shutter Control + Modbus und IPS_Sleep

Gruß Basti

Hallo Basti,
ist das immer so: 3 Coil-Instanzen?

Ich würde einen Rolladen so bauen: 1 Powerrelais und ein Richtungsrelais. Jetzt mal ohne PoBlocks :wink:

Das hat den Vorteil, dass 2 Richtungen nie gleichzeitig gefahren werden können. Richtungswechsel immer über Stop.

Wie ist es denn in dem Ursprungsscript gemacht? Kenne mich nicht aus.

Gruß Helmut

In dem Ursprungsscript ist es so wie du gesagt hast. Aber ich habe ja in meinem Fall 3 Instanzen über Pokeys :slight_smile:

Hier nochmal der Link zum original Script: Shutter Control — IP-Symcon :: Automatisierungssoftware

Dann würde ich Das auch mit Zweien machen :wink:

Ein Relais als Schließer, einen als Wechsler nach diesem Anschlußbild:

Gruß Helmut

Da hab ich wieder mein Problem, dass ich die Schaltpläne nicht richtig lesen kann. Die Relais laufen über 5V, ist mit den 12V die Fernbedienung gemeint? Brauche ich in meinem Fall nicht 3 Relais um das Rollo überhaupt stoppen zu können? Wenn ich die Taste Ab drücke und während des Fahrens die Taste Auf drücke, wechselt er sofort die Richtung ohne zu stoppen.

Momentan nehme ich einfach eine Dummy Instanz als Sende-Instanz und gebe dann für jeden Befehl die Objekt ID konkret an, hat zwar so keinen wirklich Sinn, aber es läuft. Für das zweite Rollo hab ich ein zweites ShutterControlScript erstellt, wo auch die jeweiligen Objekt ID’s „fest“ drin sind.


<?
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $_IPS['INSTANCE']); /* InstanceID */
//IPS_LogMessage("Direction", $_IPS['DIRECTION']); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $_IPS['DURATION']); /* ms */

if($_IPS['SENDER'] != "ShutterControl")
    die("This script can only be started by the ShutterControl Module");

define("SC_DIRECTION_STOP", 0);
define("SC_DIRECTION_UP", 1);
define("SC_DIRECTION_DOWN", 2);

$instance = IPS_GetInstance($_IPS['INSTANCE']);
switch($instance['ModuleInfo']['ModuleID'])
{

    case "{485D0419-BE97-4548-AA9C-C083EB82E61E}": //Dummy Modul
        switch($_IPS['DIRECTION'])
        {
            case SC_DIRECTION_STOP:
        		    ModBus_WriteCoil(27210 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Stop]*/, true);
					 ModBus_WriteCoil(27210 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Stop]*/, false);
                break;
            case SC_DIRECTION_UP:
        		   ModBus_WriteCoil(26335 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Auf]*/, true);
					ModBus_WriteCoil(26335 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Auf]*/, false);
                break;
            case SC_DIRECTION_DOWN:
        		    ModBus_WriteCoil(48606 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Ab]*/, true);
					 ModBus_WriteCoil(48606 /*[Schnittstellen\PoKeys57E Dachfensterollos\Rollo Gästezimmer\Ab]*/, false);
                break;
        }
        break;
    default:
        die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
?>

Vielen Dank!

Gruß Basti

Achso, Du bist bei Deiner Fernbedienungsersatzschaltung… Dann vergiss meine Antwort.

Ich lese mich ein wenig ein, aber ich bin nicht der PHP Kenner…

Ev. reicht es wenn Du Dir ein Aktionsscript mit Pokeys und der FB bastelst und Das immer wieder aufrufst.

Gruß Helmut

Okay gut, dann bin ich ja beruhigt. Ich habe es ja jetzt mit dem Shutter Control Modul über eine Dummy Instanz als Sende-Instanz und mein „gemogeltes“ Shutter Control Skript am laufen. Das funktioniert zwar, ist aber eine „echt unschöne“ Lösung. Vielleicht hat ja noch jemand eine bessere Idee. Als Sende-Instanz kann ich kein Aktionsscript sondern nur Instanzen angeben.

Vielen Dank!

Gruß Basti

Wieso, das finde ich schon gut gemacht von Dir :wink:

Viele Wege…

Gruß Helmut

Es läuft zumindest erstmal :wink:

P.S.: Morgen kommen die restlichen Teile von Voelkner. Ein Freund lötet mir die Sachen, so wie besprochen und dann werde ich im anderen Thread deine geniale „Steuerung“ zeigen.

Gruß Basti