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_1Nun 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
-
@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.htmlGrundsä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.
-
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/ -
... und wenn ich mir den Flow so anschaue, dann lautet die URL:
http://192.168.178.103:7771/FF0x0y
wobeix
die Relais-Nummer (begonnen mit1
) ist undy
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..
-
@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#createStateSchritt 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 Javascriptdas ist ja mein Problem..
-
@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 .