FHEM Forum

FHEM - Entwicklung => Wunschliste => Thema gestartet von: falcke am 02 Januar 2017, 16:11:02

Titel: WLAN Zwischenstecker GWF-S171
Beitrag von: falcke am 02 Januar 2017, 16:11:02
Hallo,
ich habe einige GWF-S171 Zwischenstecker und würde mich zwecks Integration in FHEM über ein entsprechendes Modul freuen.
Die Zwischenstecker sind interessant, weil:


Der Zwischenstecker wird unter diesen Labels vertrieben: WeConn, Ogemray, See-Time, Ferguson, iSmartAlarm als SP3G

Auf der Suche nach Integrationsmöglichkeiten bin ich auf diese Seite gestossen: https://sites.google.com/site/tgmaxx/energy-enviro-monitoring/smart-life-wifi-plug (https://sites.google.com/site/tgmaxx/energy-enviro-monitoring/smart-life-wifi-plug)
Leider habe ich keine Programmier-Kenntnisse, könnte mir aber vorstellen, dass die Seite ein guter Startpunkt wäre.

Grüße,
Marcel
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: derchrome am 26 Januar 2017, 10:04:06
Gibt's hier schon was neues? Bei Amazon ist die Dose grade für 25€ zu haben, da schreit ja förmlich nach einer Integration in FHEM
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Afmanni am 28 Januar 2017, 14:49:56
Ich habe so eine "Wlan-Steckdose" schon länger, mit der Original App funktioniert diese nur bedingt zuverlässig, eine Integration in FHEM wäre natürlich super
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Amenophis86 am 30 Januar 2017, 09:29:21
Zitat von: Afmanni am 28 Januar 2017, 14:49:56
mit der Original App funktioniert diese nur bedingt zuverlässig

Was genau muss ich mir darunter vorstellen?
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: falcke am 30 Januar 2017, 10:59:54
Meine Vermutung:
Zu den Zwischensteckern gibt es eine App(WeConn) für Android und IOS. Die Kommunikation mit den Steckern erfolgt per UDP.
D.h. wenn ein WLAN-Device, wie ein Smartphone gerade nicht in dem Moment aktiv mit dem WLAN verbunden ist und man schnell ein Zwischenstecker bedienen möchte, bevor die Infos vollständig vorliegen, dann werden die Zwischenstecker als offline angezeigt bzw. reagieren nicht auf Eingabe.
Bei Tests mit netcat als Listener bzw. als Sender konnte ich das bei meinem per LAN verbundenen Raspberry jedoch nicht feststellen.

In der Zwischenzeit habe ich auf Anfrage von Ogemray Android-, IOS-Libaries und eine Art Data-Flow bekommen.
Die Libaries lassen sich relativ einfach dekompilieren, wobei es dann bei mir leider wieder aufhört.
Das Data-Flow Chart habe ich angehangen.

Wenn die Libaries hilfreich wären, würde ich die auch noch hier anhängen.

Grüße,
Marcel


Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Amenophis86 am 30 Januar 2017, 11:46:33
Zitat von: falcke am 30 Januar 2017, 10:59:54
Bei Tests mit netcat als Listener bzw. als Sender konnte ich das bei meinem per LAN verbundenen Raspberry jedoch nicht feststellen.

Heißt das, dass du mittels des PI die Stecker schon schalten kannst? Wenn ja, wie machst du es aktuell?
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: falcke am 30 Januar 2017, 14:05:57
Das ist eigentlich sehr gut in dem Link https://sites.google.com/site/tgmaxx/energy-enviro-monitoring/smart-life-wifi-plug (https://sites.google.com/site/tgmaxx/energy-enviro-monitoring/smart-life-wifi-plug) beschrieben, den ich eingangs gepostet hatte.
Wenn Du auf der Seite nach "GWF-S171" suchst, landest Du direkt an der richtigen Stelle.
Auf der Seite ist die Rede von dem Tool Packet Sender. Das hatte ich nur mit netcat ersetzt.
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Amenophis86 am 30 Januar 2017, 14:46:05
Ah jetzt. Ok. Das heißt das quasi wirklich schon alles da ist um für die Dinger ein Modul zu bauen. Mir fehlen leider die Kenntnisse und die Zeit dazu, sry. Aber vielleicht willst du dich selbst dran versuchen, oder einen der Entwickler hier fragen. Musste aber vermutlich direkt ansprechen.
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: falcke am 30 Januar 2017, 16:12:54
Woher weiß ich denn, wer hier Entwickler ist? Ich hätte gedacht, dass die Wunschliste hier dafür da ist.  :o
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Amenophis86 am 30 Januar 2017, 16:32:56
https://svn.fhem.de/#contributors hier findest du alle.

