[fixed] [patch] Neuer DPT3.007, bitte Aufnehme.

Begonnen von JoeALLb, 24 September 2018, 12:51:23

Vorheriges Thema - Nächstes Thema

JoeALLb

Hallo,

ich benötige DPT 3.007 um meine Lautsprecher lauter bzw. leiser stellen zu können.
Dafür funktioniert folgender Code in Anlehnung an den bisherigen Code.


--- /mnt/SeaCloud/10_KNX_org.pm 2018-09-03 07:42:57.000000000 +0200
+++ FHEM/10_KNX.pm 2018-09-24 12:28:06.478616287 +0200
@@ -133,6 +134,7 @@
 
#Step value (four-bit)
"dpt3" => {CODE=>"dpt3", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,3}/i, MIN=>-100, MAX=>100},
+ "dpt3.007" => {CODE=>"dpt3.007", UNIT=>"%", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,3}/i, MIN=>-100, MAX=>100},

# 1-Octet unsigned value
"dpt5" => {CODE=>"dpt5", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,3}/i, MIN=>0, MAX=>255},
@@ -169,6 +171,7 @@
"dpt9.008" => {CODE=>"dpt9", UNIT=>"ppm", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[-+]?(?:\d*[\.\,])?\d+/i, MIN=>-670760, MAX=>670760},
"dpt9.009" => {CODE=>"dpt9", UNIT=>"m&sup3/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[-+]?(?:\d*[\.\,])?\d+/i, MIN=>-670760, MAX=>670760},
"dpt9.010" => {CODE=>"dpt9", UNIT=>"s", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[-+]?(?:\d*[\.\,])?\d+/i, MIN=>-670760, MAX=>670760},
"dpt9.021" => {CODE=>"dpt9", UNIT=>"mA", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[-+]?(?:\d*[\.\,])?\d+/i, MIN=>-670760, MAX=>670760},
"dpt9.024" => {CODE=>"dpt9", UNIT=>"kW", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[-+]?(?:\d*[\.\,])?\d+/i, MIN=>-670760, MAX=>670760},
"dpt9.025" => {CODE=>"dpt9", UNIT=>"l/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[-+]?(?:\d*[\.\,])?\d+/i, MIN=>-670760, MAX=>670760},
@@ -1635,6 +1643,38 @@
#get hex representation
$hexval = sprintf("%.2x",$numval);
}
+       elsif ($code eq "dpt3.007")
+        {
+
+                $numval = 0 if ($value eq "-0");
+                $numval = 1 if ($value ==-100);
+                $numval = 2 if ($value ==-50);
+                $numval = 3  if ($value ==-25);
+                $numval = 4 if ($value ==12);
+                $numval = 5 if ($value ==6);
+                $numval = 6 if ($value ==3);
+                $numval = 7 if ($value ==1);
+                $numval = 8 if ($value ==0);
+
+                $numval = 9  if ($value ==100);
+                $numval = 10 if ($value ==50);
+                $numval = 11 if ($value ==25);
+                $numval = 12 if ($value ==12);
+                $numval = 13 if ($value ==6);
+                $numval = 14 if ($value ==3);
+                $numval = 15 if ($value ==1);
+                $numval = 16 if ($value eq "+Stopp");
+
+                #get hex representation
+                $hexval = sprintf("%.2x",$numval);
+        }
+
#1-Octet unsigned value
elsif ($code eq "dpt5")
{
@@ -1905,6 +1945,35 @@

$state = sprintf ("%.0f", $state);
}
+ #out
+       elsif ($code eq "dpt3.007")
+        {
+ #recive from bus
+                #get numeric value
+                $numval = hex ($value);
+
+
+ $state = "-0" if ($numval >=0);
+ $state = "-100" if ($numval >=1);
+ $state = "-50" if ($numval >=2);
+ $state = "-25" if ($numval >=3);
+ $state = "-12" if ($numval >=4);
+ $state = "-6" if ($numval >=5);
+ $state = "-3" if ($numval >=6);
+ $state = "-1" if ($numval >=7);
+ $state = "0" if ($numval >=8);
+
+ $state = "+100" if ($numval >=9);
+ $state = "+50" if ($numval >=10);
+ $state = "+25" if ($numval >=11);
+ $state = "+12" if ($numval >=12);
+ $state = "+6" if ($numval >=13);
+ $state = "+3" if ($numval >=14);
+ $state = "+1" if ($numval >=15);
+ $state = "+0" if ($numval >=16);
+
+        }
+
#1-Octet unsigned value
elsif ($code eq "dpt5")
{
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Andi291

Abend!

Den DPT3.007 nehm ich gerne auf, aber worin genau soll der Unterschied um DPT3 bestehen?
Warum hast Du den Code von Encode und Decode geändert/ergänzt?

JoeALLb

Zitat von: Andi291 am 25 September 2018, 20:26:17
Den DPT3.007 nehm ich gerne auf, aber worin genau soll der Unterschied um DPT3 bestehen?
Warum hast Du den Code von Encode und Decode geändert/ergänzt?

Ich weiß ehrlich gesagt nicht, ob DPT3 korrekt ist.
Wenn ich jedenfalls "+1%", also "$0f" an DPT3 über ETS an FHEM schicke, kommt dort 100 an. damit kann ich nichts anfangen.
aus "+3%" oder hex $0E wird bei DPT3 50.

Wenn ich an DPT3.007 das selbe schicke, steht "+1 %" bzw. "+3 %" im reading. das funktioniert! und kann von mir genutzt werden Alternativ könnte man natürlich auch das + weglassen! Das senden von "+3" funktioniert ebenfalls und sendet eben "$0E" auf den Bus.

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Andi291

Da hast Du recht. Aber dann reparieren wir doch lieber den DPT3, oder?
Sollte erledigt sein...

JoeALLb

Zitat von: Andi291 am 26 September 2018, 21:01:12
Aber dann reparieren wir doch lieber den DPT3, oder?

Ist mir sehr recht! Wir oben geschrieben kannte ich DPT3 zuwenig, um dies beurteilen zu können!

Danke für die Aufnahme
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270