Autor Thema: Command Class SENSOR_MULTLEVEL und METER  (Gelesen 3792 mal)

Offline Mx112

  • Jr. Member
  • **
  • Beiträge: 73
Command Class SENSOR_MULTLEVEL und METER
« am: 18 November 2013, 19:41:42 »
Hallo Zusammen,

ich habe hier eine Erweiterung und einen Änderungswunsch an 10_ZWave.pm.

ich hab einen Fibaro Wall Plug (FGWPE) der die verbrauche Energie in kWh über die Command Class METER reportet, sowie den aktuellen Verbrauch in W über SENSOR_MULILEVEL.

Dazu habe ich die 10_ZWave.pm wie folgt erweitert (letzte 3 Zeilen), was auch funktioniert:

  SENSOR_MULTILEVEL        => { id => '31',
    get   => { smStatus    => "04" },
    parse => { "06310501(..)(....)" => 'sprintf("temperature:%0.1f %s",'.
                      'hex($2)/(10**int(hex($1)/32)), '.
                      'hex($1)&8 ? "F":"C")',
   "05310505(..)(..)" => 'sprintf("humidity:%0.1f %%", '.
                      'hex($2)/(10**int(hex($1)/32)))',
   "06310504(..)(....)" => 'sprintf("power:%0.1f %s",'.
                      'hex($2)/(10**int(hex($1)/32)), '.
                      'hex($1)&8 ? "Btu/h":"W")'},},

Das Problem ist das METER ebenfalls das reading "power" verwendet anstatt "energy". Ideal wäre hier wenn das Reading entsprechend der übertragenen Maßeinheit benannt werden würde. Also "power" bei W, "energy" bei kWh und kVA/h sowie "pulseCount". Dann würde es auch 1:1 mir den readings der FBDECT übereinstimmen.

Ist das denkbar? Die wahrscheinlich einfachere aber auch denkbare Variante wäre das Reading Analog zur Command Class Specification einfach "electric" zu nennen. Dann kann es sich jeder passend mit userReadings umbauen.

FBDECT verwendet die readings analog und dann wäre es schön einheitlich.

Gruß
Matthias
FHEM 5.5 SVN - FB7390 FRITZ!OS 06.03 - RaspberryPi - Z-Wave - FBDECT

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20535
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #1 am: 18 November 2013, 20:04:39 »
Danke fuer den Patch, habs eingecheckt (samt DOKU!)

Klar kann man das anders formulieren, ich uebernehme gerne die Aenderungsvorschlaege  :)

Offline Mx112

  • Jr. Member
  • **
  • Beiträge: 73
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #2 am: 18 November 2013, 22:47:41 »
Danke!

Auf die schnelle würde ich das so Lösen:
"energy" für kWh,KVAh, und pulseCount [Accumulated values]
"power" für W [Instant value]

Gruß
Matthias
sub
ZWave_ParseMeter($)
{
  my ($val) = @_;
  return if($val !~ m/^(..)(..)(.*)$/);
  my ($v1, $v2, $v3) = (hex($1) & 0x1f, hex($2), $3);
  my @prectab = (1,10,100,1000,10000,100000,1000000, 10000000);
  my $prec  = $prectab[($v2 >> 5) & 0x7];
  my $scale = ($v2 >> 3) & 0x3;
  my $size  = ($v2 >> 0) & 0x7;
  my @txt = ("undef", "energy", "gas", "water");
  my $txt = ($v1 > $#txt ? "undef" : $txt[$v1]);
  my %unit = (energy => ["kWh", "kVAh", "W", "pulseCount"],
              gas   => ["m3",  "feet3", "undef", "pulseCount"],
              water => ["m3",  "feet3", "USgallons", "pulseCount"]);
  my $unit = $txt eq "undef" ? "undef" : $unit{$txt}[$scale];
  $v3 = hex(substr($v3, 0, 2*$size))/$prec;
  if ($unit == "W") { $txt = "power"; }
  return "$txt:$v3 $unit";
}

Doku:
  <br><br><b>Class METER</b>
  <li>energy:val [kWh|kVAh|pulseCount]</li>
  <li>power:val [W]</li> 
  <li>gas:val [m3|feet3|pulseCount]</li>
  <li>water:val [m3|feet3|USgallons|pulseCount]</li>
FHEM 5.5 SVN - FB7390 FRITZ!OS 06.03 - RaspberryPi - Z-Wave - FBDECT

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20535
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #3 am: 19 November 2013, 09:25:58 »
Habs eingecheckt.

Offline Mx112

  • Jr. Member
  • **
  • Beiträge: 73
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #4 am: 22 November 2013, 17:56:01 »
Hallo Rudi,

In @txt wird die Variable noch als power definiert, und die Prüfung auf "W" validiert immer zu TRUE (wusste ich nicht das Perl zwischen = und eq unterscheidet).

So funktioniert es jetzt bei mir, hab auch den Negativ Test gemacht:
  my @txt = ("undef", "energy", "gas", "water");
und:
  $txt = "power" if ($unit eq "W");

Gruß
Matthias
FHEM 5.5 SVN - FB7390 FRITZ!OS 06.03 - RaspberryPi - Z-Wave - FBDECT

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20535
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #5 am: 23 November 2013, 12:08:04 »
Ich haette es aber wissen muessen, habe aber gepennt.
Danke fuer den Hinweis, habs eingecheckt.

Offline Mx112

  • Jr. Member
  • **
  • Beiträge: 73
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #6 am: 24 November 2013, 22:02:31 »
Danke, funktioniert.
Was muss eigentlich bei ZW_Dongle RAW als Parameter übergeben werden? Was ich bisher probiert hatte resultierte lediglich in Timeouts?

Gruß Matthias
FHEM 5.5 SVN - FB7390 FRITZ!OS 06.03 - RaspberryPi - Z-Wave - FBDECT

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20535
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #7 am: 24 November 2013, 22:48:59 »
Raw ist ja "developer only" :), insofern muss man in %gets nach Beispielen schauen:
  "caps"      => "07",     # SERIAL_API_GET_CAPABILITIES
  "ctrlCaps"  => "05",     # ZW_GET_CONTROLLER_CAPS
  "nodeInfo"  => "41%02x", # ZW_GET_NODE_PROTOCOL_INFO
  "nodeList"  => "02",     # SERIAL_API_GET_INIT_DATA
  "homeId"    => "20",     # MEMORY_GET_ID
  "version"   => "15",     # ZW_GET_VERSION
  "raw"       => "%s",
also muesste "get ZWD raw 02" mit ""get ZWD nodeList" equivalent sein.
Ich glaube hier ist noch viel zu tun, ich habe nichtmal 10% der Kommandos auf diese Ebene implementiert.


Offline Mx112

  • Jr. Member
  • **
  • Beiträge: 73
Antw:Command Class SENSOR_MULTLEVEL und METER
« Antwort #8 am: 27 November 2013, 00:23:33 »
Vieleicht will ich ja noch ein Develpoer werden  :).

get ZWDongle_0 raw 02 bringt timeout:
Timeout reading answer for get get ZWDongle_0 raw
FHEM 5.5 SVN - FB7390 FRITZ!OS 06.03 - RaspberryPi - Z-Wave - FBDECT