Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Gelöst: Http Request rausfinden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Gelöst: Http Request rausfinden

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      MCU @RomN last edited by

      @romn Beamer Hersteller, ID, Type usw. Wo gekauft. Sind Hinweise um besser an die daten zu kommen.

      R 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @RomN last edited by

        @romn sagte in Http Request rausfinden:

        Der Beamer hat ein Webinterface über welches ich ih Auschalten kann. Das müsste doch bedeuten dass ich irgendwie mit einem Blockly Script das tun kan was der Browser auch macht? Ich habe versucht das ganze per Google Tools anzuschauen aber nun komme ich nicht mehr weiter.

        ja da bist du schon auf dem richtigen weg.
        hoffe mal darauf, das da keine extra authentifizierung mit dabei ist.
        um es einzugrenzen öffnest du das webinterface und die developer tools des browsers.
        dann gehst du in den netzwerk tab.
        dann löscht du die angezeigte historie,
        dann drückst du den knopf für das ein und ausschalten.
        bei den dann angezeigten zeilen sind das request mit dabei, das den schaltbefehl enthält.
        die schaut man sich an und hoffentlich ist es nur ein request.

        den versucht man dann nachzustellen. da kann man oft einige header angaben entfernen.
        der blockly-request ist leider etwas eingeschränkt und kann nicht so gut konfiguriert werden, daher empfehle ich dir das mit javascript umzusetzen.

        wenn man in den developer tools auf dem request rechte maustaste macht, gibt es (zumindest im chrome) einen Befehl "copy -> copy as node.js fetch"
        wenn man dann noch im javascript adapter diese bibliothek installiert, dann kann man den Befehl 1:1 übernehmen
        https://www.npmjs.com/package/node-fetch

        R 1 Reply Last reply Reply Quote 0
        • R
          RomN @MCU last edited by

          @mcu da ich da schon ziemlich viel Zeit verwendet hab, hab ich das weggelassen aber es handelt sich um einen Acer P5630

          1 Reply Last reply Reply Quote 0
          • R
            RomN @OliverIO last edited by

            @oliverio

            Vieln Dank für deine Antwort. Ich glaube ich bin ein Stück weiter.

            Hier sind die Ausgaben, soweit ich sagen kann, ist keine Authentifizierung nötig. Das Web Interface hat zwar ein Passwort.

            Unter Headers kann ich folgendes finden:

            Request URL:
            http://192.168.1.100/form/control_cgi
            Request Method:
            POST
            Status Code:
            200 OK
            Remote Address:
            192.168.1.100:80
            Referrer Policy:
            strict-origin-when-cross-origin
            HTTP/1.0 200 OK
            Server: GoAhead-Webs
            Pragma: no-cache
            Cache-control: no-cache
            Content-Type: text/html
            POST /form/control_cgi HTTP/1.1
            Accept: */*
            Accept-Encoding: gzip, deflate
            Accept-Language: de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5
            Connection: keep-alive
            Content-Length: 35
            Content-type: application/x-www-form-urlencoded
            Cookie: atop_user=1; atop_pw=1
            Host: 192.168.1.100
            Origin: http://192.168.1.100
            Referer: http://192.168.1.100/control.asp
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
            

            Unter Payload

            pwr: pwr
            

            und bei Preview kam: {pwr:"1",hid:"0",frz:"0",eco:"1",src:"3",bri:"50",con:"50",vks:"0",hks:"0",gam:"2.2",ctp:"CT2",mod:"2",vol:"0",apr:"0",zom:"1.0",prj:"0",lgo:"0",aks:"0",dyar:"31"}

            Das mit dem Node-Fetch habe ich probiert mit der dem folgenden kopierten Script:

            fetch("http://192.168.1.100/form/control_cgi", {
              "headers": {
                "accept": "*/*",
                "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                "content-type": "application/x-www-form-urlencoded"
              },
              "referrer": "http://192.168.1.100/control.asp",
              "referrerPolicy": "strict-origin-when-cross-origin",
              "body": "SendQueryBatchCDM=SendQueryBatchCDM",
              "method": "POST",
              "mode": "cors",
              "credentials": "include"
            });
            

            Kriege dann aber die Meldung:
            12:42:52.238 error javascript.0 (166690) script.js.Projektor_2: ReferenceError: fetch is not defined
            12:42:52.239 error javascript.0 (166690) at script.js.Projektor_2:1:1
            12:42:52.239 error javascript.0 (166690) at script.js.Projektor_2:14:3

            Ich habe das Gefühl ich sei schon nah dran, aber mir fehlen halt die Basics... kannst du mir nochmals einen Tipp geben?

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @RomN last edited by OliverIO

              @romn

              Also das sind 2 unterschiedliche requests
              Das was als payload ausgewiesen wird müsste bei fetch also body ausgegeben werden.

              Auch gibt es diskrepanzen zwischen payload und preview.
              Payload müsste eine cklickbare objektstruktur der inhalte von preview sein (ist ja json)

              Hast du den die Bibliothek node-fetch im JavaScript Adapter installiert?
              Einfach den Namen bei zusätzliche npm Pakete hinzufügen. Dann kennt er auch den Befehl fetch.
              Am Anfang des Skripts muss man mit require noch die Bibliothek in das Skript importieren. Wie findest du in der Dokumentation von Node-fetch

              R 2 Replies Last reply Reply Quote 0
              • R
                RomN @OliverIO last edited by RomN

                @oliverio

                a4fd7ee1-94f5-4285-8796-9b0597b96732-image.png

                Hätte ich gemeint dass ich node-fetch richtig installiert habe

                Edit: Wenn ich einbinde kommt eine neue Fehlermeldung:

                const fetch = require('node-fetch');
                fetch("http://192.168.1.100/form/control_cgi", {
                  "headers": {
                    "accept": "*/*",
                    "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                    "content-type": "application/x-www-form-urlencoded"
                  },
                  "referrer": "http://192.168.1.100/control.asp",
                  "referrerPolicy": "strict-origin-when-cross-origin",
                  "body": "SendQueryBatchCDM=SendQueryBatchCDM",
                  "method": "POST",
                  "mode": "cors",
                  "credentials": "include"
                });
                

                13:47:21.547 error javascript.0 (167677) script.js.Projektor_2: Error [ERR_REQUIRE_ESM]: require() of ES Module /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch/src/index.js from /opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js not supported.
                13:47:21.547 info javascript.0 (167677) script.js.Projektor_2: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                13:47:21.549 error javascript.0 (167677) script.js.Projektor_2: TypeError: fetch is not a function
                13:47:21.549 error javascript.0 (167677) at script.js.Projektor_2:2:1
                13:47:21.549 error javascript.0 (167677) at script.js.Projektor_2:15:3

                Ich habe nun noch probiert über die Browsererweiterung den Befehl abzuschicken, weil ich schonmal sowas gebraucht habe für ein OTA Update... Rester gibt mir die Response 200 OK aber es passiert nichts

                bdce33f0-4beb-4a30-9dd5-36ac1d9918d6-image.png

                1 Reply Last reply Reply Quote 0
                • R
                  RomN @OliverIO last edited by RomN

                  @oliverio

                  Ok node-fetch läuft jetzt um es mit Requiere einzubinden muss man node-fetch@2 zum adapter hinzufügen

                  Das mit dem Body hab ich nun auch hingekriegt, es scheint als ob ich ein Copy Fehler gemacht habe

                  fetch("http://192.168.1.100/form/control_cgi", {
                    "headers": {
                      "accept": "*/*",
                      "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                      "content-type": "application/x-www-form-urlencoded"
                    },
                    "referrer": "http://192.168.1.100/control.asp",
                    "referrerPolicy": "strict-origin-when-cross-origin",
                    "body": "pwr=pwr",
                    "method": "POST",
                    "mode": "cors",
                    "credentials": "include"
                  });
                  

                  So siehgt die richtige Copy aus für die nachwelt 🐶
                  Vielen Dank jetzt muss ich nur noch dieses Skript mit dem Blockly verbinden, aber da probiere ich nun ein bisschen selbst

                  OliverIO 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @RomN last edited by OliverIO

                    @romn
                    Und das klappt?
                    Das steht was von credentials?
                    Muss man sich gegenüber dem Gerät nicht authentifizieren?
                    Auch die refererpolicy könnte noch Probleme machen

                    1 Reply Last reply Reply Quote 0
                    • R
                      RomN last edited by RomN

                      @oliverio

                      Ja läuft genau so wie ich das eigentlich möchte...

                      Die Frage ist dann wohl wie lange, das mit den Credentials ist wirklich ein bisschen komisch

                      Aber bis jetzt konnte ich nichts provozieren dass es nicht lief...

                      OliverIO 1 Reply Last reply Reply Quote 0
                      • OliverIO
                        OliverIO @RomN last edited by

                        @romn

                        ne dann ist gut.
                        iobroker ist für den webserver wieder ein anderes gerät wie der browser

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        842
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        3
                        11
                        678
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo