Seite 2 von 2
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 11. Mär 2020 08:51
von mike-eddk
Danke schon mal, bis dahin funktioniert der Teile:
Code: Alles auswählen
Group gButtons
Group gButtonStates
Switch button1 "Markiese [%s]" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=1] >[OFF:POST:http://local/leds.cgi?led=1]" }
Switch button2 "Terrasse [%s]" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=2] >[OFF:POST:http://local/leds.cgi?led=2]" }
Switch button3 "Steckdose [%s]" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=3] >[OFF:POST:http://local/leds.cgi?led=3]" }
Switch button4 "Eingang [%s]" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=4] >[OFF:POST:http://local/leds.cgi?led=4]" }
Number button1_state "Markiese [%s]" (gButtonStates) { http="<[http://local/status.xml:3000:XPATH(/response/led1/text())]" }
Number button2_state "Terrasse [%s]" (gButtonStates) { http="<[http://local/status.xml:3000:XPATH(/response/led2/text())]" }
Number button3_state "Steckdose [%s]" (gButtonStates) { http="<[http://local/status.xml:3000:XPATH(/response/led3/text())]" }
Number button4_state "Eingang [%s]" (gButtonStates) { http="<[http://local/status.xml:3000:XPATH(/response/led4/text())]" }
Der Status wird auch richtig im Group gButtonStates gesetzt:

Ach, wenn das Extern geändert wird. Die rule ändert leider nicht den Status der Button ...
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 11. Mär 2020 10:21
von udo1toni
Es hat sich ein s zu viel im Trigger eingeschlichen. Ich hab's oben korrigiert.
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 13. Mär 2020 10:54
von mike-eddk
Danke für die Unterstützung!
Hab es auch gerade geschafft, eine weitere Einheit welche JSON liefert einzubinden.
Interessant ist jetzt wahrscheinlich doch noch die Sache mit den Cache. Wenn ich über VPN in mein Netzwerk gehe, kommt das da schnell an die Grenzen
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 13. Mär 2020 11:46
von udo1toni
Der Zugang zur UI sollte allerdings keine Rolle spielen. Der http Cache bezieht sich ausschließlich auf das Pollen von Daten per http(s). Das hat nichts mit der UI oder Zugriff auf REST API zu tun.
Gesendet von meinem SM-G973F mit Tapatalk
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 16. Sep 2020 16:44
von Badabum
Hallo,
ich habe hier auch 4 x den tcr am laufen, dank dieser super Antworten.
Nun würde ich gern zusätzlich den Status beim starten und in regelmäßgen Intervallen pollen,
für den Fall das jemand auf den manuellen Knopf gedrückt hat.
Hat dafür eventuell auch noch jemand eine Idee?
Danke im voraus
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 16. Sep 2020 23:16
von udo1toni
Verstehe ich jetzt nicht so ganz... Wenn Du es so angelegt hast, wie oben erläutert, dann wird der Status doch schon alle 3 Sekunden gepollt?
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 24. Sep 2020 10:46
von Badabum
udo1toni hat geschrieben: ↑16. Sep 2020 23:16
Verstehe ich jetzt nicht so ganz... Wenn Du es so angelegt hast, wie oben erläutert, dann wird der Status doch schon alle 3 Sekunden gepollt?
Dann habe ich etwas übersehen,
vermutlch etwas mit dem Cache ich bin das ganze noch zweimal durchgegangen,
finde aber den Fehler nicht.
meine Items sehen so aus:
Switch button1 "EG1.1 [%s]" (gButtons) { http=">[ON:POST:
http://192.168.22.110/leds.cgi?led=1] >[OFF:POST:
http://192.168.22.110/leds.cgi?led=1]" }
Number button1_state "EG1.1 [%s]" (gButtonStates) { http="<[
http://192.168.22.110/status.xml:3000:XPATH(/response/led1/text())]" }
Ich habe das "local" gegen die IP Adresse des Aktors ersetzt.
Danke für jeden Tipp im voraus!
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 6. Nov 2021 13:03
von maggus
Hi zusammen,
der Tip mit /status.xml ist ja super. (bei mir allerdings auf Standard Port 80)
Leider gibt die Doku von Rutenbeck das ja nicht her.
Hat einer das Ganze schon mal mit Javascript im Browser gemacht?
Ich habe mir eine kleine html Seite gebastelt in der JS eingebettet ist.
Schalten klappt auch prima.
Aber an den Status komm ich irgendwie nicht ran.
Vermutlich wg Crosssite security, da die html Datei ja lokal auf dem Handy liegt.
Wie habt ihr das gelöst?
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 9. Nov 2021 11:22
von maggus
Antwort von dem Hersteller:
ich habe hierzu mal mit der Entwicklungsabteilung Rücksprache gehalten. Hier die Antwort:
Es gibt keine einzelnen Befehle zum nur Ein- oder Ausschalten. Sie sollten den Status über status.xml auslesen. An dem Webserver des TCR IP 4 kann nichts weiter eingestellt werden. Um das XSS zu umgehen, müssen Sie einen Curl Wrapper über ein Server verwenden. Alternativ wäre es eine Idee eine Browser Erweiterung zu erstellen um das Gerät zu steuern anstatt einer lokalen HTML Seite. Wir haben das einmal mit der Erweiterung Rested ausprobiert da ist der origin dann ungleich null.
Ich hoffe, Sie können mit dieser Information Ihr Problem lösen!
Hm.
schade, da ich nicht weiss welcher Browser läuft ist das eher nicht möglich.
Aber trotzdem eine Aussage wo man weiss wo man dran ist.
Und echt flott geantwortet!! also top!
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 4. Jun 2023 14:00
von Sepp
Ich möchte hier meine Lösung zur Ansteuerng der Rutenbeck TCR IP4 vorstellen.
Ich steuere mittels UDP commands, z.B "OUTX IMP 00:00:03 0". Damit kann man Ein und Ausschalten, also nicht nur toggeln. Impuls ist auch möglich.
Alles getestet für OH 3.4.
Ich habe eine eigene block library für Blockly:
Code: Alles auswählen
uid: meine_bibliothek:Http_udp
tags: []
props:
parameters: []
parameterGroups: []
timestamp: Jun 4, 2023, 1:37:57 PM
component: BlockLibrary
config:
name: Http_udp
slots:
blocks:
- component: BlockType
config:
args0:
- align: right
check: String
name: COMMAND
type: input_value
- align: right
check: String
name: IP_ADDRESS
type: input_value
- align: right
check: Number
name: PORT
type: input_value
colour: 0
message0: Send UDP command %1 to IP address %2 on port %3
nextStatement: ""
previousStatement: ""
tooltip: Send a UDP command to the specified IP address and port.
type: send_udp_command
slots:
code:
- component: BlockCodeTemplate
config:
template: >-
var DatagramSocket = Java.type('java.net.DatagramSocket');
var InetAddress = Java.type('java.net.InetAddress');
var DatagramPacket = Java.type('java.net.DatagramPacket');
function sendUDPCommand(command, ipAddress, port) {
var socket = new DatagramSocket();
var address = InetAddress.getByName(ipAddress);
var commandBytes = command.getBytes();
var packet = new DatagramPacket(commandBytes, commandBytes.length, address, port);
socket.send(packet);
socket.close();
}
var command = {{input:COMMAND}};
var ipAddress = {{input:IP_ADDRESS}};
var port = {{input:PORT}};
sendUDPCommand(command, ipAddress, port);
Folgendes Script kann auch verwendet werden, dieses dann mittels Rule aufrufen:
Code: Alles auswählen
var DatagramSocket = Java.type('java.net.DatagramSocket');
var InetAddress = Java.type('java.net.InetAddress');
var DatagramPacket = Java.type('java.net.DatagramPacket');
function sendUDPCommand(command, ipAddress, port) {
var socket = new DatagramSocket();
var address = InetAddress.getByName(ipAddress);
var commandBytes = command.getBytes();
var packet = new DatagramPacket(commandBytes, commandBytes.length, address, port);
socket.send(packet);
socket.close();
}
var command = "COMMAND";
var ipAddress = "IP";
var port = PORT;
sendUDPCommand(command, ipAddress, port);