Nach einiger Zeit möchte ich / bin ich ich mit meinem FHEM vom RPI auf Windows10 umziehen.
Wirkliche Nutzung bislang in der Hauptsache war für die Heizungssteuerung mit dem Modul Vcontrol300 Statistik und Einstellungen vornehmen.
Mein Problem:
Unter Linux habe ich per
define KELLERHEIZUNG VCONTROL300 /dev/ttyUSB0 ./FHEM/89_VCONTROL300.cfg 300 300
alles erreicht was ich möchte.
USB-Anschluss - Schnittstelle zur Heizung =>>> /dev/ttyUSB0@4800,8,E,2
Unter Windows10 ist das gleiche USB-Schnitttstellengerät eingebunden und lässt sich mit der Herstellersoftware einwandfrei ansprechen und bedienen.
Bei der FHEM-Installierung bzw. der Perlinstallierung bin ich nach dieser Anleitung vorgegangen und habe StrawberryPerl installiert.
siehe auch -> https://wiki.fhem.de/wiki/Windows_-_FHEM_installieren
Auch habe ich die dort angezogenen manuell notwendigen Einstellung für StrawberryPerl
perl -MCPAN -e "install Win32::SerialPort"
cd /D "C:\Strawberry\cpan\build\Win32-SerialPort-0.22-xx"
perl makefile.pl TESTPORT=COM4
wie beschrieben vorgenommen.
Alles soweit auch okay und gut. FHEM läuft dort auch sauber als Dienst mit den anderen defines, aber mit dem COM4 hab ich so richtige "Anfänger"-schwierigkeiten.
Der Comport "4" ist in Windows dem FDI-Treiber/USB-Gerät zugeordnet:
Wie ist die richtige Syntax ? COM4 COM4: COM4@4800,8,E,2 ?????
Oder Übersehe ich was ?
Grüße am Sonntagmorgen
300P
<serial-device/LAN-Device:port> USB Port (z.B. com4, /dev/ttyUSB3) oder aber TCPIP:portnummer
define KELLERHEIZUNG VCONTROL300 com4 ./FHEM/89_VCONTROL300.cfg 300 300
so hat es Adam in der 89_VCONTROL angegeben
Zitat von: 300P am 04 Februar 2018, 09:59:09
Nach einiger Zeit möchte ich / bin ich ich mit meinem FHEM vom RPI auf Windows10 umziehen.
ich rate vom Wechsel ab, linux ist die bessere Plattform!
Bislang sind alle "Lebensversuche" für die Schnittstelle im Mißerfolgt geendet.
Versuch wurde :
define KELLERHEIZUNG VCONTROL300 com ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 COM ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 COM: ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 COM: ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 com4 ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 COM4 ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 com4: ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 COM4: ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 /dev/ttyUSB0 ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 /dev/ttyUSB1 ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 /dev/ttyUSB2 ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 /dev/ttyUSB3 ./FHEM/89_VCONTROL300.cfg 300 300
define KELLERHEIZUNG VCONTROL300 /dev/ttyUSB4 ./FHEM/89_VCONTROL300.cfg 300 300
Evtl. ist aber auch hier der Hund begraben worden...., denn da ist etwas auskomentiert was aus der Original "ADAM" 89_VCONTROL.PM kommt und in 89_VCONTROL300.PM nicht noch umgeschrieben ist...:
Codeauszug aus der "89_VCONTROL300.PM" -Version-26.01.2018-V09
->siehe Dateianhang
Zeilen 251 ....289 im unteren Bereich ->> Beginnen mit (#)
sub VCONTROL300_Define($$)
{
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
#my $po;
if (@a != 4 && @a != 5 && @a != 6 && @a != 7) {
my $msg = "wrong syntax: define <name> VCONTROL300 <port> <command_config> [<interval>] [<protocol>] [<protocolparam>]";
Log3 undef, 2, $msg;
return $msg;
}
my $devName = $a[0];
my $dev = $a[2];
#Determine if USB device or TCP Connection is used
#if (index($dev, ':') >= 0) { #Does not work for /dev/<USB Device with ":" in name>
if (index($dev, '/') == -1) {
###TCP Connection
Log3 $devName, 2,"VCONTROL300: Using TCP device";
$connectionType = "tcp";
}
else {
###USB
Log3 $devName, 2,"VCONTROL300: Using USB device";
$connectionType = "usb";
#delete $hash->{USBDev};
#delete $hash->{FD};
if (index($dev, '@') == -1) {
$dev=$dev."\@4800,8,E,2";
}
}
#Close Device to initialize properly
#DevIo_CloseDev($hash);
#schauen welches protocol verwendet wird.
if($a[5]){
my $protocol = lc($a[5]);
if ($protocol eq "300") {
$hash->{PROTOCOL} = PROTOCOL_300;
}
elsif ($protocol eq "kw") {
$hash->{PROTOCOL} = PROTOCOL_KW;
}
}
else {
$hash->{PROTOCOL} = $defaultProtocol;
}
#protocol params laden
#if($a[6]){
# if ($hash->{PROTOCOL} eq "kw") { $hash->{FASTPOLLSIZE} = lc($a[6]); }
# }
# else {
# if ($hash->{PROTOCOL} eq "kw") { $hash->{FASTPOLLSIZE} = $defaultFastPollSize; }
# }
#load config_file
if($a[3]){
$command_config_file = $a[3];
my ($error, @cmdconfigfilecontent) = FileRead($command_config_file);
return $error if $error;
VCONTROL300_CmdConfig(@cmdconfigfilecontent,$hash,$command_config_file);
}
#use configured Pollinterval if given
if($a[4]){
$hash->{INTERVAL} = $a[4];
}
else {
$hash->{INTERVAL} = $defaultPollInterval;
}
Log3($devName, 3, "VCONTROL300: Using protocol $hash->{PROTOCOL}");
$hash->{STATE} = "defined";
$hash->{DeviceName} = $dev;
#$hash->{PARTIAL} = "";
###Opening Device
#Log3($name, 3, "VCONTROL300: Opening device $dev ...");
#if ($connectionType eq "usb") {
# ###USB
# if ($^O=~/Win/) {
# require Win32::SerialPort;
# $po = new Win32::SerialPort ($dev);
# } else {
# require Device::SerialPort;
# $po = new Device::SerialPort ($dev);
# }
# if(!$po) {
# my $msg = "Can't open $dev: $!";
# Log3($name, 3, $msg) if($hash->{MOBILE});
# return $msg if(!$hash->{MOBILE});
# $readyfnlist{"$name.$dev"} = $hash;
# return "";
# }
# #Log3($name, 3, "VCONTROL300: Opened USB device $dev");
# $hash->{USBDev} = $po;
# if( $^O =~ /Win/ ) {
# $readyfnlist{"$name.$dev"} = $hash;
# } else {
# $hash->{FD} = $po->FILENO;
# delete($readyfnlist{"$name.$dev"});
# $selectlist{"$name.$dev"} = $hash;
# }
#}
#else {
#TCP Connection
#}
#set Internal Timer
my $timer = gettimeofday()+1;
Log3($devName, 5, "VCONTROL300: Set InternalTimer to $timer");
InternalTimer($timer, "VCONTROL300_Poll", $hash, 0);
return undef;
}