HM-CC-TC und HM-CC-VD

Begonnen von Oskar, 03 September 2011, 13:52:37

Vorheriges Thema - Nächstes Thema

Oskar

                                                     

Hallo Allerseits,

ich hab ja jetzt endlich auch mal einen Satz Thermostat und 2 HM-CC-VD.

Als erstes fiel mir auf, das ich den HM-CC-TC zwar mittels HM-LAN mit fhem pairen kann, aber nicht wieder unpairen.
stattdessen kommt "MISSING ACK".  naja, etwas blöd, weil man an ein gepairtes HM-CC-TC nix mehr anlernen kann (Fenster, Tür, Heizung, was man halt so braucht...) und fhem das dem auch nicht sagen kann, es soll doch bitte mit dem und dem device pairen...

Naja, dann wollte ich mal eine Temperatur-Liste übertragen und fand, das die irgendwie nicht richtig übertragen wird.  In der Kosole kam dabei folgendes hoch:
Argument "3B" isn't numeric in addition (+) at /usr/local/share/fhem/FHEM/10_CUL_HM.pm line 775.

Also flugs gefixt.  aber so richtig koscher scheint es mir nicht zu sein, da die Werte offensichtlich an Offsets in der HM-CC-TC eingetragen werden, aber nur das letze Octet übertragen wird (statt 50B nur 0B, statt 601 nur 01). Mangels Windows vor Ort ist es auch schwierig, rauszufinden.

Wie dem auch sei, ein kleines diff, wobei die Auswertung des CMD=8202 des HM-CC-VD teils falsch und dann auch noch unvollständig ist...

Index: FHEM/10_CUL_HM.pm
===================================================================
RCS file: /cvsroot/fhem/fhem/FHEM/10_CUL_HM.pm,v
retrieving revision 1.57
diff -u -r1.57 10_CUL_HM.pm
--- FHEM/10_CUL_HM.pm   26 Aug 2011 06:56:46 -0000   1.57
+++ FHEM/10_CUL_HM.pm   3 Sep 2011 10:51:56 -0000
@@ -328,6 +328,22 @@
     CUL_HM_SendCmd($shash, "++8002$id${src}00",1,0)  # Send Ack
       if($id eq $dst && $cmd ne "8002");
       
+  } elsif($model eq "HM-CC-VD") { ###################
+# CMD:8202 SRC:13F251 DST:15B50D 010100002A
+    if($cmd eq "8202" && $p =~ m/^(..)(..)(..)(..)/) { # status ACK to controlling HM-CC-TC
+      my (   $vp,     $d1) =
+         (hex($3), $4);
+      $vp = int($vp/2.56+0.5);   # valve position in %, encoding wrong ###!!!!###
+      push @event, "actuator:$vp %";
+      if($d1 eq "10") { push @event, "actuator:movement_open";
+      } elsif($d1 eq "20") { push @event, "actuator:movement_close";
+      }
+
+    }
+
+    CUL_HM_SendCmd($shash, "++8002$id${src}00",1,0)  # Send Ack
+      if($id eq $dst && $cmd ne "8002");
+
 
   } elsif($st eq "KFM100" && $model eq "KFM-Sensor") { ###################
 
@@ -743,6 +759,7 @@
                     "Tue"=>"5 9B", "Thu"=>"5 CB", "Wed"=>"6 01",
                     "Fri"=>"6 31");
     my ($list,$addr) = split(" ", $day2off{$1});
+    $addr = hex($addr);
 
     return "To few arguments"                   if(@a < 4);
     return "To many arguments, max is 24 pairs" if(@a > 50);


--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

rudolfkoenig

                                                   

> Als erstes fiel mir auf, das ich den HM-CC-TC zwar mittels HM-LAN mit fhem
> pairen kann, aber nicht wieder unpairen.

Merkwuerdig: funktioniert reset?


> und fhem das dem auch nicht sagen kann, es soll doch bitte mit dem und dem
> device pairen...

Das will ich seit ca 2 Monaten einbauen, komme ich aber irgendwie nie dazu.
Bzw. eingebaut ist es schon als "devicepair" fuer Fernbedienungen, bloss
getestet ist es nicht, und funktioniert damit wahrscheinlich auch nicht.


> Wie dem auch sei, ein kleines diff, wobei die Auswertung des CMD=8202 des
> HM-CC-VD teils falsch und dann auch noch unvollständig ist...

Habs trotzdem eingebaut, veilleicht hilft es jemandem.


Gruss,
  Rudi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Oskar

                                                     

Am 04.09.2011 um 09:05 schrieb Rudolf Koenig:

>> Als erstes fiel mir auf, das ich den HM-CC-TC zwar mittels HM-LAN mit fhem
>> pairen kann, aber nicht wieder unpairen.
>
> Merkwuerdig: funktioniert reset?

