Erfahrungen/ IPS Support von IPWE1 & IPIO88 ?

Hallo zusammen,

bin eben bei EL* auf die beiden obigen Geräte gestossen, welche mir recht interessant erscheinen. Vor allem der Satz „Ein Telnet-Server sorgt zusätzlich für einen einfachen Zugriff per Kommandozeile, so kann der IPWE 1 auch in eigene Softwareprojekte eingebunden werden“ hört sich gut an.

Hat jemand schon damit Erfahrungen? Wie siehts mit Einbindung ins IPS aus? In der Kompatibilitätsliste tauchen diese Geräte (noch?) nicht auf.

Gruss
Chris

Das IPIO88 ist ja sehr interessant. Auch der Preis ist nicht unbedingt so abschreckend, wie es bei Netzwerkkomponenten üblicherweise der Fall ist.

Und mit Telnet ließe sich ja was machen…

das sind wieder typisch proprietäre ELV-Produkte. Man kann nicht die Webseite ändern (wie beim Xport) und anstatt eine vernünftige Ansteuerung per direktem TCP oder UDP (wie EZControl) zu programmieren, muss man sich per Telnet (oder Webinterface) durch die Dialoge kämpfen.
Gut, wenn man kein Password setzt, geht das noch relativ einfach.
Aber wie immer bei ELV:die Idee ist prima, die Umsetzung nicht bis zum Ende gedacht (bzw. mit Absicht solche Einschränkungen eingebaut)

Ein eigenes IPS-Modul wird wohl nicht notwendig sein, das kann man komplett in PHP abhandeln.

Tommi

Wie erwartet ist das Gerät wieder nur halb durchdacht. Das Telnet interface läßt sich zwar mit einem realen Telnet Programm bedienen. Mir ist es aber nicht gelungen, mit einem eigenen Client User+Password zu übergeben.
Wenigstens das Webinterface läßt sich direkt ansprechen, was ich für dieses Beispielprogramm genutzt habe.
Das Füttern entsprechender IPS-Variablen überlasse ich Euren Vorstellungen.
Tommi


<?php
    $lines=file_get_contents('http://ipwe1/ipwe.cgi',"r");
    preg_match_all("{<tbody>(?:(?!<tbody>).)*</tbody>}si",$lines,$table,PREG_SET_ORDER);
    foreach ($table as $t) {
        if (preg_match("/Sensortyp/si",$t[0])) {
            preg_match_all("{<tr>(?:(?!<tr>).)*</tr>}si",$t[0],$rows);
            foreach ($rows[0] as $l) {
                preg_match_all("{<td.*?>(.*?)(?:(<br>)*)</td>}si",$l,$cols);
                list($typ,$id,$name,$temp,$hum,$wind,$rain)=$cols[1];
                if (preg_match("/Sensortyp/i",$typ)){continue;} #headline
                if (preg_match("/^\s+$/",$typ)){continue;} #empty sensor
                echo "Typ: $typ, ID: $id, Name $name, Temp: $temp Hum: $hum";
                if ($id == 8) {
                    echo ",Wind: $wind, Rain $rain";
                }
                echo "
";
            }        
        }
    }
?>

Hallo tommi,

geht das auch nicht mit einer Socket Verbindung? Kann ich fast gar nicht glauben…

Das habe ich probiert, in Perl auch mit einem „richtigen“ Telnet-Modul. Leider bleibt das gute Stück beim Warten auf den Password-Prompt hängen. Irgendwie scheint da noch was zu fehlen. siehe Log:


< 0x00000: ff fd 03 ff  fe 01 ff fb  01                        ÿý.ÿþ.ÿû.

> 0x00000: ff fc 03 ff  fd 01                                  ÿü.ÿý.

