+ Antworten
Seite 1 von 5 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 42
  1. #1
    Registriert seit
    Aug 2010
    Ort
    Österreich (Korneuburg)
    Beiträge
    4,553

    Standard IPSInstaller - einige hilfreiche Scripts zur autom. Installation

    Habe einmal meine Installations Scripts zusammengefasset und alle allgemein verwendbaren Funktionen in ein eigenes Script ausgelagert, das ich Euch zur Verfügung stellen möchte.

    Zur Zeit sind folgende Funktionen vorhanden:
    Code:
    function CreateCategoryPath($Path, $LastPosition=0, $LastIcon="")
    function CreateCategory ($Name, $Parent, $Position) 
    function CreateDummyInstance ($Name, $ParentId, $Position=0)
    function CreateInstance ($Name, $ParentId, $ModulId, $Position=0) 
    function CreateScript ($Name, $File, $Parent, $Position=0) 
    function CreateVariable ($Name, $Type, $Parent, $Position, $Profile, $Action=null) 
    function CreateLink ($Name, $Link, $Parent, $Position) 
    function CreateTimer_OnceADay ($Name, $Parent, $Hour) {
    function CreateTimer_CyclicBySeconds ($Name, $Parent, $Seconds, $Active=true) {
    function CreateTimer_CyclicByMinutes ($Name, $Parent, $Minutes, $Active=true) 
    function CreateMediaPlayer($Name, $ParentId, $Position=0) 
    function SetVariableConstant ($Name, $ID, $FileName)
    function CreateProfile_Switch ($Name, $DisplayFalse, $DisplayTrue, $Icon="") {
    function CreateProfile_Associations ($Name, $Associations, $Icon="") {
    function CreateProfile_Count ($Name, $Start=0, $Step=0, $Stop=0, $Prefix="", $Suffix="", $Icon="") 
    function get_ObjectIDByPath($Path) 
    function CreateLinkByDestination ($Name, $LinkChildId, $Parent, $Position) 
    function CreateEvent ($Name, $VariableId, $ScriptId, $TriggerType=1/*ByChange*/)
    function exists_WFCItem($WFCId, $ItemId) {
    function PrepareWFCItemData ($ItemId, $ParentId, $Title) {
    function CreateWFCItem ($WFCId, $ItemId, $ParentId, $Position, $Title, $Icon, $ClassName, $Configuration) {
    function CreateWFCItemTabPane ($WFCId, $ItemId, $ParentId, $Position, $Title, $Icon) {
    function CreateWFCItemSplitPane ($WFCId, $ItemId, $ParentId, $Position, $Title, $Icon="", $Alignment=0 /*0=horizontal, 1=vertical*/, $Ratio=50, $RatioTarget=0 /*0 or 1*/, $RatioType /*0=Percentage, 1=Pixel*/, $ShowBorder='true' /*'true' or 'false'*/) {
    function CreateWFCItemCategory ($WFCId, $ItemId, $ParentId, $Position, $Title, $Icon="", $BaseId /*ID of Category*/, $BarBottomVisible='true' /*'true' or 'false'*/, $BarColums=9, $BarSteps=5, $PercentageSlider='true' /*'true' or 'false'*/ ) {
    function CreateWFCItemExternalPage ($WFCId, $ItemId, $ParentId, $Position, $Title, $Icon="", $PageUri, $BarBottomVisible='true' /*'true' or 'false'*/) {
    function DeleteWFCItems($WFCId, $ItemId) {
    function DeleteWFCItem($WFCId, $ItemId) {
    Im Prinzip arbeiten alle nach dem gleichen Prinzip, man übergibt die Daten eines Objektes (Name, ParentId, Order, ...), die Funktions ermittelt, ob das Object bereits existiert und legt es gegebenenfalls an. In jedem Fall wird aber die ObjectId zur weiteren Verarbeitung zurückgebegen.

    Durch die Funktion SetVariableConstant ist es dann noch möglich Konstanten in Scripts nach dem anlegen von Objecten mit dem richtigen Wert zu setzen.

    Werde die Funktionalität auch in Zukunft immer wieder erweitern.

    lg
    Andreas

    [Update 2011-03-27] einige Erweiterungen, diverse neue Routinen
    [Update 2011-06-16] Anpassung an v2.4
    [Update 2011-06-19] Neue Funktion "CreateMedia"
    [Update 2011-11-02] Anpassung 2.5
    [Update 2011-12-10] Unterstützung Ident, Parameter Doku
    [Update 2012-02-10] Integration in die IPSLibrary

    Habe das Ganze mittlerweile auch im Wiki etwas zusammengefasst: /wiki/IPSInstaller
    .
    Geändert von Brownson (10.02.12 um 21:31 Uhr)

  2. #2
    Registriert seit
    Dec 2010
    Ort
    Frankfurt
    Beiträge
    26

    Standard Hilfe

    Hallo Brownson,

    ich habe mein kleine script mit diesen Funktionen erweitert das klappt auch soweit super, nur ich steh auf dem schlauch was das anlegen eines Comports und einer RegVar angeht das bekomme ich irgendwie nicht hin.

    also so: Modul anlegen

    RegVar -> Übergeordnete Instanz = z.B. Com2
    RegVar -> ZielScript zuordnen

    ggf.: noch die ComSchnittstelle anlegen

    Gruß
    Michael

  3. #3
    Registriert seit
    Aug 2010
    Ort
    Österreich (Korneuburg)
    Beiträge
    4,553

    Hallo Michael,

    das funktioniert so wie ich das mit dem MediaPlayer gemacht habe, nur mit der entsprechenden GUID (die muss ich mir selber erst raussuchen):
    PHP-Code:
    $Id CreateInstance($Name$ParentId"{2999EBBB-5D36-407E-A52B-E9142A45F19C}",$Position); 
    Für die diversen Settings (Script, übergeordnete Instanz) gibts diverse Methoden - die kann man sich mit "Befehl hinzufügen" + "Zeige all Funktionen" anzeigen lassen.

    Falls nötig kann ich Dir das am Abend mal zusammensuchen ...

    lg
    Andreas

  4. #4
    Registriert seit
    Sep 2010
    Ort
    Emmerich
    Beiträge
    761

    Hi Andreas,

    wie ruft man denn das InstalationsSkript auf?

  5. #5
    Registriert seit
    Dec 2010
    Ort
    Frankfurt
    Beiträge
    26

    ist nur ein include du kannst dann in deinen eigenen die vereinfachten funktionen vom Andreas nutzen

    <?
    include IPS_GetKernelDir().'scripts/IPSInstaller.ips.php';
    include IPS_GetKernelDir().'scripts/IPSLogger.ips.php';

    ....
    >?

  6. #6
    Registriert seit
    Dec 2010
    Ort
    Frankfurt
    Beiträge
    26

    Standard Bin ein stück weiter

    Hi Andreas,

    ich bin da nun ein Stück weiter die beide GUID hab ich mir rausgesucht..

    PHP-Code:
    // set categorie for managment and control
          
            
    IPSLogger_dbg(c_LogId,$CategoryIdControl    CreateCategory('Control'$CategoryIdHeater20));
            
    IPSLogger_dbg(c_LogId,CreateInstance(c_LogId$CategoryIdControl"{6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1}",25)); // Seriell Port anlegen
            
    IPSLogger_dbg(c_LogId,CreateInstance(c_RegID$CategoryIdControl"{F3855B3C-7CD6-47CA-97AB-E66D346C037F}",26)); // Register Variable anlegen

            //IPSLogger_dbg(c_LogId,CreateScript(c_LogId,IPS_GetKernelDir().'scripts\Heizung\Status.ips.php', $CategoryIdControl, 30)); // Auslesescript
            
    CreateScript(c_RegID,                  'status.ips.php'$CategoryIdControl10); 

  7. #7
    Registriert seit
    Aug 2010
    Ort
    Österreich (Korneuburg)
    Beiträge
    4,553

    Na ja, sehr erfolgreich bin ich heute Abend auch nicht.

    Serielles Port habe ich bei meinen Laptop leider nicht zur Auswahl und die Zuordnung der Schnittstelle zur Register Variable habe ich auch nicht geschafft. Vielleicht kann ja da noch wer helfen...

    PHP-Code:
       $ScriptId CreateScript('Status''Status.ips.php'0);
       
    $PortId   CreateSerialPort('TestPort'010);
       
    $RegVarId CreateRegisterVariable('TestVar'0$ScriptId$PortId);

       
    // ------------------------------------------------------------------------------------------------
        
    function CreateSerialPort($Name$ParentId$Position=0) {
            
    $InstanceId CreateInstance($Name$ParentId"{6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1}",$Position);
            
    COMPort_SetBaudRate($InstanceId9600);
            
    COMPort_SetStopBits($InstanceId1);
            
    COMPort_SetDataBits($InstanceId8);
            
    COMPort_SetParity($InstanceId'None');
            
    //COMPort_SetPort($InstanceId , "");
            
    $DeviceList COMPort_GetDevices($InstanceId);
            foreach (
    $DeviceList as $Device) {
               echo 
    $Device;
            }
            return 
    $InstanceId;
        }

       
    // ------------------------------------------------------------------------------------------------
        
    function CreateRegisterVariable($Name$ParentId$ScriptId$PortId$Position=0) {
            
    $InstanceId CreateInstance($Name$ParentId"{F3855B3C-7CD6-47CA-97AB-E66D346C037F}",$Position);
            
    RegVar_SetRXObjectID($InstanceId,$ScriptId);
            
    IPS_ApplyChanges($InstanceId);

            return 
    $InstanceId;
        } 
    lg
    Andreas

  8. #8
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,331

    [SNIP]
    PHP-Code:
        $comPortID = @IPS_GetInstanceIDByName("HS485 PC-Interface"0);
                if(!
    IPS_InstanceExists($comPortID))
                {
                   
    $comPortID IPS_CreateInstance("{6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1}"); // Comport anlegen
                   
    IPS_SetName($comPortID"HS485 PC-Interface");
                }
                
    COMPort_SetPort($comPortID'COM5'); // ComNummer welche dem PC-Interface zugewiesen ist!
               
    COMPort_SetBaudRate($comPortID'19200');
                
    COMPort_SetDataBits($comPortID'8');
                
    COMPort_SetStopBits($comPortID'1');
               
    COMPort_SetParity($comPortID'Even');
               
    COMPort_SetOpen($comPortIDtrue);
               
    IPS_ApplyChanges($comPortID);
           
                
    $regVarID = @IPS_GetInstanceIDByName("HS485 RegisterVariable"$parentID);
                if(!
    IPS_InstanceExists($regVarID))
                {
                    
    $regVarID IPS_CreateInstance("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}"); // Registervariable anlegen
                
    IPS_SetName($regVarID"HS485 RegisterVariable");
                
    IPS_SetParent($regVarID$CatID);
                }
                
    RegVar_SetRXObjectID($regVarID$IPS_SELF);
                
    IPS_ConnectInstance($regVarID$comPortID);
               
    IPS_ApplyChanges($regVarID); 
    [SNAP]
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  9. #9
    Registriert seit
    Dec 2010
    Ort
    Frankfurt
    Beiträge
    26

    Standard Hallo

    Danke euch zwei,

    es funktioniert soweit alles. habe die Install Lib entsprechend angepasst.

    PHP-Code:
    // ------------------------------------------------------------------------------------------------
        
    function CreateSerialPort($Name$ParentId$Position=0) {
            
    $InstanceId CreateInstance($Name$ParentId"{6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1}",$Position);
            
    COMPort_SetBaudRate($InstanceId9600);
            
    COMPort_SetStopBits($InstanceId1);
            
    COMPort_SetDataBits($InstanceId8);
            
    COMPort_SetParity($InstanceId'None');
            
    //COMPort_SetPort($InstanceId , "");
            //COMPort_SetOpen($InstanceId, true);
            
    $DeviceList COMPort_GetDevices($InstanceId);
            foreach (
    $DeviceList as $Device) {
               echo 
    $Device;
            }
            
    IPS_ApplyChanges($InstanceId);
            return 
    $InstanceId;
        }

       
    // ------------------------------------------------------------------------------------------------
        
    function CreateRegisterVariable($Name$ParentId$ScriptId$PortId$Position=0) {
            
    $InstanceId CreateInstance($Name$ParentId"{F3855B3C-7CD6-47CA-97AB-E66D346C037F}",$Position);
            
    RegVar_SetRXObjectID($InstanceId$ScriptId);
            
    IPS_ConnectInstance($InstanceId$PortId);
            
    IPS_ApplyChanges($InstanceId);

            return 
    $InstanceId;
        } 
    somit kann ich mich nun mit dem auswerten der RegVar information beschäftigen.

    Michael
    Geändert von ffmspider (03.03.11 um 10:44 Uhr)

  10. #10
    Registriert seit
    Aug 2010
    Ort
    Österreich (Korneuburg)
    Beiträge
    4,553

    Hallo Leute,

    habe meine Installation Routinen wieder etwas verfeinert:

    Zusätzlich modifizieren die meisten Funktionen jetzt die Parameter des Objectes, falls diese noch nicht den übgebenen Parametern entsprechen (so ist es zum Beispiel möglich auch nach dem Anlegen von Variablen,Kategorien die Position oder das Icon noch mit dem Installationsscript zu ändern).

    Ausserdem werden jetzt nur mehr Veränderungen gelogged (einfaches ECHO), dadurch hat man leichter Kontrolle, ob das Installationsscript das macht, was man erwartet.

    Mit CreateCategoryPath ist es möglich einen kompletten Baum von Kategorien anzulegen. Übergibt man zum Beispiel „iPhone.Wecker“ wird im Root die Kategorie iPhone und darin Wecker angelegt, die ID der Kategorie Wecker wird zur Weiterverarbeitung zurückgeben. Position und Icon beziehen sich auch immer auf das letzte Object.

    Mit der Funktion get_ObjectIDByPath kann man sich die ID eines Objectes aus einem definierten Baum zurückgeben lassen, z.B. „Program.Wecker.Name“.

    Praktische Anwendungs-Beispiele folgen ...

    lg
    Andreas

Ähnliche Themen

  1. Event Scripts löschen
    Von Luggi im Forum Ideen & Anregungen
    Antworten: 1
    Letzter Beitrag: 06.05.06, 08:11