|
From: <ma...@us...> - 2011-10-23 16:34:08
|
Revision: 472
http://openautomation.svn.sourceforge.net/openautomation/?rev=472&view=rev
Author: makki1
Date: 2011-10-23 16:34:01 +0000 (Sun, 23 Oct 2011)
Log Message:
-----------
wiregate-plugins: MinMaxRRD2GA, RolladenLuetung, HHK
Added Paths:
-----------
wiregate/plugin/generic/Handtuchtrockner.pl
wiregate/plugin/generic/MinMaxValueFromRRDtoGA.pl
wiregate/plugin/generic/RolladenLueftungsPos.pl
Added: wiregate/plugin/generic/Handtuchtrockner.pl
===================================================================
--- wiregate/plugin/generic/Handtuchtrockner.pl (rev 0)
+++ wiregate/plugin/generic/Handtuchtrockner.pl 2011-10-23 16:34:01 UTC (rev 472)
@@ -0,0 +1,71 @@
+# Plugin zur Steuerung eines Handtuchtrockners
+# http://knx-user-forum.de/wiregate/16209-plugin-zur-steuerung-eines-handtuchtrockners-2.html
+# Sommer > Heizen über E-Patrone
+# Winter > Heizen über WW-Heizung
+### Definitionen
+my $hk_ga = '4/2/100'; # Gruppenadresse zur Steuerung Handtuchtrockner (An/Aus)
+my $sommer_ga = '4/0/0'; # Gruppenadresse Sommerbetrieb (An/Aus)
+my $patrone_ga = '4/2/110'; # Gruppenadresse E-Heizpatrone (An/Aus)
+my $stellantrieb_ga = '4/2/105'; # Gruppenadresse Stellantrieb (%-Wert)
+my $stellantrieb_auf = 100; # Wert für Stellantrieb offen (%-Wert)
+my $stellantrieb_zu = 0; # Wert für Stellantrieb geschlossen (%-Wert)
+my $modus_hk = '1'; # Konnex Betriebsmudus RTR wenn Handtuchtrockner läuft
+my $modus_ga = '4/2/91'; # Zwangsbetriebsmodus RTR Bad
+my $zwang_fbh_ga = '4/2/97'; # Zwangsmodus für Stellantrieb FBH offen
+my $laufzeit = 60*60*2; # Laufzeit bis Auto Aus in sek.
+### Ende Definitionen
+# Eigenen Aufruf-Zyklus auf 0 Sekunden setzen
+$plugin_info{$plugname.'_cycle'} = 0;
+# Plugin an Gruppenadresse "anmelden"
+$plugin_subscribe{$hk_ga}{$plugname} = 1;
+
+#Prüfung, ob GA durch Schreibtransaktion angesprochen wurde
+if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $hk_ga ) {
+ #Wert für Handtuchtrockner lesen
+ my $hk_wert = knx_read($hk_ga,300,1);
+ #Ausführungszeit setzen
+ $plugin_info{$plugname.'_last'} = time();
+
+ #Wert für Sommerbetrieb lesen
+ my $sommer_wert = knx_read($sommer_ga,300,1);
+ #Kenner Laufzeit gestartet und Aufrufintervall des Plugin setzen
+ if ($hk_wert == 1) {
+ $plugin_info{$plugname.'_sema'} = 1;
+ $plugin_info{$plugname.'_cycle'} = $laufzeit;
+ }
+ if ($sommer_wert == 1) {
+ if ($hk_wert == 1) {
+ knx_write($patrone_ga, 1, 1); ##Heizpatrone einschalten
+ knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001); ##Stellantrieb für HK schließen
+ return "E-Patrone An";
+ }
+ else {
+ knx_write($patrone_ga,0,1); ##Heizpatrone ausschalten
+ knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001); ##Stellantrieb für HK öffnen
+ return "E-Patrone Aus";
+ }
+ }
+ else {
+ knx_write($patrone_ga,0,1);
+ if ($hk_wert == 1) {
+ knx_write($stellantrieb_ga, $stellantrieb_auf, 5.001); ##Stellantrieb für HK öffnen
+ knx_write($modus_ga, $modus_hk, 5.010); ##Betriebsmodus auf Anwesend zwingen
+ knx_write($zwang_fbh_ga, 1, 1); ##Stellanrieb zwingen 100% öffnen
+ return "WW-Heizung An";
+ }
+ else {
+ knx_write($stellantrieb_ga, $stellantrieb_zu, 5.001); ##Stellantrieb für HK schließen
+ knx_write($modus_ga, 0, 5.010); ##Betriebsmodus Zwang zurücksetzen
+ knx_write($zwang_fbh_ga, 0, 1); ##Stellanrieb Zwang zurücksetzen
+ return "WW-Heizung Aus";
+ }
+ }
+ }
+#Ausführung wenn Aufrufintervall/Laufzeit abgelaufen ist
+elsif ($plugin_info{$plugname.'_sema'} == 1) {
+ #Heizkörper ausschalten,Kenner Laufzeit gestartet und Aufrufintervall des Plugin zurücksetzen
+ $plugin_info{$plugname.'_sema'} = 0;
+ $plugin_info{$plugname.'_cycle'} = 0;
+ knx_write($hk_ga,0,1);
+ }
+return "Warte auf Telegramm";
Added: wiregate/plugin/generic/MinMaxValueFromRRDtoGA.pl
===================================================================
--- wiregate/plugin/generic/MinMaxValueFromRRDtoGA.pl (rev 0)
+++ wiregate/plugin/generic/MinMaxValueFromRRDtoGA.pl 2011-10-23 16:34:01 UTC (rev 472)
@@ -0,0 +1,46 @@
+### Plugin Min/Max values from RRD auf den Bus
+my $RRDName = "28.7FD4EB010000_temp";
+my $ds = "MIN"; # Datasource: MIN AVERAGE MAX - egal bei Werten <180h
+my $start = "now-20h"; # AT-STYLE TIME SPECIFICATION
+my $end = "now";
+$plugin_info{$plugname.'_cycle'} = 3600; # alle x sekunden
+my $debug = 0;
+my $gamin = '11/2/20'; # DPT9.001 leer um Versand zu unterbinden-> ''
+my $gamax = '11/2/21'; # leer um Versand zu unterbinden-> ''
+### ENDE Definitionen
+
+# return early on write/response (telegram from myself!)
+if ($msg{'apci'} && $msg{'apci'} ne "A_GroupValue_Read") {
+ return;
+}
+
+my ($min,$max) = (0,0);
+my ($dbstart, $step, $names, $data) =
+ RRDs::fetch('/var/www/rrd/'.$RRDName.'.rrd', "--start=$start","--end=$end", $ds);
+
+foreach my $line (@$data) {
+ foreach my $val (@$line) {
+ next unless defined $val;
+ $min = $val if $val < $min;
+ $max = $val if $val > $max;
+ }
+}
+
+if ($msg{'apci'} eq "A_GroupValue_Read" and $msg{'dst'} eq $gamin) {
+ knx_write($gamin,$min,9,1);
+ return;
+} elsif ($msg{'apci'} eq "A_GroupValue_Read" and $msg{'dst'} eq $gamax) {
+ knx_write($gamax,$max,9,1);
+ return;
+}
+
+if ($gamin) {
+ knx_write($gamin,$min,9);
+ $plugin_subscribe{$gamin}{$plugname} = 1;
+}
+if ($gamax) {
+ knx_write($gamax,$max,9);
+ $plugin_subscribe{$gamax}{$plugname} = 1;
+}
+return("Min $min Max $max in $start") if $debug;
+return;
Added: wiregate/plugin/generic/RolladenLueftungsPos.pl
===================================================================
--- wiregate/plugin/generic/RolladenLueftungsPos.pl (rev 0)
+++ wiregate/plugin/generic/RolladenLueftungsPos.pl 2011-10-23 16:34:01 UTC (rev 472)
@@ -0,0 +1,77 @@
+## Dieses Plugin steuert die Rolläden
+# http://knx-user-forum.de/wiregate/16384-plugin-rolladen-lueftungsposition.html
+## Rolladen unten + Fenster auf >> Rolladen in Lüftungsposition fahren
+## Globale Definitionen ##
+my $zustand_geschlossen = 00; # Wert Fensterstatus geschlossen
+my $zustand_offen = 01; # Wert Fensterstatus geöffnet
+my $GA_Gesamt_SperreAuto = '3/0/4'; # Gruppenadresse, die die Lüftungsautomatik sperrt
+#Definition aller Rolläden über ein Array von Hashes, wobei jeder Hash ein Rollladen/Fenster ist.
+my @AlleRolllaeden;
+# Name = Name des Rolladen
+# GA_Fensterstatus = Gruppenadresse für Öffnungsüberwachung des Fensters
+# GA_RolloUnten = Gruppenadresse für Meldung, daß Rolladen ganz runter gefahren wurde
+# GA_RolloPos = Gruppenadresse zum Anfahren einer Position
+# GA_RolloAufAb = Gruppenadresse zu Auf/Abfahren des Rollos
+# GA_RolloPosInfo = Gruppenadresse auf der die Rückmeldung der Position erfolgt
+# PosRolloLuft = Position des Rolladen im % für Lüftungsposition
+push @AlleRolllaeden, { Name => "Schlafzimmer", GA_Fensterstatus => "6/2/50", GA_RolloUnten => "3/2/57", GA_RolloPos => "3/2/52",
+ GA_RolloAufAb => "3/2/50", GA_RolloPosInfo => "3/2/55", PosRolloLuft => 70};
+push @AlleRolllaeden, { Name => "Bad", GA_Fensterstatus => "6/2/90", GA_RolloUnten => "3/2/97", GA_RolloPos => "3/2/92",
+ GA_RolloAufAb => "3/2/90", GA_RolloPosInfo => "3/2/95", PosRolloLuft => 85};
+push @AlleRolllaeden, { Name => "Kind A", GA_Fensterstatus => "6/2/130", GA_RolloUnten => "3/2/137", GA_RolloPos => "3/2/132",
+ GA_RolloAufAb => "3/2/130", GA_RolloPosInfo => "3/2/135", PosRolloLuft => 85};
+push @AlleRolllaeden, { Name => "Kind B", GA_Fensterstatus => "6/2/170", GA_RolloUnten => "3/2/177", GA_RolloPos => "3/2/172",
+ GA_RolloAufAb => "3/2/170", GA_RolloPosInfo => "3/2/175", PosRolloLuft => 96};
+push @AlleRolllaeden, { Name => "Arbeitszimmer Fenster", GA_Fensterstatus => "6/2/220", GA_RolloUnten => "3/2/227", GA_RolloPos => "3/2/222",
+ GA_RolloAufAb => "3/2/220", GA_RolloPosInfo => "3/2/225", PosRolloLuft => 70};
+push @AlleRolllaeden, { Name => "Arbeitszimmer Tuer", GA_Fensterstatus => "6/2/230", GA_RolloUnten => "3/2/237", GA_RolloPos => "3/2/232",
+ GA_RolloAufAb => "3/2/230", GA_RolloPosInfo => "3/2/235", PosRolloLuft => 80};
+
+## Plugin nur bei Telegramm aufrufen
+$plugin_info{$plugname.'_cycle'} = 0; # nur bei Telegramm aufrufen
+
+## Rolladensperre beachten
+#Anmeldung an Gruppenadresse für Rolladensperre
+$plugin_subscribe{$GA_Gesamt_SperreAuto}{$plugname} = 1;
+#Sperrkennzeichen setzen, wenn Telegramm eintrifft
+if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $GA_Gesamt_SperreAuto) {
+ $plugin_info{$plugname.'_sperre'} = knx_read($GA_Gesamt_SperreAuto,0,1);
+ }
+#Wenn Sperrkennzeichen gesetzt ist, dann soll der Code beendet werden
+if ($plugin_info{$plugname.'_sperre'} == 1) {
+ return "Sperre";
+ }
+
+##Ausführen des Codes je definiereten Rolladen
+foreach my $element (@AlleRolllaeden) {
+
+ #Anmeldung an Gruppenadresse für Fensterstatus
+ $plugin_subscribe{$element->{GA_Fensterstatus}}{$plugname} = 1;
+
+ #Anmeldung an Gruppenadresse für Status, daß Rolladen unten
+ $plugin_subscribe{$element->{GA_RolloUnten}}{$plugname} = 1;
+
+ #Wenn Telegramm für Fensterstatus, Rollo unten oder Sperre eintrifft, dann soll das Rollo ggf. bewegt werden
+ if ($msg{'apci'} eq "A_GroupValue_Write" and
+ ($msg{'dst'} eq $element->{GA_Fensterstatus} or $msg{'dst'} eq $element->{GA_RolloUnten}) or $msg{'dst'} eq $GA_Gesamt_SperreAuto) {
+
+ my $Fensterstatus = knx_read($element->{GA_Fensterstatus}, 300, 1); #Lesen Fensterstatus
+ my $RolloUnten = knx_read($element->{GA_RolloUnten} ,300, 1); #Lesen ob Rolladen unten
+ my $RolloPosInfo = knx_read($element->{GA_RolloPosInfo}, 300, 5.001); #Lesen der aktuellen Rolladenpositon in %
+
+ #Wenn Fenster=zu und Rolladen innerhalb Lüftung, dann soll der Rollo komplett runter gefahren werden
+ if (($Fensterstatus==$zustand_geschlossen ) && ($RolloPosInfo >= $element->{PosRolloLuft}) && ($msg{'dst'} eq $element->{GA_Fensterstatus} )) {
+ knx_write($element->{GA_RolloAufAb} , 1, 1);
+ return "Ab";
+ }
+
+ #Wenn Fenster=offen und Rolladen komplet unten, dann soll der Rollo in die Lüftungsposition gefahren werden
+ if (($Fensterstatus==$zustand_offen) && ($RolloUnten==1)) {
+ knx_write($element->{GA_RolloPos}, $element->{PosRolloLuft}, 5.001);
+ return "Lüftung";
+ }
+ }
+ }
+
+#Rückgabewert falls noch kein Telegramm eingetroffen ist
+return "Warte";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|