button für lampen an/aus

hallo und jetzt schon sorry für die frage :o

ich habe heute das erste mal den designer gestartet und will einen button einfügen, der eine lampe per fs20 ein-/ausschaltet. geht das auf einem button? ich kriege es nicht geregelt. ich toggel die variable aber das licht geht nicht an oder aus …

happy day und dank, frank

Hallo Frank,

schau mal hier http://www.ipsymcon.de/wiki/index.php/Beispiel:_Skript_ausf%FChren, du musst das Schalten per Script ausführen lassen.

Gruss René

hallo rené !

danke für die schnelle antwort. dann hab ich aber für jede lampe immer 2 buttons und 2 scripte. funktioniert denn die toggle funktion nicht ?

happy day, frank

Warum?

Du kannst doch beim Anklicken ein Script aufrufen, dass abhängig vom Schaltzustand des Verbraucher ein- oder ausschaltet.

Es geht auch mit einem Skript für alle Lampen. Im Designer kannst du für ein Objekt individuell die IPSYMID einstellen - ein String der dann an dein Skript übergeben wird und somit z.b. die gewünschte Lampe identifiziert.

Für das folgende ‚Swap‘-Skript für den Designer brauchst du noch den xmlparser (der ist irgendwo im WIIPS-Paket).

Deseiteren müssen deine Instanzen in globals_instances.php als defines deklariert sein. Im folgenden Beispiel enden alle Instanzen auf „_ID“ - das ist wichtig für das Swap-Skript.

Beispiel für globals_instances.php:


<?php
define( "AZ_Haloseil_Links_ID"    , 23826 );  // FS20 Dimmer
define( "AZ_Haloseil_Rechts_ID"    , 46782 );  // FS20 Dimmer
define( "AZ_Neon_Blau_ID"       , 26391 );  // FS20 Schalter
?>

Das Swap-Skript:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : D_SwapStatus.ips.php
Trigger  : 
Interval : 
*/
include_once "globals_instances.php";
include_once "xmlparser.ips.php";
 
//IPS_LogMessage( "D_StatusSwap.ips.php: ", "Component=".$IPS_COMPONENT);
$instance   = eval("return(".$IPS_COMPONENT."_ID);");
//IPS_LogMessage( "D_StatusSwap.ips.php: ", "Instance=".$instance);
 
$xml        = new IPS_XMLParser(true);
$settings   = $xml->GetArray( IPS_GetInstanceSettings( $instance) );
$status_var = $settings["Settings"]["StatusVariable"];
$moduleinfo = IPS_GetModuleInfo( $settings["UniqueID"]);
$module_name= $moduleinfo["name"];
//IPS_LogMessage( "D_StatusSwap.ips.php: ", "StatusVar=".$status_var);

$status  = !GetValueBoolean( $status_var);
 
switch( $module_name)
{
      case 'FS20TX':    FS20_SwitchMode( $instance, $status);
                        break;
      case 'ALL3000RF': ALL3000RF_SwitchMode( $instance, $status);
                        break;
};
?>

Im Designer wird nun das OnClick-Event eines Images mit dem Skript D_SwapStatus.ips.php verbunden. Als IPSYMID wird z.B. AZ_Haloseil_Links aus den globals_instances.php eingetragen werden - hier jedoch ohne die Endung ‚_ID‘.

Hinweis: jede Instanz die geswappt werden soll muss eine definierte Statusvariable haben - ansonsten weiss das Swap-Skript nicht den aktuellen Status der Instanz und kann somit auch nicht entscheiden ob ein- oder ausgeschaltet werden soll.

Gruss,
Olli

hallo und danke !

die sachen muss ich mir als programmier-laie mal ganz in ruhe ansehen.

danke, frank

der letzte Beitrag zu diesem Thema ist zwar schon ein Weilchen her, aber weils mich als Neueinsteiger auch interessiert hat und ich nur diesen Thread gefunden habe:

ich habs so gelöst:

  • zusätzlichen Script angelegt (Licht1_TOGGLE)
  • anstelle des True/False einfach die Invertierte Statusvariable eingesetzt

<? FS20_SwitchMode(32987, !GetValueBoolean(„Licht1.Status“)); ?>

das wars auch schon;
Im Button vom Designer natürlich beim event „click“ auf den neuen Script verweisen …

Gerhard