Standardisierte Battery Readings in 10_CUL_HM?

Begonnen von Markus M., 23 Dezember 2018, 23:56:43

Vorheriges Thema - Nächstes Thema

Markus M.

Können wir zu Weihnachten vielleicht die standardisierten Battery Readings bei HM bekommen? :)

Code (DIFF) Auswählen
Index: FHEM/10_CUL_HM.pm
===================================================================
--- FHEM/10_CUL_HM.pm (revision 18043)
+++ FHEM/10_CUL_HM.pm (working copy)
@@ -1204,6 +1204,10 @@
   }

   $mh{devN}   = $mh{devH}->{NAME};        # source device name
+  if(!defined($mh{devN})){
+    Log3 $mh{dstN},2,"CUL_HM received unknown device - autocreate might be disabled";
+    return;
+  }
   if (CUL_HM_getAttrInt($mh{devN},"ignore")){
     $defs{$_}{".noDispatchVars"} = 1 foreach (grep !/^$mh{devN}$/,@entities);
     return (CUL_HM_pushEvnts(),$mh{devN},@entities);
@@ -1493,7 +1497,7 @@
   elsif($mh{md} =~ m/^(KS550|KS888|HM-WDS100-C6-O)/) { ########################
     if($mh{mTp} eq "70") {
       my ($t,$h,$r,$w,$wd,$s,$b) = map{hex($_)} unpack 'A4A2A4A4(A2)*',$mh{p};
-      push @evtEt,[$mh{devH},1,"battery:". (($t & 0x8000)?"low"  :"ok"  )] if ($mh{md} eq "HM-WDS100-C6-O-2"); #has no battery
+      push @evtEt,[$mh{devH},1,"batteryState:". (($t & 0x8000)?"low"  :"ok"  )] if ($mh{md} eq "HM-WDS100-C6-O-2"); #has no battery
       my $tsgn = ($t & 0x4000);
       $t = ($t & 0x3fff)/10;
       $t = sprintf("%0.1f", $t-1638.4) if($tsgn);
@@ -1525,7 +1529,7 @@
       push @evtEt,[$mh{cHash},1,"storm:$txt"];
       push @evtEt,[$mh{devH} ,1,"trig_$mh{chnHx}:$mh{dstN}"];
       my $err = $chn & 0x80;
-      push @evtEt,[$mh{devH},1,"battery:". ($err?"low"  :"ok"  )] if ($mh{md} eq "HM-WDS100-C6-O-2"); #has no battery
+      push @evtEt,[$mh{devH},1,"batteryState:". ($err?"low"  :"ok"  )] if ($mh{md} eq "HM-WDS100-C6-O-2"); #has no battery
     }
     else {
       push @evtEt,[$mh{shash},1,"unknown:$mh{p}"];
@@ -1590,7 +1594,7 @@
         $chnHash->{helper}{needUpdate} = 1                  if($mode =~ m/central/ && $mh{mTp} eq '10');
        }
       push @evtEt,[$mh{shash},1,"desired-temp:$dTemp"];
-      push @evtEt,[$mh{devH},1,"battery:".($err&0x80?"low":"ok")];
+      push @evtEt,[$mh{devH},1,"batteryState:".($err&0x80?"low":"ok")];
     }
     elsif( $mh{mTp} eq "10" &&                   # Config change report
           ($mh{p} =~ m/^0402000000000501/)) {   # paramchanged L5
@@ -1638,7 +1642,7 @@
                              if($modules{CUL_HM}{defptr}{"$mh{src}$chn"});

       my $stErr = ($err >>1) & 0x7;    # Status-Byte Evaluation
-      push @evtEt,[$mh{devH},1,"battery:".(($stErr == 4)?"critical":($err&0x80?"low":"ok"))];
+      push @evtEt,[$mh{devH},1,"batteryState:".(($stErr == 4)?"low":($err&0x80?"low":"ok"))];
       if (!$stErr){#remove both conditions
         push @evtEt,[$mh{devH},1,"motorErr:ok"];
       }
@@ -1646,7 +1650,7 @@
         push @evtEt,[$mh{devH},1,"motorErr:blocked"                  ]if($stErr == 1);
         push @evtEt,[$mh{devH},1,"motorErr:loose"                    ]if($stErr == 2);
         push @evtEt,[$mh{devH},1,"motorErr:adjusting range too small"]if($stErr == 3);
-#       push @evtEt,[$mh{shash},1,"battery:critical"                  ]if($stErr == 4);
+#       push @evtEt,[$mh{shash},1,"batteryState:low"                      ]if($stErr == 4);
       }
       push @evtEt,[$mh{devH},1,"motor:opening"] if(($err&0x30) == 0x10);
       push @evtEt,[$mh{devH},1,"motor:closing"] if(($err&0x30) == 0x20);
@@ -1694,7 +1698,7 @@
         push @evtEt,[$mh{shash},1,"ValvePosition:$vp"    ];
         #device---
         push @evtEt,[$mh{devH},1,"measured-temp:$actTemp"];
-        push @evtEt,[$mh{devH},1,"batteryLevel:$bat"];
+        push @evtEt,[$mh{devH},1,"batteryVoltage:$bat"];
         push @evtEt,[$mh{devH},1,"actuator:$vp"];
         if   ($err == 6){ $lBat = "low";}
         elsif($err == 0){ $lBat = "ok";}# we cannot determin bat if any other state!
@@ -1757,7 +1761,7 @@
       #push @evtEt,[$mh{shash},1,"unknown0:$uk0"];
       #push @evtEt,[$mh{shash},1,"unknown1:".$2 if ($p =~ m/^0A(.10)(.*)/)];
       push @evtEt,[$mh{devH},1,"motorErr:$errTbl{$err}" ] if($mh{mTp} eq "10");
-      push @evtEt,[$mh{devH},1,"battery:$lBat"] if ($lBat);
+      push @evtEt,[$mh{devH},1,"batteryState:$lBat"] if ($lBat);
       push @evtEt,[$mh{devH},1,"desired-temp:$setTemp"];
     }
     elsif($mh{mTp} eq "59" && defined $mI[0]) {#inform team about new value
@@ -1800,7 +1804,7 @@
         $actTemp = sprintf("%2.1f",$actTemp);
         push @evtEt,[$mh{cHash},1,"measured-temp:$actTemp"];
         push @evtEt,[$mh{devH},1,"measured-temp:$actTemp"];
-        push @evtEt,[$mh{devH},1,"batteryLevel:$bat"];
+        push @evtEt,[$mh{devH},1,"batteryVoltage:$bat"];
         $cRep = (($cRep    >>6) & 0x01 )?"on":"off";
         $wRep = (($wRep    >>5) & 0x01 )?"on":"off";
       }