Ja, das für ist die Wunschliste da, das ist richtig. Frage ist jedoch, ob sich jemand auch findet, der den Wunsch umsetzte. Daher ist selbst aktiv werden oft nicht verkehrt, wenn sich hier keiner meldet :) Wie gesagt, alternativ kannst du es selbst versuchen zu erstellen. So ziemlich jeder Developer hilft dir bei Problemen, wenn du nett fragst und dich vorher selbst informiert hast.
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Volker Kettenbach am 30 Januar 2017, 17:27:07
Hallo zusammen,

falcke hat mich auf diesen Thread aufmerksam gemacht.
Ich bin der Entwickler und Maintainer von 24_TPLink_HS110.
Dieses Modul unterstützt die TPLink HS100 und HS110 Steckdosen (100 vs. 110: letzte hat eine Leistungsmessung).

Nach einem kurzen Blick auf: https://sites.google.com/site/tgmaxx/energy-enviro-monitoring/smart-life-wifi-plug
stelle ich fest, dass es bei der GWF-S171 wohl um ein vergleichbare Produkt aus dem NoName/Private-Label Segment handelt.
Außerdem ist das Protokoll wohl halbwegs reverse-engeneered und nicht verschlüsselt (bei TPLink ist es verschlüsselt, die Verschlüsselung wurde aber (zum Glück) von einem dritten gebrochen).
Wenn jemand die Libraries decompiled (in welcher Sprache sind diese?) und sie *nicht* obfuscated (Achtung!) sind, dann ist es noch einfacher.
Bestimmte Sprachen (Java, .NET) kann ich auch decompilen.

Ich denke also, dass es grundsätzlich machbar ist, ein FHEM Modul zu schreiben.
Leider habe ich derzeit wenig Zeit zum Programmieren.
Wenn wir im Team arbeiten und ich support bekomme, wäre es evtl. aber machbar.
Kannst Du die Libs und die Doku mir mal schicken? Bitte Link auf Dropbox o.ä. per PN.
BITTE NICHT hier einstellen, weil das ist Copyright-Material und höchstwahrscheinlich nicht für die Verbreitung gedacht.

Ich gebe aber noch mal folgendes zu bedenken:
- die GWF-S171 finde ich derzeit weder bei Amazon noch in irgendeinem anderen Deutschen Shop. Ich bräuchte aber schon eine zum Testen.
- Wenn das Ding 25 Euro kostet, wäre es schon deutlich günstiger als TPLink, aber wenn das Ding 30 oder mehr kostet, würde ich jedem empfehlen, statt dessen das "Markenprodukt" zu nehmen, denn dier HS100/110 funktionieren sehr gut, funktionieren in FHEM und die mitgelieferte App ist sogar auch ganz gut. Da lohnen sich die China-Clone nicht.

Dann noch eine Frage:
ich habe den o.g. Link nur kurz überflogen: sehe ich es richtig, dass die Steuerung per UDP direkt erfolgt, die Leistungsdaten aber per JSON aus der Cloud kommen?
Das wäre noch ein deutlich Vorteil für TPLink: da geht alles (auch) ohne Cloud.

Gruß
Volker
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: falcke am 31 Januar 2017, 09:32:28
Hallo,
wenn ich die Tabelle "Plug response to Get Data:" auf der Seite https://sites.google.com/site/tgmaxx/energy-enviro-monitoring/smart-life-wifi-plug (https://sites.google.com/site/tgmaxx/energy-enviro-monitoring/smart-life-wifi-plug) richtig verstehe, werden sämtliche Daten (auch) lokal verschickt. Die Leistungsdaten werden wohl per Pulsfrequenzmodulation 
ZitatThe output data is encoded using Pulse-Frequency Modulation
übertragen.
Die Steckdose ist aktuell z.B. bei Amazon für 25€ unter dem Titel "Weconn S171 Smart Steckdose / intelligente WLAN Steckdose mit Stromverbrauchszähler und Zeitschaltuhr, kostenlos iOS und Android App, Weiß" zu haben.

