Autor Thema: WLAN Zwischenstecker GWF-S171  (Gelesen 5524 mal)

Offline phantom

  • New Member
  • *
  • Beiträge: 42
Antw:WLAN Zwischenstecker GWF-S171
« Antwort #15 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

Offline Volker Kettenbach

  • Developer
  • Full Member
  • ****
  • Beiträge: 255
Antw:WLAN Zwischenstecker GWF-S171
« Antwort #16 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.


Offline TheTrumpeter

  • Full Member
  • ***
  • Beiträge: 349
Antw:WLAN Zwischenstecker GWF-S171
« Antwort #18 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# beschrieben liefert dieselbe Fehlermeldung "port 9957: Verbindungsaufbau abgelehnt".

Wie weitermachen?
« Letzte Änderung: 13 September 2018, 10:49:48 von TheTrumpeter »
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart)

Offline TheTrumpeter

  • Full Member
  • ***
  • Beiträge: 349
Antw:WLAN Zwischenstecker GWF-S171
« Antwort #19 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.)
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart)

Offline cnkru

  • Jr. Member
  • **
  • Beiträge: 52
[gelöst:]Antw:WLAN Zwischenstecker GWF-S171
« Antwort #20 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

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

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
######################
« Letzte Änderung: 07 Oktober 2018, 09:03:32 von cnkru »
RPi3, Razberry, ZWAVE (Thermostate, Dimmer, Schalter, Multisensor), Milight-LED, Wifi (IPCAM, Fritz!DECT, Sonoff), Amazon-Echo, Hombridge, Brematic (Schalter)

Offline Markus Hermann

  • Full Member
  • ***
  • Beiträge: 179
Antw:WLAN Zwischenstecker GWF-S171
« Antwort #21 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


« Letzte Änderung: 14 Oktober 2018, 17:33:41 von Markus Hermann »
CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR

 

decade-submarginal