Für Makki,der Socket-Man, ist das fast schon ein MUSS!
Klar lesen der Tempi und rein in die rrd würde mir persönlich erstmal reichen.
Klar lesen der Tempi und rein in die rrd würde mir persönlich erstmal reichen.
2012-06-02 22:50:31.240,KWL.pl,transmit:0x7 0xf0 0x0 0xf 0x0 0xbc 0x7 0xf 2012-06-02 22:50:34.914,KWL.pl,reciv: ACK 2012-06-02 22:50:34.914,KWL.pl,reciv: ...........07f3 2012-06-02 22:50:34.917,KWL.pl,..................07f3,3.9s,
# Plugin zur Ansteuerung einer Zender ComfoAir # Version 0.1 02.06.2012 ALPHA # Copyright: swiss (https://knx-user-forum.de/members/swiss.html) # Die Vorlage für die Datenübertragung via socat stammt von makki (https://knx-user-forum.de/members/makki.html) # Aufbau möglichst so, dass man unterhalb der Einstellungen nichts verändern muss! # # use Device::SerialPort; #################### ###Einstellungen:### #################### my $ga_stufeabwesend = '14/7/0'; #1bit Trigger für Stufe "Abwesend". 1=Aktivieren my $ga_stufe1 = '14/7/1'; #1bit Trigger für Stufe1. 1=Aktivieren my $ga_stufe2 = '14/7/2'; #1bit Trigger für Stufe2. 1=Aktivieren my $ga_stufe3 = '14/7/3'; #1bit Trigger für Stufe3. 1=Aktivieren my $usb = '/dev/usbserial-2-3'; ###################### ##ENDE Einstellungen## ###################### my $return_value2; my $daten; my $reciv; $plugin_info{$plugname.'_cycle'} = 30; # Zyklischer Aufruf nach restart und alle 300 sek. my $seriel = Device::SerialPort->new($usb) || die "Kann $usb nicht öffnen! ($!)\n"; $seriel->baudrate(9600); $seriel->parity("none"); $seriel->databits(8); $seriel->stopbits(1); if ($msg{'apci'} eq "A_GroupValue_Write"){ if ($msg{'dst'} eq $ga_stufeabwesend && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990101"; plugin_log($plugname,'Stufe abwesend'); $return_value2 = command_senden($daten); }elsif ($msg{'dst'} eq $ga_stufe1 && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990102"; plugin_log($plugname,'Stufe 1'); $return_value2 = command_senden($daten); }elsif ($msg{'dst'} eq $ga_stufe2 && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990103"; plugin_log($plugname,'Stufe 2'); $return_value2 = command_senden($daten); }elsif ($msg{'dst'} eq $ga_stufe3 && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990104"; plugin_log($plugname,'Stufe 3'); $return_value2 = command_senden($daten); } return $return_value2; } else { # zyklischer Aufruf $daten = "000F00"; plugin_log($plugname,'Temperatur abrufen'); $return_value2 = command_senden($daten); # Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen $plugin_subscribe{$ga_stufeabwesend}{$plugname} = 1; $plugin_subscribe{$ga_stufe1}{$plugname} = 1; $plugin_subscribe{$ga_stufe2}{$plugname} = 1; $plugin_subscribe{$ga_stufe3}{$plugname} = 1; } # Ab hier wird das Datenpaket inklusive Checksumme zusammengestellt und an die ComfoAir übertragen sub command_senden{ my $checksum = 0; my $data = $_[0]; my $datasum = $data . "AD"; #+173 für die Checksummenberechnung my @hex = map { hex($_) } ($datasum =~ /(..)/g); my $x07warschon = 0; foreach (@hex) { $checksum += ($_) unless $x07warschon; # unless ist dasselbe wie if not/! if ($_ == 0x07) { $x07warschon = 1; } } $checksum = sprintf "%x\n" , $checksum; #Mache aus Integer wieder HEX $checksum = substr($checksum,length($checksum)-3,2); #Verwede nur die letzten beiden stellen my $command = pack("H*","07F0" . $data . $checksum . "070F"); my $commandhex = $command; $commandhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg; $plugin_info{$plugname.'_debug_transmit'} = $commandhex; plugin_log($plugname,'transmit:' . $commandhex); $seriel->write($command); $|=1; my $exit=0; while($exit < 100000) { my ($cin, $sin) = $seriel->read(25); if($cin > 0){ $sin = unpack "H*", $sin; $reciv .= $sin; $exit=0; }else{ $exit++ } if($reciv =~ /07F3/i){ plugin_log($plugname,'reciv: ACK'); last; } } plugin_log($plugname,'reciv: ' . $reciv); $plugin_info{$plugname.'_debug_reciv'} = $reciv; }
0x38 -> 56 -> -1 0x8D -> 141 -> 50,5 0xEE -> 238 -> 99 0xAB -> 171 -> 65,5
# Plugin zur Ansteuerung einer Zender ComfoAir # Version 0.2 03.06.2012 ALPHA # Copyright: swiss (https://knx-user-forum.de/members/swiss.html) # Die Vorlage für die Datenübertragung via socat stammt von makki (https://knx-user-forum.de/members/makki.html) # Aufbau möglichst so, dass man unterhalb der Einstellungen nichts verändern muss! # # use Device::SerialPort; #################### ###Einstellungen:### #################### my $ga_stufeabwesend = '14/7/0'; #1bit Trigger für Stufe "Abwesend". 1=Aktivieren my $ga_stufe1 = '14/7/1'; #1bit Trigger für Stufe1. 1=Aktivieren my $ga_stufe2 = '14/7/2'; #1bit Trigger für Stufe2. 1=Aktivieren my $ga_stufe3 = '14/7/3'; #1bit Trigger für Stufe3. 1=Aktivieren my $usb = '/dev/usbserial-2-3'; ###################### ##ENDE Einstellungen## ###################### my $return_value2; my $daten; my $reciv; my @line; $plugin_info{$plugname.'_cycle'} = 30; # Zyklischer Aufruf nach restart und alle 300 sek. my $seriel = Device::SerialPort->new($usb) || die "Kann $usb nicht öffnen! ($!)\n"; $seriel->baudrate(9600); $seriel->parity("none"); $seriel->databits(8); $seriel->stopbits(1); if ($msg{'apci'} eq "A_GroupValue_Write"){ if ($msg{'dst'} eq $ga_stufeabwesend && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990101"; plugin_log($plugname,'Stufe abwesend'); $return_value2 = command_senden($daten); }elsif ($msg{'dst'} eq $ga_stufe1 && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990102"; plugin_log($plugname,'Stufe 1'); $return_value2 = command_senden($daten); }elsif ($msg{'dst'} eq $ga_stufe2 && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990103"; plugin_log($plugname,'Stufe 2'); $return_value2 = command_senden($daten); }elsif ($msg{'dst'} eq $ga_stufe3 && knx_read($msg{'dst'},0,1) == 1) { $daten = "00990104"; plugin_log($plugname,'Stufe 3'); $return_value2 = command_senden($daten); } return $return_value2; } else { # zyklischer Aufruf # Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen $plugin_subscribe{$ga_stufeabwesend}{$plugname} = 1; $plugin_subscribe{$ga_stufe1}{$plugname} = 1; $plugin_subscribe{$ga_stufe2}{$plugname} = 1; $plugin_subscribe{$ga_stufe3}{$plugname} = 1; $daten = "000F00"; plugin_log($plugname,'Temperatur abrufen'); $return_value2 = command_senden($daten); } # Ab hier wird das Datenpaket inklusive Checksumme zusammengestellt und an die ComfoAir übertragen sub command_senden{ my $checksum = 0; my $data = $_[0]; my $datasum = $data . "AD"; #+173 für die Checksummenberechnung my @hex = map { hex($_) } ($datasum =~ /(..)/g); my $x07warschon = 0; foreach (@hex) { $checksum += ($_) unless $x07warschon; # unless ist dasselbe wie if not/! if ($_ == 0x07) { $x07warschon = 1; } } $checksum = sprintf "%x\n" , $checksum; #Mache aus Integer wieder HEX $checksum = substr($checksum,length($checksum)-3,2); #Verwede nur die letzten beiden stellen my $command = pack("H*","07F0" . $data . $checksum . "070F"); my $commandhex = $command; $commandhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg; $plugin_info{$plugname.'_debug_transmit'} = $commandhex; plugin_log($plugname,'transmit:' . $commandhex); $seriel->write($command); $|=1; my $exit=0; while($exit < 30000) { my ($cin, $sin) = $seriel->read(25); if($cin > 0){ $sin = unpack "H*", $sin; $reciv .= $sin; $exit=0; }else{ $exit++ } if($reciv =~ /07f3/i){ plugin_log($plugname,'reciv: ACK'); $reciv = ''; } if($reciv =~ /070f/i){ plugin_log($plugname,'reciv: ' . $reciv); last; } } #$reciv = pack("H*",$reciv); #$reciv =~ s/(.)/sprintf("0x%x ",ord($1))/eg; plugin_log($plugname,'reciv: ' . $reciv); $plugin_info{$plugname.'_debug_reciv'} = $reciv; }
2012-06-03 11:52:31.350,KWL oS Sonntag,Temperatur abrufen 2012-06-03 11:52:31.351,KWL oS Sonntag,transmit:0x7 0xf0 0x0 0xf 0x0 0xbc 0x7 0xf 2012-06-03 11:52:31.363,KWL oS Sonntag,reciv: ACK 2012-06-03 11:52:31.376,KWL oS Sonntag,reciv: 07f00010044f5157550d070f 2012-06-03 11:52:31.376,KWL oS Sonntag,reciv: 07f00010044f5157550d070f 2012-06-03 11:52:31.379,KWL oS Sonntag,07f00010044f5157550d070f,0s, 2012-06-03 11:53:02.109,KWL oS Sonntag,Temperatur abrufen 2012-06-03 11:53:02.110,KWL oS Sonntag,transmit:0x7 0xf0 0x0 0xf 0x0 0xbc 0x7 0xf 2012-06-03 11:53:02.110,KWL oS Sonntag,reciv: 005f070f 2012-06-03 11:53:02.111,KWL oS Sonntag,reciv: 005f070f 2012-06-03 11:53:02.113,KWL oS Sonntag,005f070f,0s,
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar