Sigi M.: URL per Button an Mediola Gateway senden

Hallo wertes Forum

Ich bin Anfänger mit HTML und möchte ein Mediola Gateway ansteuern. Das Gateway ist über Ethernet verbunden und sendet Infrarotbefehle an Fernseher, CD Spieler etc. und soll über eine Webpage bedient werden.

Wenn ich die folgende URL in die Browserleiste kopiere und Enter betätige, wird das Gateway problemlos angesprochen, und führt den gewünschten Befehl aus (sendet das gewünschte IR Signal aus)

http://192.168.2.35/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2

Kann mir jemand erklären, was diese URL im Einzelnen macht? Soweit ich es verstehe, hat das Gateway die IP Adresse 192... was macht command ? ist das ein Ordner auf dem Gateway? mit dem ersten "?" wird eine Get Variable gefüttert, wie ich sie bspw in PHP auslesen kann genauso mit dem zweiten "?"

ist das so?

Das Ziel ist es, diese URL von einem Button auf einer Webpage an das Gateway abzusetzen. Ich weiss aber nicht, wie ich den Button programmieren muss, und bin über jede Hilfe dankbar! Der Code darf nicht auf eine Antwort des Gateways warten, wenn ich es richtig sehe. Ich bin noch am Anfang der Ausienandersetzung mit dem Gateway.

Die Form würde ich mit FrontPage erstellen, der Webserver mit der Page würde die Page Handys / Tablets / PC zur Bedienung zur Verfügung stellen.