Grüße,
Marcel
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Volker Kettenbach am 31 Januar 2017, 14:15:16
Habe mir mal so ein Teil bestellt.
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: mumpitzstuff am 06 April 2017, 20:53:39
Hat eins der Geräte eine Art Zugriffsschutz, der das Schalten durch andere zumindest ansatzweise verhindert?
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: falcke am 08 April 2017, 12:04:55
man kann sich als Administrator einrichten und dann das Schalten sperren bzw. Einschränkungen für die Bedienung definieren.


Gesendet von iPad mit Tapatalk
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: phantom am 27 Mai 2017, 14:17:49
Ich habe nun auch eine GWF-S171 unter dem Markennamen Stabo. Sie wird mit den WeConn-App gesteuert, läßt sich aber auch mit den Strings aus dem o.g. Link im lokalen LAN schalten.

@Volker K.:  Hattest du schon mal Zeit deine bestellte S171 mit deinem Modul zu testen?
Evtl. Sind nur minimale Änderungen notwendig...

Gruß
Phantom
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Volker Kettenbach am 29 Mai 2017, 22:06:27
Ich habe das Teil rumliegen, aber noch nicht benutzt. Mangels Zeit.
Du kannst es ja selbst mal testen, ob es geht.
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: falcke am 17 Juli 2017, 10:59:51
Es wurden leider Sicherheitsprobleme im Zusammenhang mit den Zwischensteckern gefunden:

http://dojo.bullguard.com/blog/burglar-hacker-when-a-physical-security-is-compromised-by-iot-vulnerabilities/ (http://dojo.bullguard.com/blog/burglar-hacker-when-a-physical-security-is-compromised-by-iot-vulnerabilities/)

https://translate.google.com/translate?hl=en&sl=nl&tl=de&u=https%3A%2F%2Fwww.security.nl%2Fposting%2F524278%2FLek%2Bin%2Bslim%2Balarm%2Bkan%2Baanvaller%2Bcontrole%2Bover%2Bapparaat%2Ben%2Bklantdata%2Bgeven&sandbox=1 (https://translate.google.com/translate?hl=en&sl=nl&tl=de&u=https%3A%2F%2Fwww.security.nl%2Fposting%2F524278%2FLek%2Bin%2Bslim%2Balarm%2Bkan%2Baanvaller%2Bcontrole%2Bover%2Bapparaat%2Ben%2Bklantdata%2Bgeven&sandbox=1)
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: TheTrumpeter am 13 September 2018, 10:28:27
Hat sich diesbezüglich jemand weiter mit den Steckdosen beschäftigt?

Vor ein paar Tagen gab es gratis (Gutscheinfehler) folgendes Produkt bei Amazon, das genau wie das hier diskutierte Weconn S171 aussieht: https://www.amazon.de/gp/product/B079L6T7DJ

Ich habe mir das Ding bestellt, es läuft soweit auch über das Handy.
Mit den beiden Modulen TPLinkHS110 und UbiquitiMP läuft es nicht. Ersteres tut gar nichts, letzteres sagt zumindest, dass sich die Verbindung nicht aufbauen lässt, "port 23: Verbindungsaufbau abgelehnt".

Eine Änderung auf Port 9957 wie hier: https://stackoverflow.com/questions/31827645/how-to-control-wifi-plug-gwf-s171using-raspberry-pi# (https://stackoverflow.com/questions/31827645/how-to-control-wifi-plug-gwf-s171using-raspberry-pi#) beschrieben liefert dieselbe Fehlermeldung "port 9957: Verbindungsaufbau abgelehnt".

Wie weitermachen?
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: TheTrumpeter am 16 September 2018, 21:38:58
Ich habe zwischenzeitig bisschen was herausgefunden...

Kommunikation findet über Port 10000 der Steckdose statt, Protokoll ist wohl TCP (zumindest sagt das Wireshark).
Ich konnte auch rausfinden an welcher Stelle der Antwort der Steckdose die momentane Leistung (in der App als "Echtzeitleistung") übertragen wird:

