Zentrale Ablage der IDs, wie und warum?

Hi,

ich weiß, es gibt schon den ein oder anderen Thread dazu, muss aber noch mal bisschen spezifischer nachhaken. Ich würde gerne damit anfangen, meine IDs Zentral in einem Script oder was auch immer abzulegen, um bei Änderung von HW nicht zig Scripte durcharbeiten zu müssen, da ich A: schon viel dazu gelesen habe, es B: schon öfters empfohlen wurde und C: die Idee gar nicht dumm ist :smiley:

Über die Suche gestaltet es sich nicht ganz so einfach mit den den Suchbegriffen „ObjektID“, „Variablen“, „Zentral“ … etc.

Als einfachste Variante gibt es wohl die Möglichkeit per globales Script welches per include überall eingebunden wird ala:


<?
$EG_Flur_Lichtaktor = 12345;
$1OG_Steckdose = 67890;
?>

Das raff sogar ich, aber ist das wirklich die einfachste Variante oder haben wir hier irgendwo einen Nachteil den ich noch nicht gefunden habe? Wie macht Ihr es? Wie habt ihr die Variablen angelegt? Ich hab mir da schon eine Namensgebung ausgedacht, aber beim Anlegen der ersten Variablen, hab ich gemerkt dass die dann ganz schön lang werden (z.B. $eg_flur_eltako_licht).

Möchte einfach verhindern, dass mir nach 3 Wochen Variablen anlegen irgendein Nachteil auffällt :smiley:

Danke vorab!

Abend Pascal!

Also ich habe keine Zentrale stelle, wo ich Variablen definiere. Ich mache das, wenn überhaupt, nur „pro Projekt“. Also für meine AktorSteuerung gibt es eine Config und da trage ich alles ein. Aber wenn ich jetzt was an der HeizungsSteuerung mache, dann werden die Variablen dort wieder extra verwendet.

Nur Funktionen, die sind bei mir meisten zentral abgelegt und über „include“ hole ich mir das dann in Skripte, wo ich es benötige.

Ich denke, dass es wenig Sinn macht, ALLE Variablen zentral in ein Skript zu legen… Lieber pro Skript/Projekt definieren und gut ist es :slight_smile:

Grüße,
Chris

Hi Chris,
nee … alle … um Gotteswillen :smiley:

Ich meine Tatsächlich nur die gebräuchlichsten, wie z.B. die Lichtaktoren etc. Das „Projekt“ entstand jetzt doch früher als geplant, durch einen Austausch eines Eltako. Ich hab sicher nicht das größte IPS, aber der Aktor ist jetzt doch in einigen Scripten verbaut. Jetzt hab ich halt neben dem Nachteil eines UP Aktors auch wieder zu spüren bekommen, was es heißt eine ObjektID in allen Scripten auszutauschen. Da wäre es halt doch einfacher, ich gehe in mein „global.ips.php“ … trage hinter $WohnzimmerEltako=12345 die neue ID ein und gut ist.

… deine Idee in allen Ehren, aber du weißt schon das es ein Scriptübergreifendes „Suchen&Ersetzen“ gibt ?
Tausch einer ID in allen Scripten geht damit schneller erledigt als du dein zentrales Script überhaupt erstmal gefunden hast.

Ein für mich gravierender Nachteil wäre da sich die Namenssytax aller Objekte immer im Kopf haben und diese „zu Fuß“ eintippen muß. CTRL-O hilft dir da nicht mehr.

gruß
bb

Ich verwende dazu meine „AktorSteuerung“. Habe ich auch hier im Forum veröffentlicht. Etwas komplexer das Projekt und Eltako ist da nicht drin, könntest du dir aber selbst nachpflegen mit etwas Aufwand…je nachdem wie gut du in PHP bist :slight_smile:

Und wenn sich sonst bei den IDs was ändern sollte, dann einfach die entsprechenden Skripte ändern durch Ersetzen oder Manuell…so oft passiert das wohl nicht :slight_smile:

Grüße,
Chris

Diese Antwort verdient 100 Punkte :slight_smile:

Und es nützt einem auch nichts bei den ganzen Links oder Ereignissen welche an so einem Objekt/Variable (etc…) hängen können. Die musst du so oder so zu Fuß bearbeiten.
Das ist vermutlich viel mehr Arbeit als einmal schnell ein globales Suchen & Ersetzen.

