+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    135

    Standard Probleme mit GetConfigurationForParent und ClientSocket

    Irgendwie kann ich das Problem nicht nachvollziehen... aber villeicht jemand aus dem Forum.


    PHP-Code:
    class MeinModul    extends IPSModule {
            
            
        public function 
    GetConfigurationForParent(){
            
    // Version 1
            // hier kann ich Aktive/Open noch ändern und beim öffnene des ClientSockets wurde der Host und der Port übernommen
      
            
    return json_encode(['Host'=>parse_url($this->ReadPropertyString('Host'),PHP_URL_HOST),'Port'=>1012]); 

            
    // Version 2
            // hier kann ich Aktive/Open nicht mehr ändern. Soweit auch ok
            // wenn ich den lientSocket vom modul disconnecte  wird mir beim öffnene des ClientSockets  kein Host oder Port angezeigt

            
    return json_encode(['Host'=>parse_url($this->ReadPropertyString('Host'),PHP_URL_HOST),'Port'=>1012,'Open'=>true]);
            
            
    // in beiden fällen wird der Socket jedoch nicht geöffnet sondern als Fehlerhaft makiert 
            // und nur in Version 1. kann ich dann den Socket über die Konfiguration einmal ändern und Übernehmen klicken. 
            // Dann wird der Socket auch geöffnet

        
    }
        
        
        public function 
    ApplyChanges(){
            
    parent::ApplyChanges();
            
            
            
    $conID=IPS_GetInstance($this->InstanceID)['ConnectionID'];
            if(
    $this->ReadPropertyBoolean('CallmonEnabled')){
                if(!
    $conID){ // Kein Socket connected dann ...
                    
    if($this->ConnectParent('{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}')){
                        
    $conID=IPS_GetInstance($this->InstanceID)['ConnectionID'];
                    }
                }
                 
    // nun dachte ich dieses Connect problem damit lösen zu können
                
    if($conID){
                     
    $status=IPS_GetInstance($conID)['InstanceStatus'];
                     if(
    $status==104){
                         
    IPS_SetProperty($conID'Open'true);
                         
    IPS_ApplyChanges($conID); // <== Aber hier kommt der Fehler:  
                        //     Warning : Die angeforderte Adresse ist in diesem Kontext ungültig.
                        // Dabei ist es egal ob ich version 1 oder 2 in der GetConfigurationForParent nutze.
                     
    }
                 }
            } 
            elseif(
    $conID){
                
    IPS_DisconnectInstance($this->InstanceID);
                
    $status=IPS_GetInstance($conID)['InstanceStatus'];
                if(
    $status==102){
                    
    IPS_SetProperty($conID'Open'false);
                    
    IPS_ApplyChanges($conID);  // <== hier klappt es einwandfrei mit dem Übernehmen
                
    }
                  
    // IPS_DeleteInstance($conID);
            
    }
        }

    Im MessageLog erscheint folgendes:
    04.08.2019 13:16:00*| Event Control*| Wiederverbinden [Client Socket (FritzCallmon #21694)] fehlgeschlagen = Die angeforderte Adresse ist in diesem Kontext ungültig.

    Xaver

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

    GetConfigurationForParent ist eine Funktion welche die Console aufruft und Felder vorbelegt.
    Es ändert aktiv nichts an der Konfiguration.
    Wenn du also in der Konsole nicht auf übernehmen klicken kannst, weil du alle Felder readonly vorgibst, dann wird da nie eine Konfig für den IO übernommen.
    Lass doch einfach aktiv weg, damit der User auch ggfls. den IO und somit alles deaktivieren kann.
    Michael
    PS: Die WebConsole müsste allerdings melden das du die Konfig übernehmen sollst, weil eine untergeordnete Instanz eine Konfig vorgibt.
    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
    Jul 2014
    Ort
    Hannover
    Beiträge
    135

    Aha .... ja der Teufel steckt im detail ;-) und im Grunde hast du ja recht . Danke für die Info.
    LG Xaver

    Ich arbeite immer noch vorzugsweise mit der windows ips_console ;-)

    PS:
    mit der ergänzung:
    IPS_SetProperty($conID, 'Host', parse_url($this->ReadPropertyString('Host'),PHP_URL_HOST));
    IPS_SetProperty($conID, 'Port', 1012);
    IPS_SetProperty($conID, 'Open', true);
    IPS_ApplyChanges($conID);
    läuft es auch ;-)
    Geändert von Tierfreund (04.08.19 um 17:41 Uhr)

  4. #4
    Registriert seit
    Feb 2017
    Beiträge
    1,279

    Von unserer Seite her ist GetConfigurationForParent die bevorzugte Variante. Wie Michael schon erörtert hat, wird dies auch durch die webbasierte Konsole entsprechend dargestellt.

    Wenn dein Ansatz für dich funktioniert, dann kannst du ihn natürlich gerne weiter verwenden, das würde aber so nicht durch den Review-Prozess des Module Stores kommen.

    PS: Auch wenn ein bisschen OT: Was hält dich momentan noch bei der Windows-Konsole? Vielleicht kannst du mir ja mal eine PM schreiben, was dir noch fehlt um dich zum Wechsel zu überzeugen.

  5. #5
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    135

    ich würde die GetConfigurationForParent() auch bevorzugen unklar ist mir jedoch warum der Benutzer nochmals auf Übernehmen klicken soll, wenn die Daten von GetConfigurationForParent() komplett vorgegeben werden da der Benutzer in diesem Fall ja nichts mehr ändern darf.
    Irgendwie widerspricht sich die Funktionsweise denn so wie es aussieht ist sie ja darauf ausgelegt vorgegebene Felder nicht nur zu füllen sondern auch für Benutzereingaben zu disablen, damit sollte sich ein Socket auch connecten, bzw. die Vorgaben , wenn nichts änderbar ist) auch automatisch speichern. Ist zumindest meine Meinung
    Xaver

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

    Gegenfrage, warum gibst du überhaupt den Host vor?
    Port kann ich nachvollziehen, aber Host kann der User doch dort einstellen.
    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

  7. #7
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    135

    Nun ich möchte es so einfach wie möglich machen, im Haupt Modul ist der Host bereits hinterlegt. Der Port ist immer gleich und warum sollte der User nun den Host nochmals eingeben ? Ich dachte eben gerade dafür ist diese Funktion vorgesehen.

    Natürlich ist es kein Problem den Host oder generell die Daten einzugeben, mich nervt es jedoch wenn ich Daten doppelt und dreifach eingeben muss. Die EDV sollte uns das leben doch einfacher machen, das fängt mit Kleinigkeiten an

    Xaver

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

    Warum hast du überhaupt den Host in deinem Modul als Eigenschaften?
    Wenn du ihn wirklich brauchst, dann lese ihn aus dem Parent aus.
    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

  9. #9
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    135

    In einem meiner Hauptmodule kommuniziere ich per SOAP mit der Fritzbox.

    Dieses Modul überwacht den Callmonitor und öffnet bei bedarf ein parent ClientSocket zur Fritzbox für den Anrufmonitor.

    Daher ist im Modul die Host Adresse hinterlegt. Es läuft auch alles einwandfrei ...

    mir ging es nur darum zu verstehen warum sich die GetConfigurationForParent so eigenartig verhält und den Socket nicht öffnet.
    Bei Konfigurationen die komplexer sind ist diese vorgehen durchaus sinnvoll , bei 3 Parametern jedoch und gerade dann wenn der Benutzer nichts mehr ändern kann, sollte die Instance die Konfiguration doch korrekt übernehmen und speichern.

    Auf der einen Seite speichert IPS die changes bevor es ApplyChanges() aufruft, löscht die Instance bevor Destroy() aufgerufen wird ... und hier spart IPS am speichern.

    LG
    Xaver

Ähnliche Themen

  1. GetConfigurationForParent korrekt anwenden
    Von JPaeper im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 7
    Letzter Beitrag: 23.04.17, 16:17
  2. Probleme mit RPI und locale
    Von baba im Forum Allgemeine Diskussion
    Antworten: 18
    Letzter Beitrag: 28.02.16, 12:18
  3. kann mit Fehlermeldung betr. ClientSocket nichts anfangen...
    Von juwo1811 im Forum Allgemeine Diskussion
    Antworten: 8
    Letzter Beitrag: 25.08.15, 13:11
  4. Probleme mit Dienst und IPS
    Von Schwede im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 7
    Letzter Beitrag: 21.11.12, 09:06