Neues Modul: 98_InfratecPM für Infratec PowerModul PM x-IP

Begonnen von VB90, 21 Februar 2015, 12:04:36

Vorheriges Thema - Nächstes Thema

VB90

Hallo zusammen,

mir schwirrt eine Idee durch den Kopf, allerdings fehlt mir noch die Erfahrung, für die Umsetzung ne vernüftige Lösung zu finden. Vielleicht hat ja von euch jemand Zeit und Lust, sich das mal anzusehen.

Ich habe ein sog. Powermodul http://www.infratec-plus.de/produktlinien/powerdistribution/switched-pdu/pm4-ip/, im Grunde eine 4x Mehrfachsteckdose, welches ich via LAN ansteuern kann.
Über den integrierten Webserver hat man ein UI über welches man die einzelnen Plätze konfiguriert und schaltet.

Manch einer ahnt es schon, dieses Gerät würde ich gern in meine FHEM-Steuerung integrieren.
Ich habe mittels Wireshark schon herausbekommen, was vom Browser gesendet wird.
http://192.168.0.151/is?Y0=+Off+&H0=1074233201 schaltet den 1. Platz ein
http://192.168.0.151/is?X0=+On+&H0=1074233201 schaltet den 1. Platz aus

Was mir im Kopf jedoch Probleme bereitet, ist die Authentifizierung.
Man muss sich im UI mit einem User anmelden wobei dann eine SessionID mit übertragen wird.
Zum anderen ist mir nicht so recht klar, als was ich dieses Gerät in FHEM definiere, und ob es unter Umständen sinnvoller ist, die vier Steckdosen jeweils als eigene Geräte zu definieren.

vb

edit:


Das Modul ist nun fertig und kann produktiv genutzt werden.
Es wird jedoch nicht automatisch über das Update von FHEM ausgeliefert, sondern muß per Hand geladen werden.
Möglich ist das hier: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/Infratec

(Falls sich der Link ändern sollte und/oder nicht funktionieren, gebt bitte Bescheid damit ich ihn ändern kann)
Für die 4- & 8-fach Powermodule ist die Funktion bewiesen. 2-fach Module sollten auch funktionieren.
PowerModule anderer Anbieter können ebenfalls funktionieren.
Für hilfreiche Rückmeldungen aller Art wäre ich dankbar.

An dieser Stelle besonderen Dank an Wzut für seine Arbeit! Große Klasse!!

Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wzut

Zitat von: VB90 am 21 Februar 2015, 12:04:36
http://192.168.0.151/is?Y0=+Off+&H0=1074233201 schaltet den 1. Platz ein
http://192.168.0.151/is?X0=+On+&H0=1074233201 schaltet den 1. Platz aus

das H0=1074233201 ist die Session ID ?
schon mal ganz ohne versucht  ? ala :

http://user:passwort@192.168.0.151/is?X0=+On+

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

VB90

Hallo Wzut,

ja, das ist die SessionID. Ohne diese wird direkt zum LogIn geleitet.
Auch bei deinem Link wird direkt dorthin geleitet.

Ich kann die LogIn-Seite "umgehen", indem ich mittels diesem Link direkt die Daten übergebe:
http://192.168.0.151/li?u=user&p=passwort&s=Login
Im Browser bin ich dann eingeloggt.
Aber für FHEM fehlt mir dann zum weiteren arbeiten die SessionID.


Danke,

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wzut