Dies geschieht jeweils in den Antwort-Botschaften mit 154 Byte Länge, die alle 6 Sekunden von der App angefragt werden. Die letzten 100 Byte sind die Datenbytes, davon ist in Bytes 85 und 86 die momentane Leistung auf 1/1000W gespeichert, Byte-Reihenfolge ist Little-Endian. (Vermutlich gehört auch das 84. Byte dazu, um die Maximalleistung von 3600.000W codieren zu können; Leistungen die mehr als 2 Byte benötigen habe ich bisher aber nicht abgefragt.)

Wie komme ich nun weiter?
(Grundsätzlich bin ich nur am zyklischen Auslesen der Momentanleistung interessiert, Schaltvorgänge oder Timer benötige ich nicht.)
Titel: [gelöst:]Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: cnkru am 06 Oktober 2018, 18:34:54
Hallo allerseits,

habe mir eine Weconn S171 Smart Steckdose angeschafft.
https://www.amazon.de/Weconn-Steckdose-intelligente-Stromverbrauchszähler-Zeitschaltuhr/dp/B01MA49VVO/ref=sr_1_1?s=lighting&ie=UTF8&qid=1538843302&sr=8-1&keywords=Weconn+S171+Smart+Steckdose (https://www.amazon.de/Weconn-Steckdose-intelligente-Stromverbrauchsz%C3%A4hler-Zeitschaltuhr/dp/B01MA49VVO/ref=sr_1_1?s=lighting&ie=UTF8&qid=1538843302&sr=8-1&keywords=Weconn+S171+Smart+Steckdose)

Wollte diese Steckdose nun per Perl-Script einbinden. Leider bisher ohne Erfolg. Sehe wohl den Wald vor lauter Bäumen nicht.
Hier mein 99_myWeconn.pm


#
## Beispiel-Aufruf {WeConn("Test","7cdd90e6913e","192.168.178.45","off");;}
#

sub
WeConn($$$$)
{
my ($device,$mac_adr,$ip_adr,$action) = @_;
        if (!$ip_adr) {
                 Log 2, "Error-WeConn Sub. Missing IP Address: $device";
        }
        if (!$mac_adr) {
             Log 2, "Error-WeConn Sub. Missing MAC Address: $device";
        }

my  $SendData="";
my $SET_AS_ADMIN = '0101100148000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000feff0000xxxxxxxxxxxx000000000100';
my $ON_CODE =  '0101010180000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
my $OFF_CODE = '0101010180000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
my $GET_INFO = '0101030138000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000';
my $find = 'xxxxxxxxxxxx';

$SET_AS_ADMIN  =~ s/$find/$mac_adr/g;
$ON_CODE  =~ s/$find/$mac_adr/g;
$OFF_CODE  =~ s/$find/$mac_adr/g;
$GET_INFO  =~ s/$find/$mac_adr/g;

    if($action eq "on") {
        $SendData = $ON_CODE;
    }
   
    if($action eq "off") {
        $SendData = $OFF_CODE;
    }
my $ip_udp = $ip_adr.':9957';
my ($socket,$data);
#  call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>$ip_udp,Proto=>'udp') or die "ERROR $device in Socket Creation : $!\n";
$socket->send($SendData);
$socket->close();
Log 2, "$device : $socket - $SET_AS_ADMIN - $SendData";   
   
}
## end sub


Vielleicht hat jemand die zündende Idee.

Gruß
Carsten

Nachtrag:
Eine Nacht drüber schlafen hilft immer ...
Danke auch an ..

https://github.com/loki29pl/homebridge-weconn (https://github.com/loki29pl/homebridge-weconn)

Hier die Lösung:

## Aufruf {WeConn("Test","7cdd90e6913e","192.168.178.45","off");;}

