FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Groej am 08 Oktober 2016, 07:45:13

Titel: Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 08 Oktober 2016, 07:45:13
Juten Tag an alle,

ich habe eine Anel IP Steckdosenleiste. Diese wirft über eine HTML Seite eine Datei mit den Zustand der Steckdosen aus und noch einiges mehr. Ich bekomm es zwar hin die Datei mit FHEM abzuholen und seh sie auch im Buffer des HTTPMOD Device aber bekomme es nicht hin den Zustand einer gezielten Steckdose auszulesen.

Die ausgelesen Datei sieht wie folgt aus:

NET-PWRCTRL_04.0;NET-CNTRL_BLN  ;192.168.10.4;255.255.255.0;192.168.10.1;00:04:A3:0B:04:3F;80;33.1;P;;Diskstation;HD Backup;IPO-Srv;AP 4.OG;Router;VDSL Modem;Nr7;Fritz!Box;;;1;0;0;0;1;1;0;0;;;0;0;0;0;0;0;0;0;;;an nach dem Start;Anfangsstatus;Anfangsstatus;Anfangsstatus;an vom Timer;an nach dem Start;aus vom Programm;aus vom Programm;;;;;;;T;;;;end;NEt-Cntrl Bln 4.OG Flur

Das grün gekennzeichnete sind die Zustände der 8 Steckdosen. In diesen Fall ist 1,5 und 6 eingeschaltet.  Meine Frage ist nun wie bekomme ich es hin die Zustände für jede Dose in einen eigenen Device auszulesen und mir dadurch den Zustand in FHEM anzeigen zu lassen. Es geht bestimmt mit readingName und readingRegex aber irgendwie stell ich mich zu blöd an weil davor so viel anderes steht. Meine Idee wäre die Semikolons zu zählen und den Wert danach auszulesen aber ich weiß nicht wie.

Danke schon mal für Tipps bzw. Hilfe von Euch.

Gruß

Jörg
Titel: Antw:Auslesen einer Zeile mit HTTPMOD
Beitrag von: Groej am 09 Oktober 2016, 10:07:34
Moin,

habs jetzt hinbekommen allerdings hab ich noch einen Schönheitsfehler.  Ich lese damit alle Zahlen aus und bekomme eine Anzahl von Values als Ausgabe. Dann nehme ich das Value was ich brauch. Teile des Codes habe ich hier gefunden https://forum.fhem.de/index.php/topic,30477.msg498508.html#msg498508 (https://forum.fhem.de/index.php/topic,30477.msg498508.html#msg498508). Falls jemand zu dem Code noch ein Verbesserungsvorschlag hat immer her damit.

Hier erst mal der Code mit dem es klappt:

define anel_bln_rel7 HTTPMOD http://192.168.10.4/strg.cfg?Auth:udpudp 10
attr anel_bln_rel7 userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex set1Data set1Name setHeader setURL
attr anel_bln_rel7 alias Anel Bln Power Nr.7
attr anel_bln_rel7 devStateIcon 1:taster_ch_an_gruen 0:taster_ch_aus_rot
attr anel_bln_rel7 reading01AutoNumLen 2
attr anel_bln_rel7 reading01Name value
attr anel_bln_rel7 reading01RegOpt g
attr anel_bln_rel7 reading01Regex (?:\d*\.)?\d+
attr anel_bln_rel7 room Power Control
attr anel_bln_rel7 set1Data F6=T
attr anel_bln_rel7 set1Name an/aus
attr anel_bln_rel7 setHeader Content-Type: text/html
attr anel_bln_rel7 setURL http://192.168.10.4/ctrl.htm?Auth:udpudp
attr anel_bln_rel7 stateFormat value-29
attr anel_bln_rel7 timeout 5
attr anel_bln_rel7 verbose 0
attr anel_bln_rel7 webCmd an/aus 0


Nun aber zu meinen Schönheitsfehler. Ich hätte gern FHEM Frontend nur das Icon zum schalten und nicht das an/aus 0 noch daneben. Wenn ich die 0 wegnehme geht das schalten gar nicht (siehe Dateianhang).

Jemand einen Tipp für mich wie ich das weg bekomme?

Gruß und schönen Sonntag

Jörg

Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 12 Dezember 2016, 17:35:45
Guten Abend,

bin neu hier und kämpfe gerade mit dem gleichen Thema rum. Habe gestern mit dem Thema FHEM angefangen und noch nicht viel Erfahrung sammeln können.
Bin gerade noch bei der Findung was ich alles mit FHEM realisieren kann.

Meine Fritzbox und mein LibreElec Mediacenter konnte ich anhand der vielen Tutorials schon erfolgreich einbinden. Mangels des bestellten Busware Culs habe ich noch nicht meine diversen Intertechno Steckdosen angebunden.

Ich bin im Besitz einer Anel Net Power Control mit 8 schaltbaren Steckdosen. Diese habe ich nun soweit auch unter FHEM eingebunden.
Problem dabei ist das ich zwar die einzelnen Steckdosen schalten kann, aber keinen Status unter FHEM zurückgeliefert bekomme.

Da ich sowohl für Linux ein Bash Script für das Schalten als auch unter Powershell für Windows ein Script erstellt habe, in dem ich auch den Status auslese, sollte es doch auch unter FHEM realisierbar sein.

Kenne mich aber mit Regular Expressions nicht sonderlich aus. Suche nun jemand, der für oben genannten String eine Regular Expression erstellt.
Diese sollte den Wert hinter dem 20 Semikolon zurückliefern (das müßte meiner Meinung nach der Status der ersten Steckdose sein.)

Vielen Dank für Eure Hilfe.
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 12 Dezember 2016, 18:06:25
Hallo Masterciw,

ich hab mir das auch nur aus Einträgen und selber gefummel zusammengebastelt. Hier der Code als Beispiel für Dose Nr.7. Der Haken bei meiner Lösung ist das er nicht die Semikolons zählt (hab ich leider nicht gefunden wie es geht) sondern auf Zahlen und diese einzeln als Values ausgibt. Wenn Du also den Namen der Dosen irgendwie änderst verschieben sich die Values dementsprechend. Im Beispiel ist Value 29 Dose 7. Das ganze ist mit Status auslesen im FHEM. Kann aber bis zu 10 Sekunden dauern bist der Status im FHEM geändert wird.

Wie gesagt falls es Verbesserungsvorschläge gibt immer her damit.

