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:
- sie nicht nur Schaltaktoren sind, sondern auch den Stromverbrauch messen
- sie unterstützen 16 Ampere. Die meisten anderen China-Kracher unterstützen max. 10 Ampere
- sie sind nachweislich TÜV-Zertifiziert: https://certificateexplorer2.tuev-sued.de/web/ig-tuvs/certificate?q=s171 (https://certificateexplorer2.tuev-sued.de/web/ig-tuvs/certificate?q=s171)
- mit ein bisschen Suchen sind sie für deutlich unter 30€ zu haben
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
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
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
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?
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
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?
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.
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.
Woher weiß ich denn, wer hier Entwickler ist? Ich hätte gedacht, dass die Wunschliste hier dafür da ist. :o
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.
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
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
Habe mir mal so ein Teil bestellt.
Hat eins der Geräte eine Art Zugriffsschutz, der das Schalten durch andere zumindest ansatzweise verhindert?
man kann sich als Administrator einrichten und dann das Schalten sperren bzw. Einschränkungen für die Bedienung definieren.
Gesendet von iPad mit Tapatalk
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
Ich habe das Teil rumliegen, aber noch nicht benutzt. Mangels Zeit.
Du kannst es ja selbst mal testen, ob es geht.
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)
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?
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.)
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
######################
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
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.
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
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
Hallo Carsten,
vielen Dank. Ich werde das mal probieren und mich wieder melden.
Gruß
Kristian
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
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
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
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
*** 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
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
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
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.