sub
WeConn($$$$)
{
use IO::Socket;
use strict;
my ($device,$mac_adr,$ip_adr,$action) = @_;
        if (!$ip_adr) {
                 Log 2, "Error-WeConn Sub. Missing IP Address: $device";
        }
        if (!$mac_adr) {
             Log 2, "Error-WeConn Sub. Missing MAC Address: $device";
        }

my  $SendData="";
my $SET_AS_ADMIN = '0101100148000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000feff0000xxxxxxxxxxxx000000000100';
my $ON_CODE =  '0101010180000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
my $OFF_CODE = '0101010180000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
my $GET_INFO = '0101030138000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000';
my $find = 'xxxxxxxxxxxx';

$SET_AS_ADMIN  =~ s/$find/$mac_adr/g;
$ON_CODE  =~ s/$find/$mac_adr/g;
$OFF_CODE  =~ s/$find/$mac_adr/g;
$GET_INFO  =~ s/$find/$mac_adr/g;


    if($action eq "on") {
        $SendData = StreamPrepare($ON_CODE);
    }
   
    if($action eq "off") {
        $SendData = StreamPrepare($OFF_CODE);
    }
my $ip_udp = $ip_adr.':9957';
my ($socket,$data);
#  call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>$ip_udp,Proto=>'udp') or die "ERROR $device in Socket Creation : $!\n";

$socket->send($SendData);
$socket->close();
Log 2, "$device : $socket - $SendData";   
   
}
## end sub
#####################
sub StreamPrepare($)
{
my ($data) = @_;
my $stream = "";
my$num="";
    $l = length($data);
for ($i=0; $i<$l; $i+=2) {
$num = hex('0x'.substr($data,0,2));
#$stream=$stream.$num.",";
$stream=$stream.chr($num);
$data = substr($data,2,$l-$i);
}
return $stream;
}
# end Sub StreamPrepare
######################
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Markus Hermann am 14 Oktober 2018, 15:10:37
Hallo Carsten,

wenn ich den Code in 99_myUtills.pm eingebe, dann erhalte ich die u. g. Fehlermeldung.

Bei "sudo npm install -g homebridge-weconn" von https://github.com/loki29pl/homebridge-weconn gab es kein Fehler. Oder brauchte das gar nicht installiert werden?

ERROR:
Global symbol "$l" requires explicit package name (did you forget to declare "my $l"?) at ./FHEM/99_myUtils.pm line 164.
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at ./FHEM/99_myUtils.pm line 165.
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at ./FHEM/99_myUtils.pm line 165.
Global symbol "$l" requires explicit package name (did you forget to declare "my $l"?) at ./FHEM/99_myUtils.pm line 165.
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at ./FHEM/99_myUtils.pm line 165.
Global symbol "$l" requires explicit package name (did you forget to declare "my $l"?) at ./FHEM/99_myUtils.pm line 169.
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at ./FHEM/99_myUtils.pm line 169.


Kannst Du helfen? Oder hat jemand andere eine Idee?

EDIT: Nachtrag: Habe die Variablen unter sub StreamPrepare($) deklariert:

my $i = 0;
my $l = 0;


Jetzt erhalte ich keine Fehlermeldungen mehr, aber wenn ich:

{WeConn("Schalter 1","68D63A98DA97","192.168.9.118","on");;} in Fhem eingebe passiert gar nichts.


Danke & Gruß
Markus


Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: cnkru am 27 Oktober 2018, 13:13:59
Hallo Markus,

sorry lange nicht mehr online gewesen....
Bitte Kleinbuchstaben in der MAC-Adresse verwenden, zumindest funktioniert es bei mir so.
Weitere mögliche Fehlerursache - Leerzeichen im Device-Namen - Ich verwende Unterstrich statt Leerzeichen.

Habe am Coding weiter gearbeitet - InfoStatus ob an/aus, wenn manuell bedent wurde.


Abgespeichert unter 99_myWeconn.pm

package main;

use strict;
use warnings;
use POSIX;
use Time::Local;

sub
myWeconn_Initialize($$)
{
  my ($hash) = @_;
}


## Aufruf {WeConn("d_WeConn1","7cdd90e6913e","192.168.178.45","info");;}

