Ankündigung

Einklappen
Keine Ankündigung bisher.

iTunes | Steuerung via Script über WebServer | Edomi

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Es gibt einige Konstrukte und Operatoren in PHP, die man kennen sollte/muss. Außerdem muss man stets im Kopf haben, dass alle Variablen vom Typ "ich kann alles sein" sind. Es gibt (fast) keine explizite Typendeklaration - daher gibt's eben auch z.T. verwirrende Operatoren wie z.B. =, == und ===

    Eine gültige IPv4-Adresse kann man z.B. so validieren:

    PHP-Code:
    //PHP-Funktion filter_var()
    if (filter_var($IpAdresse,FILTER_VALIDATE_IP)!==false) {...

    //oder nur die Anzahl der Punkte prüfen:
    if (count(explode('.',$IpAdresse))==3) {... 
    Zuletzt geändert von gaert; 04.02.2016, 18:32.
    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

    Kommentar


      DANKE Christian auf für den Unterricht

      Ich habe im Netz auch das gefunden ...

      PHP-Code:
      $ipnummer $eingegebeneIP
      $ip 
      explode('.',$ipnummer);
      if (   
      preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$!",$ipnummer)) {
      Zuletzt geändert von coliflower; 04.02.2016, 18:51.
      Danke und LG, Dariusz
      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

      Kommentar


        Zu Fuss geht's natürlich auch Allerdings prüft filter_var() m.E. auch die Gültigkeit(!) - nicht nur die Struktur. Deine genannte Funktion würde auch die IP 999.999.999.999 durchlassen...
        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

        Kommentar


          Stimmt :-)
          Danke auch für deine immer netten Anmerkungen ;-)

          Ich habe es so codiert - es geht :-)
          PHP-Code:
          if (filter_var($E[34]['value'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4) !== false) { … 
          Danke und LG, Dariusz
          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

          Kommentar


            Zitat von gaert Beitrag anzeigen
            Zu Fuss geht's natürlich auch Allerdings prüft filter_var() m.E. auch die Gültigkeit(!) - nicht nur die Struktur. Deine genannte Funktion würde auch die IP 999.999.999.999 durchlassen...
            Code:
            [COLOR=#0000BB][FONT=Andale Mono][SIZE=12px]preg_match[/SIZE][/FONT][/COLOR][COLOR=#007700][FONT=Andale Mono][SIZE=12px]([/SIZE][/FONT][/COLOR][COLOR=#DD0000][FONT=Andale Mono][SIZE=12px]'[/SIZE][/FONT][/COLOR]/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/'[COLOR=#007700][FONT=Andale Mono][SIZE=12px],[/SIZE][/FONT][/COLOR][COLOR=#0000BB][FONT=Andale Mono][SIZE=12px]$ipnummer[/SIZE][/FONT][/COLOR][COLOR=#007700][FONT=Andale Mono][SIZE=12px])[/SIZE][/FONT][/COLOR]
            passt besser. Allerdings gehoert im klassenlosen IPv4 zu einer IP-Adresse auch stets eine Netzmaske. Ohne Kenntnis derer kann man nicht ueberpruefen ob die angegebene Adresse wirklich eine Host-Adresse (und damit im Sinne des gewuenschten Zwecks "korrekt") und nicht etwa Netzwerk- oder Broadcast-Adresse ist.
            </klug...mode>

            gruesse :: Michael

            Kommentar


              Ja klar - aber das ist ja in diesem Kontext vollkommen Wurscht. Sonst müsste man die IP ja auch anpingen... Hier geht's ja nur um die _formale_ Gültigkeit der IP.
              EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

              Kommentar


                Macht es nicht eventuell mehr Sinn ganz auf eine IP-Prüfung zu verzichten, damit auch Hostnamen verwendet werden können?

                Kommentar


                  Danke euch beiden :-)

                  Frage, macht es Sinn den Mac anzupingen um zu sehen ob der Mac überhaupt online ist ?
                  Wenn ja und der Mac ist offline, kann man den auch WOL ;-) ?

                  Derzeitiger Status zum Thema Gültigkeit:

                  PHP-Code:
                  if ($E=getLogicEingangDataAll($id)) {
                  if (!
                  isEmpty($E[34]['value']) && !isEmpty($E[33]['value'])) {
                  if (
                  filter_var($E[34]['value'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4) !==false) {                  // IPv4-Format?
                  if (is_int($E[31]['value']) !==false) {                                                        // Zahl?
                                                  
                  $urlA "http://".$E[34]['value']."/%7E".$E[33]['value']."/iControl.php?c=apVolume&ap1=";     // für Volumen +/-
                  $urlB "http://".$E[34]['value']."/%7E".$E[33]['value']."/iControl.php?c=apDevice&ap1=";     // für LS Ein/Aus  
                        
                  // AirPlay Lautsprecher Ein/Aus:
                                              
                  if ($E[10]['value']!=&& $E[10]['refresh']==1) {
                  if (!
                  isEmpty($E[35]['value'])) {
                  $ctx=stream_context_create(array('http' => array('timeout' => )));        // 3 Sekunden Timeout
                  $r=file_get_contents($urlB.$E[35]['value'].'&p2='.$E[10]['value'],0,$ctx);  // komplette Antwort abwarten
                  }                                    

                  Zuletzt geändert von coliflower; 04.02.2016, 23:38.
                  Danke und LG, Dariusz
                  GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                  Kommentar


                    Zitat von panzaeron Beitrag anzeigen
                    Macht es nicht eventuell mehr Sinn ganz auf eine IP-Prüfung zu verzichten, damit auch Hostnamen verwendet werden können?
                    Das geht in die Richtung in die ich eigentlich hinaus wollte: auch Hostnamen muessen gewissen "Regeln" genuegen - das muesste man dann auch wieder verifizieren. Und jedesmal wenn eine neue TLD eingefuehrt wird (also gefuehlt alle 2 Monate) muss man dann seinen Code umbauen...
                    Ich taete auf solche Ueberpruefungen generell verzichten wollen - als "Programmieruebung" kann sowas aber sicher Spass machen.

                    Pingen taete ich vorher nicht (IMHO reichen dafuer deine 3s Timeout), aber man sollte sich vielleicht das Ergebnis der Abfrage anschauen um zu gucken ob ueberhaupt was sinnvolles zurueck geworfen wurde.
                    Und ob Macs WOL koennen? Die Frage habe ich mir - ehrlich gesagt - noch nie gestellt....
                    ¯\_(ツ)_/¯

                    gruesse :: Michael

                    Kommentar


                      Es geht hier doch um das interne Netz - nicht das gute alte Internet... Insofern dürfte sich die TLD/IP/... selten spontan ändern. Hostnamen mag ich nicht im Heimnetz - ist Overhead

                      Pingen kann man mit PHP nur mit Tricks - WOL ebenso. Aber gehen tut alles Notfalls auf Systemfunktionen (ping) zurückgreifen - Pseudocode: exec("ping ...")

                      Aber es geht auch einfacher: Wenn keine Antwort beim HTTP-Request kommt (Timeout) ist der Mac offline
                      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                      Kommentar


                        Wenn ich die Strings mit Playlist oder Tracknamen oder Albums, ... von iTunes via UDP-Listener ins Edomit (VISU) übertragen möchte ... wie kann man Sonderzeichen/Umlaute/Apostrophs/... übertragen ?
                        Danke und LG, Dariusz
                        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                        Kommentar


                          Einige Sonderzeichen werden rausgefiltert By Design. Umlaute etc. musst Du ggf. in UTF-8 kodieren - falls via UDP irgendwas anderes empfangen werden sollte (weiß ich ja nicht...).
                          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                          Kommentar


                            Irgendwo habe ich einen Knoten ...

                            ich sende via Edomi-Monitor den Wert 50 auf die GA 3/1/20 DPT5 (Wert aktualisieren = 50), OK
                            Diese GA ist am LBS-Eingang E20 verbunden, dort kann ich nach Live-Wert-Aktualisieren nichts am E20 sehen ...

                            Wenn ich den „Url“ via Terminal an iTunes-Skript verschicke dann wird die Lautstärke auf 50 gesetzt ...
                            curl 'http://10.0.100.150/%7Edariusz/iControl.php?c=apvolume&p1=Computer&p2=50'


                            PHP-Code:
                            if ($E=getLogicEingangDataAll($id)) {
                            if (!
                            isEmpty($E[34]['value']) && !isEmpty($E[33]['value'])) {
                            if (
                            filter_var($E[34]['value'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4) !==false) {                      // IPv4-Format?
                            if (is_int($E[31]['value']) !==false) {                                                                                                   // Zahl?
                                                            
                            $url "http://".$E[34]['value']."/%7E".$E[33]['value']."/iControl.php?c=";                                          // für LS Ein/Aus  

                            // $E[35]=Computer (vorgelegt) und ist nicht leer

                            if ($E[20]['value']!=&& $E[20]['refresh']==1) {
                            if (!
                            isEmpty($E[35]['value'])) {
                            $ctx=stream_context_create(array('http' => array('timeout' => )));        // 3 Sekunden Timeout
                            $r=file_get_contents($url.'apVolume&ap1='.$E[35]['value'].'&p2='.$E[20]['value'],0,$ctx);  // komplette Antwort abwarten
                            }
                            }
                            }
                            }
                            }


                            Kann jemand den Knoten lösen :-) ?
                            DANKE !!
                            Zuletzt geändert von coliflower; 06.02.2016, 01:19.
                            Danke und LG, Dariusz
                            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                            Kommentar


                              OK, nach „Entfernen“ von if (!isEmpty($E[35]['value'])) {
                              Nun kann ich den geschriebenen Wert am LBS-Eingang sehen, leider wir das Telegramm aber via LBS nicht verschickt … hat das etwas mit den in den der Terminal verwendeten CURL-Befehl zu tun ? Oder sollte der LBS-Code es trotzdem verschicken ?
                              Wenn ich den selben String „manuell“ via Konfiguration >> HTTP/UDP/SHELL verschicke, dann kommt der String am Mac an ...

                              Der Empfang via LBS funktioniert ja ... bis jetzt ohne Auffälligkeiten ...

                              Den Code siehe oben, hat bis jetzt niemand beanstandet ;-)

                              ​Ein Tip :-) ?
                              Zuletzt geändert von coliflower; 06.02.2016, 08:31.
                              Danke und LG, Dariusz
                              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                              Kommentar


                                Wenn ich es so verschicke, dann geht es auch nicht ...

                                $url = 'http://10.0.100.150/%7Edariusz/iControl.php?c=apVolume&ap1=Computer&ap2=60';

                                if ($E[20]['value']!=0 && $E[20]['refresh']==1) {
                                $ctx=stream_context_create(array('http' => array('timeout' => 3 ))); // 3 Sekunden Timeout
                                $r=file_get_contents($url,0,$ctx); // komplette Antwort abwarten
                                }


                                Liegt es jetzt am String, obwohl dieser genauso ist wenn er unter Konfiguration >> HTTP/UDP/SHELL verwendet wird …
                                Oder am Code selbst ?

                                Danke und LG, Dariusz
                                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                                Kommentar

                                Lädt...
                                X