define anel_bln_rel7 HTTPMOD http://192.168.10.4/strg.cfg?Auth:udpudp 10
attr anel_bln_rel7 userattr reading07AutoNumLen reading07Name reading07RegOpt reading07Regex set1Data set1Name setHeader setURL
attr anel_bln_rel7 alias Anel Berlin Dose Nr.7
attr anel_bln_rel7 reading07AutoNumLen 2
attr anel_bln_rel7 reading07Name value
attr anel_bln_rel7 reading07RegOpt g
attr anel_bln_rel7 reading07Regex (?:\d*\.)?\d+
attr anel_bln_rel7 set1Data F6=T
attr anel_bln_rel7 set1Name an/aus
attr anel_bln_rel7 setHeader Content-Type: text/html
attr anel_bln_rel7 setURL http://192.168.10.4/ctrl.htm?Auth:udpudp
attr anel_bln_rel7 stateFormat value-29
attr anel_bln_rel7 timeout 5
attr anel_bln_rel7 verbose 0
attr anel_bln_rel7 webCmd an/aus 0

define anel_bln_rel7_dummy dummy
attr anel_bln_rel7_dummy alias Dose 7
attr anel_bln_rel7_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr anel_bln_rel7_dummy group Anel Berlin
attr anel_bln_rel7_dummy room Power Control
attr anel_bln_rel7_dummy setList state:on,off
attr anel_bln_rel7_dummy webCmd :
define anel_bln_rel7_on DOIF ([anel_bln_rel7_dummy] eq "on" and [anel_bln_rel7:value-29] eq "0") (set anel_bln_rel7 an/aus 1)
define anel_bln_rel7_off DOIF ([anel_bln_rel7_dummy] eq "off" and [anel_bln_rel7:value-29] eq "1") (set anel_bln_rel7 an/aus 0)
define anel_bln_rel7_dummy_on_doif DOIF ([anel_bln_rel7:value-29] eq "1") (set anel_bln_rel7_dummy on)
define anel_bln_rel7_dummy_off_doif DOIF ([anel_bln_rel7:value-29] eq "0") (set anel_bln_rel7_dummy off)
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Nobby1805 am 12 Dezember 2016, 18:34:31
^(?:[^;]*;){20}([^;]*);
testbar (und verstehbar ;)) z.B. in http://www.regextester.com/
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 12 Dezember 2016, 18:52:28
Hallo Nobby1805,

danke für den Tipp und auf der Seite geht es auch aber FHEM möchte das so nicht schlucken.

Invalid Regex ^(?:[^ Unknown command ]*, try help. Unknown command ){26}([^, try help. Unknown command ]*), try help.

Da fehlen bestimmt Zeichen davor und dahinter. Weiß nur nicht welche leider.

Gruß

Jörg
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Nobby1805 am 12 Dezember 2016, 20:55:34
Versuch doch mal die Semikola zu escapen ... da deutet m.E. die Fehlermeldung hin
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 12 Dezember 2016, 21:41:38
Hallo Nobby1805 und Groej,

vielen lieben Dank für die prompte Antwort.

@ Nobby1805: Meinst Du mit escapen den folgenden Aufruf: ^(?:[^\;]*\;){19}([^\;]*);     ?
Was liefert er mir dann genau als Ergebnis zurück. Den Rest des Stringes oder nur den Zustand 0 oder 1 bis zum nächsten Semikolon?

Mit RegEx stehe ich leider ein wenig auf Kriegsfuss. In Powershell habe ich den String in ein Array gesplittet und als Trenner das Semikolon verwendet.
Dann habe ich einfach den richtigen Teilstring ausgelesen und fertig.

@ Groej: Meinst Du mit Namen der Dosen ändern, den Namen im Webinterface der Steckdosenleiste?
Das wäre fatal.

Würde im FHEM auch gerne den Namen der Steckdose per RegEx auslesen und diesen dann z.B als Alias im Webinterface anzeigen.
Ist das machbar?

Vielen Dank für Eure Hilfe

Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Nobby1805 am 12 Dezember 2016, 22:43:22
Zitat von: Masterciw am 12 Dezember 2016, 21:41:38
@ Nobby1805: Meinst Du mit escapen den folgenden Aufruf: ^(?:[^\;]*\;){19}([^\;]*);     ?
Was liefert er mir dann genau als Ergebnis zurück. Den Rest des Stringes oder nur den Zustand 0 oder 1 bis zum nächsten Semikolon?
wobei das ;) für Semikolon und Klammer zu steht (wie kann man dort das Smiley verhindern?) ... ja, das Ergebnis ist der Zustand bin zum nächsten Semikolon (ausschließlich)
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 13 Dezember 2016, 06:40:38
Hallo Nobby1805,

hab schon probiert mit einen ; abzuschließen aber klappt auch nicht. FHEM scheint ein Problem mit dem ^ zu haben. Jemand eine Idee dazu?

@Masterciw: Wenn das mit dem String von Nobby funktioniert gibts kein Problem mehr wenn Du die Namen der Dosen im Webinterface änderst. Das mit den Namen auslesen sollte dann auch klappen. Ich weiß nur nicht ob man den Aliasnamen des Device durch eine Variable ersetzen kann aber warum eigentlich nicht.

Gruß

Jörg
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 14 Dezember 2016, 00:04:02
Hallo Leidgenossen,

was Regex angeht bin ich trotz mehrerer Stunden Test leider nicht weitergekommen. Werde mich Morgen nochmals dahinterklemmen.
Habe noch eine andere Webseite zum Testen gefunden. Hier wird wenn man auf der linken Seite explain anklickt auch der RegEx Ausdruck aufgeschlüsselt.

Hier der Link:
http://chris.photobooks.com/regex/default.htm

Dort funktioniert der RegEx von Nooby ohne Probleme.

Was mir auch noch aufgefallen ist sind die 4 Semikolons vor dem Schaltzustand der ersten Steckdose. Vielleicht kann man diese nutzen und den RegEx dementsprechend anpassen.

@ Nooby: Hast Du eine Ideee dazu?

@ Groej: das wäre super wenn wir das in den Griff kriegen würden. Vor allem muss man dann nicht immer darüber nachdenken um welche Stelle es sich handelt.

Mal sehen wie weit wir kommen.

Gute Nacht noch.

Masterciw
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: frank am 14 Dezember 2016, 11:31:24
Zitataber FHEM möchte das so nicht schlucken.
wo? in der befehlszeile von fhem?

dieses problem hatte ich zumindestens die letzten tage beim setzen von httpmod attributen.
bei mir klappt es wie folgt:
beim eingeben über die befehlszeile meckert fhem, aber setzt trotzdem ein "verstümmeltes" attribut. dieses kann ich dann aber über attribut ändern auf der detailseite des httpmod devices nach belieben ändern. hier wird nicht mehr "gemeckert". bei mir waren es wohl auch immer semicolon's.