@@ -1848,7 +1852,7 @@
       push @evtEt,[$mh{cHash},1,"commReporting:$cRep"];
       push @evtEt,[$mh{cHash},1,"winOpenReporting:$wRep"];
       push @evtEt,[$mh{cHash},1,"boostTime:$bTime"];
-      push @evtEt,[$mh{devH},1,"battery:".($lbat?"low":"ok")];
+      push @evtEt,[$mh{devH},1,"batteryState:".($lbat?"low":"ok")];
       push @evtEt,[$mh{devH},1,"desired-temp:$setTemp"];
     }
     elsif($mh{mTp} eq "70"){
@@ -1903,7 +1907,7 @@

       push @evtEt,[$mh{shash},1,"level:$lvl"] if($mh{md} eq "HM-Sen-Wa-Od");
       push @evtEt,[$mh{shash},1,"state:$lvl"];
-      push @evtEt,[$mh{devH} ,1,"battery:".($err&0x80?"low":"ok")] if ($err ne "");
+      push @evtEt,[$mh{devH} ,1,"batteryState:".($err&0x80?"low":"ok")] if ($err ne "");
     }
   }
   elsif($mh{md} eq "KFM-Sensor") { ############################################
@@ -1910,7 +1914,7 @@
     if ($mh{mTp} eq "53"){
       if($mh{p} =~ m/^(..)4(.)0200(..)(..)(..)/) {
         my ($chn,$seq, $k_v1, $k_v2, $k_v3) = (hex($1),hex($2),$3,hex($4),hex($5));
-        push @evtEt,[$mh{devH},1,"battery:".($chn & 0x80?"low":"ok")];
+        push @evtEt,[$mh{devH},1,"batteryState:".($chn & 0x80?"low":"ok")];
         my $v = 1408 - ((($k_v3 & 0x07)<<8) + $k_v2);
         push @evtEt,[$mh{shash},1,"rawValue:$v"];
         my $nextSeq = ReadingsVal($mh{devN},"Sequence","");
@@ -1952,7 +1956,7 @@
       $t = sprintf("%0.1f", $t/10);
       my $statemsg = "state:T: $t";
       push @evtEt,[$mh{shash},1,"temperature:$t"];#temp is always there
-      push @evtEt,[$mh{devH},1,"battery:".($d1 & 0x8000?"low":"ok")];
+      push @evtEt,[$mh{devH},1,"batteryState:".($d1 & 0x8000?"low":"ok")];
       if($modules{CUL_HM}{defptr}{$mh{src}.$chn}){
         my $ch = $modules{CUL_HM}{defptr}{$mh{src}.$chn};
         push @evtEt,[$ch,1,$statemsg];
@@ -1964,7 +1968,7 @@
     }
     elsif ($mh{mTp} eq "53"){
       my ($chn,@dat) = unpack 'A2(A6)*',$mh{p};
-      push @evtEt,[$mh{devH},1,"battery:".(hex($chn)&0x80?"low":"ok")];
+      push @evtEt,[$mh{devH},1,"batteryState:".(hex($chn)&0x80?"low":"ok")];
       foreach (@dat){
         my ($a,$d) = unpack 'A2A4',$_;
         $d = hex($d);
@@ -2250,10 +2254,10 @@
       elsif ($mh{md} eq "HM-SEC-SFA-SM"){
         push @evtEt,[$mh{devH},1,"powerError:"   .(($err&0x02) ? "on":"off")];
         push @evtEt,[$mh{devH},1,"sabotageError:".(($err&0x04) ? "on":"off")];
-        push @evtEt,[$mh{devH},1,"battery:".(($err&0x08)?"critical":($err&0x80?"low":"ok"))];
+        push @evtEt,[$mh{devH},1,"batteryState:".(($err&0x08)?"low":($err&0x80?"low":"ok"))];
       }
       elsif ($mh{md} =~ m/^(HM-LC-SW.-BA-PCB|HM-Dis-TD-T)/){
-        push @evtEt,[$mh{devH},1,"battery:" . (($err&0x80) ? "low" : "ok" )];
+        push @evtEt,[$mh{devH},1,"batteryState:" . (($err&0x80) ? "low" : "ok" )];
       }
     }
   }
@@ -2274,7 +2278,7 @@
         $state .= ((($mh{mFlgH} & 0x24) == 0x20) ? "Release" : "");
       }

-      push @evtEt,[$mh{devH},1,"battery:$bat"];
+      push @evtEt,[$mh{devH},1,"batteryState:$bat"];
       push @evtEt,[$mh{devH},1,"state:$btnName $state"];
       if($mh{md} eq "HM-Dis-WM55"){
         if ($mh{devH}->{cmdStack}){# there are pending commands. we only send new ones
@@ -2319,7 +2323,7 @@
         $chn = sprintf("%02X",$chn & 0x3f);
         $mh{shash} = $modules{CUL_HM}{defptr}{"$mh{src}$chn"}
                                if($modules{CUL_HM}{defptr}{"$mh{src}$chn"});
-        push @evtEt,[$mh{devH},1,"battery:". ($err?"low"  :"ok"  )];
+        push @evtEt,[$mh{devH},1,"batteryState:". ($err?"low"  :"ok"  )];
       }
       elsif(($mh{mTp} eq "10" && $mI[0] eq "06") ||
             ($mh{mTp} eq "02" && $mI[0] eq "01")) {
@@ -2328,7 +2332,7 @@
         $mh{shash} = $modules{CUL_HM}{defptr}{"$mh{src}$chn"}
                                if($modules{CUL_HM}{defptr}{"$mh{src}$chn"});
         push @evtEt,[$mh{devH},1,"alive:yes"];
-        push @evtEt,[$mh{devH},1,"battery:". (($err&0x80)?"low"  :"ok"  )];
+        push @evtEt,[$mh{devH},1,"batteryState:". (($err&0x80)?"low"  :"ok"  )];
       }

       if (defined($state) && $chn ne "00"){# if state was detected post events
@@ -2369,7 +2373,7 @@
       push @evtEt,[$mh{cHash},1,"timedOn:$timedOn"];
       push @evtEt,[$mh{devH} ,1,"powerOn:$mh{tmStr}",]  if ($chn == 0) ;
       push @evtEt,[$mh{devH} ,1,"sabotageError:".(($err&0x04)?"on" :"off")];
-      push @evtEt,[$mh{devH} ,1,"battery:"      .(($err&0x80)?"low":"ok" )];
+      push @evtEt,[$mh{devH} ,1,"batteryState:"      .(($err&0x80)?"low":"ok" )];
     }
   }
   elsif($mh{st} eq "senBright") { #############################################
@@ -2376,7 +2380,7 @@
     if ($mh{mTp} =~ m/^5[34]/){
       #Channel is fixed 1
       my ($chn,$unkn,$dat) = unpack 'A2A2A8',$mh{p};# chn = 01
-      push @evtEt,[$mh{devH},1,"battery:".(hex($chn)&0x80?"low":"ok")];
+      push @evtEt,[$mh{devH},1,"batteryState:".(hex($chn)&0x80?"low":"ok")];

       $dat = sprintf("%0.2f",hex($dat))/100; #down to 0.01lux per docu

@@ -2399,7 +2403,7 @@
       $mh{shash} = $modules{CUL_HM}{defptr}{$chId}
                              if($modules{CUL_HM}{defptr}{$chId});

-      push @evtEt,[$mh{devH},1,"battery:".(($err&0x80)?"low"  :"ok"  )];
+      push @evtEt,[$mh{devH},1,"batteryState:".(($err&0x80)?"low"  :"ok"  )];

       push @evtEt,[$mh{shash},1,"state:$val"];
     }
@@ -2406,7 +2410,7 @@
     elsif ($mh{mTp} eq "60" ||$mh{mTp} eq "61" ) {  #    IEC_POWER_EVENT_CYCLIC
       my ($chn,$eUnit,$eCnt,$pUnit,$pIEC) = map{hex($_)} unpack 'A2A2A10A2A8',$mh{p};

-      push @evtEt,[$mh{devH},1,"battery:".(($chn&0x80)?"low"  :"ok"  )];
+      push @evtEt,[$mh{devH},1,"batteryState:".(($chn&0x80)?"low"  :"ok"  )];
       $chn = sprintf("%02X",$chn&0x3f);
       my $chId = $mh{src}.$chn;
       $mh{shash} = $modules{CUL_HM}{defptr}{$chId}
@@ -2562,7 +2566,7 @@
       ($state,$err) = ($1,hex($2)) if ($mh{p} =~ m/^....(..)(..)/);
       # not sure what level are possible
       push @evtEt,[$mh{cHash},1,"state:"  .($state eq '00'?"ok":"level:".$state)];
-      push @evtEt,[$mh{devH} ,1,"battery:".(($err&0x80)?"low"  :"ok"  )];
+      push @evtEt,[$mh{devH} ,1,"batteryState:".(($err&0x80)?"low"  :"ok"  )];
       my $flag = ($err>>4) &0x7;
       push @evtEt,[$mh{cHash},1,"flags:"  .(($flag)?"none"     :$flag  )];
     }
@@ -2636,7 +2640,7 @@
         my $val = hex($mI[2])/2;
         $val = ($val == 100 ? "on" : ($val == 0 ? "off" : "$val %"));
         push @evtEt,[$mh{cHash},1,"state:$val"];
-        push @evtEt,[$mh{devH} ,1,"battery:".(hex($mI[3]&0x80)?"low":"ok" )]if ($mh{md} eq "HM-OU-CFM-TW" && $mI[3]);
+        push @evtEt,[$mh{devH} ,1,"batteryState:".(hex($mI[3]&0x80)?"low":"ok" )]if ($mh{md} eq "HM-OU-CFM-TW" && $mI[3]);
       }

     }
@@ -2656,11 +2660,11 @@
       else{
         push @evtEt,[$mh{shash},1,"cover:".        (($err&0x0E)?"open" :"closed")];
       }
-      push @evtEt,[$mh{devH},1,"battery:".   (($err&0x80)?"low"  :"ok"  )];
+      push @evtEt,[$mh{devH},1,"batteryState:".   (($err&0x80)?"low"  :"ok"  )];
     }
     elsif($mh{mTp} eq "41") {#01 is channel
       my($chn,$cnt,$bright,$nextTr) = map{hex($_)} (@mI,0);
-      push @evtEt,[$mh{devH},1,"battery:".($chn&0x80?"low":"ok")]; # observed with HM-SEN-MDIR-SM FW V1.6
+      push @evtEt,[$mh{devH},1,"batteryState:".($chn&0x80?"low":"ok")]; # observed with HM-SEN-MDIR-SM FW V1.6
       if ($nextTr){
         $nextTr = (15 << ($nextTr >> 4) - 4); # strange mapping of literals
         RemoveInternalTimer($mh{cName}.":motionCheck");
@@ -2699,7 +2703,7 @@
        # m:A0 A010 233FCE 1743BF 0601 01  00 31
       my ($state,$err) = (hex($1),hex($2));

-      push @evtEt,[$mh{devH} ,1,"battery:"     .(($err&0x80)?"low"     :"ok")];
+      push @evtEt,[$mh{devH} ,1,"batteryState:"     .(($err&0x80)?"low"     :"ok")];
       push @evtEt,[$mh{cHash},1,"level:"  .hex($state)];
       $state = (($state < 2)?"off":"smoke-Alarm");
       push @evtEt,[$mh{cHash},1,"state:$state"];
@@ -2763,7 +2767,7 @@
       $mh{shash} = $modules{CUL_HM}{defptr}{"$mh{src}$chn"}
                              if($modules{CUL_HM}{defptr}{"$mh{src}$chn"});
       push @evtEt,[$mh{devH},1,"alive:yes"];
-      push @evtEt,[$mh{devH},1,"battery:". (($err&0x80)?"low"  :"ok"  )];
+      push @evtEt,[$mh{devH},1,"batteryState:". (($err&0x80)?"low"  :"ok"  )];
       if (  $mh{md} =~ m/^(HM-SEC-SC.*|HM-SEC-RHS|Roto_ZEL-STG-RM-F.K)$/){
                                  push @evtEt,[$mh{devH},1,"sabotageError:".(($err&0x0E)?"on"   :"off")];}
       elsif($mh{md} ne "HM-SEC-WDS"){push @evtEt,[$mh{devH},1,"cover:"        .(($err&0x0E)?"open" :"closed")];}
@@ -2774,7 +2778,7 @@
       $chn = sprintf("%02X",$chn & 0x3f);
       $mh{shash} = $modules{CUL_HM}{defptr}{"$mh{src}$chn"}
                              if($modules{CUL_HM}{defptr}{"$mh{src}$chn"});
-      push @evtEt,[$mh{devH},1,"battery:". ($err?"low"  :"ok"  )];
+      push @evtEt,[$mh{devH},1,"batteryState:". ($err?"low"  :"ok"  )];
       push @ack,$mh{shash},$mh{mNo}."8002".$mh{dst}.$mh{src}."00"
         if (   $ioId eq $mh{dst}
             && !$mh{devH}{IODev}->{helper}{VTS_ACK}
@@ -2803,6 +2807,7 @@
       $lvl = hex($lvl)/2;
       my $dat4 = ($stat >> 4) & 0x03;
       if ($chn eq "01"){
+        push @evtEt,[$mh{shash},1,"state:".($lvlS ? "locked" : $lvl)      ];
         my %err = (0=>"ok",1=>"TurnError",2=>"TiltError");
         my %dir = (0=>"no",1=>"up",2=>"down",3=>"undefined");
         push @evtEt,[$mh{shash},1,"motorErr:"  .$err{($stat >> 1) & 0x03}];
@@ -2812,10 +2817,11 @@
       }
       else{ #should be akku
         my %statF = (0=>"trickleCharge",1=>"charge",2=>"discharge",3=>"unknown");
-        push @evtEt,[$mh{shash},1,"charge:"    .$statF{$dat4}];
+        push @evtEt,[$mh{shash},1,"batteryCharge:"    .$statF{$dat4}];
+        push @evtEt,[$mh{shash},1,"batteryPercent:".($lvl)];
+        push @evtEt,[$mh{shash},1,"batteryState:".($lvl>20 ? "ok" : "low")];
       }
       # stateflag meaning unknown
-      push @evtEt,[$mh{shash},1,"state:".($lvlS ? "locked" : $lvl)      ];
     }
   }
   elsif($mh{st} eq "keyMatic") {  #############################################
@@ -2843,7 +2849,7 @@
         $state = " (uncertain)";
       }
       push @evtEt,[$mh{shash},1,"unknown:40"] if($err&0x40);
-      push @evtEt,[$mh{devH} ,1,"battery:"   .(($err&0x80) ? "low":"ok")];
+      push @evtEt,[$mh{devH} ,1,"batteryState:"   .(($err&0x80) ? "low":"ok")];
       push @evtEt,[$mh{shash},1,"uncertain:" .(($err&0x30) ? "yes":"no")];
       push @evtEt,[$mh{shash},1,"direction:" .$dir{($err>>4)&3}];
       push @evtEt,[$mh{shash},1,"error:" .    ($error)];
@@ -3584,7 +3590,7 @@
     my $trgCnt = hex(substr($p,2,2));
     my $err = hex(substr($p,0,2));
     push @evtEt,[$sHash,1,"teamCall:from $dName:$trgCnt"];
-    push @evtEt,[$dHash,1,"battery:"   .(($err&0x80) ? "low":"ok")] if (!$dHash->{helper}{role}{vrt});
+    push @evtEt,[$dHash,1,"batteryState:"   .(($err&0x80) ? "low":"ok")] if (!$dHash->{helper}{role}{vrt});
     foreach (split ",",$attr{$sName}{peerIDs}){
       my $tHash = CUL_HM_id2Hash($_);
       push @evtEt,[$tHash,1,"teamCall:from $dName:$trgCnt"];
@@ -3676,7 +3682,7 @@
     push @evtEt,[$_,1,"state:$sProsa"];
     push @evtEt,[$_,1,"smoke_detect:$smokeSrc"];
   }
-  push @evtEt,[$dHash,1,"battery:"   .((hex($chn)&0x80) ? "low":"ok")] if (!$dHash->{helper}{role}{vrt});
+  push @evtEt,[$dHash,1,"batteryState:"   .((hex($chn)&0x80) ? "low":"ok")] if (!$dHash->{helper}{role}{vrt});
   push @evtEt,[$sHash,1,"eventNo:".$No];
   Log3 $sHash,5,"CUL_HM $sName sdTeam: no:$No state:$state aesNo:$aesKNo aesStr:$aesStr";

@@ -11106,7 +11112,7 @@
          </li>
       <li><B>HM-CC-TC,ROTO_ZEL-STG-RM-FWT</B><br>
           T: $t H: $h<br>
-          battery:[low|ok]<br>
+          batteryState:[low|ok]<br>
           measured-temp $t<br>
           humidity $h<br>
           actuator $vp %<br>
@@ -11138,8 +11144,8 @@
           desired-temp $setTemp<br>
           ValvePosition $vp %<br>
           mode  [auto|manual|party|boost]<br>
-          battery [low|ok]<br>
-          batteryLevel $bat V<br>
+          batteryState [low|ok]<br>
+          batteryVoltage $bat V<br>
           measured-temp $actTemp<br>
           desired-temp $setTemp<br>
           actuator $vp %<br>
@@ -11148,7 +11154,7 @@
       </li>
       <li><B>HM-CC-VD,ROTO_ZEL-STG-RM-FSA</B><br>
           $vp %<br>
-          battery:[critical|low|ok]<br>
+          batteryState:[low|ok]<br>
           motorErr:[ok|blocked|loose|adjusting range too small|opening|closing|stop]<br>
           ValvePosition:$vp %<br>
           ValveErrorPosition:$vep %<br>
@@ -11159,18 +11165,18 @@
       </li>
       <li><B>HM-CC-SCD</B><br>
           [normal|added|addedStrong]<br>
-          battery [low|ok]<br>
+          batteryState [low|ok]<br>
       </li>
       <li><B>HM-SEC-SFA-SM</B><br>
           powerError [on|off]<br>
           sabotageError [on|off]<br>
-          battery: [critical|low|ok]<br>
+          batteryState: [low|ok]<br>
       </li>
       <li><B>HM-LC-BL1-PB-FM</B><br>
           motor: [opening|closing]<br>
       </li>
       <li><B>HM-LC-SW1-BA-PCB</B><br>
-          battery: [low|ok]<br>
+          batteryState: [low|ok]<br>
       </li>
       <li><B>HM-OU-LED16</B><br>
             color $value                  # hex - for device only<br>
@@ -11228,7 +11234,7 @@
           motionCount $cnt _next:$nextTr"-"[0x0|0x1|0x2|0x3|15|30|60|120|240|0x9|0xa|0xb|0xc|0xd|0xe|0xf]<br>
           cover [closed|open]        # not for HM-Sec-MDIR<br>
           sabotageError [on|off]     # only HM-Sec-MDIR<br>
-          battery [low|ok]<br>
+          batteryState [low|ok]<br>
           devState_raw.$d1 $d2<br>
       </li>
       <li><B>remote/pushButton/outputUnit</B><br>
@@ -11248,13 +11254,13 @@
           Btn$x offLongRelease $counter (to $dest)<br>
       </li>
       <li><B>remote/pushButton</B><br>
-          battery [low|ok]<br>
+          batteryState [low|ok]<br>
           trigger [Long|Short]_$no trigger event from channel<br>
       </li>
       <li><B>swi</B><br>
             Btn$x Short<br>
             Btn$x Short (to $dest)<br>
-            battery: [low|ok]<br>
+            batteryState: [low|ok]<br>
          </li>
       <li><B>switch/dimmer/blindActuator</B><br>
           $val<br>
@@ -11274,7 +11280,7 @@
           [off|smoke-forward|smoke-alarm]     # for team members<br>
           [normal|added|addedStrong]          #HM-CC-SCD<br>
           SDteam [add|remove]_$dname<br>
-          battery [low|ok]<br>
+          batteryState [low|ok]<br>
           smoke_detect [none|&lt;src&gt;]<br>
           teamCall:from $src<br>
       </li>
@@ -11283,7 +11289,7 @@
           [wet|damp|dry]                 #HM-SEC-WDS only<br>
           cover [open|closed]            #HM-SEC-WDS and HM-Sec-RHS<br>
           alive yes<br>
-          battery [low|ok]<br>
+          batteryState [low|ok]<br>
           contact [open|tilted|closed]<br>
           contact [wet|damp|dry]         #HM-SEC-WDS only<br>
           sabotageError [on|off]         #HM-SEC-SC only<br>
@@ -11292,7 +11298,7 @@
           [locked|$value]<br>
           motorErr [ok|TurnError|TiltError]<br>
           direction [no|up|down|undefined]<br>
-          charge [trickleCharge|charge|dischange|unknown]<br>
+          batteryCharge [trickleCharge|charge|dischange|unknown]<br>
           airing [inactiv|$air]<br>
           course [tilt|close]<br>
           airing [inactiv|$value]<br>
@@ -11300,7 +11306,7 @@
       </li>
       <li><B>keyMatic</B><br>
           unknown:40<br>
-          battery [low|ok]<br>
+          batteryState [low|ok]<br>
           uncertain [yes|no]<br>
           error [unknown|motor aborted|clutch failure|none']<br>
           lock [unlocked|locked]<br>
@@ -12496,7 +12502,7 @@
       </li>
       <li><B>HM-CC-TC,ROTO_ZEL-STG-RM-FWT</B><br>
         T: $t H: $h<br>
-        battery:[low|ok]<br>
+        batteryState:[low|ok]<br>
         measured-temp $t<br>
         humidity $h<br>
         actuator $vp %<br>
@@ -12528,8 +12534,8 @@
         desired-temp $setTemp<br>
         ValvePosition $vp %<br>
         mode [auto|manual|party|boost]<br>
-        battery [low|ok]<br>
-        batteryLevel $bat V<br>
+        batteryState [low|ok]<br>
+        batteryVoltage $bat V<br>
         measured-temp $actTemp<br>
         desired-temp $setTemp<br>
         actuator $vp %<br>
@@ -12538,7 +12544,7 @@
       </li>
       <li><B>HM-CC-VD,ROTO_ZEL-STG-RM-FSA</B><br>
         $vp %<br>
-        battery:[critical|low|ok]<br>
+        batteryState:[low|ok]<br>
         motorErr:[ok|blocked|loose|adjusting range too small|opening|closing|stop]<br>
         ValvePosition:$vp %<br>
         ValveErrorPosition:$vep %<br>
@@ -12549,18 +12555,18 @@
       </li>
       <li><B>HM-CC-SCD</B><br>
         [normal|added|addedStrong]<br>
-        battery [low|ok]<br>
+        batteryState [low|ok]<br>
       </li>
       <li><B>HM-SEC-SFA-SM</B><br>
         powerError [on|off]<br>
         sabotageError [on|off]<br>
-        battery: [critical|low|ok]<br>
+        batteryState: [low|ok]<br>
       </li>
       <li><B>HM-LC-BL1-PB-FM</B><br>
         motor: [opening|closing]<br>
       </li>
       <li><B>HM-LC-SW1-BA-PCB</B><br>
-        battery: [low|ok]<br>
+        batteryState: [low|ok]<br>
       </li>
       <li><B>HM-OU-LED16</B><br>
         color $value # in Hex - nur f&uuml;r Ger&auml;t<br>
@@ -12618,7 +12624,7 @@
         motionCount $cnt _next:$nextTr"-"[0x0|0x1|0x2|0x3|15|30|60|120|240|0x9|0xa|0xb|0xc|0xd|0xe|0xf]<br>
         cover [closed|open] # nicht bei HM-Sec-MDIR<br>
         sabotageError [on|off] # nur bei HM-Sec-MDIR<br>
-        battery [low|ok]<br>
+        batteryState [low|ok]<br>
         devState_raw.$d1 $d2<br>
       </li>
       <li><B>remote/pushButton/outputUnit</B><br>
@@ -12638,13 +12644,13 @@
         Btn$x offLongRelease $counter (to $dest)<br>
       </li>
       <li><B>remote/pushButton</B><br>
-        battery [low|ok]<br>
+        batteryState [low|ok]<br>
         trigger [Long|Short]_$no trigger event from channel<br>
       </li>
       <li><B>swi</B><br>
         Btn$x Short<br>
         Btn$x Short (to $dest)<br>
-        battery: [low|ok]<br>
+        batteryState: [low|ok]<br>
       </li>
       <li><B>switch/dimmer/blindActuator</B><br>
         $val<br>
@@ -12664,7 +12670,7 @@
         [off|smoke-forward|smoke-alarm] # f&uuml;r Gruppenmitglieder<br>
         [normal|added|addedStrong] #HM-CC-SCD<br>
         SDteam [add|remove]_$dname<br>
-        battery [low|ok]<br>
+        batteryState [low|ok]<br>
         smoke_detect [none|&lt;src&gt;]<br>
         teamCall:from $src<br>
       </li>
@@ -12673,7 +12679,7 @@
         [wet|damp|dry] #nur HM-SEC-WDS<br>
         cover [open|closed] #HM-SEC-WDS und HM-Sec-RHS<br>
         alive yes<br>
-        battery [low|ok]<br>
+        batteryState [low|ok]<br>
         contact [open|tilted|closed]<br>
         contact [wet|damp|dry] #nur HM-SEC-WDS<br>
         sabotageError [on|off] #nur HM-SEC-SC<br>
@@ -12690,7 +12696,7 @@
       </li>
       <li><B>keyMatic</B><br>
         unknown:40<br>
-        battery [low|ok]<br>
+        batteryState [low|ok]<br>
         uncertain [yes|no]<br>
         error [unknown|motor aborted|clutch failure|none']<br>
         lock [unlocked|locked]<br>


Aktuell weder Smarthome noch FHEM vorhanden

martinp876

Klar.
Hilfreichen als das angehängte diff welches ich sowieso in dieser Form und Länge nicht abgleichen wäre mir  die Kurzfassung gewesen
Replace batterie batterieState
Replace...

Das ist einfach kurz und hilfreich. Jetzt müsste ich jede Zeile durchsuchen.  Das macht normal mein Editor
Danke dennoch

MadMax-FHEM

Weil Weihnachten ist ;)

Geht es so zu machen wie bei dem FlowerSense Modul von CoolTux, also beides (eine Zeit lang) parallel aber das "alte Format" als deprecated (commandref)...
...oder zumindest deutlich irgendwo (aber wo!?) ankündigen!?

Weil sonst (vermutlich) (wieder) eine Flut von "meine Batterieüberwachung geht nach dem Update nicht mehr" zu erwarten ist... ;)

Gruß und frosch Fescht, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

martinp876

Ich schalten nur einmal um. Parallel macht keinen Sinn, verschiebt nur den Frust.
Den Updat habe ich fertig, kann aber natürlich noch warten und einmal posten (was hier eigentlich schon geschehen ist)
Ich habe hiermit mehrere formale Problem
- ich sehe keine neue Definition. Diese kann ich aus dem referenzierten Threat herausfiltern - und hoffen, dass nicht noch irgendwer eine Modifikation versteckt hat. Eine Spec wäre sinnvoll und hilfreich
- Mit der vorgeschlatenen Implementierung verschwindet der Level "critical" welcher von HM geliefert wird. Mir ist nicht klar, wie gut es funktioniert hat, aber nun fällt es der Vereinheitlichung zum Opfer
- Die Änderung kann - wie Joachim angemerkt hat - nicht angekündigt werden. Ein Umschalten ist immer Hart. Doppelte Readings in der Übergangsphase sind m.E. nicht sinnvoll

Also  nicht zu weihnachten aber zu Beginn 2019 auf die Änderung vorbereiten. Spec zu den Readings bitte bei den "Kern-Entwicklern" einfordern.

frank

ZitatMit der vorgeschlatenen Implementierung verschwindet der Level "critical" welcher von HM geliefert wird. Mir ist nicht klar, wie gut es funktioniert hat, aber nun fällt es der Vereinheitlichung zum Opfer
das gefällt mir ganz und gar nicht.  >:(
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Pfriemler

#5
Prinzipiell bin ich auch für eine Vereinheitlichung. Die nötigen Änderungen sind in diesem Fall aber nicht unerheblich.
Vor allem nutzt mir ein Vorpreschen bei Homematic nichts, wenn die anderen Modulersteller nicht zeitnah mitziehen. Dann muss ich meine Definitionen nämlich doch wieder in mehreren Schüben ändern.

Zitat von: martinp876 am 24 Dezember 2018, 13:44:25
Ich schalten nur einmal um. Parallel macht keinen Sinn, verschiebt nur den Frust.

1. Was genau spricht nochmal dagegen, eine Zeitlang parallel Readings zu befüllen? Einfach die (-)-Zeilen drin lassen und nur die (+) ergänzen?
2. Wieso "critical" durch "low" ersetzt werden muss, erschließt sich mir auch noch nicht, da muss ich den zitierten Fred nochmal besser durchlesen.
Vor allem kann ich nicht einschätzen, welche Geräte eigentlich überhaupt "critical" liefern und warum. Bei mir gesehen habe ich es noch nie.
edit: sehe ich das richtig, dass das aktuell nur HM-SEC-SFA-SM (Sirenenansteuerung) und HM-CC-VD bzw. ROTO_ZEL-STG-RM-FSA (alter Heizkörperstellantrieb) betrifft?

Generell würde ich mir also wünschen:
1. parallele Readings
2. Wenn alle Module nachgezogen sind, Mitteilung an User mit Hinweis auf Änderung.
3. frühestens ein halbes Jahr später alte Readings abschalten.
Man meint nicht, wie selten manche Leute an ihre Installation gehen...

Jm2c.

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Thorsten Pferdekaemper

Hi,
ich habe das zwar nie geprüft, aber ich bin immer davon ausgegangen, dass die Readings bei HM den Namen in den Gerätebeschreibungs-XMLs entsprechen. Außerdem bin ich davon ausgegangen, dass ein Modul wie CUL_HM möglichst das abbilden sollte, was die Geräte (bzw. deren Hersteller) vorgeben, auch wenn es anders ein bisschen "schöner" wäre. Alles andere müsste eine darüber liegende Schicht machen.
Oder kurz: Ich bin gegen eine solche "Vereinheitlichung" wenn sie von den Gerätebeschreibungs-XMLs abweicht.
Gruß,
   Thorsten
FUIP

Pfriemler

Ja, schade, ist an mir völlig vorübergegangen.
Außer einer gewissen Datenredundanz als Nachteil sehe ich nach neuerlichem Studium des verlinkten Threads eigentlich überhaupt keinen Grund dagegen, die drei zusätzlichen Readings als FHEM-konforme Vereinheitlichung einzuführen, ohne die alten Readings überhaupt abzuschalten. Denn sowohl batteryState als auch batteryPercent haben in HM bisher keine Rolle gespielt, und batteryLevel kann so bleiben wie es ist, oder?

Abgesehen davon finde ich es schade, dass man sich aus Konsenzgründen bei batteryState auf "ok" und "low" beschränken will. Dafür gibt es technisch keinen Grund, denn eine solche Unterscheidung ist zumindest bei Batterien sehr wohl möglich. Und auch ein newbie interpretiert "low" als "muss mal gewechselt werden" und "critical" als "muss sofort gewechselt werden, weil Funktion gefährdet". Und wer in seinen Auswertungen partout weiterhin nur auf eq "low" triggern wollte, müsste es stattdessen auf ne "ok" tun - und gut.

Hingegen halte ich von einer Umrechnung von batteryLevel auf batteryState gar nix, weil es voraussetzt, dass der Typ der Batterie bekannt ist, denn Akkus haben ganz andere Spannungs-Restkapazitätskurven als Batterien. Aber das ist ja eh kein Thema für HM.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

zap

letzendlich liefert Homematic ja keine Texte sondern numerische Werte, die das jeweilige Modul "interpretiert". Wenn nun der neue "Standard" für ein Reading nur 2 Werte vorsieht, das Homematic Gerät jedoch >2 Zustände liefert, ist der neue "Standard" vielleicht suboptimal und man sollte ihn hinterfragen.
2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

frank

#9
ZitatAbgesehen davon finde ich es schade, dass man sich aus Konsenzgründen bei batteryState auf "ok" und "low" beschränken will. Dafür gibt es technisch keinen Grund, denn eine solche Unterscheidung ist zumindest bei Batterien sehr wohl möglich. Und auch ein newbie interpretiert "low" als "muss mal gewechselt werden" und "critical" als "muss sofort gewechselt werden, weil Funktion gefährdet". Und wer in seinen Auswertungen partout weiterhin nur auf eq "low" triggern wollte, müsste es stattdessen auf ne "ok" tun - und gut.
zudem wirkt dieser umstand auf mich auch ziehmlich "absurd".

soweit ich es richtig verfolgt habe, versucht man im "batterie-modul"-thread (initiator der batterie-vereinheitlichung) aufwendig heraus zu finden, wie kritisch eine low message wirklich ist. eigentlich eine sinnvolle idee, da es ja wirklich eine enorme bandbreite gibt.

aber als folge der vereinheitlichung sollen nun devices, die diese gesuchte info bereits explizit liefern, "kastriert" werden.

bei meinen hm-cc-vd funktioniert low/critical ziehmlich gut. bei low besorg ich ggf demnächst neue batterien und bei critical wechsel ich zeitnah, damit ich nicht im kalten sitzen muss. sollte ich eine reise geplant haben wechsel ich natürlich ausnahmsweise bei low.

ein schritt in richtung: "fhem goes mainstream"

trotzdem wünsche ich allen entspannte tage.  :)
gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Pfriemler

"critical" hat - außer in der Aufzählung - ja keine Rolle im der Diskussion gespielt ... stattdessen wurde noch über "special" geredet ...

Wenn wir das alte "battery" in HM nicht abschalten (wofür es keine Veranlassung gibt wie ich schon sagte) können frank und diverse andere User weiterhin - ohne Patch- pünktlich  Batterien wechseln ...

Auch von mir: Schöne Weihnachtstsge!
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

CoolTux

Meine Güte was für ein gewese. Was ist denn so schlimm daran den Standard für das Modul zu erweitern. Man bietet den Standard an und dokumentiert die Erweiterung (critical). Ist ja hier nichts in Stein gemeißelt. Die User müssen es halt nur wissen daß dies nur für das Modul gilt.

Also Ball flach und schick ist.

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Amenophis86

Habe die Diskussion damals angestoßen und gerade diesen Thread gefunden. Ziel ist, dass der Wildwuchs eingefangen wird und es gewisse Standards gibt, nichts mehr und nichts weniger. In erster Linie gleiche Namen für die Readings :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

vbs

Ich weiß, es ist immer leicht hinterher zu meckern, aber ich finde den Namen "batteryLevel" nicht so glücklich, wenn damit immer die Spannung gemeint ist. Das geht aus dem Namen für mich nicht hervor, da "Level" unkonkret ist. Hätte da z.B. "batteryVoltage" besser gefunden.

CoolTux

Naja meckern tust ja nicht. Aber Du kommst zu spät damit. Hättest vor einem dreiviertel Jahr an der Diskussion teilnehmen müssen  ;)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net