Beispielscript gesucht - mit Variablen Neuanlage

Hallo,

bin auf der Suche nach einem beliebigen Beispiel Script. Es soll beim ersten Aufruf alle fehlenden oder alle benötigten Variablen anlegen und die erzeugten IDs im eigenen Script nutzen.

Für ein Bewässerungssystem das immer wieder Verändert wird möchte ich für jeden neuen Strang in einer neue Kategorie dieses Script ausführen und eben zu Beginn auch automatisch die Variablen anlegen lassen.

Wie kann ich also eine Variable automatisch erstellen und deren ID damm im Script ab verschiedenen stellen nutzen.

Herzlichen Dank
Stromer

Moin,
dieses Beispiel legt Variablen unterhalb des aufrufenden Scripts auf:

$Parent = IPS_GetParent($_IPS['SELF'];
$ID = @IPS_GetObjectIDByName("Name", $Parent);
 if ($ID == false){
        $ID = IPS_CreateVariable(3);  // Stringvariable anlegen
        IPS_SetPOsition($ID, 10); // Position setzen
        IPS_SetName($ID, "Name"); // Variable benennen
        IPS_SetParent($ID, $Parent); // Kategorie einsortieren unter dem Objekt
}

Ralf

Hallo Ralf,

vielen Dank für deine Anregung. Wenn ich das so direkt laufen lasse gibt es gleich in der ersten Zeile den folgenden Fehler: Parse error: syntax error, unexpected token „;“, expecting „)“ in C:\ProgramData\Symcon\scripts\24475.ips.php on line 3

Gebe ich die übergeordnete Kategorie mit, läuft es:

//$Parent = IPS_GetParent($_IPS['SELF'];

$Parent = "19306";  // Einzusortierende Kategorie direkt mitgeben

$ID = @IPS_GetObjectIDByName("Name", $Parent);
 if ($ID == false){
        $ID = IPS_CreateVariable(3);  // Stringvariable anlegen
        IPS_SetPOsition($ID, 10); // Position setzen
        IPS_SetName($ID, "Name"); // Variable benennen
        IPS_SetParent($ID, $Parent); // Kategorie einsortieren unter dem Objekt
};

Hast du vielleicht noch eine Zeile für die Profilzuweisung und das Einschalten des Logging?

Gibt es sonst noch was, das zu beachten ist?

Vielen Dank, Stromer

Moin Stromer,
ich hatte am Ende von $Parent ) vergessen degwegen ging es nicht.

IPS_SetVariableCustomProfile($ID"~Switch"); setzt das Profile.

AC_SetLoggingStatus(39147 /[Archive]/, 53716 /[TestVariable]/, true);

btw. Symcon hat eine schöne Zusammenstellung aller möglichen Befehle

Ralf

Hallo Ralf,

vielen Dank für deine Mühe. Ich kenne die Befehlsreferenz gut aber mir fehlen Beispiele, die die Zusammenhänge der verschiedenen Funktionen beschreiben. Solche Schnipsel sollten ein einer erweiterten Befehlsreferenz zu finden sein.

Du warst eine große Hilfe!

Anbei für alle, die Variablen im Script anlegen möchten, eine funktionsfähige Variante:

<?php

// Neue Variable anlegen ToDo
// Name vergeben --> Typ festlegen --> passendes Profil hinzufügen --> ID vom eigenen Archive eingeben

$NewVariable = "VariablenNameBeispiel";
$Parent = IPS_GetParent($_IPS['SELF']);
$ID = @IPS_GetObjectIDByName($NewVariable, $Parent);
 if ($ID == false){
        $ID = IPS_CreateVariable(2);                                  // 0 Boolean, 1 Integer, 2	Float, 3 String
        IPS_SetPosition($ID, 10);                                     // Position setzen
        IPS_SetName($ID, $NewVariable);                               // Variable benennen
        IPS_SetParent($ID, $Parent);                                  // Kategorie einsortieren unter dem Objekt
        IPS_SetVariableCustomProfile($ID,"~Temperature");             // setzt das Profile
        AC_SetLoggingStatus(59811, $ID, true);        // Logging einschalten
}

SetValue($ID,10);                                                     // Temperatur Startwert auf 10 Grad setzen

Ich glaube das liegt auch daran, dass heute eher Module installiert werden, und nicht wie früher viele Scripte im Forum ausgetauscht werden.

Bei vielen Scripten aus dem Forum findet man z.b. eine Funktion wie GetOrCreateVariable.
Einfach danach mal suchen und es kommt bestimmt fast das gleiche Ergebnis raus, wie bei deinem Schnippsel.
Michael

PS: Habe das Thema mal zu Skripte, PHP, SQL (Fragen) verschoben.

Ich möchte gerne wissen was in meinem System konkret passiert und ich möchte bei Fehlern handlungsfähig bleiben. Und ich möchte auch nach einem Jahr Inaktivität mit IPS wieder schnell reinkommen können.

Das wird mit steigender Komplexität immer schwieriger. Und IPS ist nicht mein Hobby aber ich mache es immer wieder gern.

Danke Euch allen für die Hilfestellungen, so macht das Spass

Hallo, doch noch eine Frage. Habe unter mein funktionierendes kleines Script ein zyklisches Ereignis gehängt das getriggert wird aber nicht das Script ausführt. Wenn ich das Script direkt ausführe läuft alles, aber das Ereignis aktualisiert nur die Zeit im Objektbaum und das wars dann.

Bin etwas erstaunt, da ich auf die Weise viele Scripte starte und nur hier nichts passiert.

Wo könnte ich suchen?

Hi,
ich glaube darauf falle ich auch immer wieder rein.

Beim Event gibt es jetzt zwei ähnliche Aktionen

  1. Führe Automation aus fürhrt das gewählte Script aus.
  2. Führe PHP Code aus das führt ein kleines Script aus das man hier gleich eingeben muss.

Ich glaube 2 ist Standard.

Ralf

Ich vermute @HarmonyFan hat es schon passend beschrieben, du musst wahrscheinlich noch die Aktion „Führe Automation“ auswählen. Übrigens ist „Führe PHP Code aus“ standardmäßig ganz hinten unter dem Reiter „Experte“ versteckt und „Führe Automation“ direkt bei vorgeschlagenen Aktionen aufgelistet. Der PHP-Code kann aber natürlich bei „Zuletzt verwendet“ natürlich oben mit dabei sein, wenn du es genutzt hast.

Hallo Ihr beiden, vielen Dank. Habt den Blick auf die richtige Stelle geleitet.