eventuell hilft auch ein verdoppeln eines semicolon in der befehlszeile.
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 16 Dezember 2016, 23:55:50
Hallo,

hab noch nicht aufgegeben. In der Zwischenzeit habe ich folgendes ausprobiert: Der RegEx String ^(?:[^\;]*\;){19}([^\;]*);
ist soweit richtig, aber dieser funktioniert scheinbar nicht korrekt in Perl. Daher suche ich jemand, der den auf Perl anpassen kann.

Wenn sich jemand mit RegEx unter FHEM auskennt würde ich mich freuen wenn er einen Blick darauf schmeissen würde.

@Groej: Dieser blöde RegEx ist momentan der Showstopper schlecht hin. Würde gerne die Steckdose nutzen. Wäre es Dir möglich mir den kompletten Source für die Steckose per PN zu schicken, so dass ich diese erst mal so verwenden kann. Auch eine kurze Erklärung mit der Zahlweise wäre nicht schlecht. Habe gestern mal versucht herauszufinden wie du da zählst, stehe da aber vollkommen auf dem Schlauch. Hast Du zusätzlich noch eine Funktion in der 99_myUtils.pm hinterlegt?
Vielen Dank

Was den RegEx String angeht setze ich nach dem Urlaub meinen Kollegen darauf an. Der kennt sich unter Linux sehr gut aus und hat mir auch bei der Erstellung eines Bashscriptes zum Schalten geholfen.

Unter Powershell hatte ich das Ganze anders realisiert. Da habe ich den gesamten String in ein Array gesplitted und als Trenner das Semikolon verwendet. Das Ganze dann in einer Zählerschleife durchlaufen und schon hatte ich den Status der 8 Steckdosen

@frank: Ein Verdoppeln der Semikolons hat bei meinen Tests nichts gebracht. Habe diese aber direkt in der cfg Datei gesetzt und nicht über die FHEM Befehlszeile.

Das sind erst mal meine neusten Erkenntnisse dazu.

Gute Nacht noch

Masterciw
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 17 Dezember 2016, 05:55:41
Moin,

ich glaub ich habs. Also bis jetzt funktioniert es anscheinend.

define anel_bln_rel7 HTTPMOD http://192.168.10.4/strg.cfg?Auth:udpudp 8
attr anel_bln_rel7 userattr reading07Name reading07RegOpt reading07Regex reading08Name reading08RegOpt reading08Regex set1Data set1Name setHeader setURL
attr anel_bln_rel7 alias Anel Berlin Dose Nr.7
attr anel_bln_rel7 reading07Name value7
attr anel_bln_rel7 reading07RegOpt g
attr anel_bln_rel7 reading07Regex ^(?:[^;;]*;;){26}([^;;]*);;
attr anel_bln_rel7 reading08Name value8
attr anel_bln_rel7 reading08RegOpt g
attr anel_bln_rel7 reading08Regex ^(?:[^;;]*;;){27}([^;;]*);;
attr anel_bln_rel7 set1Data F6=T
attr anel_bln_rel7 set1Name an/aus
attr anel_bln_rel7 setHeader Content-Type: text/html
attr anel_bln_rel7 setURL http://192.168.10.4/ctrl.htm?Auth:udpudp
attr anel_bln_rel7 stateFormat value7
attr anel_bln_rel7 timeout 2
attr anel_bln_rel7 verbose 0
attr anel_bln_rel7 webCmd an/aus 0

define anel_bln_rel7_dummy dummy
attr anel_bln_rel7_dummy alias Dose 7
attr anel_bln_rel7_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr anel_bln_rel7_dummy group Anel Berlin
attr anel_bln_rel7_dummy room Power Control
attr anel_bln_rel7_dummy setList state:on,off
attr anel_bln_rel7_dummy webCmd :
define anel_bln_rel7_on DOIF ([anel_bln_rel7_dummy] eq "on" and [anel_bln_rel7:value7] eq "0") (set anel_bln_rel7 an/aus 1)
define anel_bln_rel7_off DOIF ([anel_bln_rel7_dummy] eq "off" and [anel_bln_rel7:value7] eq "1") (set anel_bln_rel7 an/aus 0)
define anel_bln_rel7_dummy_on_doif DOIF ([anel_bln_rel7:value7] eq "1") (set anel_bln_rel7_dummy on)
define anel_bln_rel7_dummy_off_doif DOIF ([anel_bln_rel7:value7] eq "0") (set anel_bln_rel7_dummy off)

define anel_bln_rel8 HTTPMOD http://192.168.10.4/strg.cfg?Auth:udpudp 0
attr anel_bln_rel8 userattr reading08Name reading08RegOpt reading08Regex set1Data set1Name setHeader setURL
attr anel_bln_rel8 alias Anel Berlin Dose Nr.8
attr anel_bln_rel8 reading08Name value8
attr anel_bln_rel8 reading08RegOpt g
attr anel_bln_rel8 reading08Regex ^(?:[^;;]*;;){27}([^;;]*);;
attr anel_bln_rel8 set1Data F7=T
attr anel_bln_rel8 set1Name an/aus
attr anel_bln_rel8 setHeader Content-Type: text/html
attr anel_bln_rel8 setURL http://192.168.10.4/ctrl.htm?Auth:udpudp
attr anel_bln_rel8 stateFormat value8
attr anel_bln_rel8 timeout 2
attr anel_bln_rel8 verbose 0
attr anel_bln_rel8 webCmd an/aus 0

define anel_bln_rel8_dummy dummy
attr anel_bln_rel8_dummy alias Dose 8
attr anel_bln_rel8_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr anel_bln_rel8_dummy group Anel Berlin
attr anel_bln_rel8_dummy room Power Control
attr anel_bln_rel8_dummy setList state:on,off
attr anel_bln_rel8_dummy webCmd :
define anel_bln_rel8_on DOIF ([anel_bln_rel8_dummy] eq "on" and [anel_bln_rel7:value8] eq "0") (set anel_bln_rel8 an/aus 1)
define anel_bln_rel8_off DOIF ([anel_bln_rel8_dummy] eq "off" and [anel_bln_rel7:value8] eq "1") (set anel_bln_rel8 an/aus 0)
define anel_bln_rel8_dummy_on_doif DOIF ([anel_bln_rel7:value8] eq "1") (set anel_bln_rel8_dummy on)
define anel_bln_rel8_dummy_off_doif DOIF ([anel_bln_rel7:value8] eq "0") (set anel_bln_rel8_dummy off)


