Seite 1 von 1

URL - Steuerung / Control protocol

Verfasst: Donnerstag 6. April 2017, 15:04
von andy
Ü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
}

Re: URL - Steuerung

Verfasst: Samstag 22. Juli 2017, 22:00
von paphko
Status der Leiste senden
?Stat=UserPasswort
Werden damit die Zustände der Relais und der IOs zurückgegeben? Wie sieht ein Beispiel aus?

Re: URL - Steuerung

Verfasst: Sonntag 23. Juli 2017, 08:47
von andy
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

Re: URL - Steuerung

Verfasst: Montag 9. April 2018, 07:50
von flobe
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?

Re: URL - Steuerung

Verfasst: Montag 9. April 2018, 09:33
von andy
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

Re: URL - Steuerung

Verfasst: Donnerstag 12. April 2018, 08:00
von flobe
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.

Re: URL - Steuerung

Verfasst: Donnerstag 18. Juni 2020, 09:36
von rainer_winkler
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

Re: URL - Steuerung

Verfasst: Freitag 19. Juni 2020, 07:42
von andy
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

Re: URL - Steuerung / Control protocol

Verfasst: Dienstag 11. Juni 2024, 16:36
von LinuxFan
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.