+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 21
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    262

    Standard Benötige Hilfe zur sinvollen Strukturierung eines Moduls

    Hallo,
    bin gerade dabei ein neues Modul für den Busch-Jäger Radio Inet zu schreiben. Hier habe ich ein Problem mit der sinvollen Strukturierung des Moduls.
    Als Schnittstelle dient ein UDP-Socket. Ein Splitter sollte nicht nötig sein, da es nur ein Device gibt, denke ich. Also es funktioniert zummindest so.

    Wo ich jetzt ins straucheln komme ist folgendes:
    Es wäre schön, wenn alles Einstellungen im Device gemacht werden könnten (sinnvoll?). Also auch die IP-Adresse. Jedoch kann ich natürlich erst mit dem Radio kommunizieren, wenn die IP-Adresse gesetzt ist. Danach kann ich z.B. die Senderliste abrufen.
    Die Sender würde ich auch gerne innerhalb des Device ändern können. Also müsste man nach dem einstellen der IP-Adresse die Instanz schließen und wieder öffnen, um die Formularfelder aktuell zu haben.

    Was wäre hier ein besseres vorgehen, so dass das Modul möglichst einfach einzubinden ist. Alle Einstellungen des UDP-Sockets sollen vorgegeben werden, bis auf die IP-Adresse. Diese muss man selbst eintragen.

    Vielen Dank für eure Unterstützung.

    Grüße
    Stefan

  2. #2
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    176

    Hallo Stefan

    Zitat Zitat von steppe Beitrag anzeigen
    Es wäre schön, wenn alles Einstellungen im Device gemacht werden könnten (sinnvoll?).
    Ja , finde ich schon.
    Zitat Zitat von steppe Beitrag anzeigen
    Die Sender würde ich auch gerne innerhalb des Device ändern können. Also müsste man nach dem einstellen der IP-Adresse die Instanz schließen und wieder öffnen, um die Formularfelder aktuell zu haben.
    Das kannst du ab IPS 5.2, mit der Modul funktion : ReloadForm erledigen

    Zitat Zitat von steppe Beitrag anzeigen
    Alle Einstellungen des UDP-Sockets sollen vorgegeben werden, bis auf die IP-Adresse.
    Das erledigst du mit der Modul funktion : GetConfigurationForParent

    Gruß Xaver

  3. #3
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    7,447

    Es ist davon abhängig ob es z.B. möglich ist das Gerät im Netzwerk zu suchen und zu finden. Wenn ja macht eine Discovery Instanz Sinn, in so einem Fall müsste dann die IP nicht in die Geräte Instanz eingetragen werden.

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    262

    Guten Morgen Tierfreund und Fonzo.
    Vielen Dank für eure Antworten. ReloadForm ist schon mal ein perfekter Tipp.

    GetConfigurationForParent habe ich schon getestet, war mir aber noch nicht ganz sicher, ob es richtig ist, weil ich beim Querlesen verschiedener Beiträge was von "nur relevant für die Anzeige, nicht für die Einstellungen" gelesen hatte. Aber vielleicht hab ich es beim ersten lesen falsch verstanden. Schau ich mir noch mal an.


    Discovery ist ja recht neu und für mich noch komplett unbekannt in der Benutzung. Das Radio / mehrere Radios kann man per Broadcast finden. Habe ich mit einem schon getestet. Aber ich wollte es mir selbst nicht zu schwer machen.
    Womöglich wäre das Discovery auch nachzurüsten?

    Grüße
    Stefan

  5. #5
    Registriert seit
    Feb 2017
    Beiträge
    2,140

    Ich würde die IP-Adresse nur im I/O einstellbar machen, insbesondere, da sich diese ja auch nach der ersten Erstellung üblicherweise nicht mehr weiter ändern sollte. Ansonsten hast du hier Redundanz und die beiden Instanzen müssten sich irgendwie synchron halten, was doof ist und potentiell nur Ärger macht.

    GetConfigurationForParent stellt tatsächlich die Konfiguration "nur" visuell dar. Wenn du also die Instanz erstellst, wird ja der I/O gleich mit installiert und dir wird direkt der Konfigurationsdialog vom I/O angezeigt. Hier werden deine in GetConfigurationForParent-Konfiguration vorgegeben und die entsprechenden Felder deaktiviert. Der Benutzer tippt dann also nur noch die IP ein und bestätigt die Konfiguration, inklusive der Vorgabe von GetConfigurationForParent. Würde er abbrechen, würden die Einstellungen nicht übernommen werden, aber das ist ja nicht die übliche Variante. Die Konfiguration per GetConfigurationForParent vorzugeben ist also fast gleichbedeutend mit einer harten Vorgabe.

    Discovery kannst du selbstverständlich auch erst im Nachhinein einrichten. Ich halte Discovery für einen großen Mehrwert, aber erst einmal mit der Kernfunktionalität anzufangen ist sicherlich nicht unvernünftig.

  6. #6
    Registriert seit
    Jan 2012
    Beiträge
    262

    Ich würde mir das discovery gerne mal anschauen, aber irgendwie bin ich blind oder suche falsch. Weder im Forum, noch in der SDK-Doku bin ich wirklich fündig geworden. Hat hier jemand einen link für mich, wo man sich einlesen kann?

    Wahrscheinlich werde ich für diese Anwendung kein Discovery mit einbauen, da der Radio ja ein Doseneinbaugerät ist, welches man im Normalfall einmal einbaut und es dann gut sein lässt.

    Selbst wenn man irgendwann einen weiteren verbaut, braucht man dafür kein Discovery, wie es bei Z-Wave, 1-Wire usw sinnvoll ist.

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

    Eine Instanz vom Typ Discovery oder Konfigurator ist nur ein andere Typ in der module.json.
    Die ganze Magie passiert (später) durch die Konsole und das Konfig-Element Configurator.
    Den Code um Geräte im Netzwerk zu suchen und das Configurator-Element zu füllen musst du selber erstellen. Da gibt es nichts fertiges.
    Allerdings gibt es inzwischen viele PHP-Module wo dieses Typen genutzt werden. Eventuell findest du dort einige Anregungen.
    Vielleicht einfach mit einem Configurator-Element und fest eingetragen Werten testen wie das in der Konsole aussieht und sich verhält. Die Ideen kommen dann meistens von alleine.
    Michael
    on Win10VM (ESXi): I7, 32GB RAM, HW-RAID5, 2xSat | HW: pivccu + ca.130 Geräte (ca.550ch), EM1000, CUL, 1Wire, FritzBox Cable, Android Phone + Tablet, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, RoundCube, Win2016 Ess., MediaPortal, Kodi

  8. #8
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    176

    Lightbulb Discovery Beispiel

    hier ein kleines Beispiel zum Discover
    PHP-Code:
    function DiscoverNetwork( ){
            
    $timeout=2;
            
    $request "M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: $timeout\r\nST: ssdp:all\r\nUSER-AGENT: MacOSX/10.8.2 UPnP/1.1 PHP-UPnP/0.0.1a\r\n\r\n";
            
            
    $local_ip_address='127.0.0.1';
            
    $socket socket_create(AF_INETSOCK_DGRAMSOL_UDP);
            
    socket_connect($socket'8.8.8.8'53);  // verbinde zu UDP Adresse aber sende keine Daten
            
    socket_getsockname($socket$local_ip_address$local_port);// somit haben wir in $local_ip_address und $local_port die Daten zum binden des Sockets
            
    socket_close($socket);
            
    // Das eigentlich discover
            
    $socket socket_create(AF_INETSOCK_DGRAMSOL_UDP);
            
    socket_bind($socket$local_ip_address);
            
    socket_set_option($socketSOL_SOCKETSO_BROADCASTtrue);
            
    socket_sendto($socket$requeststrlen($request), 0'239.255.255.250'1900);
            
    socket_set_option($socketSOL_SOCKETSO_RCVTIMEO, array('sec'=>$timeout'usec'=>'0'));
            
    $read = [$socket];
            
    $write $except = [];
            
    $name $port $m=null;
            
    $response '';
            while (
    socket_select($read$write$except$timeout) && $read) {
                
    socket_recvfrom($socket$response2048null$name$port);
                if(
    is_null($response) || !preg_match('/HTTP\/.+200 OK/',$response)) continue;
                
    //...
                
    echo $response."\n";
                
    //...
            
    }
            
    socket_close($socket);

    Die Angaben für den Request ect. musst du natürlich deinen Bedürfnissen anpassen , in der vorliegenden Version werden alle Upnp fähigen Geräte gefunden.

    Gruß Xaver

  9. #9
    Registriert seit
    Jan 2012
    Beiträge
    262

    Gerade habe ich ein anderes Problem.
    Ich habe ein Formularfeld Typ Liste im Action-Bereich. Das Befüllen mir Values funktioniert.
    Jetzt möchte ich hier Zeilen bearbeiten ('onEdit')

    Wie schaffe ich es hier, dass der Funktion Parameter übergeben werden?
    Bis jetzt hatte ich nur Buttons mit
    Code:
    'onClick' => 'function($id)'
    Die Liste befindet sich in GetConficurationForm.

    Danke schon mal.

  10. #10
    Registriert seit
    Feb 2017
    Beiträge
    2,140

    Die onEdit/Add/Delete-Funktionen der Liste funktionieren genau so wie der onClick beim Button. Du kannst also alle Konfigurationsfelder des actions-Bereich mit Namen als Variable verwenden. Also beispielsweise:
    Code:
    {
      "type": "List",
      "name": "MyList",
      "onEdit": "ML_MyFunction($id, $MyList)",
      ...
    }
    Du kannst allerdings nicht direkt auf den elements-Bereich zugreifen, da müsstest du halt die Propertys auslesen.

Ähnliche Themen

  1. Ältere Version eines Moduls einbinden
    Von bumaas im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 22.11.18, 17:22
  2. Probleme beim Erstellen eines eigenen Moduls
    Von Haari im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 6
    Letzter Beitrag: 17.04.16, 19:31
  3. Antworten: 2
    Letzter Beitrag: 05.01.15, 22:01
  4. Fragen zur Objektbaum-Strukturierung
    Von wolfgang im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 8
    Letzter Beitrag: 09.01.12, 21:57
  5. Benötige Hilfe zur MS
    Von pstukenb im Forum Allgemeine Diskussion
    Antworten: 4
    Letzter Beitrag: 02.11.05, 16:03