sub
WeConn($$$$)
{
use IO::Socket;
use strict;
my ($device,$mac_adr,$ip_adr,$action) = @_;
        if (!$ip_adr) {
                 Log 2, "Error-WeConn Sub. Missing IP Address: $device"; return;
        }
        if (!$mac_adr) {
             Log 2, "Error-WeConn Sub. Missing MAC Address: $device"; return;
        }

my  $SendData="";
my $RecvInfo ="";
my $SET_AS_ADMIN = '0101100148000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000feff0000xxxxxxxxxxxx000000000100';
my $ON_CODE =  '0101010180000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
my $OFF_CODE = '0101010180000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
my $GET_INFO = '0101030138000000010000005c6c5c6c0000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxx0000';
my $find = 'xxxxxxxxxxxx';

$SET_AS_ADMIN  =~ s/$find/$mac_adr/g;
$ON_CODE  =~ s/$find/$mac_adr/g;
$OFF_CODE  =~ s/$find/$mac_adr/g;
$GET_INFO  =~ s/$find/$mac_adr/g;


    if ($action eq "on") {
        $SendData = prepareStream($ON_CODE);
    }
   
    elsif ($action eq "off") {
        $SendData = prepareStream($OFF_CODE);
    }
    elsif ($action eq "info") {
        $SendData = prepareStream($GET_INFO);
    }
    else {
        return;
    }
   
my $ip_udp = $ip_adr.':9957';
my ($socket,$data);
my $data = "";
my $status = "switch";
#  call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>$ip_udp,Proto=>'udp') or die "ERROR $device in Socket Creation : $!\n";   
$socket->send($SendData);
#Log 2, "WeConn Sub. Socket-Data: $device:: Senddata";
if ($action eq "info") {
      # blockade verhindern bei read info durch setzen timeout (can_read)
      my $select = new IO::Select(); # create handle set for reading
      $select->add($socket);        # add the main socket to the set

      my @ready = $select->can_read(1);
       if (@ready) {
      $socket->recv($data,128);
      #Log 2, "decodeStream-WeConn Sub. Socket-Data: $device:: Start";
      $RecvInfo = decodeStream($data);
      #Log 2, "decodeStream-WeConn Sub. Socket-Data: $device:: Ende";
         } #end if ready
         
      if($data ne "") {
         $status =  ord(substr($data,56,1));
         fhem("setreading $device active_state online");
         #Log 2, "decodeStream-WeConn Sub. Socket-Data: $device:: $RecvInfo";
         }
      else {
         $status = "offline";
         fhem("setreading $device active_state $status");
         #Log 2, "decodeStream-WeConn Sub. Socket-Data: $device:: no Data";
         } #end if data
    } #end if action

$socket->close();

my $dev_state = ReadingsVal($device, "state", "0");
if ($action eq "info") {
      # Status-Anzeige in fhem synchronisieren
      if ($status eq "1" && $dev_state eq "off" ) { fhem("setreading $device state on");}
      if ($status eq "0" && $dev_state eq "on") { fhem("setreading $device state off");}
      }

Log 2, "WeConn Sub $device: $socket :: Action: $action :: Status: $status/$dev_state :: $RecvInfo";   
   
}
## end sub
#####################
sub prepareStream($)
{
my ($data) = @_;
my $stream = "";
my $num="";
my $i =0;
my $l=0;
    $l = length($data);
for ($i=0; $i<$l; $i+=2) {
$num = hex('0x'.substr($data,0,2));
#$stream=$stream.$num.",";
$stream=$stream.chr($num);
$data = substr($data,2,$l-$i);
}
return $stream;
}
# end Sub prepareStream
######################
sub decodeStream($)
{
my ($data) = @_;

my $stream = "";
my $num="";
my $i =0;
my $l=0;
$l = length($data);
for ($i=0; $i<$l; $i++) {
$num = ord(substr($data,0,1));
$stream=$stream.$num.",";

$data = substr($data,1,$l-$i);
}
return $stream;
}
# end Sub StreamEncode
######################
#################
# Ende
#################
1;




Hoffe es hilft Dir weiter.
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: swatkris am 29 Oktober 2018, 08:17:34
Hallo Carsten,

ich habe mir vor ein paar Tagen auch die Steckdosen geholt. Gabs bei Voelk... zu einem guten Kurs im Doppelpack.
Leider habe ich gerade div. Schwierigkeiten die Geräte in FHEM zu definieren.
Wenn ich den Befehl {WeConn("Schalter 1","xxxxxxxx","192.168.150.120","on");;} in der FHEM Befehlszeile eingebe funktioniert das, auch mit dem "off" Befehl.
Aber mit der Definition und ansprechen da haperts gerade.
Wäre nett, wenn Du mir etwas auf die Sprünge helfen könntest.
Vielen Dank
Kristian
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: cnkru am 29 Oktober 2018, 20:59:30
Hallo Kristian,

hier meine Definition in der fhem.cfg