Kurze oder vielleicht auch lange Erklärung. Ich hab zum Test nur Dose 7 und 8 hier weil da nichts dran ist bei mir.
Ich lese über Dose 7 alle Ports aus ( im Beispiel jetzt nur Dose 7 und 8 ) alle 8 Sekunden. Damit werden die Values 7 und 8 erzeugt. Dann gibt es die DOIF Anweisungen um in FHEMWeb die Schalter zu schalten bzw. damit ja auch den Status der jeweiligen Dose. Ich mach das auslesen so weil ich nicht möchte das ständig die Dose bzw. der RasPi beschäftigt werden. Genauso ist eine Ruhezeit von 2 Sekunden programmiert damit die Dose nicht ständig Befehle bekommt. Mit set1Data F6=T wird die Dose 7 dann geschaltet. Bei Dose 8 ist es set1Data F7=T usw.. Hab bei der Aktion gemerkt das sich das WebUI der Leiste beim schalten über FHEM nicht immer selbst aktualisiert. Das auslesen passiert jetzt an Hand der Semikolons. Kann man ganz oben am den String auszählen bzw. nachvollziehen.

Die Idee mit den Namen auslesen und in den Alias zu setzten finde ich super. Ich kann auch schon die Namen auslesen aber nicht als Alias setzten. Ich hab dazu mal ein Thema hier im Forum aufgemacht.
https://forum.fhem.de/index.php/topic,62684.0.html (https://forum.fhem.de/index.php/topic,62684.0.html)

Ich bin nicht der große Programmierer daher die Bitte wenn was besser geht bzw. einfacher zu lösen ist einfach schreiben.

Gruß

Jörg
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 18 Dezember 2016, 00:54:57
Hallo,

der RegEx funktioniert super. Kann nun alle States auslesen und auch die Namen lassen sich in Variablen einlesen.
Was mir zu schaffen machte war der Timeout von 2 Sekunden. Scheinbar dauert es länger bis der HTTP Request durch ist
und daher wurde der Buffer nicht komplett gefüllt. Nachdem ich den Timeout deaktivert habe war alles gut.

Was das Auslesen und setzen von Variablen angeht habe ich folgenden Link gefunden. Hatte aber noch keine Zeit mehr zu testen:
http://www.computerhilfen.de/info/fhem-vordefinierte-variablen-nutzen-oder-eigene-definieren.html

Morgen werde ich mich mal daran machen und schauen ob ich dann die Steckdosen mit Status schalten kann.

Gute Nacht.
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 18 Dezember 2016, 07:17:39
Moin,

das setzten von Variablen ist ja nicht das Problem. Ich denk Du meinst damit die Sache mit den Namen auslesen und setzten als Attribut alias. Das Problem ist ob Variablen bei alias überhaupt zugelassen sind. Glaube fast nicht.

Gruß

Jörg
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 20 Dezember 2016, 11:42:44
Hallo Groej,

sorry das ich mich jetzt erst melde. Hatte in den letzten Tagen viel zu tun.
Hoffe Dir geht es gut und das Attentat in Berlin ist an Dir und Deinen lieben vorbeigegangen.

Habe in der Zwischenzeit ein wenig experimentiert und habe leider immer noch Probleme mit Deinen letzten Codefetzen den Status in den Dummy zu schreiben. Das Auslesen funktioniert einwandfrei. Nur das setzen im Dummy mit den DOIF Befehlen habe ich noch nicht so recht verstanden.

Auch habe ich eine Möglichkeit gefunden den Namen der Steckdose dynamisch in das Alias Atttribut einzulesen. Dazu antworte ich aber in Deinem anderen Thread in diesem Forum.

Könntest Du mir die Zeilen mit dem DOIF mal ein wenig näher erklären. Wie soll das Ganze in der WebUI nachher aussehen?

Gruss aus Ratingen nach Berlin.

Masterciw


Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 20 Dezember 2016, 19:40:35
Hallo Masterciw,

erstmal Danke für die Anteilnahme in Namen aller Berlinerinnen und Berliner. Ich habe zum Glück keine Verletzten bzw. Tote in der Familie oder Freundeskreis und ich selbst bin auch ok - Danke.

Ich zwar gerade schwer die Kurve zu bekommen aber Leben MUSS weitergehen.

So nun aber zu unseren eigentlichen Thema. Ich habe mal Kommentare zu dem Code hinzugefügt. Ich hoffe Du verstehst was ich meine.


#Hiermit lese ich alle 5 Minuten die Namen der Dose 7 und 8 aus und schreibe die ins Value namen7 bzw. namen8
define anel_bln_rel0 HTTPMOD http://192.168.10.4/strg.cfg?Auth:udpudp 540
attr anel_bln_rel0 userattr reading07Name reading07RegOpt reading07Regex reading08Name reading08RegOpt reading08Regex set1Data set1Name setHeader setURL
attr anel_bln_rel0 alias Anel Berlin Namen lesen
attr anel_bln_rel0 reading07Name name7
attr anel_bln_rel0 reading07RegOpt g
attr anel_bln_rel0 reading07Regex ^(?:[^;;]*;;){16}([^;;]*);;
attr anel_bln_rel0 reading08Name name8
attr anel_bln_rel0 reading08RegOpt g
attr anel_bln_rel0 reading08Regex ^(?:[^;;]*;;){17}([^;;]*);;

#hier lese ich alle 8 Sekunden den Status der Dose 7 und 8 aus und schreibe diese ins Value value7 bzw. value8
define anel_bln_rel7 HTTPMOD http://192.168.10.4/strg.cfg?Auth:udpudp 8
attr anel_bln_rel7 userattr reading07Name reading07RegOpt reading07Regex reading08Name reading08RegOpt reading08Regex set1Data set1Name setHeader setURL
attr anel_bln_rel7 reading07Name value7
attr anel_bln_rel7 reading07RegOpt g
attr anel_bln_rel7 reading07Regex ^(?:[^;;]*;;){26}([^;;]*);;
attr anel_bln_rel7 reading08Name value8
attr anel_bln_rel7 reading08RegOpt g
attr anel_bln_rel7 reading08Regex ^(?:[^;;]*;;){27}([^;;]*);;
attr anel_bln_rel7 set1Data F6=T
attr anel_bln_rel7 set1Name an/aus
attr anel_bln_rel7 setHeader Content-Type: text/html
attr anel_bln_rel7 setURL http://192.168.10.4/ctrl.htm?Auth:udpudp
attr anel_bln_rel7 stateFormat value7
attr anel_bln_rel7 timeout 2
attr anel_bln_rel7 verbose 0
attr anel_bln_rel7 webCmd an/aus 0