Natürlich auch nicht ;-)
Liegt das vielleicht am HM-LAN (ich dachte mir das CUL sparen bzw. für anderes nutzen zu können)?
Sollte ich vielleicht nächste Woche mal testen, da ich immer noch nicht diesen Roboter gebaut habe, der USB-Sticks einstecken kann...

>> Wie dem auch sei, ein kleines diff, wobei die Auswertung des CMD=8202 des
>> HM-CC-VD teils falsch und dann auch noch unvollständig ist...
>
> Habs trotzdem eingebaut, veilleicht hilft es jemandem.

Ich werd das im Auge behalten und bei merkbaren Fortschritten auch mal aktualisieren.

Grüße
   Oskar

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

Oskar

                                                     

Kleines Update.
Mein HM-CC-TC hat Firmware 2.0, ich hab gesehen, es gibt da wohl Unterschiede zu 1.9.
desired-temp kann man wohl auch setzen, aber laut Doku wird das irgendwie anders gesendet verpackt, und ich hab das nicht begriffen, wie ich das umsetze...
Aus dem xml:
   
     
       
     

     
       
         
           
           
         

         
           
           
           
           
         

         
       


 
   
 
 
   
 


schneekoenig:FHEM oskar$ cvs diff -u 10_CUL_HM.pm
Index: 10_CUL_HM.pm
===================================================================
RCS file: /cvsroot/fhem/fhem/FHEM/10_CUL_HM.pm,v
retrieving revision 1.58
diff -u -r1.58 10_CUL_HM.pm
--- 10_CUL_HM.pm   4 Sep 2011 07:02:38 -0000   1.58
+++ 10_CUL_HM.pm   9 Sep 2011 08:49:17 -0000
@@ -321,6 +321,13 @@
       }
     }
 
+    if($cmd eq "A001" && $p =~ m/^01080900(..)(..)/) {
+      my (   $of,     $vep) =
+         (hex($1), hex($2));
+      push @event, "ValveErrorPosition $dname: $vep %";
+      push @event, "ValveOffset $dname: $of %";
+    }
+
     if($cmd eq "A410" && $p =~ m/^0602(..)........$/) {
       push @event, "desired-temp: " .hex($1)/2;
     }
@@ -334,13 +341,21 @@
     if($cmd eq "8202" && $p =~ m/^(..)(..)(..)(..)/) { # status ACK to controlling HM-CC-TC
       my (   $vp,     $d1) =
          (hex($3), $4);
-      $vp = int($vp/2.56+0.5);   # valve position in %, encoding wrong ###!!!!###
+      $vp = int($vp)/2;   # valve position in %
       push @event, "actuator:$vp %";
            if($d1 eq "10") { push @event, "actuator:movement_open";
       } elsif($d1 eq "20") { push @event, "actuator:movement_close";
       }
     }
 
+    # CMD:A010 SRC:13F251 DST:5D24C9 0401000000000509000A070000
+    if($cmd eq "A010" && $p =~ m/^04010000000005(..)(..)(..)(..)/) { # status change report to paired central unit
+      my (    $of,     $vep) =
+    (hex($3), hex($4));
+      push @event, "valve error position:$vep %";
+      push @event, "ValveOffset $dname: $of %";
+    }
+
     CUL_HM_SendCmd($shash, "++8002$id${src}00",1,0)  # Send Ack
       if($id eq $dst && $cmd ne "8002");
   
@@ -608,6 +623,7 @@
   "HM-CC-TC"=>
         { "day-temp"   => "temp",
           "night-temp" => "temp",
+          "party-temp" => "temp",
           "tempListSat"=> "HH:MM temp ...",
           "tempListSun"=> "HH:MM temp ...",
           "tempListMon"=> "HH:MM temp ...",
@@ -747,16 +763,17 @@
     CUL_HM_pushConfig($hash, $id, $dst, $bn, 1, $l1);
     return "Set your remote in learning mode to transmit the data";
 
-  } elsif($cmd =~ m/^(day|night)-temp$/) { ###############################
+  } elsif($cmd =~ m/^(day|night|party)-temp$/) { ###############################
     my $temp = CUL_HM_convTemp($a[2]);
     return $temp if(length($temp) > 2);
     CUL_HM_pushConfig($hash, $id, $dst, 2, 5,
-                             $st eq "day-temp" ? "03$temp" : "04$temp");
+                             $st eq "day-temp" ? "03$temp" :
+              $st eq "night-temp" ? "04$temp" : "06$temp");
     return;
 
   } elsif($cmd =~ m/^tempList(...)/) { ##################################
     my %day2off = ( "Sat"=>"5 0B", "Sun"=>"5 3B", "Mon"=>"5 6B",
-                    "Tue"=>"5 9B", "Thu"=>"5 CB", "Wed"=>"6 01",
+                    "Tue"=>"5 9B", "Wed"=>"5 CB", "Thu"=>"6 01",
                     "Fri"=>"6 31");
     my ($list,$addr) = split(" ", $day2off{$1});
     $addr = hex($addr);
@@ -1130,6 +1147,11 @@
                        COUNTER  => "10,2", } },
   "A001;p02=010A" => { txt => "PAIR_SERIAL", params => {
                        SERIALNO       => '04,,$val=pack("H*",$val)', } },
