+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 13
  1. #1
    Registriert seit
    Jan 2010
    Beiträge
    79

    Standard Module überschreiben Skripte beim IPS Start mit initialen Inhalten

    Hallo,

    ich habe in meinem Cortana Modul für ips4Windows die Codeverarbeitung so gebaut, dass der User selber Dinge erweitern kann. Seit dem letzten "stable" Update (hatte vorher die Version von Mai 2016, jetzt 2. August 2016) werden bei jedem IPS Neustart auf dem PI aber die Skripte der Module mit den initialen Inhalten überschrieben.

    Soll das so sein, wenn ja wie realisiere ich dann Anpassungen an den Modulen? Ich hätte erwartet, dies passiert beim neuen einlesen oder aktualisieren von Modulen von GitHub, aber nicht bei beim Neustart.

    Grüße
    Seb.
    IPS-Server @ Raspberry PI 2, Homematic mit CCU auf PI + LAN Adapter, > 60 Aktoren
    Master of "ips4Windows" App für Windows 10 (Cortana, LiveTiles, Geofence, mobile Darstellung für Windows Mobile) > Doku unter https://ips4windows.wordpress.com/

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    8,523

    Gar nicht?
    Weil der User soll den Code ja nicht ändern.
    Dafür gibt es ja normale Scripte...

    Oder meinst du etwas anderes, als das Script aus den das Moduls besteht.
    Michael
    Geändert von Nall-chan (18.08.16 um 21:41 Uhr)
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    Jan 2010
    Beiträge
    79

    ja das macht Sinn bei Modulen die nur immer die selben Operationen ausführen. Aber wenn ich in einem Modul Konfigurationen des "IPS Besitzers" berücksichtigen will macht es keinen Sinn. Bis zum letzten Update war das kein Problem und stand auch so in den Beispielen "Your Code goes here....".

    Nur jetzt scheint das vorbei und ich müsste mir erst einen Weg überlegen wie ich eine spezifische Konfiguration welche vermutlich in einem Skript liegt pro User "merken" kann.

    Grüße
    Seb.
    IPS-Server @ Raspberry PI 2, Homematic mit CCU auf PI + LAN Adapter, > 60 Aktoren
    Master of "ips4Windows" App für Windows 10 (Cortana, LiveTiles, Geofence, mobile Darstellung für Windows Mobile) > Doku unter https://ips4windows.wordpress.com/

  4. #4
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    8,523

    Keine Ahnung was du genau vorhast, Aber üblicherweise verpackt man alle Daten in die $_IPS-Variable und startet ein Script welches der User in der Instanz eintragen muss.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  5. #5
    Registriert seit
    Jan 2010
    Beiträge
    79

    Mag "neu" so sein, das will ich ja nur verstehen! Aber in der Vergangenheit knapp 6 Monate her war in den Beispielen und der nicht vorhandenen Doku von paresy ein Modul, welches bei der Installation ein Skript angelegt hat.

    In diesem gab es dann einen Bereich wo man als User selber Änderungen gemacht hat, weil beim Neustart des Dienst das Modul eben nicht neu alle Skripte geladen hat. Aktuell scheint das anders zu sein, ich will jetzt verstehen ob das "by design" ist und ich mir was anderes überlegen muss.

    Mein Skript vom Modul sieht wie folgt aus:
    PHP-Code:
    <? //Do not delete or modify.
    include(IPS_GetKernelDirEx()."scripts/__ipsmodule.inc.php");
    include(
    "../modules/ips4Windows/ips4WinCortana/module.php");
    $ips4WinCortana = new ips4WinCortana(34291 /*[ips4WinCortana]*/);
    $ips4WinCortana->ProcessHookData();
    if (
    $_POST['ips4Command'] != "GetConfig")
    {
    //Your code goes here...

    $resultArray $ips4WinCortana->GetCortanaResult();
    //$resultArray has all the data from Cortana
    //textSpoken - full message captured by Cortana
    //CommandName - Command of textSpoken line, user defined in ips4CortanaSprachbefehle script (aka section)
    //action - used entry from PhraseList defined in ips4CortanaSprachbefehle script
    //room - used entry from PhraseList defined in ips4CortanaSprachbefehle script
    //feedback - if you used SendFeedbackVerify or SendFeedbackVerifyDetailed you will get the result from this commands, multiple iteration will be added with "#+#" as seperator. Use explode ( "#+#" , $resultArray->feedback) to work with the result array
    IPS_LogMessage("WebHook Cortana"print_r($resultArraytrue));
    //do something useful
    //...
    //Cortana waits for feedback, otherwise the request will timeout in seconds and shows an error
    //Options: sucess - SendFeedbackSuccess(Msg), failure - SendFeedbackFailure(Msg)
    //verify with yes/no - SendFeedbackVerify(Msg), verify with more option - SendFeedbackVerifyDetailed(Msg, ListofOptions as array)

    /*
    31.01.2016 18:40:49*| WebHook Cortana*| Array
    (
        [ips4Command] => Data
        [commandMode] => voice
        [actor] => Licht
        [room] => Wohnzimmer
        [NavigationTarget] => ips4WindowsVoiceCommandService
        [status] => 50
        [action] => ändere
        [CommandName] => Block1
        [textSpoken] => ändere das Licht Wohnzimmer auf 50 Prozent
    )*/
        
    $bError true;
        if (isset(
    $resultArray['CommandName']))
            
    $bError false;

        if (!
    $bError)
        {

        }
        else
        {
             
    $result $ips4WinCortana->SendFeedbackFailure("Mh, Es kam nicht alles am Server an was ich erwartet hätte - 'CommandName' Fehler");
        }

        if (
    $resultArray['CommandName'] == "TempFragen")
        {
           if (isset(
    $resultArray['room']))
           {
              
    $bError false;
               if (
    $resultArray['room'] == "Wohnzimmer")
               {
                  
    $val1 GetValueFloat(23074 /*[Räume\Wohnzimmer\Heizung\Wandthermostat\2\ACTUAL_TEMPERATURE]*/);
                  
    $val2 GetValueFloat(46507 /*[Räume\Wohnzimmer\Heizung\Wandthermostat\2\ACTUAL_HUMIDITY]*/);
                }
                else if (
    $resultArray['room'] == "Garten")
               {
                  
    $val1 GetValueFloat(58965 /*[Räume\Flur Keller\Wetterstation\WMRS200 Temperatur- und Feuchtigkeitssensor (Außen)\Temperatur]*/);
                  
    $val2 GetValueInteger(44450 /*[Räume\Flur Keller\Wetterstation\WMRS200 Temperatur- und Feuchtigkeitssensor (Außen)\Luftfeuchtigkeit]*/);
                }
                else if (
    $resultArray['room'] == "Schlafzimmer")
               {
                  
    $val1 GetValueFloat(57495 /*[Räume\Schlafzimmer\Heizung\Wandthermostat\2\ACTUAL_TEMPERATURE]*/);
                  
    $val2 GetValueFloat(44407 /*[Räume\Schlafzimmer\Heizung\Wandthermostat\2\ACTUAL_HUMIDITY]*/);
                }
                else if (
    $resultArray['room'] == "Kinderzimmer")
               {
                  
    $val1 GetValueFloat(45901 /*[Räume\Kinderzimmer\Heizung\Wandthermostat\2\ACTUAL_TEMPERATURE]*/);
                  
    $val2 GetValueFloat(22517 /*[Räume\Kinderzimmer\Heizung\Wandthermostat\2\ACTUAL_HUMIDITY]*/);
                }
                else if (
    $resultArray['room'] == "Bad")
               {
                  
    $val1 GetValueFloat(23534 /*[Räume\Bad\Heizung\Wandthermostat\2\ACTUAL_TEMPERATURE]*/);
                  
    $val2 GetValueFloat(56878 /*[Räume\Bad\Heizung\Wandthermostat\2\ACTUAL_HUMIDITY]*/);
                }
                else if (
    $resultArray['room'] == "Heizungskeller")
               {
                  
    $val1 GetValueFloat(23534 /*[Räume\Bad\Heizung\Wandthermostat\2\ACTUAL_TEMPERATURE]*/);
                  
    $val2 GetValueFloat(56878 /*[Räume\Bad\Heizung\Wandthermostat\2\ACTUAL_HUMIDITY]*/);
                }
                else if (
    $resultArray['room'] == "Büro")
               {
                  
    $val1 GetValueFloat(31649 /*[Räume\Büro\Heizung\Wandthermostat\2\ACTUAL_TEMPERATURE]*/);
                  
    $val2 GetValueFloat(59881 /*[Räume\Büro\Heizung\Wandthermostat\2\ACTUAL_HUMIDITY]*/);
                }
                else
                {
                   
    $bError true;
                }

                if(
    $bError == false)
                    
    $result $ips4WinCortana->SendFeedbackSuccess("Es sind ".$val1." ° Celsius im ".$resultArray['room']." und ".$val2." % Luftfeuchtigkeit");
                else
                    
    $result $ips4WinCortana->SendFeedbackFailure("Mmmh Fehler, für ".$resultArray['room']." habe ich noch keine Konfiguartion am Server");
            }
            else
                
    $result $ips4WinCortana->SendFeedbackFailure("Mmmmh Fehler, bitte sprich deutlicher ich habe keinen Raum verstanden!");

        }
    .......
    Bisher war das der Weg laut Doku und Beispielen, aber der geht jetzt nicht mehr. Ich habe aber gerade in den Beispielen auf github gesehen das paresy die ebenfalls geändert hat.

    Schön wäre mal eine verlässliche Aussage, vermutlich können sich alle auch anders beschäftigen als Skripte umzuschreiben :-)

    Grüße
    Seb.
    IPS-Server @ Raspberry PI 2, Homematic mit CCU auf PI + LAN Adapter, > 60 Aktoren
    Master of "ips4Windows" App für Windows 10 (Cortana, LiveTiles, Geofence, mobile Darstellung für Windows Mobile) > Doku unter https://ips4windows.wordpress.com/

  6. #6
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    20,422

    Du hast in der Tat recht, dass sich an der Stelle etwas geändert hat. Und das aus dem Grund, dass die automatisch generierten Skripte und Ereignisse den vordefinierten Inhalt haben sollen. Wenn du das Modul aktualisierst, soll auch der Inhalt der generierten Skript und Ereignisse aktualisiert werden. Das war somit ein Fehler den wir korrigiert haben. Du hast doofer Weise auf das falsche Pferd gesetzt.

    Wie Nall Chan schon erklärt ist für deinen Use-Base ein "SelectScript" im Formular korrekt, in dem der User selber ein Zielskript definieren kann. Dort kannst du dann in der Doku auch gerne in gutes Beispiel zum Copy&Paste hinzufügen, aber primär ist wichtig, welche Variablen du mitlieferst. Dann kann jeder selber ein passendes Skript erstellen.

    Du würdest also CreateScript weiterhin nutzen, aber du um den benötigten "Dispatcher" für den WebHook zu erstellen. Dort passiert nicht viel mehr als ein IPS_RunScript mit den entsprechenden Variablen auf das Zielskript vom Benutzer.

    paresy

  7. #7
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    8,523

    Also geht es ja doch nicht um den eigentlichen Code des Moduls, sondern um ein Script was vom Modul angelegt wird um den Hook zu verarbeiten.
    Ist dann sogar eher noch eine Unzulänglichkeit des SDK, das der Hook nicht direkt von der Instanz verarbeitet werden kann.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  8. #8
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    20,422

    Zitat Zitat von Nall chan Beitrag anzeigen
    Also geht es ja doch nicht um den eigentlichen Code des Moduls, sondern um ein Script was vom Modul angelegt wird um den Hook zu verarbeiten.
    Ist dann sogar eher noch eine Unzulänglichkeit des SDK, das der Hook nicht direkt von der Instanz verarbeitet werden kann.
    Michael
    Genau. Die RegisterScript API ist nur ein Hilfsmittel, um genau dieses Problem zu lösen. (Bzw. alle anderen, wo ein festes, nicht editierbares Skript als Wrapper gebraucht wird)

    paresy

  9. #9
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,264

    Warum es den Usern einfach machen und ein Skript vom Modul erstellen lassen, wenn man die User auch wieder manuell mit Copy&Paste beschäftigen kann. Besonders die einfache Installation/Einrichtung war das was den IPS-Einsteigern so gut an den Modulen gefallen hat. Sind nur ein paar Variablen im extra Skript, dann ist das kein Problem, aber es gibt auch Fälle mit kompletten Funktionen die der User sich anpassen oder erweitern kann, da ist es dann sehr bescheiden. Ich sehe absolut keinen vernünftigen Sinn in diesem "neuen Feature"...

    Wenn man als Modul-Ersteller vom Modul generierte Skripte updaten will, dann kann man das selbst über sein Modul machen und der User kann entscheiden, ob er das will oder für sinnvoll hält oder nicht.

    Und wozu Zeit in neue Module investieren, wenn man seine alten Module auf neue "IPS-Ideen" anpassen kann...

    Das UniFi-Modul, welches du (paresy) ebenfalls verwendest, hast du damit auch "gekillt". Aber nicht schlimm (für mich), ich schreibe sowieso an einem eigenen UniFi-Modul. Schade nur für die anderen User.

    -Chris-
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  10. #10
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    8,523

    Du musst ja nicht RegisterScript nutzen... Kannst auch komplett selbst ein Script mit deinem Modul erzeugen....
    Ich glaube meine Script-Vorlagen (Design für Html-Box) welche meine Instanzen erzeugen, sind nicht betroffen.
    Da ich RegisterScript nur aufrufe wenn das Script nicht existiert
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

Ähnliche Themen

  1. alle Gruppenadressen beim IPS Start aktualisieren
    Von thka im Forum KNX/EIB, LCN
    Antworten: 1
    Letzter Beitrag: 13.11.12, 09:17
  2. Probleme mit FTDI Geräte beim IPS Start.
    Von ThomasD im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 9
    Letzter Beitrag: 13.10.09, 21:58
  3. Event beim Start von IPS
    Von denisweber im Forum Allgemeine Diskussion
    Antworten: 2
    Letzter Beitrag: 15.09.05, 19:19