#
# Schalter 1 definieren
#
define d_WeConn1 dummy
attr d_WeConn1 room WeConn
attr d_WeConn1 setList on off
define notify_WeConn1 notify d_WeConn1:.* {my $ev=$EVENT;;WeConn("d_WeConn1","7xxxxxxxxe","192.168.178.45",$ev);;}
attr notify_WeConn1 room WeConn
#
# check alle 5 Minuten, ob WeConn ggf. per Hand bedient wurde -> Status updaten
#
define Check_WeConn1 at +*00:15:00  {WeConn("d_WeConn1","7xxxxxxxxe","192.168.178.45","info");;;;}
attr Check_WeConn1 room WeConn
#


Gruß
Carsten
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: swatkris am 30 Oktober 2018, 07:02:30
Hallo Carsten,

vielen Dank. Ich werde das mal probieren und mich wieder melden.

Gruß

Kristian
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: swatkris am 30 Oktober 2018, 16:15:43
Hallo Carsten,
ich habe folgendes gemacht. Aus dem vorherigen Post habe ich den Code für die 99_myWeconn verwendet.
Leider wirft mir FHEM folgenden Fehler im Log :

2018.10.30 15:48:58 3: Check_SchukoWiFi01: Can't locate object method "new" via package "IO::Select" at ./FHEM/99_myWeconn.pm line 68.

Ansonsten habe ich an dem Code nichts verändert. lediglich die Definition habe ich an meine Bedürfnisse angepasst :

#
# Schalter 1 definieren
#
define SchukoWiFi01 dummy
attr SchukoWiFi01 room Küche
attr SchukoWiFi01 setList on off
define notify_SchukoWiFi01 notify SchukoWiFi01:.* {my $ev=$EVENT;;WeConn("SchukoWiFi01","7xxxxxxxxxx1","XXX.XXX.XXX.220",$ev);;}
attr notify_SchukoWiFi01 room Küche
define Check_SchukoWiFi01 at +*00:15:00  {WeConn("SchukoWiFi01","7xxxxxxxxxx1","XXX.XXX.XXX.220","info");;;;}
attr Check_SchukoWiFi01 room Küche
#


Wärst Du so nett und würdest mir helfen ?

Vielen Dank :-)

Kristian

EDIT:
Nach einem Reboot funktioniert das Schalten über FHEM, jedoch die Statusabfrage scheint nicht zu funktionieren.
Vielleicht kannst Du Dich der Sache jedoch noch annehmen.

Danke Dir
Kristian
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: cnkru am 30 Oktober 2018, 20:16:14
Hallo Kristion,

Zum Testen brauche ich folgende Infos

Was steht den in deinem LOGFile?
Führe dein at-Befehl in der Komandozeile aus.

set Check_SchukoWiFi01 execNow

schalte jetzt das S171 manuell 1mal (also wenn AN, dann auf AUS oder umgekehrt)

Führe wieder den Befehl  set ... nochmal aus

und schaue auf die letzten Einträge im LOGFile

da müsste so etwas stehen ...

2018.10.30 hh:mm:ss 2: WeConn Sub SchukoWiFi01: IO::Socket::INET=GLOB(0x5f8c8c0) :: Action: info :: Status: 1/on :: 1,2,3,0,188,3,0,0,1,0,0,0,92,108,92,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,221,144,230,145,62,0,0,1,0,0,.....

Schicke mir die beiden LOG-Einträge

Gruß
Carsten
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: swatkris am 31 Oktober 2018, 07:25:56
Hallo Carsten,

erstmal Danke, dass Du Dir die Zeit nimmst.

Du findest das "Master" Logfile als Anhang an diesen Eintrag.

Deine Schritte habe ich genau so ausgeführt. Beim Set Befehl kam auch kein Fehler. Allerdings finde ich im Logfile keinen EIntrag, der dem entspricht, was Du beschrieben hattest.
Hier sind die Zeilen nach den Befehlen :
2018.10.31 07:09:54 3: Check_SchukoWiFi01: Can't locate object method "new" via package "IO::Select" at ./FHEM/99_myWeconn.pm line 68.

2018.10.31 07:13:38 1: ERROR evaluating {WeConn("SchukoWiFi01","7CDD90EE80B1","192.168.151.220","info");;}: Can't locate object method "new" via package "IO::Select" at ./FHEM/99_myWeconn.pm line 68.