+  "A010;p01=04"   => { txt => "INFO_PARAMETER_CHANGE", params => {
+                       CHANNEL => "2,2",
+                       UNKNOWN => "4,8",
+                       PARAM_LIST => "12,2",
+                       DATA => '14,,$val =~ s/(..)(..)/ $1:$2/g', } },
   "A010;p01=06"   => { txt => "INFO_ACTUATOR_STATUS", params => {
                        CHANNEL => "2,2",
                        STATUS  => '4,2',

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

rudolfkoenig

                                                   

> schneekoenig:FHEM oskar$ cvs diff -u 10_CUL_HM.pm

Hab die Aenderungen angewendet, commandref.html ergaenzt und beide Dateien
eingecheckt.

Gruss,
  Rudi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Oskar

                                                     

Wie lange dauert es, bis das im CVS sichtbar ist?
Ich frag ja nur, weil ich immer noch die "alte" version angeboten bekomme...

Grüße
   Oskar

Am 09.09.2011 um 12:06 schrieb Rudolf Koenig:

>> schneekoenig:FHEM oskar$ cvs diff -u 10_CUL_HM.pm
>
> Hab die Aenderungen angewendet, commandref.html ergaenzt und beide Dateien
> eingecheckt.
>
> Gruss,
>  Rudi
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

rudolfkoenig

                                                   

> Wie lange dauert es, bis das im CVS sichtbar ist?

Weiss nicht, bei mir sagt csv log 10_CUL_HM.pm:

revision 1.59
date: 2011-09-09 12:02:06 +0200;  author: rudolfkoenig;  state: Exp;  lines: +26 -4;  commitid: YGPR66CnPwgzUNyv;
Oskars HM-CC-TC/VD changes

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Oskar

                                                     

Tja,

Am 09.09.2011 um 17:08 schrieb Rudolf Koenig:

>> Wie lange dauert es, bis das im CVS sichtbar ist?
>
> Weiss nicht, bei mir sagt csv log 10_CUL_HM.pm:
>
> revision 1.59
> date: 2011-09-09 12:02:06 +0200;  author: rudolfkoenig;  state: Exp;  lines: +26 -4;  commitid: YGPR66CnPwgzUNyv;
> Oskars HM-CC-TC/VD changes

Alles fein.  cvs diff difft offensichtlich gerne mal gegen die ausgecheckte version.  cvs status und nachfolgendes update haben geholfen.  Und ich dachte, CVS würde ich kennen...

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

Oskar

                                                     

Am 09.09.2011 um 12:06 schrieb Rudolf Koenig:

>> schneekoenig:FHEM oskar$ cvs diff -u 10_CUL_HM.pm
>
> Hab die Aenderungen angewendet, commandref.html ergaenzt und beide Dateien
> eingecheckt.

Wöchentliches Update ;-)

es gibt doch sicherlich irgendeine elegantere Weise, das Parsing zu erledigen, für Anregungen bin ich dankbar.
Auch die Minutenberechnung könnte verbessert werden.
Zuguterletzt müßte eigentlich beim Setzen der Parameter (CONFIG_WRITE...) die Werte in READINGS eingetragen werden, aber da die Kommandos asynchron laufen, muß korrekterweise der Funkverkehr mitgeparst werden.  Das gestaltet sich wegen der Aufteilung in mehrere Sendungen (CONFIG_START, CONFIG_WRITE) schwierig, es müsste eine State-Machine her.  Gibt es die schon irgendwo im Code oder muß die neu gemacht werden?  Auch hier wäre ich für Gedanken empfänglich.  Aber womöglich bin ich ja der einzige, der dieses Teil komplett mit fhem fernbedienen will...

Grüße
   Oskar

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

rudolfkoenig

                                                   

> es gibt doch sicherlich irgendeine elegantere Weise, das Parsing zu
> erledigen, für Anregungen bin ich dankbar.

Anregung folgt, kannst Du bitte pruefen ob es auch tut?

============
    # idea: remember  all possible 24 value-pairs per day and reconstruct list everytime
    # new values are set or received.
    if($cmd eq "A410" && $p =~ m/^0402000000000(.)(..)(..)(..)(..)(..)(..)(..)(..)/) {
      # param list 5 or 6, 4 value pairs.
      my (   $plist,  $o1,     $v1,     $o2,     $v2,     $o3,     $v3,     $o4,     $v4) =
         (hex($1), hex($2), hex($3), hex($4), hex($5), hex($6), hex($7), hex($8), hex($9));

      my ($dayoff, $maxdays, $basevalue);
      my @days = ("Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri");

      if($plist == 5 || $plist == 6) {
        if($plist == 5) {
          $dayoff = 0; $maxdays = 5; $basevalue = hex("0B");

        } else {
          $dayoff = 5; $maxdays = 2; $basevalue = hex("01");

        }
        my $idx = ($o1-$basevalue);
        my $dayidx = int($idx/48);
        if($idx % 4 == 0 && $dayidx < $maxdays) {
          $idx -= 48*$dayidx;
          $idx /= 2;
          my $day = $days[$dayidx+$dayoff];
          $shash->{TEMPLIST}{$day}{$idx}{HOUR} = int($v1/6);
          $shash->{TEMPLIST}{$day}{$idx}{MINUTE} = ($v1 - int($v1/6)*6)*10;
          $shash->{TEMPLIST}{$day}{$idx}{TEMP} = $v2/2;
          $shash->{TEMPLIST}{$day}{$idx+1}{HOUR} = int($v3/6);
          $shash->{TEMPLIST}{$day}{$idx+1}{MINUTE} = ($v3 - int($v3/6)*6)*10;
          $shash->{TEMPLIST}{$day}{$idx+1}{TEMP} = $v4/2;
        }
      }

      foreach my $wd (@days) {
        my $twentyfour = 0;
        my $msgX = sprintf("tempList%s:", $wd);
        foreach(my $idx=0; $idx<24; $idx+=1) {
          if(defined ($shash->{TEMPLIST}{$wd}{$idx}{TEMP}) &&
                      $shash->{TEMPLIST}{$wd}{$idx}{TEMP} ne "") {
          if($twentyfour == 0) {
              $msgX .= sprintf(" %02d:%02d %.1f", $shash->{TEMPLIST}{$wd}{$idx}{HOUR},
                                                $shash->{TEMPLIST}{$wd}{$idx}{MINUTE},
                                                $shash->{TEMPLIST}{$wd}{$idx}{TEMP});
          } else {
            $shash->{TEMPLIST}{$wd}{$idx}{HOUR} = "";
            $shash->{TEMPLIST}{$wd}{$idx}{MINUTE} = "";
            $shash->{TEMPLIST}{$wd}{$idx}{TEMP} = "";
          }
          }
          if(defined ($shash->{TEMPLIST}{$wd}{$idx}{HOUR}) &&
                  0+$shash->{TEMPLIST}{$wd}{$idx}{HOUR} == 24) {
          $twentyfour = 1;  # next value uninteresting, only first counts.
        }
      }
      push @event, $msgX if $msgX;
    }
  }
===============

> Zuguterletzt müßte eigentlich beim Setzen der Parameter (CONFIG_WRITE...) die
> Werte in READINGS eingetragen werden, aber da die Kommandos asynchron laufen,
> muß korrekterweise der Funkverkehr mitgeparst werden.

Das stimmt, aber ich finde der Aufwand rechtfertigt nicht den Nutzen, und ich
wuerde alles direkt im Set speichern.

Gruss,
  Rudi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Oskar

                                                     

Sorry, ich mußte erst in Griffweite des Gerätes reisen ;-)

Am 17.09.2011 um 17:15 schrieb Rudolf Koenig:

>> es gibt doch sicherlich irgendeine elegantere Weise, das Parsing zu
>> erledigen, für Anregungen bin ich dankbar.
>
> Anregung folgt, kannst Du bitte pruefen ob es auch tut?
> [...]

feine Sache.

>> Zuguterletzt müßte eigentlich beim Setzen der Parameter (CONFIG_WRITE...) die
>> Werte in READINGS eingetragen werden, aber da die Kommandos asynchron laufen,
>> muß korrekterweise der Funkverkehr mitgeparst werden.
>
> Das stimmt, aber ich finde der Aufwand rechtfertigt nicht den Nutzen, und ich
> wuerde alles direkt im Set speichern.

Hab ich mal gleich mit gemacht und getestet. Gesamt-diff angehängt.

Grüße
   Oskar

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
--
fhem geht auch auf mac os x

rudolfkoenig

                                                   

> Hab ich mal gleich mit gemacht und getestet. Gesamt-diff angehängt.

Danke, eingecheckt.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com