#das ist der Dummy der mit Schalter Icon im FHEMWeb angezeigt wird
define anel_bln_rel7_dummy dummy
attr anel_bln_rel7_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr anel_bln_rel7_dummy group Anel Berlin
attr anel_bln_rel7_dummy room Power Control
attr anel_bln_rel7_dummy setList state:on,off
attr anel_bln_rel7_dummy webCmd :

#füllt das alias Attribut mit dem ausgelesenden Namen der Steckdose. Das kennst Du ja. Ich habe noch einen Save dahinter gesetzt#
#damit fhem.cfg auch gesichert wird. Mich nervte da rote Fragezeichen hinter SAVE CONFIG.
define anel_bln_rel7_dummy_notify notify anel_bln_rel0:(name7).* {\
  fhem("attr anel_bln_rel7_dummy alias ".(ReadingsVal("anel_bln_rel0","name7", "")));;\
  fhem("save");;\
}

#hier schalte ich die Dose und den Zustand den der Dummy hat wenn die Dose einen anderen Zustand als der Dummy hat
define anel_bln_rel7_on DOIF ([anel_bln_rel7_dummy] eq "on" and [anel_bln_rel7:value7] eq "0") (set anel_bln_rel7 an/aus 1)
define anel_bln_rel7_off DOIF ([anel_bln_rel7_dummy] eq "off" and [anel_bln_rel7:value7] eq "1") (set anel_bln_rel7 an/aus 0)

#hier schalte ich den Dummy in den Status der Dose
define anel_bln_rel7_dummy_on_doif DOIF ([anel_bln_rel7:value7] eq "1") (set anel_bln_rel7_dummy on)
define anel_bln_rel7_dummy_off_doif DOIF ([anel_bln_rel7:value7] eq "0") (set anel_bln_rel7_dummy off)


Gruß

Jörg
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 28 Dezember 2016, 12:56:42
Hi Groej,

hoffe Du hattest ein schönes Weihnachtsfet im Kreis Deiner Familie.

Mittlerweile bin ich ein gutes Stück weitergekommen. Wenn ich Deinen letzten Code verwende, kommt es aber beim Hinzufügen weiterer Steckdosen zu Timeouts und die zurückgelieferten Readings sind unvollständig bzw. auf Timeout gelaufen.

Dies führt dazu das die Steckdosen undefiniert geschaltet werden und diese ist so nicht für mich tragbar.

Habe dann den Code nochmals komplett umgestellt und nutze nun nur noch ein Reading das alle 8 Sekunden erfolgt. Des Weiteren habe ich ein Bash Script zum Schalten der Steckdosen eingebaut. Dies spart mir das erneute Auslesen, dass ja für jede Steckdose erfolgte.

#####################################################################################################################
# Anel NetPower Control Steckdosenleiste - 8-fach                                                                   #
#####################################################################################################################

define Anel_SD HTTPMOD http://192.168.2.100/strg.cfg?Auth:admin12345678 8
attr Anel_SD userattr reading01Name reading01RegOpt reading01Regex reading02Name reading02RegOpt reading02Regex reading03Name reading03RegOpt reading03Regex reading04Name reading04RegOpt reading04Regex reading05Name reading05RegOpt reading05Regex reading06Name reading06RegOpt reading06Regex reading07Name reading07RegOpt reading07Regex reading08Name reading08RegOpt reading08Regex reading11Name reading11RegOpt reading11Regex reading12Name reading12RegOpt reading12Regex reading13Name reading13RegOpt reading13Regex reading14Name reading14RegOpt reading14Regex reading15Name reading15RegOpt reading15Regex reading16Name reading16RegOpt reading16Regex reading17Name reading17RegOpt reading17Regex reading18Name reading18RegOpt reading18Regex
attr Anel_SD alias Anel Ratingen Namen lesen
attr Anel_SD group Readings
attr Anel_SD reading01Name name1
attr Anel_SD reading01RegOpt g
attr Anel_SD reading01Regex ^(?:[^;;]*;;){10}([^;;]*);;
attr Anel_SD reading02Name name2
attr Anel_SD reading02RegOpt g
attr Anel_SD reading02Regex ^(?:[^;;]*;;){11}([^;;]*);;
attr Anel_SD reading03Name name3
attr Anel_SD reading03RegOpt g
attr Anel_SD reading03Regex ^(?:[^;;]*;;){12}([^;;]*);;
attr Anel_SD reading04Name name4
attr Anel_SD reading04RegOpt g
attr Anel_SD reading04Regex ^(?:[^;;]*;;){13}([^;;]*);;
attr Anel_SD reading05Name name5
attr Anel_SD reading05RegOpt g
attr Anel_SD reading05Regex ^(?:[^;;]*;;){14}([^;;]*);;
attr Anel_SD reading06Name name6
attr Anel_SD reading06RegOpt g
attr Anel_SD reading06Regex ^(?:[^;;]*;;){15}([^;;]*);;
attr Anel_SD reading07Name name7
attr Anel_SD reading07RegOpt g
attr Anel_SD reading07Regex ^(?:[^;;]*;;){16}([^;;]*);;
attr Anel_SD reading08Name name8
attr Anel_SD reading08RegOpt g
attr Anel_SD reading08Regex ^(?:[^;;]*;;){17}([^;;]*);;
attr Anel_SD reading11Name value1
attr Anel_SD reading11RegOpt g
attr Anel_SD reading11Regex ^(?:[^;;]*;;){20}([^;;]*);;
attr Anel_SD reading12Name value2
attr Anel_SD reading12RegOpt g
attr Anel_SD reading12Regex ^(?:[^;;]*;;){21}([^;;]*);;
attr Anel_SD reading13Name value3
attr Anel_SD reading13RegOpt g
attr Anel_SD reading13Regex ^(?:[^;;]*;;){22}([^;;]*);;
attr Anel_SD reading14Name value4
attr Anel_SD reading14RegOpt g
attr Anel_SD reading14Regex ^(?:[^;;]*;;){23}([^;;]*);;
attr Anel_SD reading15Name value5
attr Anel_SD reading15RegOpt g
attr Anel_SD reading15Regex ^(?:[^;;]*;;){24}([^;;]*);;
attr Anel_SD reading16Name value6
attr Anel_SD reading16RegOpt g
attr Anel_SD reading16Regex ^(?:[^;;]*;;){25}([^;;]*);;
attr Anel_SD reading17Name value7
attr Anel_SD reading17RegOpt g
attr Anel_SD reading17Regex ^(?:[^;;]*;;){26}([^;;]*);;
attr Anel_SD reading18Name value8
attr Anel_SD reading18RegOpt g
attr Anel_SD reading18Regex ^(?:[^;;]*;;){27}([^;;]*);;
attr Anel_SD room Power Control
attr Anel_SD timeout 5