Ich würde es einfach aufgrund des Nutzen / Aufwand-faktor nicht umsetzen.

Kenne nun auch Eltako nicht… kannst du nicht der ‚alten‘ IPS-Instanz beibringen mit der neuen/ersetzten HW zu sprechen.
Dann musst du ja garnix ändern.

Michael

Bei mir steht in allen Skripten möglichst weit vorne folgendes Statement:

include_once "ObjIDsIPS.ind.inc.php";                   // 57516 /*[Skripte\Konfiguration\ID-Definitionen\ObjIDsIPS]*/

ind = Individuell (d.h. unterschiedlich je nach System auf PC, Raspi, Banana…)
inc = ist ein Include
php = enthält PHP

Alle Betriebsskripte haben gleichen Inhalt, egal auf welchem System sie laufen.

Nur das Skript „ObjIDsIPS.ind.inc.php“ ist individuell angepaßt.
Außerdem stehen da functions, die ich immer wieder brauche, aber nicht in IPS implementiert sind .
Hier ein Auszug:

<?
  define ("PCname",'Svr1' );  // Name des PCs, auf dem dieses File läuft
/*
 * File mit IDs, die für den Betrieb von IPS notwendig sind.
*
 * @file          ObjIDsIPS.ind.inc.php
 
* Remark:  OS- und PC abhängig (siehe PCname)
 *
 */

...

/*[Melder\Fenster und Türen]*/
  define ("HTML_FuT",                 22329 /*[Melder\Fenster und Türen\Status]*/ );
  define ("Mon_FuT",                  21646 /*[Melder\Fenster und Türen\FuT-Monitor]*/ );
  define ("Skript_FuT",               38874 /*[Melder\Fenster und Türen\FuT-Ereignis]*/ );
  define ("Daten_FuT",                56806 /*[Melder\Fenster und Türen\FuT-Ereignis\Zeiten]*/ );

/*[Melder\Rauch]*/
  define ("HTML_Rauch",               25719 /*[Melder\Rauch\Status]*/ );
  define ("Mon_Rauch",                25473 /*[Melder\Rauch\Monitor]*/);
  define ("Skript_Rauch",             37980 /*[Melder\Rauch\Ereignis]*/);
  define ("Daten_Rauch",              54630 /*[Melder\Rauch\Ereignis\Zeiten]*/);

/*[Melder\Bewegung]*/
  define ("HTML_Bew",                 15297 /*[Melder\Bewegung\Status]*/ );
  define ("Mon_Bew",                  37622 /*[Melder\Bewegung\Bew-Monitor]*/ );
  define ("Skript_Bew",               30720 /*[Melder\Bewegung\Bew-Ereignis]*/ );
  define ("Daten_Bew",                10716 /*[Melder\Bewegung\Bew-Ereignis\Zeiten]*/ );
...

//---- Funktionen
function SetIPSsem ($Sem, $Repeat = 100) {
    global $_IPS;
//    settype ($Sem, "string");
    $i = 10;
    do {
        $i ++;   // nothing
        if ($i > $Repeat)
            die (IPS_GetScriptFile ($_IPS['SELF']) . ': Time-Out von Semaphore ' . $Sem . " (" . IPS_GetLocation ($Sem) . ")");
    } while (IPS_SemaphoreEnter ($Sem, $i) != true);
}

function unSetIPSsem ($Sem) {
//    settype ($Sem, "string");
    if (IPS_SemaphoreEnter ($Sem, 1)) {
        IPS_SemaphoreLeave ($Sem);
        return;
    }
    IPS_SemaphoreLeave ($Sem);
}

function GetIPSsem ($Sem) {
//    settype ($Sem, "string");
    if (IPS_SemaphoreEnter ($Sem, 1)) {
        IPS_SemaphoreLeave ($Sem);
        return false;
    } else {
        return true;
    }
}

...

?>

Die auskommentierten Zeilen in den functions sind übrigens der IPS-Entwicklung für den Raspi geschuldet.

Viele Grüsse
Harald

PS: Die PEARL-Programmierer haben übrigens folgendes Motto: „There is more than one way!“

[QUOTE=T30;264211]

<?

...

