URL - Steuerung / Control protocol

andy
Administrator
Beiträge: 487
Registriert: Dienstag 15. Januar 2008, 11:51
Wohnort: Düsseldorf
Kontaktdaten:

URL - Steuerung / Control protocol

Beitrag von andy » Donnerstag 6. April 2017, 15:04

Über Adressleiste des Browsers kann ein Steuerungsbefehl gesendet werden.

Zu der URL-Adresse als IP oder Hostname wird: ?Befehl=Parameter,(optional)User+Passwort(als ein String - zusammengelegt) gesendet.
Leerzeichen (space) sind nicht erlaubt z.B; ?Sw = 0x55 , AAoIBQ8PCwkN. Richtig ist: ?Sw=0x55,AAoIBQ8PCwkN
User+Passwort kann Klartext, Base64 oder XOR+Base64 kodiert werden.
z. B.:
http://192.168.188.26?Sw=0x55,AAoIBQ8PCwkN
http://net-control?Sw=0b00001111,AAoIBQ8PCwkN

XOR+Base64 wird User+Passwort als ein String mit dem Passwort codiert.
JavaScript Beispiel:

Code: Alles auswählen

function utoa(str) {return window.btoa(unescape(encodeURIComponent(str)))}
function encrypt(str, key){
var ord=[],res="",i
for (i=1;i<=255;i++) ord[String.fromCharCode(i)]=i
for (i=0;i<str.length;i++) res+=String.fromCharCode(ord[str.substr(i, 1)]^ord[key.substr(i%key.length,1)])
return(res)
encrypt(User+Passwort, Passwort)

-------------------------------------------------------------------------------------------------------------
NET-PwrCtrl HOME, PRO, POWER ab Firmware 4.5
NET-PwrCtrl ADV, HUT, IO ab Firmware 6.1

Auf jeden Befehl (außer Reset) kommt eine Antwort per u_res.htm.

-------------------------------------------------------------------------------------------------------------
Bei NET-PwrCtrl HOME, PRO, POWER:

Hostname ; IP ; Name/Position/Funktion ; Uhrzeit ; Sekunden seit dem (Neu)Start ; Typ{P=PRO,POWER;H=HOME} ; Firmware Version ; Temperatur (bei PRO,POWER)<br>
Steckdosen Name ; Schaltzustand {1=on;0=off} ; Sperrung{0=nicht gesperrt;1=gesperrt};
8-mal wiederholt für jede Steckdose (auch bei HOME)

HOME ;192.168.188.26;NET - Power;Do, 06.04.17 15:04:51;10;H;4.5;
Nr. 1;1;0;Nr. 2;0;0;Nr. 3;0;0;Nr. 4;0;1;Nr. 5;0;1;Nr. 6;0;1;Nr. 7;0;1;Nr. 8;0;1;

-------------------------------------------------------------------------------------------------------------
Bei NET-PwrCtrl ADV, HUT, IO:

Hostname ; IP ; Name/Position/Funktion ; NTP-Zeit;Sekunden seit dem (Neu)Start ; Typ{a= ADV;i=IO;h=HUT;f=HUT F};Firmware Version; Temperatur<br>
Steckdosen Name ; Schaltzustand {0=off;1=on} ; Sperrung{0=nicht gesperrt;1=gesperrt};
8-mal wiederholt für jede Steckdose <br>
Name des IO ; Schaltzustand {0=off;1=on} ; Richtung {0=Ausgang;1=Eingang};
8-mal wiederholt für jedes IO <br>
Bei Sensor {s;Temperature;Humidity;Brightness}


NET-H ;192.168.188.87;NET - Power Control;1491485194;19;h;6.1;25.3
Nr.1;0;0;Nr.2;1;1;Nr.3;0;0;Nr.4;1;0;Nr.5;0;0;Nr.6;1;0;Nr.7;0;0;Nr.8;1;0;
IO-1;0;0;IO-2;0;0;IO-3;0;0;IO-4;0;0;IO-5;0;0;IO-6;0;0;IO-7;0;0;IO-8;0;0;
s;21.91;41.2;8;

-------------------------------------------------------------------------------------------------------------
bei allen NET-PwrCtrl

Segment = Steckdosennummer oder IO As String;
Passwort = Passwort As String;
User = User As String
Hex Byte 2 stellig = 0x00-0xFF
Hex 16 Bit 4 stellig = 0x0000-0xFFFF
Binär 8 stellig 0b00000000-0b11111111
Die Länge des Befehls darf nicht geändert werden. Keine Leerzeichen dazwischen.

Status der Leiste senden
?Stat=UserPasswort

Relais einschalten
?Sw_on=Segment,UserPasswort
z.B.: ?Sw_on=1,UserPasswort

Relais ausschalten
?Sw_off=Segment,UserPasswort
z.B.: ?Sw_off=1,UserPasswort

Steckdose zeit-verzögert abschalten
?St_off=Segment,Zeit 16bit in Hex,UserPasswort
z.B.: ?St_off=1,0x0030,UserPasswort

alle Steckdosen schalten
?Sw=Steckdosen als Byte Hex oder Binär,UserPasswort
z.B.:
?Sw=0x55,UserPasswort
?Sw=0b00001111,UserPasswort
Steckdosen Nummer = 0b87654321, 0x(8765)(4321)

Reset
?Reset=UserPasswort

nur für NET-PwrCtrl ADV, HUT, IO ab Firmware 6.1

IO Richung (0=Ausgang; 1=Eingang)
?IO_dir=Richtung als Byte Hex oder Binär,UserPasswort
z.B.:
?IO_dir=0x55,UserPasswort
?IO_dir=0b00001111,UserPasswort
IO Nummer = 0b87654321, 0x(8765)(4321)

IO einschalten
?IO_on=Segment,UserPasswort
z.B.: ?IO_on=1,UserPasswort

IO ausschalten
?IO_off=Segment,UserPasswort
z.B.: ?IO_off=1,UserPasswort

alle IO’s schalten
?IO=IO’s als Byte Hex oder Binär,UserPasswort
z.B.:
?IO=0x55,UserPasswort
?IO=0b00001111,UserPasswort
IO Nummer = 0b87654321, 0x(8765)(4321)

ab FW 6.3
{

Steckdose Intervallschaltung (Blinken) / Socket interval switching (flashing)
?Sw_bl=Segment,Einschaltzeit/On time[Millisekunden],Ausschaltzeit/Off time[Millisekunden],User + Passwort
Zeit/Time als 16 Bit (unsigned integer) HEX in Millisekunden = max. 65.5 Sek.
z.B.:
?Sw_bl=1,0x04B0,0x04B0,adminanel

IO Intervallschaltung (Blinken) / IO interval switching (flashing)
?IO_bl=Segment,Einschaltzeit/On time[Millisekunden],Ausschaltzeit/Off time[Millisekunden],User + Passwort
Zeit/Time als 16 Bit (unsigned integer) HEX in Millisekunden = max. 65.5 Sek.
z.B.:
?IO_bl=1,0x04B0,0x04B0,adminanel
}

paphko
Beiträge: 26
Registriert: Samstag 13. September 2014, 14:12

Re: URL - Steuerung

Beitrag von paphko » Samstag 22. Juli 2017, 22:00

Status der Leiste senden
?Stat=UserPasswort
Werden damit die Zustände der Relais und der IOs zurückgegeben? Wie sieht ein Beispiel aus?

andy
Administrator
Beiträge: 487
Registriert: Dienstag 15. Januar 2008, 11:51
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL - Steuerung

Beitrag von andy » Sonntag 23. Juli 2017, 08:47

Lieber paphko,

Steht doch oben:

NETCONTROL ;192.168.188.60;NET - Power Control;1500803107;136314;h;6.3;25.8
Nr.1;1;0;Nr.2;0;0;Nr.3;0;0;Nr.4;0;0;Nr.5;0;0;Nr.6;0;0;Nr.7;0;0;Nr.8;0;0;
IO-1;0;0;IO-2;0;0;IO-3;0;0;IO-4;0;0;IO-5;0;0;IO-6;0;0;IO-7;0;0;IO-8;0;0;

LG Andy

flobe
Beiträge: 2
Registriert: Montag 9. April 2018, 07:38

Re: URL - Steuerung

Beitrag von flobe » Montag 9. April 2018, 07:50

Die Abfrage des Steckdosenstatus (?Stat) erfordert derzeit immer ein Redirect auf /u_res.htm. Da HTTP zustandslos ist, merkt die Steckdose sich vermutlich die IP-Adresse des ersten Requests? Dadurch ist der Vorgang nicht atomar und es kann zu Problemen kommen, wenn man die Abfrage von mehreren unabhängigen Prozessen parallel durchführt. Gibt es eine URL, mit der die Abfrage des Status ohne Redirect möglich ist?

andy
Administrator
Beiträge: 487
Registriert: Dienstag 15. Januar 2008, 11:51
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL - Steuerung

Beitrag von andy » Montag 9. April 2018, 09:33

Hi flobe,

Wenn zwei Anfragen gleichzeitig kommen kann es Probleme mit der Antwort geben. Das stimmt.

Bei UDP haben wir Broadcast.

Wie sollte die Lösung aussehen?

LG Andy

flobe
Beiträge: 2
Registriert: Montag 9. April 2018, 07:38

Re: URL - Steuerung

Beitrag von flobe » Donnerstag 12. April 2018, 08:00

Hallo Andy,

einfach eine URL anbieten, die eine direkte Abfrage/Kommando ohne Redirect erlaubt mit HTTP Basic Authentication. So wie es die Webseite ja auch macht.

Beispiele:

Abfrage Status: http://net-pwrctrl/api?Stat
Schalten: http://net-pwrctrl/api?Sw_on=1

Die Credentials werden vom Client im HTTP-Header 'Authorization' mitgegeben.

Gruß,
Florian.

rainer_winkler
Beiträge: 2
Registriert: Freitag 12. Juni 2020, 22:15

Re: URL - Steuerung

Beitrag von rainer_winkler » Donnerstag 18. Juni 2020, 09:36

flobe hat geschrieben:
Donnerstag 12. April 2018, 08:00
einfach eine URL anbieten, die eine direkte Abfrage/Kommando ohne Redirect erlaubt mit HTTP Basic Authentication. So wie es die Webseite ja auch macht.
Wie sieht der Stand diesbzgl aus? Ist ein sehr guter Vorschlag von flobe, gerade wenn man Geräte automatisch per Skript steuert und auch
manuell schaltet - schnell hat man mehr oder weniger undefiniertes Verhalten und je nach dem was so an den Steckdosen angeschlossen ist ist
das durchaus ein Problem.
Wäre es wenigstens möglich, ein Feature hinzuzufügen um die IO Richtung einzeln zu steuern (statt nur alle auf einmal)?

Ansonsten super Produkt, bin im Moment darauf angewiesen und könnte ohne nicht arbeiten.

Vielen Dank schonmal

andy
Administrator
Beiträge: 487
Registriert: Dienstag 15. Januar 2008, 11:51
Wohnort: Düsseldorf
Kontaktdaten:

Re: URL - Steuerung

Beitrag von andy » Freitag 19. Juni 2020, 07:42

Hallo Reiner,

Der Vorschlag von flobe is interessant.
Wir können aber aufgrund einer Anfrage die FW für alle anderen nicht ändern.

Natürlich kann man die IO Richtung einzeln steuern. Wie ist 'alle auf einmal' gemeint?

LG Andy

LinuxFan
Beiträge: 2
Registriert: Freitag 7. Juni 2024, 16:42

Re: URL - Steuerung / Control protocol

Beitrag von LinuxFan » Dienstag 11. Juni 2024, 16:36

Der JS-Code zur XOR+Base64 Codierung der Logindaten im ersten Beitrag scheint unvollständig zu sein. Jedenfalls beschwert sich mein Firefox über den Syntax.
Mit dem nachfolgenden Code konnte ich in der FF-Konsole gültige Zugangsdaten für den User: 'user1' und das Passwort: 'anel' erzeugen. Bei Firefox öffnet man die Konsole übrigens mit Strg + Shift + K.

Code: Alles auswählen

function utoa(str) {return window.btoa(unescape(encodeURIComponent(str)))}
function encrypt(str, key){
var ord=[],res="",i
for (i=1;i<=255;i++) ord[String.fromCharCode(i)]=i
for (i=0;i<str.length;i++) res+=String.fromCharCode(ord[str.substr(i, 1)]^ord[key.substr(i%key.length,1)])
return(res) }

utoa(encrypt('user1anel', 'anel'))
Ergebnis: FB0AHlAPCwkN

Die URL-Steuerung kann z. B. direkt in windoof PowerShell genutzt werden (ab v3). Nachfolgendes Beispiel schaltet Ausgang 2 ein:

Code: Alles auswählen

$res = Invoke-WebRequest "net-control.lan?Sw_on=2,FB0AHlAPCwkN"
In der Variable $res wird das Ergebnis gespeichert. Z. B. in $res.StatusCode findet sich der StatusCode der Anfrage.

Antworten