< 0x00000: 1b 5b 32 4a  0d 0a 49 50  57 45 20 31  20 54 65 6c  .[2J..IPWE 1 Tel
< 0x00010: 6e 65 74 20  53 65 72 76  65 72 20 56  31 2e 30 30  net Server V1.00
< 0x00020: 2c 20 70 6c  65 61 73 65  20 6c 6f 67  69 6e 2e 2e  . please login..
< 0x00030: 2e 0d 0a 0d  0a 55 73 65  72 6e 61 6d  65 3a 20     .....Username:

> 0x00000: 61 64 6d 69  6e 0d 0a                               admin..

< 0x00000: 61

Das Interface hätte man aber auch einfacher machen können, in dem man das ganze Telnet-Handshaking wegläßt. Aber nein, bei ELV ist man ja schlauer und baut was zum „automatischen Zugriff“, was nicht automatisch geht. Genauso intelligent wie der EM1000DL, wo man erst eine Taste drücken mußte, um an die Daten zu kommen.

Zum Glück kann man wenigstens die Webseite relativ einfach parsen. Die sieht ohnehin sehr besch… aus, aber man muss sie sich ja nicht ansehen:D

Tommi

Hallo tommi,

hast ja recht, aber warum einfach…

aber zum log: wieso bringt der denn nochmal ein „a“? das hat doch da nix zu suchen. Versuche doch mal das admin nicht mit 0d 0a abzuschliessen, sondern nur mit unix typischem linefeed.

aber zum log: wieso bringt der denn nochmal ein „a“

Das ist wahrscheinlich das (unterdrückte) Echo.

doch mal das admin nicht mit 0d 0a abzuschliessen, sondern nur mit unix typischem linefeed.

Das macht das Perl-Modul selber (weil auf Windows probiert), aber auch die „Handcodierung“ mit "
" macht keinen Unterschied. Woanders wurde schon geäußert, das die Zeichen „zu schnell“ reinkommen. Und das bei einem 32bit ARM-Prozessor (kostet übrigens nur 9,80 bei R*). Ich muss mal sehen was passiert, wenn ich die Zeichen mit 100ms Abstand kommen lasse.
Aber das darf doch nicht wahr sein: das Telnetinterface wurde „speziell für die Automatisierung“ angepriesen.

Im übrigen sind die IPWE/IPIO88-Module im Prinzip nur um Empfänger bzw. Treiberstufe ergänzte „Entwicklungskits/Referenzdesigns“, denn alle zum Programmieren(das ist der 20pol. Header) und Debuggen(das ist der 4pol. Header) benötigten Ports sind herausgeführt. Die haben einen Keil Ulink-Debugger und deren C-Compiler+TCP-Libs benutzt(zusammen 5TEuro+ Liste) ,aber es gibt wohl auch schon Alternativen. Man könnte also auch die ELV-Software runterwerfen und was eigenes draufmachen:D
Für 60 Euro ein guter Preis für ein abgespecktes 32bit DevKit.

Tommi

Ich geh’ am Stock! Man muss wirklich mind. 1ms Pause zwischen jedem Zeichen machen. Dann klappts auch mit der Password-Übergabe.:mad:
Die nächste Falle lauert bei den Kurzbefehlen. Das Kommando ist ein Zeichen, das abgedruckte Semikolon muss man weglassen und die Sensor-ID als BINÄR-Zahl (also chr(8) statt ‚8‘ für den Kombisensor) eingeben, gefolgt von einem CRLF; und das ganze->Richtig, Byte für Byte im 1ms Abstand.
Dann bekommt man die Werte ebenfalls binär zurück.

Tommi

Hallo,

ich brauche eine kleine Unterstützung von den php-Profis: wenn ich Tommis php-Skript zum Auslesen des IPWE1-Webinterface in IPS laufen lasse, bekomme ich einen Stack-Overflow; beim zweiten Aufruf stürzt IPS ab. Auf einem apache läuft das Skript fehlerfrei.

… oder hat schon jemand eine php-Lösung zum Auslesen über Telnetaufrufe?

Danke und Gruß
Otto

Stack-Overflow könnte auch heissen, eine schliessende Klammer ist nicht richtig gesetzt. Allerdings kann es durchaus sein, das die php4delphi-Version etwas „sparsamer“ kompiliert worden ist, da doch schon einige Schleifen zusammen mit ebenfalls nicht so resourcenfreundlichen regular Expressions verwendet wurden. Man kann sich das Leben aber auch ein wenig einfacher machen, wenn man weis, nach was (z.B. Sensorname) man sucht. Dann kann man z.B. den WWW-Reader zusammen mit nur noch einer regular expression ohne Schleife verwenden.

Das mit dem Telnet ist nicht ganz so trivial, da der IPWE1 vom Telnetprotokoll her Sonderzeichen verschickt, die erst herausgefiltert werden müssen (sieht man in meinem Logfile) und man alle Zeichen zum IPWE1 in einem gewissen Abstand schicken muss. In Perl habe ich das dank Net::Telnet CPAN-Modul fertig, in php kann man das nur mit direkter Socketprogrammierung machen, das es imho keine Telnetbibliothek für PHP gibt.

Man könnte natürlich auch ein echtes IPS-Modul in Delphi machen, mit den INDY-Komponenten sollte das kein Thema sein.

Tommi

Hallo Tommi,

habe mir auch einen Daemon geschrieben, der die Daten per Webaccess vom IPWE abholt.
Habe es in Perl auch mit Net::Telnet probiert, bekam es aber nicht hin. Lieber wäre es mir mit Net::Telnet. Kannst du mal posten, wie du das hinbekommen hast?

Wäre super,

thoern

Hab’s direkt geschickt, weil das nun gar nichts mehr mit IPS zu tun hat.
Tommi

Hallo Leute,

hat jemand eine Funktionierende Einbindung von IPWE ?

Das Script aus

läuft ausserhalb von IPS ohne Fehler, aber innerhalb von IPS bekomme ich den
„Stack-Overflow“ (inkl. IPS Absturz) nicht weg.

Hat jemand eine Lösung ?

Mfg
KHS

Hallo KHS,

ja, aber…
… über die „Strecke“ WWW-Reader >> Textparser >> Skript „StringToFloat“

viele Grüße
Otto

Ich habe ein kleines Progrämmchen, das die Werte in eine Textdatei im CSV-Format packt, die man dann wiederum aus IPS parsen kann.

Tommi

hab ich hinbekommen, etwas umständlich - aber läuft.
Die vielen Variablen sind notwendig, da ich immer wieder auf „unsichtbare“ Zeichen (Viereck) gestossen bin mit denen der „Text Parser“ in „Tag one“ Probleme hat.

Da hätte ich Interesse dran, auch an dem „parsen“-Teil.

KHS

siehe hier, Download unter dem Foto. Das Parsen ist trivial, einfach zeilenweise nach ‚;‘ in ein Array splitten. Dann kann man die Felder schön auslesen. Das gleiche Auslese- und Logging-Verfahren habe ich gerade für den WDE1 umgesetzt.

Tommi

Mittlerweile ist auch das „richtige“ IPS-Modul ein wenig weiter.
Details gibt es im SDK-Unterforum und noch mehr hier.

Tommi