Viele Grüße Sigi

  1. Hallo Sigi,

    http://192.168.2.35/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2

    Das ist ein URI (universal resource identificator). Er folgt dem Schema http, er richtet sich an das Gerät an der Adresse 192.168.2.35, und zwar am IP Port 80 (was der Default für http ist), und er ruft dort die Ressource "command" ab.

    Bei diesem Abruf werden zwei Parameter übergeben: code und XY_FNC.

    Der Server, der auf 192.168.2.35 am Port 80 auf http Anfragen lauscht, hat nun die Aufgabe, aus der Ressourcenabfrage

    /command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2

    etwas zu machen. Ein klassischer Webserver versucht, Ressourcenabfragen auf Dateien abzubilden, die er dann ausliefert oder - beispielsweise bei PHP Scripten - ausführt.

    Man KANN - beispielsweise auf einem Apache - über URL Rewrites hergehen und /command in ein command.php übersetzen. Dieses würde dann zwei GET Parameter erhalten: code und XC_FNC, und könnte daraus dann irgendwelche Aktionen ableiten.

    Das muss das Mediola Gateway aber nicht zwingend tun. Es bekommt einfach diese Zeichenkette /command...Send2 und darf sie nach Laune interpretieren. Es darf sich an die Regeln für URIs halten, sollte das auch, muss aber nicht. Abfragen wie

    http://192.168.2.35/bitte_schalte_den_fernseher_aus
    http://192.168.2.35/bitte_mach_den_ton_etwas_leiser

    könnte man durchaus ebenfalls zulassen.

    Für Dich bedeutet das: du musst auf deiner Seite die entsprechenden Requests an das Mediola Gateway schicken. Das geht im einfachsten Fall über einen Link, d.h. du schreibst auf deiner Webpage

    <a href="http://192.168.2.35/bitte_schalte_den_fernseher_aus">Fernseher aus</a>
    

    naja, oder mit einer command... URL. Die kennst Du sicherlich besser als ich.

    Die Benutzererfahrung ist da aber nicht so gut. Die Folge eines solchen Links dürfte ein leerer Bildschirm sein, oder einer, der fast leer ist und auf dem nur noch "ok" steht.

    Schöner geht das mit JavaScript. Aber dann stößt Du auf ein neues Problem: XSS (Cross Site Scripting). Du bist auf Site A (deine Webseite) und willst eine Ressource auf Site B (Mediola) abrufen (dieses /command Dings). Das ist verboten. Der Browser kann nämlich nicht zwischen deiner Mediola-Steuerung und einer bösen Seite unterscheiden, die dein Bankkonto plündern will.

    Die einzige Möglichkeit, die ich kenne, um das zu umgehen, ist ein spezieller Aufruf mit dem fetch-API, dem Du den mode-Parameter auf "no-cors" setzt. Der Aufruf wird dann durchgeführt, aber du bekommst auf dem Weg keine Daten.

       fetch("http://192.168.2.35/command?...Send2", { mode: "no-cors" });
    

    Sorry. Das ist lästig. Bedanke Dich bei den Piraten da draußen, die solche Schranken nötig machen. Das CORS Konzept setzt eine aktive Mitwirkung der aufgerufenen Seite voraus (also das Mediola Gateway), es muss einen passenden CORS Header zurückgeben der Aufrufe von beliebigen Seiten gestattet (Access-Control-Allow-Origin: *). Vielleicht liefert es den ja, das müsstest Du einmal evaluieren.

    Eine andere Alternative ist ein Webserver mit PHP im gleichen Netz wie das Mediola Gateway, von dem Du deine Seite lädst. Deine Seite kann mit AJAX Techniken Requests an PHP Scripte auf dem Webserver schicken, und die leiten die Aufrufe nach Mediola durch. An der Stelle hast Du keine XSS Sperre mehr.

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf herzlichen Dank für Deine umfassende und erhellende Beschreibung! Habe mich sehr gefreut so schnell eine Antwort zu bekommen !!

      Ich habe einen Kurs PHP I besucht, PHP II läuft gerade (zweite von vier Wochen). Leider ohne Vorkenntnisse von HTML und CSS, was den Kurs nicht gerade leicht für mich macht, aber es geht schon irgendwie..

      Ich verstehe jedenfalls, was Du mir hier beschreibst, vielen Dank nochmal für Deine Mühe!

      Hallo Sigi,

      ....

      Der Server, der auf 192.168.2.35 am Port 80 auf http Anfragen lauscht, hat nun die Aufgabe, aus der Ressourcenabfrage

      /command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2

      etwas zu machen. Ein klassischer Webserver versucht, Ressourcenabfragen auf Dateien abzubilden, die er dann ausliefert oder - beispielsweise bei PHP Scripten - ausführt

      ....

      Das muss das Mediola Gateway aber nicht zwingend tun. Es bekommt einfach diese Zeichenkette /command...Send2 und darf sie nach Laune interpretieren. Es darf sich an die Regeln für URIs halten, sollte das auch, muss aber nicht. Abfragen wie

      http://192.168.2.35/bitte_schalte_den_fernseher_aus http://192.168.2.35/bitte_mach_den_ton_etwas_leiser

      könnte man durchaus ebenfalls zulassen.

      .... Die Schnittstelle zum Gateway benutzt direkt die Infrarot-Codes, so das das Gateway gar nicht weiss, was es damit auslöst, und keine weitere Konfiguration hinterlegt ist, verstehe aber was Du meinst.

      Die Benutzererfahrung ist da aber nicht so gut. Die Folge eines solchen Links dürfte ein leerer Bildschirm sein, oder einer, der fast leer ist und auf dem nur noch "ok" steht.

      Ja, das war wohl bisher das Problem mit dem Button, das Gateway liefert keine Antwort

      Schöner geht das mit JavaScript.

      ....

      Der Browser kann nämlich nicht zwischen deiner Mediola-Steuerung und einer bösen Seite unterscheiden, die dein Bankkonto plündern will.

      auch klar

      Die einzige Möglichkeit, die ich kenne, um das zu umgehen, ist ein spezieller Aufruf mit dem fetch-API, dem Du den mode-Parameter auf "no-cors" setzt. Der Aufruf wird dann durchgeführt, aber du bekommst auf dem Weg keine Daten.

         fetch("http://192.168.2.35/command?...Send2", { mode: "no-cors" });
      

      Das CORS Konzept setzt eine aktive Mitwirkung der aufgerufenen Seite voraus (also das Mediola Gateway)

      .... Das Gateway wird normalerweise über ein APP bedient, und liefert nichts zurück, soweit ich es bisher herausgefunden habe. Wenn man eine neue Version der APP installiert, muss man nur alles neu konfigurieren, ausserdem läuft die APp nicht auf jedem Device. UNd es ist eine gute Übung zum Programmieren und für das Verständnis...

      Eine andere Alternative ist ein Webserver mit PHP im gleichen Netz wie das Mediola Gateway, von dem Du deine Seite lädst. Deine Seite kann mit AJAX Techniken Requests an PHP Scripte auf dem Webserver schicken, und die leiten die Aufrufe nach Mediola durch. An der Stelle hast Du keine XSS Sperre mehr.

      Auf die letztgenannte Lösung wird es wohl, angesichts meines aktuell laufenden PHP Kurses, hinauslaufen. Dazu habe ich auch gleich noch eine Frage: Das PHP Script kann doch auch direkt vom Button aufgerufen werden, (habe ich noch nicht gemacht) läuft dann auf dem Server und kann den Befehl dann direkt an das Gateway absetzen, oder wird das auch vom Browser überwacht? Kann doch eigentlich nicht sein, weil der Code des Buttons auf dem Webserver abläuft, ausserhalb des Browser Zugriffs?!? (Die Page mit dem Button stellt der Webserver auf der Synology im selben Netz zur Verfügung)

      Würde es dann reichen, einfach eine Datei auf das Gateway zu schreiben, ab "command" (einschliesslich), oder welcher Befehl wäre hierfür sinnvoll / zielführend?

      Ich verstehe das schon relativ gut, aber habe auf dem Gebiet noch viel zu wenig Erfahrung.(> 20 Jahre Softwareentwicklung, aber auf einem anderen Gebiet, Visual Basic, früher mal C).

      Viele Grüße Sigi

      1. Hallo Sigi,

        Auf die letztgenannte Lösung wird es wohl, angesichts meines aktuell laufenden PHP Kurses, hinauslaufen. Dazu habe ich auch gleich noch eine Frage: Das PHP Script kann doch auch direkt vom Button aufgerufen werden, (habe ich noch nicht gemacht) läuft dann auf dem Server und kann den Befehl dann direkt an das Gateway absetzen, oder wird das auch vom Browser überwacht? Kann doch eigentlich nicht sein, weil der Code des Buttons auf dem Webserver abläuft, ausserhalb des Browser Zugriffs?!? (Die Page mit dem Button stellt der Webserver auf der Synology im selben Netz zur Verfügung)

        Würde es dann reichen, einfach eine Datei auf das Gateway zu schreiben, ab "command" (einschliesslich), oder welcher Befehl wäre hierfür sinnvoll / zielführend?

        Ich kenne das Gateway nicht und weiß deshalb nicht, ob command dort ein real existierendes Script ist oder eine virtuelle URI, die vom Mediola-Server ohne Bezug auf das Filesystem interpretiert wird. Ich weiß auch nicht, ob Du das Gateway als Webserver einsetzen kannst.

        Aber es ist auf jeden Fall nicht Sinn der Sache, dorthin eine Datei zu schreiben. Wenn Du eine HTML-Seite auf das Mediola Gateway schreiben und von dort laden kannst, dann hast Du eh kein Problem, dann besteht das XSS Hindernis nicht. Dann brauchst Du keinen PHP-Vermittler, dann geht es direkt aus Javascript mit Fetch oder XMLHttpRequest. Probleme hast Du nur, wenn deine HTML Seite von einer anderen Adresse geladen werden muss.

        Wenn Du es mit PHP von einem "Nicht-Mediola"-Server tun willst: Das Gateway reagiert auf HTTP Requests, d.h. dein PHP Script muss genau das tun. Das Auslösen eines HTTP Requests mit PHP besteht im Lesen einer Datei von dieser URL, das kannst Du mit file_get_contents() oder curl() tun. Einen nackten HTTP Request mit PHP auszulösen ist mühsam. Entweder programmierst Du das auf Socket-Ebene selbst, oder besorgst Dir eine PHP Library wie Guzzle oder php-restclient. Problem bei den Libraries ist, dass die Lernkurve dann erst richtig Fahrt aufnimmt, weil die über Composer installiert werden wollen, d.h. du hast dann gleich die nächste Library drin. Das könnte anstrengend werden.

        Probier's aus PHP also erstmal mit file_get_contents, das dürfte am einfachsten sein. Einfach die Mediola-URL als Dateiname übergeben.

        Rolf

        --
        sumpsi - posui - clusi
  2. was macht command ? ist das ein Ordner auf dem Gateway?

    Es ist ein virtueller Ordner. Hinter dem verbirgt sich eine Ressource die in der Serverkonfiguration auf eine für den Server ausführbare Datei umgeschrieben wird. Denn es soll ja was gemacht werden.

    Den dazu notwendigen URL kannst Du verlinken wie gewöhnlich. Wenn Du einen Button haben willst, brauchst Du ein Formluar:

    <form action="http://192.168.2.35/command">
      <button name="XC_FNC" value="Send2"> Do it! </button>
      <input type="hidden" name="code" value="19082401000900000100E0587D0101000100000000000100000000" />
    </form>
    

    So steht der URL ohne Parameter in action. Die Parameter hingegen werden auf Eingabefelder aufgeteilt wobei eines der Eingabefelder ein button sein muss welcher den Schlüsselparameter als name/value hat.

    Der Browser hängt dann beim Klick alles aneinander. MFG

    1. Hallo Email ich werde den Button, wie von Dir beschrieben, ausprobieren. Das wäre wohl die einfachste Form der Lösung.

      Ich melde mich wieder, sobald ich ein Ergebnis habe.

      Viele Grüße Sigi

      1. Klar, mach. Was per Klick an das Mediola Gateway gesendet wird, siehst Du in der Adresszeile deines Browsers. Und das Mediola Gateway liefert auf jeden Fall etwas zurück, mindestens den HTTP Status.

        So ist die dazugehörige App auch nur ein Proxy der ganz einfach tickt. Zum Nachbau reichen Grundkenntnisse in PHP und hilfreich dazu ist ein Zettel mit den Kommandos des Mediola Gateway und wie die über einen eigenen Proxy übersetzt werden können kannst Du selbst festlegen (siehe Rolf B). Und auch wie Dein Proxy den Responsestatus des Mediola Gateway in eine für den Anwender verständliche Antwort übersetzt.

        Schöne Aufgabe, viel Spaß und Erfolg dabei!

        1. Hallo Email

          Danke für die Infos und die motivierenden Worte!

          VG Sigi

  3. Liebe(r) Sigi,

    http://192.168.2.35/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2

    wie der Aufruf sich genau zusammensetzt, hat @Rolf B ja schon erklärt.

    Das Gateway ist über Ethernet verbunden und sendet Infrarotbefehle an Fernseher, CD Spieler etc. und soll über eine Webpage bedient werden.

    Gibt "das Gateway" denn eine Antwortseite bei solch einem Aufruf zurück? Und wenn ja, wie sieht die aus?

    Wenn ich die folgende URL in die Browserleiste kopiere und Enter betätige, wird das Gateway problemlos angesprochen, und führt den gewünschten Befehl aus (sendet das gewünschte IR Signal aus)

    Und was kommt da als Ergebnis im Browser an?

    Das Ziel ist es, diese URL von einem Button auf einer Webpage an das Gateway abzusetzen.

    Du willst doch eine virtuelle Fernbedienung basteln. Die Buttons sollen nicht auf eine neue Seite verlinken, sondern "nur" etwas auslösen. Dazu fiele mir als HTML-only-Lösung spontan ein klassisches Frameset oder iFrame ein, bei dem Deine "Buttons" in Wirklichkeit Hyperlinks sind, die ihr Ziel nicht im gegenwärtigen Dokument, sondern in einem Frame aufrufen.

    Ein Frameset teilt das Browserfenster in Unterfenster (Frames) ein:

    <frameset>
      <frame src="fernbedienung.html"></frame>
      <frame name="gateway"></frame>
    </frameset>
    

    Das bedeutet, dass Du zwei HTML-Dateien hast, wovon in einer Deine Fernbedienungsseite steht, in einer anderen das Frameset, welches sie lädt. Das mag umständlich sein, ist aber historisch bedingt so.

    Mit einem iFrame hast Du ein "reguläres" Dokument, in dem sich eine Art Unterfenster befinden kann:

    ...<body>
      <h1>Meine Fernbedienung</h1>
      ...
      <iframe name="gateway"></iframe>
    </body>...
    

    Das Dokument mit dem iFrame ist sicherlich praktischer, da Du nur eine HTML-Datei benötigst.

    Die Links sehen dann jeweils so aus:

    <a target="gateway" href="http://192.168.2.35/command?...">Button-Text</a>
    

    Das target-Attribut dient dazu, dass das Ziel nicht im eigentlichen Fenster (Frame), sondern im "gateway" benannten Fenster geöffnet wird.

    Damit die Links so aussehen wie Buttons, benötigst Du passende Layoutregeln. Das macht man mit CSS.

    Liebe Grüße

    Felix Riesterer

    1. Hallo Felix,

      Gibt "das Gateway" denn eine Antwortseite bei solch einem Aufruf zurück? Und wenn ja, wie sieht die aus?

      In einem weiteren Beitrag erwähnt Sigi, das Gateway würde "nichts" antworten. Im Sinne eines korrekten HTTP-Request-Response-Zyklus wird das vermutlich ein Status 204 sein.

      Wenn ich die folgende URL in die Browserleiste kopiere und Enter betätige, wird das Gateway problemlos angesprochen, und führt den gewünschten Befehl aus (sendet das gewünschte IR Signal aus)

      Und was kommt da als Ergebnis im Browser an?

      "Nichts". ;-)

      Du willst doch eine virtuelle Fernbedienung basteln. Die Buttons sollen nicht auf eine neue Seite verlinken, sondern "nur" etwas auslösen. Dazu fiele mir als HTML-only-Lösung spontan ein klassisches Frameset oder iFrame ein, bei dem Deine "Buttons" in Wirklichkeit Hyperlinks sind, die ihr Ziel nicht im gegenwärtigen Dokument, sondern in einem Frame aufrufen.

      Wenn die Antwort wirklich nur "204 No Content" ist, können es auch ganz gewöhnliche Links sein.

      Ciao,
       Martin

      PS: Dass das frames-Konzept im Wiki als deprecated ausgewiesen ist, kann ich ja noch nachvollziehen. Aber das Thema quasi verleugnen, indem man keine Information dazu liefert, finde ich auch nicht okay.

      --
      Computer müssen weiblich sein: Eigensinnig, schwer zu durchschauen, immer für Überraschungen gut - aber man möchte sie nicht missen.
    2. Hallo Felix,

      das Minus ist nicht von mir, aber es könnte zumindest als "Vorsicht" Symbol berechtigt sein. Ich hatte einen iframe ganz bewusst nicht vorgeschlagen, weil ich nämlich befürchte, dass ein Refresh der angezeigten Seite (User drückt F5 oder wischt auf dem Smartphone die Steuer-Seite irrtümlich nach unten) den iframe mit refresht und dadurch die letzte Aktion ein zweites Mal auslöst.

      Wenn iframe, dann müsste man dagegen etwas unternehmen. Ich würde das mit JS machen, würde die Kommando-URL ins src Attribut eintragen und per setTimeout eine Funktion registrieren, die die URL nach 100ms wieder durch about:blank ersetzt. Per setTimeout deshalb, damit der Browser Zeit hat, aus der src-Änderung einen Request zu machen. Die 100ms kann man dann experimentell so weit reduzieren, dass es gerade noch funktioniert, optimal wäre 0.

      Rolf

      --
      sumpsi - posui - clusi
      1. Lieber Rolf,

        weil ich nämlich befürchte, dass ein Refresh der angezeigten Seite (User drückt F5 oder wischt auf dem Smartphone die Steuer-Seite irrtümlich nach unten) den iframe mit refresht und dadurch die letzte Aktion ein zweites Mal auslöst.

        und wenn schon? Aber da im Quelltext kein src-Attribut notiert ist, sollte ein Refresh der Seite einen leeren (i)Frame laden. Erst mit den Buttons/Links wird dort ein (leeres) Dokument hineingeladen. Deine Sorge liesse sich am besten entkräften, wenn man das einmal baut und testet.

        Ich würde das mit JS machen,

        Klar, Du schon. Aber der OP schrieb, dass er mit HTML anfängt (gepaart mit PHP-Kursen). Daraus schließe ich messerscharf, dass JavaScript noch außerhalb seiner Möglichkeiten liegt. Also bleibt vorerst nur eine HTML-only-Lösung, welche vielleicht Uralt-Methoden heraufbeschwört, aber immerhin ein gangbarer Weg ist, der sogar zum Erfolg führen sollte. Und weil das Projekt streng lokal im heimischen Netzwerk verbleibt, muss das auch sonst niemand bedienen können.

        Liebe Grüße

        Felix Riesterer

        1. Hallo Felix,

          yup, hassu recht.

          Rolf

          --
          sumpsi - posui - clusi
  4. Hallo,

    genauso mit dem zweiten "?"
    

    Du hast dich verzählt. Die einzelnen Parameter werden durch „&“ voneinander getrennt.

    Gruß
    Kalk

  5. Hallo liebe Leute

    ich bin ja ganz fasziniert von den vielen Antworten und der regen Beteiligung an dem Thema 😍 Ausserdem ist der Ton in diesem Forum wirklich sehr sehr gut, was ich auch erwähnenswert finde!

    Mein PHP Kurs startet gleich, so dass ich erst im Laufe des Nachmitttags / Abends antworten kann, das war einfach zu viel Input, um es "mal kurz" zu beantworten. Ganz lieben Dank vorerst an alle !!

    Bis heute abend Viele Grüße Sigi

    PS: männlich, 58 Jahre alt, seit > 25 Jahren Softwareentwicklung, davon 20 Jahre Lotus Notes, aber kein Javescript etc... aber kommt... 😎

    1. @@Sigi M.

      Ausserdem ist der Ton in diesem Forum wirklich sehr sehr gut

      Warte, bis du es richtig kennenlernst! 🤣

      Re Framesets: Ich hab auch letztens eins gebaut.

      LLAP 🖖

      --
      „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
      „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

      —Marc-Uwe Kling
    2. Hallo Sigi,

      ich bin ja ganz fasziniert von den vielen Antworten und der regen Beteiligung an dem Thema 😍 Ausserdem ist der Ton in diesem Forum wirklich sehr sehr gut, was ich auch erwähnenswert finde!

      das ist besonders erfreulich, dass du das sagst, denn schon oft wurde der Umgangston hier im Forum als überheblich, kaltschnäuzig oder sogar ganz direkt unfreundlich kritisiert. Vielleicht haben wir uns im Lauf der Zeit wirklich gebessert.

      So long,
       Martin

      --
      Computer müssen weiblich sein: Eigensinnig, schwer zu durchschauen, immer für Überraschungen gut - aber man möchte sie nicht missen.
    3. Hausautomatisierung ist ein schönes Thema. Auf meinen Hobbyseiten schreibe ich darüber. Die LibUSB ist ja auch in c geschrieben. Und Module zur Funkschaltung und Ansteuerung von USB Geräten, auf LibUSB basierend, gibts auch von mir auf CPAN. MFG

  6. So, nochmal hallo an alle, die so eifrig mitgedacht haben! Ich schreibe unten dran, weil ich nicht jeden einzelnen Beitrag beantworten möchte, danke dafür.

    Ich finde es hochinteressant, was mit dem ganzen "neumodischen Zeug" 😉so geht, Hammer!!

    Also, zunächst nochmal zu den Voraussetzungen:

    • Das Gateway habe ich nicht selber im Zugriff, sondern ein Freund von mir in München (300 km weit weg) hat es in Benutzung. Es ist also im Einsatz und wird benutzt.
      • Das Mediola antwortet, anders als zuerst beschrieben, und zwar mit {XC_SUC}, wenn es fuktioniert hat (also der IRot-Befehl vom Mediola verstanden wurde) sorry, da hatten wir ein Missverständnis.

    der Kommunikationsfehler (zwischen Jürgen und mir) wurde mit dem Script von Email validiert - perfekt

    So, der zweite, für mich einfache Schritt, ist die PHP Funktion fiel_get_content, die Rolf B liebenswürdigerweise "ins Spiel" gebracht hat.👍 Die wird auf einem Webserver im lokalen Netz abgelegt (der PHP kann) Sie liegt auf einer Synology. Folgenden Code habe ich geschrieben, und warte nun auf die Antwort von Jürgen, ob wir damit nun erfolgreich sind.

    
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Mediola Versuch 2</title>
        </head>
        <body>
            <p>Mediola 2 mit php file_get_contents</p>
                <?php
                //$request = "http://localhost/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2";
                $request = "http://192.168.2.35/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2";
                echo "(A) Start der Abfrage mit file_get_contents";
                $return = file_get_contents( $request );
                echo "(B) Ende der Abfrage<br><br>" ;
                echo "Wenn zwischen der Ausgabe von (A) und (B) keine Leerzeile, Bestätigung oder Fehlermeldung  o.ä. ausgegeben wurde, konnte die Rückgabe von Mediola unterdrückt werden, und file_get_content hat funktioniert<br><br>";
                echo "Die Rückgabe (zwischen den spitzen Klammern am Ende dieser Zeile) wurde von file_get_content über die Variable \$return abgefangen. <".$return.">";
                ?>
        </body>
    </html
    
    

    Ganz herzlichen Dank, bis hierhin erstmal. Ich melde mich, sobald es ein Ergebnis gibt. Wen es interessiert, was man damit so Schönes machen kann, der kann den Link aus meinem OneDrive öffnen: mit dem Tablet zu Hause auf dem Sofa

    Viele Grüße Sigi

    1. Hallo,

      Ich schreibe unten dran, weil ich nicht jeden einzelnen Beitrag beantworten möchte, danke dafür.

      ja, sehr vernünftig.

      • Das Gateway habe ich nicht selber im Zugriff, sondern ein Freund von mir in München (300 km weit weg) hat es in Benutzung. Es ist also im Einsatz und wird benutzt.

      Was ich noch nicht verstanden habe: Was genau ist dieses Gateway?
      Und ist es via Internet (HTTP) erreichbar, oder simulierst du gerade auf dem Trockenen? Wenn simulieren, wie und womit?

      • Das Mediola antwortet, anders als zuerst beschrieben, und zwar mit {XC_SUC}, wenn es fuktioniert hat (also der IRot-Befehl vom Mediola verstanden wurde) sorry, da hatten wir ein Missverständnis.

      Also mit dem String "{XC_SUC}" als Nutzinhalt und HTTP-Status 200?

      <!DOCTYPE html>
      <html>
          <head>
              <meta charset="UTF-8">
              <title>Mediola Versuch 2</title>
          </head>
          <body>
              <p>Mediola 2 mit php file_get_contents</p>
                  <?php
                  //$request = "http://localhost/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2";
                  $request = "http://192.168.2.35/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2";
                  echo "(A) Start der Abfrage mit file_get_contents";
                  $return = file_get_contents( $request );
                  echo "(B) Ende der Abfrage<br><br>" ;
                  echo "Wenn zwischen der Ausgabe von (A) und (B) keine Leerzeile, Bestätigung oder Fehlermeldung  o.ä. ausgegeben wurde, konnte die Rückgabe von Mediola unterdrückt werden, und file_get_content hat funktioniert<br><br>";
                  echo "Die Rückgabe (zwischen den spitzen Klammern am Ende dieser Zeile) wurde von file_get_content über die Variable \$return abgefangen. <".$return.">";
                  ?>
          </body>
      </html
      

      Die letzte echo-Anweisung wird dich vermutlich vor Rätsel stellen, wenn du nur die Ausgabe im Browser anschaust und nicht den generierten Quelltext. Um die Zeichen '<' und '>' im HTML-Kontext "wörtlich" (literally) auszugeben, müssen sie den Regeln von HTML entsprechend maskiert werden, sonst wird der Browser versuchen, "<...>" als HTML-Tag zu interpretieren und das ganze wohl ignorieren. Also verwende &lt; und &gt;.

      Ciao,
       Martin

      --
      Computer müssen weiblich sein: Eigensinnig, schwer zu durchschauen, immer für Überraschungen gut - aber man möchte sie nicht missen.
      1. Hallo Martin

        das Mediola Gateway: Gateway

        die Ausgabe nach Ablaufen auf localhost (Quelltext) Seitenquelltext nach Test auf localhost

        Da wo Leerzeilen sind, habe ich manuell umgebrochen..

        Die spitzen Klamern stehen innerhalb des PHP Codes.

        Ja tatsächlich habe ich keine Möglichkeit meine Code live zu testen, muss ich immer nach München mailen, und dann auf Feedback warten...

        VG Sigi

        PS: Das war mein zweites HTML Script

        1. Hallo,

          das Mediola Gateway: Gateway

          *grml* ... warum gibst du einen Google-Link an, anstatt direkt auf das PDF-Dokument zu verlinken?
          Okay, also im Grunde ein über HTTP fernsteuerbarer Infrarot-Sender.

          die Ausgabe nach Ablaufen auf localhost (Quelltext) Seitenquelltext nach Test auf localhost

          *grml* ... warum als Bild, und nicht als Text? Und warum lädt das Bild permanent neu?
          Okay, aber du siehst dir die Ausgabe tatsächlich auf Quelltextebene an.

          Die spitzen Klamern stehen innerhalb des PHP Codes.

          Ja, aber sie werden von dort aus in dem HTML-Kontext injiziert. Deshalb müssen sie korrekt maskiert werden, damit sie auch richtig angezeigt werden.

          Ja tatsächlich habe ich keine Möglichkeit meine Code live zu testen, muss ich immer nach München mailen, und dann auf Feedback warten...

          Verstehe. Das sind keine wirklich prickelnden Testbedingungen ...

          PS: Das war mein zweites HTML Script

          HTML ist keine Scriptsprache, sondern eine Markup- oder Auszeichnungssprache. Üblicherweise spricht man da von einem HTML-Dokument.

          Schönen Abend noch,
           Martin

          --
          Computer müssen weiblich sein: Eigensinnig, schwer zu durchschauen, immer für Überraschungen gut - aber man möchte sie nicht missen.
          1. Mahlzeit ...

            warum du mir gestern abend per PN geantwortet hast, will mir nicht einleuchten. Diese zusätzlichen Informationen interessieren andere hier doch bestimmt auch.

            *grml* ... warum gibst du einen Google-Link an, anstatt direkt auf das PDF-Dokument zu verlinken?
            Okay, also im Grunde ein über HTTP fernsteuerbarer Infrarot-Sender.

            der kann noch Einiges mehr ..

            Das geht aus der Kurzbeschreibung nicht hervor. Danach ist es einfach eine etwas aufgebohrte IR- und Funkfernbedienung, die über Netzwerk programmierbar und steuerbar ist.

            *grml* ... warum als Bild, und nicht als Text?

            weil die Funktion Quelltext hier im Forum den Quelltext aus dem Browser nicht richtig formatiert.

            Das kann ich mir nicht vorstellen. Im Gegenteil, HTML formatiert sie sogar einschließlich Syntax-Highlighting.

            Und warum lädt das Bild permanent neu?

            musst Du Microsoft fragen, Dropbox.. finde ich auch nicht schön

            Aber trotzdem nutzt du das und willst es auch anderen zumuten.

            Ich kann weder im Quelltext aus dem Browser noch in der Ausgabe ein Problem erkennen

            Die Rückgabe (zwischen den spitzen Klammern am Ende dieser Zeile) wurde von file_get_content über die Variable $return abgefangen. <>
            

            Das ist aber nicht die Browser-Ausgabe, sondern der Quelltext. In der Ausgabe würde <> nicht angezeigt. Außer man macht es richtig und notiert sie als &lt; und &gt; im Quelltext.

            Schönes Wochenende,
             Martin

            --
            Nur den frühen Vogel frisst der Wurm.
            1. Lieber Martin,

              PN weil:

              die Beschwerde, dass ich nicht direkt auf das PDF Dokument verlinkt habe, und dass Dropbox zweimal lädt, halte ich nicht für wichtig für Andere und vorsichtig ausgedrückt, für eine Lapalie.

              Dass der Code von mir in ein eigenes Fenster kopiert werden kann (ich in der Lage dazu bin), siehst Du in einem meiner Beiträge vor Deinem Hinweis. Bei der Ausgabe des Browserquelltextes in ein Codefenster hat es leider nicht geklappt, deshalb der Screenshot. Und das macht viel mehr Arbeit als einen Code zu pasten...

              Der von Dir als Sourcecode "erkannte" Code ist tatsächlich der Quelltext, den der Browser anzeigt, wenn man ihn mit der rechten Maustaste darum bittet.

              Insgesamt hat Dein Beitrag (aus meiner Perspektive) keinen Mehrwert für die Allgemeinheit, und ich habe ihn per PN beantwortet, um das Forum nicht mit solchen Beiträgen zu belasten. Der Stil, den Du durchziehst, und die Sachen, um die es Dir geht, verursachen bei mir Magengrummeln.

              Leider zwingt mich Deine Aktion doch dazu hier auf Deinen Beitrag zu antworten. Ich wollte gerne den Ball flach halten, indem ich Dir persönlich antworte. Das ist jetzt aber auch die erste und letzte Antwort, die ich auf diesem Niveau geben werde. Nachdem Du meine PN aber sowieso ins Forum stellst (was mir ganz doll gefallen hat!!!), kann ich auch gleich hier schreiben. Ich bitte das zu entschuldigen!

              Viele Grüße Sigi

              1. Hallo Sigi,

                PN weil:

                die Beschwerde, dass ich nicht direkt auf das PDF Dokument verlinkt habe, und dass Dropbox zweimal lädt, halte ich nicht für wichtig für Andere und vorsichtig ausgedrückt, für eine Lapalie.

                nein, das sehe ich nicht so. Das sind Aspekte, die die Bereitschaft, dir zu helfen, mindern. Ich habe es trotzdem versucht.
                Außerdem lädt das Bild bei deinem Cloud-Anbieter nicht zweimal, sondern endlos immer wieder.

                Dass der Code von mir in ein eigenes Fenster kopiert werden kann (ich in der Lage dazu bin), siehst Du in einem meiner Beiträge vor Deinem Hinweis. Bei der Ausgabe des Browserquelltextes in ein Codefenster hat es leider nicht geklappt, deshalb der Screenshot. Und das macht viel mehr Arbeit als einen Code zu pasten...

                Richtig, und macht es auch dem Hilfsbereiten schwerer.

                Insgesamt hat Dein Beitrag (aus meiner Perspektive) keinen Mehrwert für die Allgemeinheit

                Für dich hoffentlich schon; für die Allgemeinheit insofern, dass andere auf die genannten Themen eingehen können, dass nicht dieselben Hinweise mehrfach gegeben werden, und dass man auch mich korrigieren kann, wenn ich Unsinn verzapfe.
                Das ist ein öffentliches Forum, und Fachthemen aus einem Posting ins Hinterzimmer zu verlagern, finde ich unhöflich gegenüber der Allgemeinheit. Es ist kein Zufall, dass PN als Abkürzung für Persönliche Nachricht steht.

                Der Stil, den Du durchziehst, und die Sachen, um die es Dir geht, verursachen bei mir Magengrummeln.

                Wenn du konstruktiv sein willst, werde bitte etwas konkreter. Ich versuche, anständig und höflich zu bleiben, aber sachliche Mängel spreche ich trotzdem direkt an.
                Ich verhalte mich so, wie ich mir von anderen auch wünsche, dass sie sich mir gegenüber verhalten.

                Leider zwingt mich Deine Aktion doch dazu hier auf Deinen Beitrag zu antworten.

                Und das ist gut so.[tm]

                Ich wollte gerne den Ball flach halten, indem ich Dir persönlich antworte. Das ist jetzt aber auch die erste und letzte Antwort, die ich auf diesem Niveau geben werde. Nachdem Du meine PN aber sowieso ins Forum stellst (was mir ganz doll gefallen hat!!!), kann ich auch gleich hier schreiben. Ich bitte das zu entschuldigen!

                Nein, nicht entschuldigen - das soll so sein!

                Schönen Abend noch,
                 Martin

                --
                Computer müssen weiblich sein: Eigensinnig, schwer zu durchschauen, immer für Überraschungen gut - aber man möchte sie nicht missen.
  7. Hallo an Alle

    Der von Rolf B empfohlene Ansatz (bzw. Lösung) mit file_get_content hat tatsächlich problemlos und auf Anhieb funktioniert. Ganz lieben Dank an Rolf!! Jürgen und ich haben uns sehr darüber gefreut!! Er besticht vor allem durch die unkomplizierte Kürze.👌

    Nochmal ganz herzlichen Dank an Alle, die sich mit Ihren Lösungsansätzen und Ideen beteiligt haben.

    Nun hier nochmal die Auflösung, die will ich nicht vorenthalten :-)

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Mediola Versuch 2</title>
        </head>
        <body>
            <p>Mediola 2 mit php file_get_contents</p>
                <?php
                $request = "http://192.168.2.35/command?code=19082401000900000100E0587D0101000100000000000100000000&XC_FNC=Send2";
                echo file_get_contents( $request );
                ?>
        </body>
    </html
    
    

    Dieses Script liegt auf dem Webserver und wird über eine Page aufgerufen, die über ein Device wie Handy, Tablet oder PC angezeigt wird.

    Über "send2" wird die zweite IR Diode angesprochen, über "send1" die erste, ausserdem gibt es noch Funkprotokolle, die aber nicht benutzt werden.

    Jetzt geht es um eine automatisierte Schnittstelle zum Abfragen der Konfiguration des Gateways und eine Oberfläche, mit der weitere Aktionen hinzugefügt werden können, sowie eine Schnittstelle zu Frontpage o.ä.

    Herzlichen Dank nochmal

    Sigi