der eleganteste Weg wäre Hersteller anschreiben mit Bitte um Informationen zum Protokoll oder einem SDK
bleibt das ohne erfolg bleibt nur der harte Weg :( einen davon Teil hast du ja schon hinter dir :)
Schau doch mal mit Wireshark oder auch im  HTML Quelltext der Login Seite ob die User /PW Daten mit GET oder POST gesendet werden.
Wenn das System zwingend POST erwartet dann muss mein Beispiel oben auch so gesendet werden ( Schau dir z.B. mal wget an , dort kannst du u.A. mit --post-data POST erwingen.
Ist es nicht möglich mit so einem simpler Einzeller eine Dose zu schalten wäre halt ein eigenes Modul sinnvoll das zuerst den Login abwickelt und dann die zurückgegebene Session ID zum eigentlichen schalten benutzt. Vllt auch ein Fall für das Modul HTTPMOD ? da bin ich allerdings überfragt da ich es noch nie selbst verwendet habe.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

VB90

Die Daten werden lt. Quelltext via GET gesendet.

Den Hersteller werde ich mal anschreiben und mir derweil mal das HTTPMOD Modul anschauen.

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

SpenZerX

Ich glaube du hast gleich 2 Probleme.

1. Ein Protokoll das von FHEM nicht richtig unterstützt wird
2. Ein unbekanntes Gerät.

Ich bastele gerade an einem IODEV HTTPD.pm das genau das tut was du benötigst. GET oder POST Daten verschicken oder als Daemon an einem Port empfangen. Sozusagen als CUL-Ersatz. Leider komme ich nicht gut voran.
Aber selbst wenn es mal funktioniert würdest du noch ein 2. Modul speziell für dieses Power Modul benötigen.

Vielleicht kümmert sich mal die FHEM-Elite drum.

VB90

Ich bin nun am HTTPMOD dran.

Ich habe beschlossen, jede der vier Dosen einzeln zu definieren, weil ich meine, das es auf diese Weise langfristig übersichtlicher ist.

Ich habe die erste definiert und kann mich auch einloggen.
Ich bekomme dabei eine SessionID zurück. siehe Screen 1

Wenn ich diese per Hand an meine oben angeführten Links anfüge, kann ich damit schalten.

Nun versuche ich gerade rauszubekommen, wie ich diese Links am besten implementiere, damit diese über FHEM ausführbar werden...

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

VB90

Nachdem ich vom Hersteller noch keine Rückmeldung habe, stehe ich so schlau da, wie zuvor.
Ich habe zwar den LogIn realisiert, jedoch fehlt mir noch immer ein Ansatz, wie ich die entsprechende URL inkl. SessionID in Richtung Powermodul absetzen kann...

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Damu

Hallo

Wenn du
Zitathttp://ip/sw?s=0
eingibst, sollte das der zustand aller Dosen anzeigen.

Bei mir sieht es dann mit der Linux Console so aus:
Zitat</html>damu@ubuntu-damu:~$ wget -q -O - "http://192.168.178.36/sw?s=0"
<html>
<body>
Status:<br>
<br>
Out 1: 1<br>Out 2: 0<br>Out 3: 0<br>Out 4: 0<br>Out 5: 0<br>Out 6: 0<br>Out 7: 0<br>Out 8: 0<br>
</body>
</html>damu@ubuntu-damu:~$

Schalten geht nur mit benutzer und password:

Zitathttp://192.168.178.36/sw?u=admin&p=admin&o=1&f=off

Das schaltet die Dose 1 aus.

Sieht dann bei mir so aus.

Zitatdamu@ubuntu-damu:~$ wget -q -O - "http://192.168.178.36/sw?u=admin&p=admin&o=1&f=off"
<html>
<body>
Done.<br>
<br>
Out 1: 0<br>Out 2: 0<br>Out 3: 0<br>Out 4: 0<br>Out 5: 0<br>Out 6: 0<br>Out 7: 0<br>Out 8: 0<br>
</body>
</html>damu@ubuntu-damu:~$

Um die Infratec Steckdosen zu schalten funktioniert in der Linux Console mit wget:
Variablen sind: u=user, p=pass, o=nummer_der_dose, f=funktion(on,off,pulse,toggle) bzw. s=status




Damu

Hallo

Ich habe gesehen das das alles auch mit Firefox geht.

Bei der eingabe in der URL Zeile und anschliessend Return.
Zitathttp://192.168.178.36/sw?s=0

Kommt

ZitatStatus:

Out 1: 0
Out 2: 1
Out 3: 0
Out 4: 0
Out 5: 0
Out 6: 1
Out 7: 0
Out 8: 1

raus.

Auch schalten geht genau gleich:

Zitathttp://192.168.178.36/sw?u=admin&p=admin&o=1&f=on

Dose 1 einschalten

Raus kommt:
ZitatDone.

Out 1: 1
Out 2: 1
Out 3: 0
Out 4: 0
Out 5: 0
Out 6: 1
Out 7: 0
Out 8: 1

Ich hab hier ein PM 8-IP sollte aber das selbe sein.

VB90

Prima, herzlichen Dank!!

Hast du deine PM-8 in FHEM eingebunden?

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Damu

Hallo

Nein hab ich leider nicht.
Ich habe zwei IP Switch von Energenie eingebunden.

Damu

Hallo

Habs mal so gemacht:

Zitatdefine Infratec HTTPMOD http://192.168.178.36/sw?s=0 60
attr Infratec readingsName.1 Out 1:
attr Infratec readingsRegex.1 Out 1: ([\d.]+)
attr Infratec readingsName.2 Out 2:
attr Infratec readingsRegex.2 Out 2: ([\d.]+)
attr Infratec readingsName.3 Out 3:
attr Infratec readingsRegex.3 Out 3: ([\d.]+)
attr Infratec readingsName.4 Out 4:
attr Infratec readingsRegex.4 Out 4: ([\d.]+)
attr Infratec readingsName.5 Out 5:
attr Infratec readingsRegex.5 Out 5: ([\d.]+)
attr Infratec readingsName.6 Out 6:
attr Infratec readingsRegex.6 Out 6: ([\d.]+)
attr Infratec readingsName.7 Out 7:
attr Infratec readingsRegex.7 Out 7: ([\d.]+)
attr Infratec readingsName.8 Out 8:
attr Infratec readingsRegex.8 Out 8: ([\d.]+)

so wird in den readings Out 1-8 mit 0 oder 1 ausgegeben.
Vieleicht gibt es auch eine Möglichkeit das gleich in on off umzustellen.

VB90

#13
kann hier mal jemand drüber schauen und mir eventuell aufzeigen wo mein Fehler liegt?

Ich versuche derzeit, die oben erwähnten links in ein notify zu packen.

Das in der Konsole funktionierende
wget -q -O - "http://192.168.0.151/sw?u=admin&p=admin&o=1&f=on"

sieht in FHEM derzeit so aus:
LEDs_Terrasse:on {system("sudo wget -q -O - http://192.168.0.151/sw?u=admin&&p=admin&&o=3&&f=on")}

Nach vielen Test mit Anführungszeichen, Klammern, doppelten & etc habe ich nun im Log keine Perl Fehler mehr und es schaut so aus, als würde es funktionieren.

In der Konsole jedoch bekomme ich vom Infratec eine Fehlerseite zurück, die mir die Variablen erläutert:

Fault!
http://ip/sw?u=user&p=passwd&o=n&f=func
http://ip/sw?s=0
ip: ipaddress
user:username
passwd:password
n:outletnumber to switch
func:
off
pulse
toggle
?s=0 read status

Ich habe für die Übersicht mal den html-Code entfernt...

Es ist also das, was Damu dankenswerter Weise oben schon erläutert hat.

Hat jemand ne Idee was ich am Code ändern könnte damit er funktioniert?

Danke,

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wzut

#14
Zitat von: VB90 am 02 März 2015, 20:48:31
Nach vielen Test mit Anführungszeichen, Klammern, doppelten &
ja da kann man leicht den Überblick verlieren :) Versuchs doch mal viel primitiver ganz ohne Schnörkel :
define test2 notify test:.* {qx(wget -O test 'http://localhost/?u=heinz&pw=willi');;}
ergibt bei mir im log :

--2015-03-03 09:31:13--  http://localhost/?u=heinz&pw=willi
Auflösen des Hostnamen »localhost (localhost)«... ::1, 127.0.0.1
Verbindungsaufbau zu localhost (localhost)|::1|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 304 [text/html]
In »»test«« speichern.

     0K                                                       100% 71,8M=0s

2015-03-03 09:31:13 (71,8 MB/s) - »»test«« gespeichert [304/304]


Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher