Unterschied Execute/ScriptEvents

Nachdem ich nach ein paar Monaten Abwesenheit nun wieder etwas programmieren will scheitert es an Anfänger Problemen. Ich möchte ein PIRA abfragen und eine Sprachmeldung ausgeben. Mit Execute funktioniert es. Über ScriptEents(OnValue) wird die Variable zurück gesetzt aber es erfolgt keine Sprachausgabe (und keine Textausgabe des Print Befehls).

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : PIRA_Status_reset.ips.php
Trigger  : OnChange
Interval : 
*/

$FS20Einschaltdauer=GetValueInteger("EINGANG_FS20PIRA_K2_TIMER");
$FS20Data=GetValueInteger("EINGANG_FS20PIRA_K2_DATA");

if  ($FS20Data==26)
{
 TTS_Speak(20106, "es ist jemand an der eingangstür");
 IPS_Sleep($FS20Einschaltdauer*100);
 print "$FS20Einschaltdauer ";
 SetValueBoolean("EINGANG_FS20PIRA_K2_STATUS",false);
 print "test";
}

?>

Dazu mehrere Fragen:
Warum der Unterschied der Ausführung über Execute und ScriptEvents?
Wie kann man sowas am besten Testen? Eine Schritt für Schritt Bearbeitung wäre hilfreich.
Wo stellt man normalerweise diese Fragen? Was wieder auf die Diskussion eines Newbe Bereichs führen wird.

Alle schon im Urlaub oder nur übersehen?

Mit Execute funktioniert das obige Script. Über ScriptEents(OnValue>true<) wird die Variable zurück gesetzt aber es erfolgt keine Sprachausgabe (und keine Textausgabe des Print Befehls).

mal ne ganz blöde Frage: Was steht denn in $FS20Data fürn wert? Wenn da in dem Moment wo dein Script getriggert wird etwas anderes als 26 drin steht müsste sich das Script exakt so verhalten wie du es beschrieben hast.

Toni

Jetzt verwirrst du mich ganz.
Erstmal es steht immer 26 drin. Und wenn nicht würde auch nicht der $FS20Status nach 6 Sec auf False gesetzt werden.
Nochmal:
Bei Execute und data=26 kommt Ansage, Wartezeit, Print…, Status geht auf false, print…
Bei ScriptEvents (OnValue) und data=26 kommt keine Ansage, aber Wartezeit, kein Print…, Status geht auf false, kein print…

Hallo Heiner,

IP-Symcon ist dazu gedacht im Hintergrund zu arbeiten. Für sichtbare Ausgaben ist üblicherweise der Designer vorgesehen. Eine weitere Ausgabemöglichkeit besteht in der Verwendung der Funktion IPS_LogMessage(…), die Ausgaben in die Log-Datei macht. Siehe Doku.

Aus diesem Grunde werden die Befehle echo und print im Normalbetrieb (Triggerbetrieb) nicht abgearbeitet.

Diese Befehle funktionieren nur während der Programmentwicklung in der IP-Symcon Entwicklungsumgebung wenn das Skript mit Execute gestartet wird.

Gruß
HJH

Das mit echo und print war mir schon klar. Ich hatte nur eine Alternative bei ScriptEvents (OnValue) gesucht. Das mit IPS_LogMessage(…) ist schon eine gute Idee.
Aber mein eigentliches Hauptproblem ist immer noch nicht beantwortet:
Siehe obiges Script
Bei Execute und data=26 kommt Ansage, Wartezeit, Print…, Status geht auf false, print…
Bei ScriptEvents (OnValue) und data=26 kommt keine Ansage, aber Wartezeit, kein Print…, Status geht auf false, kein print…

Also ich denke da ja in beiden Fällen die If Bedingung erfüllt ist, da ja Wartezeit und Variablenänderung gegeben sind, ist der Fehler eher bei etwas anderem als dem Script zu suchen.

  • Lautstärke bei Scriptausführung auf 0 ?
  • mal die TTS durch ein DXmedia wav File ersetzen…

Mal anderst gefragt, was machst Du denn OnValue oder OnChange. Da muss ein Script dahinter sein, am besten auch nur eine Art auswählen.

Du schreibst einmal mit OnChange und einmal mit OnValue ?

http://www.ipsymcon.de/~hjh/HelpStudio/html/IPS-Manual/webframe.html

Bestandteile von IPS/Events

Es stehen 5 Trigger-Typen zur Verfügung:
OnUpdate, wenn die Variable aktualisiert wird (auch dann, wenn sich ihr Wert sich dadurch nicht ändert)
OnChange, wenn sich der Wert der Variablen ändert
OnLimitExceed, wenn ein Grenzwert überschritten wird
OnLimitDrop, wenn ein Grenzwert unterschritten wird
OnValue, wenn ein ganz bestimmter Wert eintritt

Bei OnValue ändert sich bei dir nichts, da ja anscheindend immer 26 drinnen steht, wie soll das gehen?

Getriggert wird mit OnValue PIRA_STATUS True. Denn ich will den Text sprechen lassen und dann PIRA_STATUS zurück auf false setzen. OnChange PIRA_STATUS hatte ich vorher, aber dann wurde das Script mehrfach durchlaufen (ist ja normal).
Ferengi-Master hat es richtig erkannt. Aber muss ich bei ScriptEvents Aufruf vorher die Lautstärke einstellen aber bei Execute Aufruf nicht?

Dass die Leute so zurückhaltend reagieren zeigt es schon. Nein, musst du normal nicht. Wenn du uns wirklich nichts verschwiegen hast, bzw du nichts übersehen hast, sollte es eigentlich so gehen. :confused:

Du kannst nur versuchen das script stück für stück zu zerlegen und herauszufinden was genau da schief läuft. Nimm doch mal die if Abfrage heraus und schau ob sich das Verhalten des Scriptes dadurch ändert. Ausserdem solltest du mal einen else-Teil einbauen um zu sehen ob auch wirklich, wirklich und in Echt die 26 kommt. Du kannst alternativ auch eine Zeile wie „$FS20Data=26;“ mal vor die if-abfrage klatschen um dir dessen wirklich sicher zu werden.

Dann kannst du nochmal die triggernde Variable von Hand auf den entsprechenden Wert setzen. Dadurch erreichst du dass du von Hand triggern kannst, aber eben nicht execute dafür zu benutzen.

Toni

Ich denke vieleicht wird beim Piri Trigger noch ein weiteres Script getriggert, was die TTS Lautstärke verändert? Nur so eine Idee…

Das Problem hat sich (wieder mal) von selbst gelöst. Ich habe das Script gelöscht und neu geschrieben. Jetzt funktioniert es. War nicht das erste mal. (damit keine Fragen kommen: Ich hatte obiges Script per Copy/Paste übertragen).

:smiley: Warum auch mit anderen Dingen seine Zeit verbringen.:smiley:
Es gibt doch nichts schöneres als Fehlersuche.