Skriptbefehl in Visualisierung

Hallo, ich hab mir ein Skript geschrieben, das eine S7 Variable steuert.
S7 write bit auf true… dann Sleep für 1 sec und S7 write bit false.

Das ist für mich der Taster für die Garage.

Dieser wird auch als Button schön in der neuen Viso angezeigt.

Gibt es irgendwie die Möglichkeit, dass ich diesen Button über abfrage einer weiteren variable, die Farbe ändern kann.

Bsp. wenn Garage offen sollte dieser Button Rot sein.

ich hoffe ich hab das verständlich ausgedrückt.

Hi,
wenn Du die Variable bearbeitest kannst Du ihr ein Profil zuordnen und da kannst Du dann angeben das „Status offen“ rot und „Status zu“ grün sein soll.

Ralf

Denke er meint den immer grünen Skript-Button, bei dem er die Farbe abhängig vom Status ändern möchte.
Oder gibt es einen Weg wie man in der gleichen Kachel noch den Status anzeigen könnte, zB mit Einfärben der Kachel selbst?

Cheers Seppm

Hi,
ich habe es bei mir mit einer boolschen Variable gelöst. Der Variablen habe ich das Profile ~Switch und mein eigentliches Script als Aktionsscript eingetragen. Von der Variablen ein Link auf die Visu und dann wird es schön grün und durchsichtig dargestellt je nachdem ob Garage auf oder zu ist. Drücke ich in der Visu den Button wird mein Script aufgerufen und je nach Status wird Garage geöffnet oder geschlossen.

Ralf

2 „Gefällt mir“

Hallo Ralf, hört sich gut an…

Kannst du mir das ein bisschen genauer erklären. Wie bekomme ich die Variable dann als Taster auf der Visu?

Moin Golly,
Du hast ja ein Script das macht was Du willst. In der Console klicke mit der rechten Maustaste auf dein Script, wähle Objekt hinzufügen und Variable aus. Jetzt gibst Du der Variablen einen Namen, meineswegen Tor Status, soll Boolean sein. In Profil- und Aktionseinstellungen wählst Du als Profil erstmal ~switch und bei eigene Aktion wählst Du dein Script aus.

Wenn Du alles richtig gemacht hast kannst Du es testen mit rechter Maustaste auf die Variable, Befehl testen und dann änderst Du den Wert, OK und zum Schluss schalten wählen. Jetzt sollte dein Script ausgeführt werden und was machen.

Diese Variable verlinkst Du mit deiner Visu und Du hast einen Schalter der seine Zustand ändert.

Zum Schluss musst Du ein bißchen fine tunen so das der Zustand zum Tor passt. Wenn Du die Variable änderst aber nicht schalten sondern simulieren wählst wird die Variable geändert ohne das dein Script aufgerufen wird.

Viel Spaß Ralf

Hallo Ralf,
Vielen Dank für die Hilfe.

Soweit funktioniert das schon Taster lässt sich bedienen und löst das Skript aus.

Was ich aber nicht hinbekomme, ist dass mir der Taster selbst dann den Status einer anderen Variablen anzeigt.

Ich habe eine Variable, die mir anzeigt, dass das Tor geöffnet ist. Unabhängig von dem Skript.

So würde ich mir das vorstellen:

Garage zu:
image

Garage offen
image

Vielen Dank für deine Geduld!!

Hi,
so ist es bei mir auch. Ich habe dafür ein Ereignis ans Script gehängt so das es auch Änderungen am wirklichen Status des Gerätes mitbekommt. In diesem Fall kopiere ich den Status in meine Variable rein.

Ereignis geht auch mit rechte Maustaste auf Script, Objekt hinzufügen, Ereignis, ausgelöst und dann auf deinen Status zeigen lassen.

Reagieren kannst Du darauf mit:

if (isset($_IPS['EVENT']) && ($_IPS['EVENT'] == <ID von deinem Ereignis>)){
    $status = GetValue(<ID Status des Gerätes>);
    if ($status == <Wert von geschlossen>) SetValue(<ID von der Schaltervariablen>, true);
    else SetValue(<ID von der Schaltervariablen>, false);
   return;
}

Das sollte am Besten am Anfang von Script stehen.

Ralf

Hab jetzt mal so versucht:

Die Test Variable leuchtet jetzt gelb, wenn ich einmal drauf gedrückt hab. Leuchtet dann sofort und bei nochmaligen drücken ist es wieder aus.
Glaub ich hab die Variablen falsch zugeordnet.

SetValue($_IPS[‚VARIABLE‘], $_IPS[‚VALUE‘]);

if (isset($_IPS[‚EVENT‘]) && ($_IPS[‚EVENT‘] == 49859)){
$status = GetValue(49034);
if ($status == false) SetValue(49859, true);
else SetValue(49859, false);
return;
}

S7_WriteBit(39046, true); //Gerät einschalten
sleep(1);

S7_WriteBit(39046, false); //Gerät einschalten

Die Variable 49034 gibt mir den Status vom Tor " true " ist offen.

Hi,
eigentlich ist die erste Zeile überflüssig. Die if-Konstruktion soll dafür sorgen das der Status der eigentlichen Variablen in diese Dummy-Variable geschrieben wird.

Ralf

Guten Morgen Ralf,
muss mich echt entschuldigen. Ich glaub ich verstehe die Variablen Zuordnung nicht.

"<ID von deinem Ereignis "verstehe ich den „Taster“ bei mir Variable 49859
<ID Status de Gerätes> = die Variable , die mir das Signal der Garage offen/geschlossen gibt : 49034
„<ID von der Schaltervariablen“ Das verstehe ich nicht, ist das die gleiche wie der Taster 49859?

Nicht ganz , das in der if Zeile, ist das Ereignis das auf die Änderung der wirklichen Statusvariablen reagieren soll.

Ralf

Ich glaub ich bin zu dumm dafür :frowning:

ich bekomms nicht hin.

Kannst du mir das nochmal für dummies erklären.

welche Variablen muss ich anlegen?

Ich habe eine Taster Variable 49859, die ich später auf die Visu verlinke 23376 !?
Dann habe ich eine Variable, die mir den Status des Tores anzeigt ( true offen , false zu) 49034
Und ein skript 20402, dass an der Taster Variable hängt

In meinem Skript hab ich dann den Befehl an die SPS mit Write bit und der Pause dazwischen,

<?php if (isset($_IPS['EVENT']) && ($_IPS['EVENT'] == 49859)){ $status = GetValue(49034); if ($status == false) SetValue(49859, true); else SetValue(49859, false); return; } S7_WriteBit(39046, true); //Gerät einschalten sleep(1); S7_WriteBit(39046, false); //Gerät einschalten //Start writing your scripts between the brackets ?>

Ich habe versucht es einfacher und übersichtlicher zu gestalten.

<?php
$ID1 = die ID von dem richtigen Status deines Tors
$ID2 = die ID von dem falsche (Visu) Status
switch ($_IPS['SENDER']){
    case "Variable":
        IPS_LogMessage( "RBsoft" , "richtiger Status geändert" );
        SetValue($ID2, GetValue($ID1);)
        return;


    case "Execute":
    case "WebFront":
    case "Action":
    case "VoiceControl":
        IPS_LogMessage( "RBsoft" , "falscher (Visu)  Status geändert" );
        S7_WriteBit(39046, true); //Gerät einschalten
        sleep(1);
        S7_WriteBit(39046, false); //Gerät einschalten
        return;
}
?>

Jetzt kannst Du auch im IPS Logfile sehen was passiert ist. Steht da „richtiger Status geändert“ drin so wurde das Tor wirklich geöffnet oder geschlossen und der Status für die Visu sollte sich entsprechend geändert haben. Wenn das nicht im Log erscheint ist das Ereignis beim Script vielleicht noch nicht richtig und reagiert nicht auf dein Tor. Das kannst Du auch in der Console an Hand der Zeiten der Variablen und Ereignissen erkennen.

Wenn Du das Script einfach in der Console, per Variable ändern oder auch Alexa änderst sollte „falscher (Visu) Status geändert“ im Logfile stehen.

Viel Glück Ralf

Jetzt funktioniert’s :star_struck:

Vielen Dank für deine Geduld!

Gruß,
Stefan

Freut mich. Viel Spaß mit den nächsten Erfahrungen/Schritten.

Ralf

Hi,
noch ein kleiner Tip: Du kannst der virtuellen Variablen ein ICon zuweisen das erscheint dann statt des Standard-Switch Icons. Mein Garagentor hat im Schalter ein symbolisches Garagentor.

Ralf

2 „Gefällt mir“