#####################################################################################################################
# Anel NetPower Control Steckdosenleiste - Dummies für die 8 Steckdosen definieren                                  #
#####################################################################################################################

define Anel_SD_01_dummy dummy
attr Anel_SD_01_dummy alias SD 01: Cloudy
attr Anel_SD_01_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_01_dummy group Anel Ratingen
attr Anel_SD_01_dummy room Power Control
attr Anel_SD_01_dummy webCmd :
define Anel_SD_01_dummy_off notify Anel_SD_01_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 1 off');;}
define Anel_SD_01_dummy_on notify Anel_SD_01_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 1 on');;}

define Anel_SD_02_dummy dummy
attr Anel_SD_02_dummy alias SD 02: SERVER05
attr Anel_SD_02_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_02_dummy group Anel Ratingen
attr Anel_SD_02_dummy room Power Control
attr Anel_SD_02_dummy webCmd :
define Anel_SD_02_dummy_off notify Anel_SD_02_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 2 off');;}
define Anel_SD_02_dummy_on notify Anel_SD_02_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 2 on');;}

define Anel_SD_03_dummy dummy
attr Anel_SD_03_dummy alias SD 03: Backup HDD
attr Anel_SD_03_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_03_dummy group Anel Ratingen
attr Anel_SD_03_dummy room Power Control
attr Anel_SD_03_dummy webCmd :
define Anel_SD_03_dummy_off notify Anel_SD_03_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 3 off');;}
define Anel_SD_03_dummy_on notify Anel_SD_03_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 3 on');;}

define Anel_SD_04_dummy dummy
attr Anel_SD_04_dummy alias SD 04: Daniela 2 TB
attr Anel_SD_04_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_04_dummy group Anel Ratingen
attr Anel_SD_04_dummy room Power Control
attr Anel_SD_04_dummy webCmd :
define Anel_SD_04_dummy_off notify Anel_SD_04_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 4 off');;}
define Anel_SD_04_dummy_on notify Anel_SD_04_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 4 on');;}

define Anel_SD_05_dummy dummy
attr Anel_SD_05_dummy alias SD 05: Netgear Switch
attr Anel_SD_05_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_05_dummy group Anel Ratingen
attr Anel_SD_05_dummy room Power Control
attr Anel_SD_05_dummy webCmd :
define Anel_SD_05_dummy_off notify Anel_SD_05_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 5 off');;}
define Anel_SD_05_dummy_on notify Anel_SD_05_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 5 on');;}

define Anel_SD_06_dummy dummy
attr Anel_SD_06_dummy alias SD 06: Raspberry
attr Anel_SD_06_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_06_dummy group Anel Ratingen
attr Anel_SD_06_dummy room Power Control
attr Anel_SD_06_dummy webCmd :
define Anel_SD_06_dummy_off notify Anel_SD_06_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 6 off');;}
define Anel_SD_06_dummy_on notify Anel_SD_06_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 6 on');;}

define Anel_SD_07_dummy dummy
attr Anel_SD_07_dummy alias SD 07: Michael 1,5 TB
attr Anel_SD_07_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_07_dummy group Anel Ratingen
attr Anel_SD_07_dummy room Power Control
attr Anel_SD_07_dummy webCmd :
define Anel_SD_07_dummy_off notify Anel_SD_07_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 7 off');;}
define Anel_SD_07_dummy_on notify Anel_SD_07_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 7 on');;}

define Anel_SD_08_dummy dummy
attr Anel_SD_08_dummy alias SD 08: SERVER01
attr Anel_SD_08_dummy devStateIcon on:taster_ch_an_gruen:off off:taster_ch_aus_rot:on
attr Anel_SD_08_dummy group Anel Ratingen
attr Anel_SD_08_dummy room Power Control
attr Anel_SD_08_dummy webCmd :
define Anel_SD_08_dummy_off notify Anel_SD_08_dummy:off {system('/opt/fhem/mycfg/scripts/netpower.sh set 8 off');;}
define Anel_SD_08_dummy_on notify Anel_SD_08_dummy:on {system('/opt/fhem/mycfg/scripts/netpower.sh set 8 on');;}

#####################################################################################################################
# Anel NetPower Control Steckdosenleiste - Namen auslesen und dann in Alias schreiben                               #
# Das Alias Attribut mit den ausgelesenden Namen der Steckdose befüllen und dann das Ganze speichern.               #
# Somit umgeht man das rote Fragezeichen hinter SAVE CONFIG in der FHEM WebUI.                                      #
#####################################################################################################################

define Anel_SD_dummy_notify notify Anel_SD:.* {\
  fhem("attr Anel_SD_01_dummy alias SD 01: ".(ReadingsVal("Anel_SD","name1", "")));;\
  fhem("attr Anel_SD_02_dummy alias SD 02: ".(ReadingsVal("Anel_SD","name2", "")));;\
  fhem("attr Anel_SD_03_dummy alias SD 03: ".(ReadingsVal("Anel_SD","name3", "")));;\
  fhem("attr Anel_SD_04_dummy alias SD 04: ".(ReadingsVal("Anel_SD","name4", "")));;\
  fhem("attr Anel_SD_05_dummy alias SD 05: ".(ReadingsVal("Anel_SD","name5", "")));;\
  fhem("attr Anel_SD_06_dummy alias SD 06: ".(ReadingsVal("Anel_SD","name6", "")));;\
  fhem("attr Anel_SD_07_dummy alias SD 07: ".(ReadingsVal("Anel_SD","name7", "")));;\
  fhem("attr Anel_SD_08_dummy alias SD 08: ".(ReadingsVal("Anel_SD","name8", "")));;\
  fhem("save");;\
  define Anel_SD_01_dummy_on_doif DOIF ([Anel_SD:value1] eq "1") (set Anel_SD_01_dummy on) DOELSE (set Anel_SD_01_dummy off)
  define Anel_SD_02_dummy_on_doif DOIF ([Anel_SD:value2] eq "1") (set Anel_SD_02_dummy on) DOELSE (set Anel_SD_02_dummy off)
  define Anel_SD_03_dummy_on_doif DOIF ([Anel_SD:value3] eq "1") (set Anel_SD_03_dummy on) DOELSE (set Anel_SD_03_dummy off)
  define Anel_SD_04_dummy_on_doif DOIF ([Anel_SD:value4] eq "1") (set Anel_SD_04_dummy on) DOELSE (set Anel_SD_04_dummy off)
  define Anel_SD_05_dummy_on_doif DOIF ([Anel_SD:value5] eq "1") (set Anel_SD_05_dummy on) DOELSE (set Anel_SD_05_dummy off)
  define Anel_SD_06_dummy_on_doif DOIF ([Anel_SD:value6] eq "1") (set Anel_SD_06_dummy on) DOELSE (set Anel_SD_06_dummy off)
  define Anel_SD_07_dummy_on_doif DOIF ([Anel_SD:value7] eq "1") (set Anel_SD_07_dummy on) DOELSE (set Anel_SD_07_dummy off)
  define Anel_SD_08_dummy_on_doif DOIF ([Anel_SD:value8] eq "1") (set Anel_SD_08_dummy on) DOELSE (set Anel_SD_08_dummy off)
}
attr Anel_SD_dummy_notify verbose 0