/*[Melder\Fenster und Türen]*/
  define ("HTML_FuT",                 22329 /*[Melder\Fenster und Türen\Status]*/ );
  define ("Mon_FuT",                  21646 /*[Melder\Fenster und Türen\FuT-Monitor]*/ );
  define ("Skript_FuT",               38874 /*[Melder\Fenster und Türen\FuT-Ereignis]*/ );
  define ("Daten_FuT",                56806 /*[Melder\Fenster und Türen\FuT-Ereignis\Zeiten]*/ );
---
?>

[/QUOTE=T30;264211]

… was um alles in der Welt ist eine Daten_FUT ? :eek:
Ich mein mich dunkel zu erinnern das damals zu pubertären Zeiten das Fxx-Wort eien ganz besondere Bedeutung hatte. Vorwiegend auf Klotüren in Verbindung mit ordinären Zeichnungen zu finden. :rolleyes:

duck und weg
bb

FuT = Fenster und Türen :confused:

Moin allerseits,

danke für die rege Beteiligung an der Diskussion :slight_smile:

wahrscheinlich habt Ihr alle recht und es macht gar keinen Sinn (deswegen finde ich auch nicht so viel dazu im Forum :D). Aber genau deswegen wollte ich das mal in der Runde diskutiert haben. Der Weg mit „Suchen&Ersetzen“ ist mir in der Tat bekannt. Vermutlich kann ich auch die Instanz einfach mit dem neuen Aktor anlernen und die ID bleibt, hab ich ehrlich gesagt noch nicht getestet. Blind vom Vorschlag und einigen Threads die ich dazu aufgeschnappt habe, hatte ich nicht wirklich weiter gedacht.

@Chris: deine AktorSteuerung ist mir auch schon über den Weg gelaufen, erschien mir aber mit Kanonen auf Spatzen geschossen für mein Vorhaben.

Soso … STRG+O … man lernt nie aus. Jetzt benutze ich das Teil schon fast 4 Jahre und ich mach immer noch Rechtsklick>ObjektID kopieren>STRG+V

Ja, die AktorSteuerung ist erstmal recht groß und mächtig. Aber einfach genial! Ich setze sie natürlich selbst ein und auch noch bei einem Kumpel von mir. Das Ding hat sooo viele Vorteile! Gerade im Bezug auf Beleuchtung mit WebFront-Steuerung und manueller Bedienung über Taster… Leider wurde das bisher hier im Forum nicht erkannt :smiley: Oder die Leute scheuen den Aufwand… Aber es ist wirklich genial und einmal eingerichtet hat es einen riesen Mehrwert :slight_smile:

Bzgl. Tastenkombinationen, da gibt es hier eine nette Liste, einfach mal ausprobieren. Sind doch sehr praktisch und ich nutze viele davon sehr oft >> Tastenkombinationen — IP-Symcon :: Automatisierungssoftware

Grüße,
Chris

Ja, werde es mir mal zu gemüte führen. War beim Drüberlesen schon ein bisschen angetan :wink:

Die Liste kenn ich, aber man schaut meistens nur rein, wenn man was spezielles sucht :smiley: Es gab mal jemand, der hat den Begriff „Denkrille“ in den raum geworfen. Genau auf eine solche Denkrille schiebe ich das mal :rolleyes:

Ich bin es gewohnt Ideen auszudiskutieren, in der IT Welt ist es leider immer so, man sitzt 2 Stunden vor einem Problem, bis dir ein Kollege über die Schulter schaut und sagt: „setzt doch mal das Häkchen da!“ und schwupps geht wieder alles. Der Wald … die Bäume … und die STRG+Os auf dieser Welt, machen es nicht einfacher.

Moin…
hier mal (m)eine andere Lösung.
Ich arbeite mit Links und hole mir im Skript die ID des verlinkten Objektes ab.

Beispiel:
Ich habe ein Skript in dem ich vier Variablen abfragen möchte.
Diese sind irgendwo in meiner Baum-Struktur.
Ich lege mir zu den 4 Variablen unter dem Skript Links an.
Sollte sich jetzt eine der vier Variablen ändern, muss ich nur den Link anpassen.
Sollte ich eine verlinkte Variable gelöscht haben, würde mir in der Konsole angezeigt werden, das der Link nicht mehr existiert.
Ist für mich eine saubere Lösung.
Ich habe allerdings auch keine sehr komplexen Skripte!
Gruß,
Peter