+ Antworten
Ergebnis 1 bis 7 von 7
  1. #1
    Registriert seit
    Aug 2017
    Beiträge
    445

    Standard Gemeinsamer WebHook

    Ich habe ein Modul erstellt welches einen WebHook nutzt

    PHP-Code:
        public function ApplyChanges() {
            
    //Never delete this line!
            
    parent::ApplyChanges();

            
    $this->RegisterHook("/hook/waffi");
        } 
    Wenn ich jetzt ein weiteres Modul erstelle nutzt dieses den selben WebHook (soll es auch)
    Lösche ich dieses Modul jetzt bekomme ich diese Abfrage
    Name:  Screenshot_1535.jpg
Hits: 130
Größe:  14.8 KB
    Wie stelle ich das jetzt an dass der WebHook erst gelöscht wird wenn das letzte Modul der selben Art gelöscht wird ?

    Ich kann den WebHook wenn ich das Konfigurationsformular neu speichere wieder anlegen (siehe Code oben) aber das ist nicht gerade User freundlich.
    IPS 5.3-4569 - Docker auf Synology

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

    Mehrere Instanzen können nicht den gleichen Hook nutzen. Da hast du einen konzeptionellen Fehler in deinem Modul.
    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

  3. #3
    Registriert seit
    Jul 2011
    Ort
    Wiesbaden
    Beiträge
    428

    Der Webhook muss auf eine IO-Instanz gehen und die Daten dann an die Geräteinstanzen weiter reichen
    IP-Symcon 5.0 auf Raspberry PI / Windows / Docker / Synology (Docker)
    Homematic CCU2, Wago und Mikrocontroller

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

    Zitat Zitat von firebuster Beitrag anzeigen
    Der Webhook muss auf eine IO-Instanz gehen und die Daten dann an die Geräteinstanzen weiter reichen
    Nicht falsch, aber auch nicht richtig.
    Ein Webhook kann Daten nur an eine Instanz übergeben.
    Ob dies eine IO, Splitter oder Geräte-Instanz ist, ist egal.
    Auch immer daran denken, es kann u.u. auch mehrere IO oder Splitter vom gleichen Typ geben!
    Siehe mehrere Kodi-Splitter für mehrere Systeme. Somit braucht jede Instanz seinen eigenen Webhook.
    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
    Aug 2017
    Beiträge
    445

    OKich habe das jetzt mal umgeschrieben und eine ID mitgegeben, bekomme aber weiterhin die Meldung. Die Hooks der nicht gelöschten Instanzen bleiben aber wie gewünscht erhalten


    Register Hook

    PHP-Code:
        private function RegisterHook($WebHook) {
            
    $ids IPS_GetInstanceListByModuleID("{015A6EB8-D6E5-4B93-B496-0D3F77AE9FE1}");
            if(
    sizeof($ids) > 0) {
                
    $hooks json_decode(IPS_GetProperty($ids[0], "Hooks"), true);
                
    $found false;
                foreach(
    $hooks as $index => $hook) {
                    if(
    $hook['Hook'] == $WebHook) {
                        if(
    $hook['TargetID'] == $this->InstanceID)
                            return;
                        
    $hooks[$index]['TargetID'] = $this->InstanceID;
                        
    $found true;
                    }
                }
                if(!
    $found) {
                    
    $hooks[] = Array("Hook" => $WebHook"TargetID" => $this->InstanceID);
                }
                
    IPS_SetProperty($ids[0], "Hooks"json_encode($hooks));
                
    IPS_ApplyChanges($ids[0]);
            }
        } 
    Aufruf mit

    PHP-Code:
        public function ApplyChanges() {
            
    //Never delete this line!
            
    parent::ApplyChanges();

            if(
    IPS_GetKernelRunlevel() == KR_READY) {
                
    $this->RegisterHook("/hook/waffi_" $this->InstanceID);
            }
        } 


    UnRegister Hook (von Dir abgeguckt Nall Chan)

    PHP-Code:
        protected function UnregisterHook($WebHook) {
            
    $ids IPS_GetInstanceListByModuleID("{015A6EB8-D6E5-4B93-B496-0D3F77AE9FE1}");
            if (
    sizeof($ids) > 0) {
                
    $hooks json_decode(IPS_GetProperty($ids[0], "Hooks"), true);
                
    $found false;
                foreach (
    $hooks as $index => $hook) {
                    if (
    $hook['Hook'] == $WebHook) {
                        
    $found $index;
                        break;
                    }
                }
                if (
    $found !== false) {
                    
    array_splice($hooks$index1);
                    
    IPS_SetProperty($ids[0], "Hooks"json_encode($hooks));
                    
    IPS_ApplyChanges($ids[0]);
                }
            }
        } 
    Hier im Destroy

    PHP-Code:
        public function Destroy() {
            if (!
    IPS_InstanceExists($this->InstanceID)) {
                
    $this->UnregisterHook("/hook/waffi_" $this->InstanceID);
            }
            
    parent::Destroy();
        } 
    IPS 5.3-4569 - Docker auf Synology

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

    Die Meldung wirst du auch nie wegbekommen.
    Die Console fragt den Server ob es eine Referenz auf deine Instanz-ID gibt.
    Als Antwort kommt das die Webhook-Instanz deine ID referenziert.
    Beeinflussen kannst du das nicht, da die Webhook-Instanz ihre eigenen Referenz an den Kernel meldet.
    Eine Funktion im SDK welche vor dem löschen der Instanz ausgeführt wird, gibt es nicht.
    Destroy wird aufgerufen, wenn deine Instanz schon gelöscht wurde. (Ja, und wenn man den Dienst beendet)
    Deswegen auch extra die Abfrage im Code:
    PHP-Code:
    if (!IPS_InstanceExists($this->InstanceID// Instanz wurde eben gelöscht und existiert nicht mehr 
    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
    Aug 2017
    Beiträge
    445

    Danke für die Erklärung, dann habe ich den Bereich jetzt "abgeschlossen"
    IPS 5.3-4569 - Docker auf Synology

Ähnliche Themen

  1. WebHook-Script
    Von Ghostrider im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 21.06.17, 16:00
  2. Webhook
    Von sabl im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 14.02.17, 16:22
  3. Geofency and webhook.... how to do this
    Von dilljeneve im Forum General Discussion
    Antworten: 2
    Letzter Beitrag: 31.10.16, 20:46
  4. Webhook Debug
    Von Fonzo im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 0
    Letzter Beitrag: 05.10.16, 14:35
  5. IPS et al in gemeinsamer Umgebung
    Von jwka im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 0
    Letzter Beitrag: 01.02.11, 19:29