Dies funktioniert nun auch soweit einwandfrei, aber was mich momentan noch stört ist die Authentifizierung gegen die Steckdose.
Obwohl im Aufruf die richtigen Benutzerdaten angegeben sind, funktioniert die Anmeldung nur wenn ich im Interface der Steckdose
unter USER -> keine Authentifizierung auswähle.

Wie hast Du das bei Dir realisiert? Möchte diese Einstellung ungern so lassen.

Des Weiteren würde ich gerne mein verwendetes Bash Script nach Perl konvertieren und mich würde interessieren, ab Du mich dabei unterstützen kannst und ob überhaupt Interesse besteht.

Was Perl angeht bin ich jedoch blutiger Anfänger und es wird sicherlich noch einige Zeit vergehen bis wir eine lauffähige Lösung haben.

Hier mal ein Auszug meiner 99_myUtils.pm

########################################################################################
# Net Power Control - Funktion zum Schalten der Anel NetPower Control Steckdosenleiste #
########################################################################################
sub
AnelToggle($$$$)
{
    my ($user, $password, $steckdose, $ip) = @_;
    $steckdose--;
    my $curl=`curl -s --user "$user:$password" --data "F$steckdose=T" "http://$ip/ctrl.htm?Auth:"`
}


Mit dieser Funktion kann man den Zustand der Steckdose toggeln. Wenn ich diese Funktion auf der Linux Console mit perl test.pm user passwort steckdose ip aufrufe
funktioniert das einwandfrei und die Steckdose wird getoggelt.

Momentan suche ich aber nach einer Möglichkeit den Code aus FHEM aufzurufen und weiß noch nicht genau wie.

So das wars erst einmal aus Ratingen


Gruß Masterciw


Masterciw


Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Groej am 28 Dezember 2016, 14:23:45
Hallo Masterciw,

ja danke bin ein paar Kilo schwerer  :D. Hoffe Du hattest auch schöne Tage.

Freut mich das ich Dir etwas helfen konnte. Würde Dir gerne helfen aber alles was ich hier so mache ist reines googeln und testen. Klar wächst das wissen dadurch aber ich glaub nicht das ich ein Modul hinbekommen würde obwohl ich sowas für meine Taupunktberechnung gemacht habe. Warte mal. Ich hatte da doch schon mal was am Laufen.
Vielleicht kannste was damit Anfange. Ich weiß nicht ob ich das hier im Forum gefunden hatte oder im Forum bei Anel. Es hat jedenfalls damit funktioniert und ich konnte die Dosen schalten. Ich bin mir nicht mehr sicher ob ich im Linux dafür nachinstallieren mußte.


########## ANEL
## Script wird aufgerufen mit Z.B. {Anel('192.168.10.4','Sw_on7udpudp\x00\n')}.
## In diesen Fall wird Dose 7 eingeschaltet mit dem User UDP mit Passwort UDP
sub Anel($$) {
my ($leisteip,$status) = @_;
    use IO::Socket;
   my $sock = new IO::Socket::INET (
           PeerAddr => $leisteip,
           PeerPort => '75',
           Proto => 'udp',
        );
    die "Could not create socket: $!\n" unless $sock;
        print $sock "$status";
        close($sock);
}
########## ANEL Ende


Also ich habe eine Pro und eine HUT Version. In beiden habe ich kein Haken gesetzt bei "keine Authentifikation" und es geht. Auch habe ich keine undefinierte Zustände der Dosen. Wie schon gesagt hab ich raus gefunden dass das WebUI der Dose nicht immer hinterher kommt aber die Dosen schalten. Hat Deine Dose die letzte Firmware für Deine Variante drin? Versuch doch mal einen anderen User als den admin zu nehmen. Hab einen User angelegt der nur steuern darf.

Gruß aus Berlin

Jörg

Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: StefanStrobel am 30 Dezember 2016, 10:01:46
Hallo Masterciw,

Wenn Deine Steckdose einfach nur basic auth haben möchte, kannst Du Benutzernamen und passwort beim define angeben.
Siehe https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_create_a_valid_session_id_that_might_be_necessary

Das Schalten der Dose kannst Du auch direkt mit HTTPMOD machen. Alles was ein externer Aufruf von curl macht, geht auch direkt als Set-Option in Fhem:
https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_define_a_set_command_and_send_data_to_a_device

Weitere Beispiele findest Du im Forum.

Gruss
   Stefan
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 31 Dezember 2016, 14:34:08
Hallo Stefan,

vielen Dank für Deinen Tip. Habe die Define Zeile für die Steckdose nun umgebaut und es funktioniert einwandfrei.

Die Zeile sieht nun folgendermaßen aus:
define Anel_SD HTTPMOD http://user:passwort@192.168.2.100/strg.cfg? 8

Somit konnte ich nun im Webinterface der Steckdose den Haken für ohne Authentifizierung wieder entfernen.
Danke nochmals für die Links, haben mir sehr geholfen.

Bezüglich des Schalten mit Set muss ich mir das nochmals ein wenig genauer anschauen. Leider habe ich das noch nicht so ganz verstanden und die Dokumentation dazu habe ich zwar gelesen, aber noch nicht verstanden.

Werde mir das die Tage nochmals anschauen. Sollte mir noch was unklar sein, komme ich gerne nochmals auf Dich zu.


@Groej: Deinen Tip habe ich auch ausprobiert. Hatte dazu einen neuen Benutzer angelegt, der nur steuern durfte. Leider hatte ich damit die gleichen Probleme.


Ich wünsche Euch einen guten Rutsch ins neue Jahr.

Gruß Masterciw
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: hdosw am 17 Dezember 2019, 17:39:17
Zitat von: Masterciw am 28 Dezember 2016, 12:56:42
netpower.sh
Hallo Masterciw,

