+ Antworten
Ergebnis 1 bis 5 von 5
  1. #1
    Registriert seit
    Jun 2008
    Beiträge
    22

    Question Gerätekategorie im Script ermitteln

    Hallo,

    sorry, ich muss für meine Frage etwas ausholen:

    ich habe mir für IPS-v1 ein Vista-Sidebar-Widget gebaut. Dieses holt via Ajax regelmäßig aus dem IPS eine Geräteliste mit Stati und Schaltmöglichkeiten in HTML-Form. Das ganze erfüllt eine ähnliche Funktion wie der Quickswitch, nur über die Sidebar bequemer zu bedienen.

    Natürlich soll sich die Geräteliste im Widget automatisch auf Grundlage der IPS-Konfiguration erzeugen.

    Im alten IPS lag dazu ein Script, dass beim ersten Aufruf über die Instanzen iteriert (IPS_GetInstanceIDs) und über 'GetModuleInstance' das Stück XML aus der settings.xml abholt. Das habe ich mit dem PHP-XML-Parser zerlegt, in PHP-Objekte für meine unterschiedlichen FS20-Geräte umgewandelt und in der HTTP-Session abgelegt. Zur Unterscheidung der Gerätetypen habe ich den MODULENAME ausgewertet ("FS20TX", "FHT", ...).

    So weit - so hässlich :-(

    Jetzt versuche ich die IPS-V2-Migration, wo es den "GetModuleInstance" nicht mehr gibt. Jetzt iteriere ich also über die 'IPS_GetObjectList' und hole mir mit 'IPS_GetObject' die Instanzen mit Typ 1=Instanz. (Wenn ich die Doku richtig verstehe, muss ich dann durch die IPS_GetChildren-Liste mit Objekt-Typ 2 und habe die Variable-IDs für die Weiterverarbeitung ...)

    Das ist schon wesentlich schöner :-)

    Die Schleife liefert also alle Instanzen, obwohl nur bestimmte Gerätekategorien im Widget erscheinen sollen.

    Bislang war der MODULENAME statisch, jetzt kann ich bei Einrichung einer Instanz einen Namen vergeben. Gebe ich also statt dem Default 'FHT80b' 'Heizung' ein, kann ich im Script nicht mehr erkennen, was es für eine Gerätekategorie ist.

    Wie kann ich also die Gerätegattung rausfinden, auch wenn der Name keiner Konvention entspricht ?

    (Danke übrigens für das neue Bemerkungsfeld pro Instanz, in dem ich jetzt eine schöne Beschreibung abspeichern kann. Leider kann ich das Feld nur bei der Anlage der Instanz befüllen, im Änderungsmodus wurde das Feld dafür vergessen und sollte noch aufgenommen werden !!!)

    Viele Grüße
    mts75

  2. #2
    Registriert seit
    Oct 2008
    Ort
    Westerwald
    Beiträge
    37

    Hi Markus,

    dein Post hat mich auf eine Idee gebracht bzw. auf die passenden Ideen gebracht, da ich gerade für einen anderen Zweck eine ähnliche Funktionalität brauchte. Habe eigentlich nur V2 im Einsatz, da ich erst seit 2 Tagen stolzer IPS-Besitzer bin
    Meine PHP-Kenntnisse sind auch nicht mehr auf dem neusten Stand, daher das Skript wohl eher nach dem Motto: Nicht schön, aber selten.
    Funktioniert bei mir in V2 soweit problemlos.

    EDIT: Bitte keine Scripte posten, die direkt auf die XML zugreifen oder gar manipulieren.
    Geändert von paresy (11.10.08 um 00:10 Uhr)
    mfg
    Tobias

  3. #3
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    24,583

    http://www.ipsymcon.de/forum/f18/get...instance-5721/

    Suchen hilft

    @Tobias: Auf die XML zugreifen scheint auf den ersten Blick verlockend.

    Früher oder später, wenn IPS und dein Skript gleichzeitig darauf zugreifen, kann es Interessante Fehler geben. Ich würde dringend Empfehlen, die in V2 vorhandenen Befehle zu nutzen, die eigentlich alles anbieten, was auch in der XML steht.

    Ich habe deinen Code-Schnippsel mal entfernt.


    Btw: Die Doku für die restlichen IPS_* Befehle wird Mitte nächster Woche fertig sein

    paresy
    Geändert von paresy (11.10.08 um 00:19 Uhr)

  4. #4
    Registriert seit
    Oct 2008
    Ort
    Westerwald
    Beiträge
    37

    Habe die Forensuche ausgiebig genutzt und auch vorhin mehrmals alle mir möglichen Begriffe benutzt, allerdings kam der Thread dabei nicht zum Vorschein...

    Zitat Zitat von paresy Beitrag anzeigen
    @Tobias: Auf die XML zugreifen scheint auf den ersten Blick verlockend.

    Früher oder später, wenn IPS und dein Skript gleichzeitig darauf zugreifen, kann es Interessante Fehler geben. Ich würde dringend Empfehlen, die in V2 vorhandenen Befehle zu nutzen, die eigentlich alles anbieten, was auch in der XML steht.
    Die Wahrscheinlichkeit dürfte wohl eher gering sein, aber man muss ja nichts provozieren wenn es auch anders geht. Vielleicht wäre da noch ein dicker Hinweis irgendwo angebracht, das niemand wieder auf die selbe glorreiche Idee kommt und die Settings zum einlesen von Daten benutzt.
    Zitat Zitat von paresy Beitrag anzeigen
    Ich habe deinen Code-Schnippsel mal entfernt.
    PHP-Code:
    <?
      $cModulID_FHT 
    "{A89F8DFA-A439-4BF1-B7CB-43D047208DDD}";

         foreach (
    IPS_GetInstancesByModuleID($cModulID_FHT) as $InstanzID)
         {
            
    //Alle StatusVariablen holen
            
    foreach (IPS_GetStatusVariables($InstanzID) as $StatusVar)
            {
               
    $StatusVarID $StatusVar[VariableID];
            }
         }
    ?>
    Dann hoffe ich mal das der hier jetzt absolut V2 gerecht ist und hab da auch noch ein paar Fragen die ich mit Hilfe des Forums und der Hilfe nicht wirklich eindeutig klären konnte.
    Konnte nichts in der Art IPS_GetModulByName finden, daher über den GUID-String. Der dürfte sich ja auch in den zukünftigen Versionen nicht ändern, so das der so drin bleiben kann oder?
    Hab dann etwas mit IPS_GetInstance und IPS_GetObject experementiert.
    Geh ich richtig in der Annahme das Children bei Instance jeweils nur Instances aufweisen sowie bei Object dementsprechend Objects usw.?
    Bei IPS_GetChildren bekomme ich nur: Fatal error: Call to undefined function IPS_GetChildren()
    Zitat Zitat von paresy Beitrag anzeigen
    Btw: Die Doku für die restlichen IPS_* Befehle wird Mitte nächster Woche fertig sein

    paresy
    Dann gibts für mich mehr zu lesen
    mfg
    Tobias

  5. #5
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    24,583

    Es muss IPS_GetChildrenIDs heißen. Ist ein Fehler in der Doku.

    Die GUID der Module wird sich nicht ändern. Da bist du auf der sicheren Seite. Die Namen können sich jederzeit ändern.

    Das mit den Children ist etwas anders.

    IPS_GetChildrenIDs() gibt dir immer alle Objekte (=Instanzen, Variablen....) wieder, so wie du es in der logischen Baumansicht siehst. Du musst dann anhand des Typs selber filtern, wenn du bestimmte Objekte nicht haben willst und dann die gewollten nochmal per IPS_GetInstance/IPS_GetVariable... abfragen, falls du die spezifischen Daten brauchst. (Das selbe Resultat hast du übrigens, wenn du IPS_GetObject aufrufst und dort auf die Eigentschaft ChildrenIDs zugreifst)

    IPS_GetInstance() -> Children sind nur ausgefüllt bei I/O + Splitter Instanzen und geben die unterliegeden, verbundenen Instanzen zurück. Sind also für eine Visu nicht wirklich relevant, außer man will anzeigen, welches Gerät an welchem I/O Port hängt. (Im Prinzip ist das für die pysikalische Baumansicht wichtig) Children ist das selbe Resultat wie von IPS_GetInstanceChildrenIDs.

    Grüße, paresy

Ähnliche Themen

  1. Antis FHT Script -> WAF optimiert :)
    Von Anti im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 19
    Letzter Beitrag: 08.03.08, 13:14
  2. Über 1-wire mit der Klingel ein Script starten
    Von andy-meyer im Forum 1-Wire, M-BUS
    Antworten: 8
    Letzter Beitrag: 06.02.08, 13:22
  3. [BUG gefixt 0.91] RRD Datenbank wird nicht angelegt
    Von Stefan im Forum IP-Symcon WIIPS für Version 1.0
    Antworten: 19
    Letzter Beitrag: 19.09.06, 14:54
  4. [gefixt] WIIPS Beta 2 0.70
    Von chrisu im Forum IP-Symcon WIIPS für Version 1.0
    Antworten: 16
    Letzter Beitrag: 19.01.06, 21:44
  5. Verschiedene Scripte mit else?
    Von hbraun im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 29.11.05, 22:43

Stichworte