|
From: <sw...@us...> - 2014-07-22 21:49:00
|
Revision: 2215
http://sourceforge.net/p/openautomation/code/2215
Author: swiss1
Date: 2014-07-22 21:48:56 +0000 (Tue, 22 Jul 2014)
Log Message:
-----------
Update to Version 1.6.9 BETA
Modified Paths:
--------------
wiregate/plugin/generic/ComfoAir_kwl.pl
wiregate/plugin/generic/conf.d/ConfoAir_kwl.conf
Modified: wiregate/plugin/generic/ComfoAir_kwl.pl
===================================================================
--- wiregate/plugin/generic/ComfoAir_kwl.pl 2014-07-22 14:38:45 UTC (rev 2214)
+++ wiregate/plugin/generic/ComfoAir_kwl.pl 2014-07-22 21:48:56 UTC (rev 2215)
@@ -1,5 +1,5 @@
# Plugin zur Ansteuerung einer Zender ComfoAir
-# Version 1.6.7d 22.08.2013 BETA
+# Version 1.6.9 15.07.2014 BETA
# Copyright: swiss (http://knx-user-forum.de/members/swiss.html)
# Aufbau moeglichst so, dass man unterhalb der Einstellungen nichts veraendern muss!
# - Neu mit der Moeglichkeit zur Anbindung \xFCber einen Moxa NPort von Fechter65 (http://knx-user-forum.de/members/fechter65.html)
@@ -9,6 +9,8 @@
# - Neu mit der M\xF6glichkeit die Ventilationsstufe direkt zu setzen von swiss (http://knx-user-forum.de/members/swiss.html)
# - Neu mit der M\xF6glichkeit die Ventilatorstufe f\xFCr Zuluft und Abluft getrennt zu setzen (0% - 100%) von Netsrac80 (http://knx-user-forum.de/members/netsrac80.html)
# - Korrektur Stufe direkt setzen. Senden / empfangen hat nun das gleiche Mapping 1=Auto, 2=Sufe1, 3=Stufe2, 4=Stufe3
+# - Neu mit R\xFCckmeldung auf Lesetelegramme
+# - Bugfix: Themperatur wird nach dem Verstellen nicht direkt als Status zur\xFCckgegeben
@@ -33,7 +35,7 @@
my $ga_stufe1 = ''; #1bit Trigger fuer Stufe1. 1=Aktivieren
my $ga_stufe2 = ''; #1bit Trigger fuer Stufe2. 1=Aktivieren
my $ga_stufe3 = ''; #1bit Trigger fuer Stufe3. 1=Aktivieren
-my $ga_stufe_setzen = ''; # GA DPT 5.005 zum direkten setzen der Stufe (1=A, 2=Stufe1, 3=Stufe2, 4=Stufe3)
+my $ga_stufe_setzen = ''; # GA DPT 5.005 zum direkten setzen der Stufe (1=Abwesend, 2=Stufe1, 3=Stufe2, 4=Stufe3)
my $ga_komforttemp = ''; #GA DPT 9.001 zum setzen der Komforttemperatur
my $ga_drehzahl_ventilator_zul = ''; #GA DPT 5.001 zum setzen der Zuluftdrehzahl
my $ga_drehzahl_ventilator_abl = ''; #GA DPT 5.001 zum setzen der Abluftdrehzahl
@@ -91,7 +93,7 @@
my $seriel;
my $sin; #Serial Input = Empangener Datenstrom
my $cin; #Counter Input = L\xE4nge des Datenpackets
-my $laenge; #L\xE4nge des empfangenen Datenstrings nachdem k\xFCrzen
+my $laenge; #L\xE4nge des empfangenen Datenstrings nach dem k\xFCrzen
my $checksum = 0; #Checksumme
my @hex; #Hilfsarray f\xFCr die Checksummenberechnung
@@ -145,8 +147,26 @@
###############################################################################################
###############################################################################################
-
-if ($msg{'apci'} eq "A_GroupValue_Write"){
+ if ($msg{'apci'} eq "A_GroupValue_Read"){ #Hier werden die Lesetelegramme verarbeitet und beantwortet
+ if ($msg{'dst'} eq $ga_aktstufe){
+ $daten = "00CD00";
+ if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
+ $return_value2 = command_senden($daten);
+ }elsif($msg{'dst'} eq $ga_status_bypass_prozent){
+ $daten = "000D00";
+ if($debug>=1){plugin_log($plugname,'Bypass Zustand abrufen');}
+ $return_value2 = command_senden($daten);
+ }elsif($msg{'dst'} eq $ga_status_ventilator_zul or $msg{'dst'} eq $ga_status_ventilator_abl){
+ $daten = "000B00";
+ if($debug>=1){plugin_log($plugname,'Ventilator Status abrufen');}
+ $return_value2 = command_senden($daten);
+ }elsif($msg{'dst'} eq $ga_aul_temp or $msg{'dst'} eq $ga_zul_temp or $msg{'dst'} eq $ga_abl_temp or $msg{'dst'} eq $ga_fol_temp or $msg{'dst'} eq $ga_komfort_temp){
+ $daten = "00D100";
+ plugin_log($plugname,'Temperatur abrufen');
+ $return_value2 = command_senden($daten);
+ }
+
+}elsif ($msg{'apci'} eq "A_GroupValue_Write"){ #Hier werden neue Werte vom KNX an die ComfoAir gesendet
if ($msg{'dst'} eq $ga_stufeabwesend && knx_read($msg{'dst'},0,1) == 1) {
$daten = "00990101";
plugin_log($plugname,'Stufe abwesend setzen');
@@ -183,8 +203,8 @@
if($debug>=1){plugin_log($plugname,'Ventilationsstufe abrufen');}
$return_value2 = command_senden($daten);
}
- }elsif ($msg{'dst'} eq $ga_stufe_setzen) {
- my $stufenwert = knx_read($msg{'dst'},0,5.005);
+ }elsif ($msg{'dst'} eq $ga_stufe_setzen) {
+ my $stufenwert = knx_read($msg{'dst'},0,5.005);
$daten = "0099010" . $stufenwert;
plugin_log($plugname,'Stufe direkt setzen auf: ' . $stufenwert);
$return_value2 = command_senden($daten);
@@ -195,6 +215,7 @@
}
}elsif ($msg{'dst'} eq $ga_komforttemp) {
my $komforttemp = knx_read($msg{'dst'},0,9.001);
+ if($ga_komfort_temp ne ''){knx_write($ga_komfort_temp,$komforttemp,9.001);}
plugin_log($plugname,'Komforttemp auf: ' . $komforttemp . '\xB0C setzen');
my $temphex = ($komforttemp + 20)*2; #Rechne die Temperatur fuer die ComfoAir um
$temphex = sprintf "%x" , $temphex; # Mache aus Integer HEX
@@ -202,6 +223,7 @@
$return_value2 = command_senden($daten);
}elsif ($msg{'dst'} eq $ga_reset_filter && knx_read($msg{'dst'},0,1) == 1) {
$daten = "00DB0400000001";
+ knx_write($ga_fehler_filter,0,1);
plugin_log($plugname,'Filter zuruecksetzen');
$return_value2 = command_senden($daten);
}elsif ($msg{'dst'} eq $ga_reset_error && knx_read($msg{'dst'},0,1) == 1) {
@@ -221,12 +243,12 @@
my $drehzahl_abl = knx_read($msg{'dst'},0,5.001);
plugin_log($plugname,'Drehzahl Abluftluefter auf: ' . $drehzahl_abl . '% setzen');
$plugin_info{$plugname."_abluftdrehzahl_1"} = $drehzahl_abl;
-
+
my $temp_zuluftdrehzahl = sprintf "%x",$plugin_info{$plugname."_zuluftdrehzahl_1"};
my $hex_abluftdrehzahl = sprintf "%x" , $drehzahl_abl; # Mache aus Integer HEX
$daten = "00CF090F" . $hex_abluftdrehzahl.'0F0F'. $temp_zuluftdrehzahl.'0F0F0F0F';
$return_value2 = command_senden($daten);
- if($debug>=2){plugin_log($plugname,'Drehzahl Abluftl\xFCfter DATEN: ' . $daten . ' mit '. $drehzahl_abl. ' setzen! Antwort:'.$return_value2); }
+ if($debug>=2){plugin_log($plugname,'Drehzahl Abluftl\xFCfter DATEN: ' . $daten . ' mit '. $drehzahl_abl. ' setzen! Antwort:'.$return_value2); }
}
if($debug>=2){plugin_log($plugname,'ENDE Aufruf durch GA');}
return;
@@ -242,10 +264,22 @@
$plugin_subscribe{$ga_stufe1}{$plugname} = 1;
$plugin_subscribe{$ga_stufe2}{$plugname} = 1;
$plugin_subscribe{$ga_stufe3}{$plugname} = 1;
- $plugin_subscribe{$ga_stufe_setzen}{$plugname} = 1;
+ $plugin_subscribe{$ga_stufe_setzen}{$plugname} = 1;
$plugin_subscribe{$ga_komforttemp}{$plugname} = 1;
$plugin_subscribe{$ga_reset_filter}{$plugname} = 1;
$plugin_subscribe{$ga_reset_error}{$plugname} = 1;
+ $plugin_subscribe{$ga_drehzahl_ventilator_zul}{$plugname} = 1;
+ $plugin_subscribe{$ga_drehzahl_ventilator_abl}{$plugname} = 1;
+
+ $plugin_subscribe{$ga_aktstufe}{$plugname} = 1;
+ $plugin_subscribe{$ga_status_bypass_prozent}{$plugname} = 1;
+ $plugin_subscribe{$ga_status_ventilator_zul}{$plugname} = 1;
+ $plugin_subscribe{$ga_status_ventilator_abl}{$plugname} = 1;
+ $plugin_subscribe{$ga_aul_temp}{$plugname} = 1;
+ $plugin_subscribe{$ga_zul_temp}{$plugname} = 1;
+ $plugin_subscribe{$ga_abl_temp}{$plugname} = 1;
+ $plugin_subscribe{$ga_fol_temp}{$plugname} = 1;
+ $plugin_subscribe{$ga_komfort_temp}{$plugname} = 1;
####################################################################################################
@@ -290,10 +324,10 @@
}
if($ga_fehlercode){ #Nur wenn die GA vergeben ist, werden hier die Stoermeldungen abgefragt
- $daten = "00D900";
- if($debug>=1){plugin_log($plugname,'St\xF6rungen abrufen');}
- $return_value2 = command_senden($daten);
- }
+ $daten = "00D900";
+ if($debug>=1){plugin_log($plugname,'St\xF6rungen abrufen');}
+ $return_value2 = command_senden($daten);
+ }
if($debug>=2){plugin_log($plugname,'ENDE Zyklische Abfrage');}
return;
@@ -345,9 +379,9 @@
if($debug>=2){plugin_log($plugname,'reciv-direkt: ' . $sin);}
if($reciv =~ /070f/i){
- if (substr($reciv,(length($reciv)-6),6) ne '07070f'){
- last;
- }
+ if (substr($reciv,(length($reciv)-6),6) ne '07070f'){
+ last;
+ }
}
}#Ende While
@@ -395,7 +429,7 @@
#Test einer Methode falls aussversehen mehrere Datenpakete auf einmal im Datenstring enthalten sind...
if($reciv =~ /07f307f0/i){
my @dataarray=split(/07f307f0/,$reciv);
- $reciv = @dataarray[1];
+ $reciv = $dataarray[0];
}
@@ -410,7 +444,7 @@
#Hier wird die Subroutine f\xFCr die Berechnung der Checksumme aufgerufen und das Ergebnis in $rcv_checksum zur\xFCck gegeben
$rcv_checksum = checksum_berechnen($reciv);
-
+
#######################################################################
#######################################################################
## Ab hier werden die Rueckmeldungen von der ComfoAir ausgewertet... ##
@@ -420,14 +454,14 @@
if($rcv_checksum eq $checksum){ #Hier wird gepr\xFCft ob die Checksumme korrekt ist
if($debug>=2){plugin_log($plugname,'Checksumme OK ');}
-
- #Hier werden die doppelten 07 aus dem Antwortstring entfernt.
- if($debug>=2){plugin_log($plugname,'String vor 07 bereinigung: '.$reciv);}
- while ($reciv =~ s/0707/07/) {}
- if($debug>=2){plugin_log($plugname,'String nach 07 bereinigung: '.$reciv);}
-
+
+ #Hier werden die doppelten 07 aus dem Antwortstring entfernt.
+ if($debug>=2){plugin_log($plugname,'String vor 07 bereinigung: '.$reciv);}
+ while ($reciv =~ s/0707/07/) {}
+ if($debug>=2){plugin_log($plugname,'String nach 07 bereinigung: '.$reciv);}
+
if($reciv =~ /00D209/i){ #Wenn die Temperaturen empfangen wurden
- my $t1 = substr($reciv,6,2);
+ my $t1 = substr($reciv,6,2);
my $t2 = substr($reciv,8,2);
my $t3 = substr($reciv,10,2);
my $t4 = substr($reciv,12,2);
@@ -438,10 +472,10 @@
$t2 = (hex($t2)/2)-20;
$t3 = (hex($t3)/2)-20;
$t4 = (hex($t4)/2)-20;
- $t5 = (hex($t5)/2)-20;
+ $t5 = (hex($t5)/2)-20;
#Wenn die GA's vergeben wurde, die Temperaturen auf die GA's senden
- if($ga_komfort_temp ne ''){knx_write($ga_komfort_temp,$t1,9.001);}
+ if($ga_komfort_temp ne ''){knx_write($ga_komfort_temp,$t1,9.001);}
if($ga_aul_temp ne ''){knx_write($ga_aul_temp,$t2,9.001);}
if($ga_zul_temp ne ''){knx_write($ga_zul_temp,$t3,9.001);}
if($ga_abl_temp ne ''){knx_write($ga_abl_temp,$t4,9.001);}
@@ -462,7 +496,7 @@
knx_write($ga_status_ventilator_zul,hex($vent_zul),5.001);
knx_write($ga_status_ventilator_abl,hex($vent_abl),5.001);
- }elsif($reciv =~ /00CE0E/i){ #Wenn Status Ventilatorenstufe empfangen wurden
+ }elsif($reciv =~ /00CE0E/i){ #Wenn der Status der Ventilatorenstufe empfangen wurden
my $akt_stufe = substr($reciv,22,2);
if(hex($akt_stufe) == 1){
plugin_log($plugname,'AKT_STUFE: A');
@@ -476,9 +510,9 @@
plugin_log($plugname,'Bypass: ' . hex($bypass_prozent) . '%');
knx_write($ga_status_bypass_prozent,hex($bypass_prozent),5.001);
- }elsif($reciv =~ /00DE14/i){ #Wenn die Rueckmeldung der Betriebsstunden des Filters empfangen wurden
+ }elsif($reciv =~ /00DE14/i){ #Wenn die Rueckmeldung der Betriebsstunden des Filters empfangen wurden
my $betriebsstunden_filter = substr($reciv,36,4);
- if($debug>=3){plugin_log($plugname,'Betriebsstunden Filter Roh: '.$betriebsstunden_filter);}
+ if($debug>=3){plugin_log($plugname,'Betriebsstunden Filter Roh: '.$betriebsstunden_filter);}
plugin_log($plugname,'Betriebsstunden Filter: ' . hex($betriebsstunden_filter) . 'h');
knx_write($ga_betriebsstunden_filter,hex($betriebsstunden_filter) . 'h',16.000);
@@ -552,7 +586,7 @@
sub checksum_berechnen {
my $chk_datasum = $_[0];
- $rcv_checksum =0;
+ $rcv_checksum = 0;
my $i;
$chk_datasum = $chk_datasum . "AD"; #+173 fuer die Checksummenberechnung
if($debug>=2){plugin_log($plugname,'String f\xFCr die Berechnung der Checksumme: '.$chk_datasum);}
Modified: wiregate/plugin/generic/conf.d/ConfoAir_kwl.conf
===================================================================
--- wiregate/plugin/generic/conf.d/ConfoAir_kwl.conf 2014-07-22 14:38:45 UTC (rev 2214)
+++ wiregate/plugin/generic/conf.d/ConfoAir_kwl.conf 2014-07-22 21:48:56 UTC (rev 2215)
@@ -7,12 +7,15 @@
$ga_stufe1 = ''; #1bit Trigger fuer Stufe1. 1=Aktivieren
$ga_stufe2 = ''; #1bit Trigger fuer Stufe2. 1=Aktivieren
$ga_stufe3 = ''; #1bit Trigger fuer Stufe3. 1=Aktivieren
+$ga_stufe_setzen = ''; # GA DPT 5.005 zum direkten setzen der Stufe (1=Abwesend, 2=Stufe1, 3=Stufe2, 4=Stufe3)
$ga_komforttemp = ''; #GA DPT 9.001 zum setzen der Komforttemperatur
+$ga_drehzahl_ventilator_zul = ''; #GA DPT 5.001 zum setzen der Zuluftdrehzahl
+$ga_drehzahl_ventilator_abl = ''; #GA DPT 5.001 zum setzen der Abluftdrehzahl
$ga_reset_filter = ''; #1bit Trigger fuer das Zuruecksetzen des Betriebsstundenzaehlers des Filters. 1=Reset
$ga_reset_error = ''; #1bit Trigger fuer das zuruecksetzen der KWL nach einem Fehler. 1=Reset
-#Hier werden die Gruppenadressen fuer die Rueckmeldungen vergeben: (Nicht vergeben = inaktiv)
+#Hier werden die Gruppenadressen fuer die Rueckmeldungen vergeben: (Nich vergeben = inaktiv)
$ga_status_ventilator_zul = ''; #GA DPT 5.001 fuer Status Ventilator Zuluft %
$ga_status_ventilator_abl = ''; #GA DPT 5.001 fuer Status Ventilator Abluft %
$ga_status_bypass_prozent = ''; #GA DPT 5.001 fuer Status Bypassklappe %
@@ -20,13 +23,14 @@
$ga_zustand_badschalter = ''; #GA DPT 1.001 fuer die Rueckmeldung des Zustandes des Badezimmerschalters
$ga_fehler_filter = ''; #GA DPT 1.001 fuer den Zustand des Filters. 0=OK, 1=Filter Voll
$ga_fehlercode = ''; #GA DPT 16.000 fuer die Ausgabe des Fehlercodes als Text
-$ga_aktstufe = ''; #GA DPT 5.005 Wert für aktuelle Stufe
+$ga_aktstufe = ''; #GA DPT 5.005 liefert den Wert für die aktuelle Stufe (1=A, 2=Stufe1, 3=Stufe2, 4=Stufe3)
-#Hier werden die Gruppenadressen für die Temperaturen vergeben: (Nicht vergeben=inaktiv)
+#Hier werden die Gruppenadressen für die Rückmeldung der Temperaturen vergeben: (Nicht vergeben=inaktiv)
$ga_aul_temp = ''; #GA DPT 9.001 für die Aussenlufttemperatur
$ga_zul_temp = ''; #GA DPT 9.001 für die Zulufttemperatur
$ga_abl_temp = ''; #GA DPT 9.001 für die Ablufttemperatur
$ga_fol_temp = ''; #GA DPT 9.001 für die Fortlufttemperatur
+$ga_komfort_temp = ''; #GA DPT 9.001 für die Komforttemperatur
#Zuordnung der Namen fuer die RRD's:
$Name_rrd_AUL = 'KWL_Aussenluft'; #Name RRD Aussenluft
@@ -35,14 +39,13 @@
$Name_rrd_FOL = 'KWL_Fortluft'; #Name RRD Fortluft
#Pfad zur seriellen Schnittstelle oder dem USB-Seriell-Wandler:
-$schnittstelle = '/dev/ttyUSB-1-1';
+$schnittstelle = '/dev/ttyUSB-2-4';
-### Neu in Version 1.6 ###
#Angaben für die Kommunikation über den UDP-Port einer MOXA [diese Einstellungen reichen aus, d.h. auf dem Wiregate muss unter "Seriell/LAN/Socketverbindungen" KEINE Socketverbindung erstellt werden
$socknum = ""; # Eindeutige Nummer des Sockets
$send_ip = ""; # SendeIP (UDP)
-$send_port = ""; # Sendeport (UDP)
+$send_port = ""; # Sendeport (UDP)
$recv_ip = ""; # EmpfangsIP (UDP)
$recv_port = ""; # Empfangsport (UDP)
@@ -52,12 +55,11 @@
# Dauer einer Abfrage
-$Zaehler = "2500"; #Mit dieser Variable Zaehler wird beeinflusst, wie lange das Plugin auf den Abschluss einer Rückmeldung der KWL wartet; empfohlener Wert für seriell: 2'500; für Moxa: 250
+$Zaehler = "2500"; #Mit dieser Variable Zaehler wird beeinflusst, wie lange das Plugin auf den Abschluss einer Rückmeldung der KWL wartet; empfohlener Wert für seriell: 2500; für Moxa: 250
# Debug level 0 = nur die wichtigsten Infos, 1 = Alle Zustaende, 2 = Rohdaten (nur für Fehlersuche)
-$debug=1;
+$debug=0;
-
######################
##ENDE Einstellungen##
######################
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|