NEWS

[gelöst]Datenpunkt erstellen aus respons


  • Hallo, ich benötige mal eure Hilfe... Leider hab ich nicht so die Ahnung von javascript und komme nicht weiter. ich hab folgenden Code um ein Relay zu schalten:

    on({id: "javascript.0.KMTronic_!"/*KMTronic 1*/, change: "any"}, function(obj) {
      var request = require('request'),
        username = "123",
        password = "123",
        url = 'http://192.168.178.103:7771/relays.cgi?relay=1',
        auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
     
      request({
            url : url,
            headers : {'Authorization' : auth}
        },
        function (Status, response, body) {
                log('Status: ' + Status);
                log('response: ' + JSON.stringify(response));
                log('body: ' + body);
        }
      );
    });```
    code_text
    

    Im Log wird folgendes ausgegeben:

    javascript.0 2020-10-13 07:58:41.345 info </div>
    javascript.0 2020-10-13 07:58:41.345 info </p>
    javascript.0 2020-10-13 07:58:41.345 info Relay8: Relay8
    javascript.0 2020-10-13 07:58:41.345 info Relay7: Relay7
    javascript.0 2020-10-13 07:58:41.345 info Relay6: Relay6
    javascript.0 2020-10-13 07:58:41.345 info Relay5: Relay5
    javascript.0 2020-10-13 07:58:41.345 info Relay4: Relay4
    javascript.0 2020-10-13 07:58:41.345 info Relay3: Relay3
    javascript.0 2020-10-13 07:58:41.345 info Relay2: Relay2
    javascript.0 2020-10-13 07:58:41.345 info Relay1: lampe1
    javascript.0 2020-10-13 07:58:41.345 info Status: 0 0 0 0 0 0 0 0
    javascript.0 2020-10-13 07:58:41.345 info <p hidden>
    javascript.0 2020-10-13 07:58:41.345 info <div>
    javascript.0 2020-10-13 07:58:41.345 info
    javascript.0 2020-10-13 07:58:41.345 info </div>
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> Relay8 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> Relay7 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> Relay6 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> Relay5 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> Relay4 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> Relay3 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> Relay2 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <br />
    javascript.0 2020-10-13 07:58:41.345 info <font size="5"> lampe1 <span style="color:red">0 </span> </font>
    javascript.0 2020-10-13 07:58:41.345 info (11485) script.js.KMT.TestKmt_1: body: <div>
    javascript.0 2020-10-13 07:58:41.344 info (11485) script.js.KMT.TestKmt_1: response: {"statusCode":200,"body":"<div>\r\n<font size="5"> lampe1 <span style="color:red">0 </span> </font>\r\n<br />\r\n<br />\r\n<br
    javascript.0 2020-10-13 07:58:41.344 info (11485) script.js.KMT.TestKmt_1: Status: null
    javascript.0 2020-10-13 07:58:37.562 info (11485) script.js.KMT.TestKmt_1: registered 1 subscription and 0 schedules
    javascript.0 2020-10-13 07:58:37.541 info (11485) Start javascript script.js.KMT.TestKmt_1

    Nun zu meinem Problem, ich möchte das der Status bei jedem schalten in einem Datenpunkt geschrieben wird bzw aktualisiert wird. leider hab ich keine Idee dazu. vieleicht kann mir jemand weiter helfen. Danke und liebe Grüße

  • Developer

    @fototec Das sieht nicht nach einer API aus, sondern eher nach einer Webpage.

    Was ist das für ein Relais? Wo findet man die Dokumentation dazu?
    Ich nehme an es ist dieses: https://info.kmtronic.com/kmtronic-lan-ethernet-ip-8-channels-web-relay-board.html

    Grundsätzlich sieht das JavaScript nicht falsch aus, aber die URL stimmt wohl nicht. Es müsste eine URL sein, die etwas ausführt, nicht eine URL die etwas anzeigt. Normalerweise geben API URLs XML oder JSON zurück, bei deiner URL ist es aber eine gewöhnliche Webpage.

    Am einfachsten geht es wenn du mit deinem Browser (Chrome oder aktuellster Edge) auf die Seite gehst und F12 drückst). Dann mal "von Hand" die Relais schalten und unter "Netzwerk" schauen, was da für Requests geschickt werden. Wie gesagt: du willst nicht die Seite, die das Relais als HTML darstellt sondern die URL, die aufgerufen wird, wenn du einen der Relais-Knöpfe im Browser drückst.

  • Developer

    Wenn du's dir übrigens einfach machen willst, installiere in ioBroker Node-Red und benutze den Flow, der KMTronic zur Verfügung stellt:
    https://github.com/kmtronic-ltd/node-red-example/

  • Developer

    ... und wenn ich mir den Flow so anschaue, dann lautet die URL:
    http://192.168.178.103:7771/FF0x0y wobei x die Relais-Nummer (begonnen mit 1) ist und y das Relais ein (1) oder aus (0) schaltet. Also z.B. http://192.168.178.103:7771/FF0100 schaltet das Relais 1 aus.


  • Danke für deine Hilfe, du liegst da richtig mit dem :https://info.kmtronic.com/kmtronic-lan-ethernet-ip-8-channels-web-relay-board.html
    Also schalten tut das Relay mit meinem Script, aber ich würde gern das der Status der im Log steht in einen Datenpunkt geschrieben wird.. (javascript.0 2020-10-13 07:58:41.345 info Status: 0 0 0 0 0 0 0 0) dazu hab ich keine Idee..


  • Es wird mir ja im Log geschrieben und daher muss es doch einen Weg geben der es in einen Datenpunkt schreibt..

  • Developer

    @fototec
    Schritt 0: einmal vorweg mit „createState“ die 8 stati anlegen die du später füllen willst.
    Sieht auch: https://www.iobroker.net/docu/index-81.htm?page_id=5809&lang=en#createState

    Schritt 1: regexp erzeugen, welches aus der Variable Status den Zustand der Relais sauber findet. Da dieser aus 8 zahlen, z.bsp.

    0 0 0 0 0 0 0 0
    

    besteht sollte das machbar sein. Zum Testen bietet sich
    https://regex101.com/
    an.

    Schritt 2: aus den 8 zahlen die 8 stati der einzelnen Relais extrahieren.

    Schritt 3: je nach Status die mit „createState“ angelegten Datenpunkte via „setState“ aktualisieren.

    Schritt 4: Erfolg genießen.

    A.


  • @Asgothian
    leider hab ich so garkeine Ahnung von Javascript 😞 das ist ja mein Problem..

  • Developer

    @fototec sagte in Datenpunkt erstellen aus respons:

    leider hab ich so garkeine Ahnung von Javascript

    Dann mach es bitte mit Node-Red oder Blockly. Beide benötigen keine Programmier-Erfahrung. Weil JavaScript ist dann dann doch nicht in einer Stunde gelernt (vor allem wenn man ohne Programmierkenntnisse ran geht). Oder such dir Beispiele hier im Forum, wie man States anlegt und beschreibt und kopiere die Sachen zusammen.

    Wofür brauchst du denn die Datenpunkte?


  • @UncleSam
    Guten Morgen, und danke an alle die mir bis jetzt schon einiges geschrieben haben,,

    Die Datenpunkte brauch ich um die Zustände des Relays weiter geben zu können.. mir war klar das es nicht einfach ist und mit Node Red ist es natürlich möglich jedoch ist es wieder ein Adapter mehr ,, trotzdem danke für deine Zeit .

Suggested Topics

1.2k
Online

38.4k
Users

43.8k
Topics

612.8k
Posts