TCR IP 4 Status XML verarbeiten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

mike-eddk
Beiträge: 13
Registriert: 9. Mär 2020 08:41
Answers: 0

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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:
Bild
Ach, wenn das Extern geändert wird. Die rule ändert leider nicht den Status der Button ...

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: TCR IP 4 Status XML verarbeiten

Beitrag von udo1toni »

Es hat sich ein s zu viel im Trigger eingeschlichen. Ich hab's oben korrigiert.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mike-eddk
Beiträge: 13
Registriert: 9. Mär 2020 08:41
Answers: 0

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Badabum
Beiträge: 2
Registriert: 15. Jan 2019 16:53
Answers: 0

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Badabum
Beiträge: 2
Registriert: 15. Jan 2019 16:53
Answers: 0

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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!

maggus
Beiträge: 23
Registriert: 6. Nov 2021 12:58
Answers: 0

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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?

maggus
Beiträge: 23
Registriert: 6. Nov 2021 12:58
Answers: 0

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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!

Sepp
Beiträge: 1
Registriert: 4. Jun 2023 13:44
Answers: 0

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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);

Antworten