ich fange gerade mit fhem an. Hab schon meine Funksteckdosen erfolgreich definiert und bin jetzt dran mein Anel Net-Power Steckdosenleiste einzurichten. Dank Deines Beitrags habe ich es jetzt soweit, dass sie Steckdosen mit Namen und Status angezeigt werden. Leider klappt das schalten nicht da mir die netpower.sh fehlt. Kannst Du mir diese zukommen lassen?

Lieben Gruß aus FFB
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 17 Dezember 2019, 19:42:20
Hallo HDO,

aber klar doch. Freut mich wenn ich helfen kann.
Hier der Code der Datei netpower.sh. Hoffe das hilft Dir weiter.


#!/bin/bash

user='fhem'
pw='xxxxxxxx'
ip='192.168.2.100'

function strg {
curl -s --user "$user:$pw" "http://$ip/strg.cfg"
}

function toggle {
curl -s --user "$user:$pw" --data "F$[$1-1]=S" "http://$ip/ctrl.htm" > /dev/null
}

function status {
strg="$(strg)"

if [[ "$?" != "0" ]]; then
echo 'Geht nicht'
exit
fi

printf 'Nr Bezeichnung Status'
echo

for i in {1..8}; do
echo "$strg" | cut -d\; -f2$i | while read state; do
aaa=bbb

echo -n $i
printf ' '
echo -n "$(echo "$strg" | cut -d\; -f1$i)"
printf ' '

case "$state" in
0 )
echo -e "\e[31mDeaktiviert\e[0m"
;;

1 )
echo -e "\e[32mAktiviert\e[0m"
;;

* )
echo "!!FEHLER!!"
;;
esac
done
done | sed 's/\t/_|/g' |  column -t -s '_' | awk '1;!(NR%1){print "--------------------------------------";}'

return $aaa
}

case "$1" in
status )
status
;;

toggle )
case "$2" in
[1-8] )
echo -e "\e[1mVorher:\e[0m"
echo
status

echo
echo 'Jetzt toggle ich...'
echo

toggle $2

echo -e "\e[1mNachher:\e[0m"
echo
status
;;

* )
echo "Die Steckdose $2 gibts nicht!"
;;
esac
;;

set )
case "$2" in
[1-8] )
case "$3" in
on|off )
echo -e "\e[1mVorher:\e[0m"
echo
status

state="$(strg | cut -d\; -f2$2)"

[[ "$3" == "on" ]] && [[ "$state" == "0" ]] && toggle=1
[[ "$3" == "off" ]] && [[ "$state" == "1" ]] && toggle=1

if [[ "$toggle" == "1" ]]; then
echo "Jetzt toggle ich..."
echo

toggle $2

echo -e "\e[1mNachher:\e[0m"
echo
status
else
echo "Also mache ich nix."
fi
;;

* )
echo "$3 ist kein gültiges Argument!"
;;
esac
;;

* )
echo "$2 ist keine Steckdose!"
;;
esac
;;

* )
echo "Usage:"
echo "$0 status"
echo "$0 toggle {1-8}"
echo "$0 set {1-8} {on|off}"
;;
esac


Code in eine Datei namens netpower.sh kopieren (Gross/Kleinschreibung beachten). Diese in den richtigen Ordner auf dem Raspberry kopieren. Pfad sieht man in der Definition der Steckdosen.

In der Datei netpower.sh die folgenden Variablen pflegen.
user='fhem'
pw='xxxxxxxx'
ip='192.168.2.100'

Ich hatte mir damals einen Benutzer im Webinterface der Steckdose für die Schaltvorgänge erstellt.

Die Datei netpower.sh ausführbar machen.

Nun sollte einem Test nichts mehr im Wege stehen.

Hoffe das Ganze hilft Dir weiter. Habe das Ganze damals für die Netpower Control V2 entwickelt und hoffe das funktioniert auch mit den neueren Versionen. Da meine beiden Devices nach wie vor einwandfrei funktionieren (ab und zu hakt mal ein Relais) habe ich mir bisher noch kein neueres Device zugelegt.

Happy testing.

Würde mich freuen wenn Du den Code modifizierst, wenn Du das Ergebnis hier postet. So haben dann auch andere Spaß damit.
Für Fragen stehe ich soweit ich diese beantworten kann gerne zur Verfügung.

Schönen Abend noch.

Gruß Masterciw

Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: hdosw am 19 Dezember 2019, 15:55:45
Hallo Masterciw,

ich danke Dir für die schnelle und zielführende Antwort. Es funktioniert wunderbar. Das einzige was komisch ist, ist dass ich immer wieder die Meldung

Connection lost, trying a reconnect every 5 seconds

Hast Du das auch und wenn ja weisst Du warum dies kommt und auch eine Lösung?
Den timeout habe ich schon auf 60 erhöht. Jetzt kommt die Meldung nicht mehr ganz so oft aber sie kommt  :(

Liebe Grüße
Dieter
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 22 Dezember 2019, 16:44:14
Hallo Dieter,

schau Dir mal den folgenden Link an:
https://forum.fhem.de/index.php?topic=76983.0 (https://forum.fhem.de/index.php?topic=76983.0)

Der könnte bei der Behebung des Problemes helfen.
Wo bekommst Du den Fehler genau angezeigt.

Wie kommst Du zu der Vermutung, das dieser mit der Steckdose in Zusammenhand steht?
Wie ist der Loglevel in FHEM eingestellt?

Bei mir sehe ich diese Fehler nicht.

Gruß und eine schöne Weihnachtszeit.

Michael


Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: hdosw am 23 Dezember 2019, 11:24:59
Hallo Michael,

danke für Deine Antwort. Den Link schau ich mir heute an. Die Fehlermeldung hab ich als Bild angehängt und der kommt erst seitdem ich die Anel-Steckdose  eingerichtet habe. Mein Log-Level steht auf 3 und es wird auch kein Fehler eingetragen.

Ich wünsche Deiner Familie und Dir eine schöne Weihnachtszeit.

Liebe Grüße
Dieter
Titel: Antw:Auslesen einer Zeile mit HTTPMOD / Anel Elektronik IP Steckdosen
Beitrag von: Masterciw am 23 Dezember 2019, 12:06:34
Hallo Dieter,

jetzt wo ich die Meldung sehe, kann ich mich entsinnen, dass diese auch ab und an in meiner FHEM Gui auftaucht. Das sollten wir dann nach Weihnachten mal gemeinsam forschen woran das liegen könnte.

Gruß und auch Dir und Deinen Lieben eine schöne Weihnachtszeit.

Michael