Toggle Button will Script nicht ausführen

Hi Leute mit Hilfe von flobo_ aus dem IRC Channel habe ich schon so einiges hinbekommen, aber irgendwie komme ich nun nicht weiter.

Ich habe eine Variable angelegt (Integer) mit eigenem Profil (Siehe Screenshots).

Dazu habe ich als action Script das nachfolgende Script angehangen:


<?php

require_once('55825.ips.php');
require_once('49063.ips.php');

use Tinkerforge\IPConnection;
use Tinkerforge\BrickletRemoteSwitch;

const HOST = 'tinkerforge02a000.nbt-consulting.local';
const PORT = 4223;
const UID = 'r6x'; // Change to your UID

$ipcon = new IPConnection(); // Create IP connection
$rs = new BrickletRemoteSwitch(UID, $ipcon); // Create device object

$ipcon->connect(HOST, PORT); // Connect to brickd
// Don't use device before ipcon is connected

// Switch on a type A socket with house code 17 and receiver code 1.
// House code 17 is 10001 in binary (least-significant bit first)
// and means that the DIP switches 1 and 5 are on and 2-4 are off.
// Receiver code 1 is 10000 in binary (least-significant bit first)
// and means that the DIP switch A is on and B-E are off.


if($_IPS["SENDER"] == "WebFront")
{
	 SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);
	 switch($_IPS["VALUE"])
    {
        case 0:
        $rs->switchSocketA(17, 1, BrickletRemoteSwitch::SWITCH_TO_OFF);
        break;
        case 1:
        $rs->switchSocketA(17, 1, BrickletRemoteSwitch::SWITCH_TO_ON);
        break;
    }
}



fgetc(fopen('php://stdin', 'r'));
$ipcon->disconnect();

?>

Wenn ich das nun im WF schalte, wird die Variable auch sauber geändert, nur der eigentliche Schaltbefehl (in den CASE Anweisungen) wird nicht ausgeführt.

Der reine Tinkerforge Teil funktioniert. ich habe ein „ein“ und ein „aus“ script in IPS getestet und es wird sauber geschaltet.

Hat jemand eine Idee, was ich hier falsch mache?

Danke

Andre

Screen Shot 2015-12-11 at 15.52.10.png

Manchmal lässt sich schwer nachvollziehen was ein script macht wenn es im Editor mit den falschen $_IPS Variablen startet.

Teste doch mal mit ner zweiten Bool-Variable. Die kannst du ja im Objektbaum beobachten


   if($_IPS['SENDER'] == 'WebFront')
   {
          SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
          if ($_IPS["VALUE"] == true)
            setValue(38797  /*[OPC Bool Test]*/, true);  // switchSocketA(17, 1, BrickletRemoteSwitch::SWITCH_TO_ON); 
        else
            setValue(38797  /*[OPC Bool Test]*/, false);  // switchSocketA(17, 1, BrickletRemoteSwitch::SWITCH_TO_OFF); 
    }

Abend!

Ich baue bei so etwas gerne ein „IPS_LogMessage“ ein. Dann bekommt man leicht mit, bis wo das Skript kommt und wo es schief läuft.

Beispiel mit einem Teil aus deinem Skript:

if($_IPS["SENDER"] == "WebFront") 
{ 
     SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]); 
     IPS_LogMessage("TEST111", $_IPS['VALUE']);  // Schreibt IPS VALUE ins Meldungen Fenster
     switch($_IPS["VALUE"]) 
    { 
        case 0: 
        $rs->switchSocketA(17, 1, BrickletRemoteSwitch::SWITCH_TO_OFF);  
        IPS_LogMessage("TEST111", "CASE 0");  // Schreibt CASE 0 ins Meldungen Fenster
        break; 
        case 1: 
        $rs->switchSocketA(17, 1, BrickletRemoteSwitch::SWITCH_TO_ON); 
        IPS_LogMessage("TEST111", "CASE 1");  // Schreibt CASE 1 ins Meldungen Fenster
        break; 
    } 
} 

Grüße,
Chris

Danke an alle

es hätte genau so funktioniert, wie gedacht, aber wenn man selbst zu blöd ist …

bei dem ganzen Testen hatte ich den House Code aus einem Beispiel übernommen und danach nicht mehr auf meinen geändert.

Sorry für die ganze Verwirrung.

Funktioniert prima.

Joa, das ist dann wohl das Problem Nr. 1 bei Skripten & Co :smiley: Ich spreche da aus Erfahrung :smiley:

Grüße,
Chris