2018.10.31 07:13:38 3: Check_SchukoWiFi01: Can't locate object method "new" via package "IO::Select" at ./FHEM/99_myWeconn.pm line 68.

2018.10.31 07:14:35 1: ERROR evaluating {WeConn("SchukoWiFi01","7CDD90EE80B1","192.168.151.220","info");;}: Can't locate object method "new" via package "IO::Select" at ./FHEM/99_myWeconn.pm line 68.

2018.10.31 07:14:35 3: Check_SchukoWiFi01: Can't locate object method "new" via package "IO::Select" at ./FHEM/99_myWeconn.pm line 68.


Mehr steht halt im Logfile nicht drinne.

Gruß

Kristian
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: cnkru am 31 Oktober 2018, 14:02:30
Hallo Kristian,

das Select Modul wird nicht geladen ...
Versuche mal die Zeile nachzutragen in der Sub WeConn:
#
sub
WeConn($$$$)
{
use IO::Socket;
use IO::Select;
use strict;


Wurde bei mir global geladen ...

Gruß
Carsten
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: swatkris am 31 Oktober 2018, 14:27:39
*** SOLVED ***
Hallo Carsten,
vielen, vielen Dank.
Du hast mir echt sehr gut geholfen.
Nun funzt alles wie gewünscht.
Hast Du es eigentlich auch schon geschafft die Verbrauchswerte abzufragen ?
Viele Grüße
Kristian
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: cnkru am 01 November 2018, 09:49:54
Guten Morgen Kristian,

super - das es geklappt hat ...

Bzgl. Deiner Frage zu den Verbrauchswerten kann ich Dir nur sagen, dass ich nicht den Schwerpunkt darauf gelegt habe.

Die S171 sendet einen Broadcat auf 192.xxx.xxx.255 am Port 9957 (ist in Wireshark zu sehen).
Man kann einen Server schreiben mit  einer "while (1)" Prozedure, welche ständig diese Message abfragt und auswertet.
Wie die empfangene Message strukturiert ist - muss noch analysiert werden.
Die Analyse in Wireshark  bedarf etwas Zeit und verschiedene Lastwechsel sowie on/off Vorgänge, um die Verbrauchswerte akurat dekodieren zu können.

Übrigens der Server sollte nicht im FHEM laufen (Blockade)!

D.h. er muss auf Unix Ebene als eigener Prozess im Hintergrund laufen und per wget,  ... , etc.,
das FHEM-System informieren und entsprechend vorgesehende Readings setzen.

Bis dato hatte ich noch keine Zeit und Motivation dies auszuprobieren.

Gruß
Carsten



Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: swatkris am 07 November 2018, 08:37:29
Hallo Carsten,danke für Deine Info.

Ich bin im Linux Umfeld nicht so stark beheimatet.Aber dennoch auch hier ein dickes DANKE !.
Viele Grüße
Kristian
Titel: Antw:WLAN Zwischenstecker GWF-S171
Beitrag von: Volker Kettenbach am 08 November 2018, 07:20:16
Zitat von: cnkru am 01 November 2018, 09:49:54
Guten Morgen Kristian,

super - das es geklappt hat ...

Bzgl. Deiner Frage zu den Verbrauchswerten kann ich Dir nur sagen, dass ich nicht den Schwerpunkt darauf gelegt habe.

Die S171 sendet einen Broadcat auf 192.xxx.xxx.255 am Port 9957 (ist in Wireshark zu sehen).
Man kann einen Server schreiben mit  einer "while (1)" Prozedure, welche ständig diese Message abfragt und auswertet.
Wie die empfangene Message strukturiert ist - muss noch analysiert werden.
Die Analyse in Wireshark  bedarf etwas Zeit und verschiedene Lastwechsel sowie on/off Vorgänge, um die Verbrauchswerte akurat dekodieren zu können.

Übrigens der Server sollte nicht im FHEM laufen (Blockade)!

D.h. er muss auf Unix Ebene als eigener Prozess im Hintergrund laufen und per wget,  ... , etc.,
das FHEM-System informieren und entsprechend vorgesehende Readings setzen.

Bis dato hatte ich noch keine Zeit und Motivation dies auszuprobieren.

Gruß
Carsten

Das geht auch mit FHEM. Siehe 77_SMAEM.pm. Das funktioniert genauso.