+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 15
  1. #1
    Registriert seit
    May 2010
    Ort
    Kreis Unna (NRW)
    Beiträge
    202

    Question CuxD Schnittstelle für Fs20 Geräte anbindung an IP-Symcon

    Hallo zusammen,

    ich habe einen Artikel gelesen, dass es möglich ist FS20 Geräte nativ über die CCU zu schalten, macht das schon jemand oder könnt Ihr mir sagen ob ich diese über die CCU angeschlossenen Geräte dann auch über IP-Symcon auslese kann ?

    Das wäre ideal weil man dan die Geräte aus der ELV EM Serie zum "Smart Metering" Benutzen könnte, ebenso den Gasmelder.

    Wenn ihr was wisst lass mich daran Teilhaben.

    HomeMatic-INSIDE - Cux - Daemon (FS20-Schnittstelle)
    Geändert von theoldphilip (02.11.10 um 14:38 Uhr)

  2. #2
    Registriert seit
    May 2010
    Ort
    Kreis Unna (NRW)
    Beiträge
    202

    Habe das Add ON jetzt mal in die CCU eingebunden und Testweise ein Gerät angelegt, dieses hat die Seriennummer CUX0612147 und wird von IPS nicht gefunden, gibt es eine Chance das das angepasst wird ?

    Hätte eigendlich gedacht das das mehr Leute interessiert, ist doch ne tolle möglichkeit Komponenten einzusetzen die Homematic (noch) nicht bietet. z.b. Smart Metering
    Geändert von theoldphilip (04.11.10 um 00:22 Uhr)

  3. #3
    Registriert seit
    Jan 2008
    Beiträge
    72

    Hallo,

    habe die Hardware (CCU) vrgestern bekommen und werde das Ganze in nächster Zeit mal angehen.
    Nächster Schritt bei mir wird dann sein die Software auf der CCU zu installieren und zu sehen, wie ich die Software auf das Busware-USB-Modul kriege.
    Die Anbindung an IPS wäre dann der nächste Schritt.
    Werde berichten, falls es interessiert.

    Gruß, burg
    Geändert von steiner (04.11.10 um 09:26 Uhr)

  4. #4
    Registriert seit
    May 2010
    Ort
    Kreis Unna (NRW)
    Beiträge
    202

    Hi werde das ganze auch machen, der Stick und passende Komponenten sind Bestellt , wir können uns ja mal etwas austauschen. Das muss doch iwie hin zu bekommen sein

  5. #5
    Registriert seit
    Dec 2009
    Ort
    Norderstedt
    Beiträge
    450

    Hallo,

    also ich habe den CUL auch an der CCU laufen.
    Klappt Prima.
    Das einbinden in die CCU habe ich etwas anders gelöst.

    Ich werte die Terminal Seite des CuxDaemon aus.
    Speicher diese alle 10 Sekunden in eine Variable und trigger bei Änderung ein Script.

    Vielleicht nicht optimal aber es geht.
    Primär Werte ich die Daten des EM1010 aus.

    ACHTUNG:
    Das Script und diese Vorgehensweise kann NUR Daten lesen.

    ToDo:
    1. Variable anlegen

    2. WWWReader anlegen:
    Code:
    URL: http://CCU-IP:8700/cgicmd?m=11
    3. Textparser anlegen
    Übergeordnete Instanz ist der WWWReader
    - Regel hinzufügen
    - Text ausschneiden zwischen
    - Tag eins: hidden; '>
    - Tag zwei: </textarea>
    - Ausgang Variable: die oben angelegte unter Punkt 1

    4. PHP Script anlegen:
    PHP-Code:
    <?php
    /**
    RegVar-Script für busware.de CUL/CUN receiver
    protocol decodes translated from FHEM project
    http://www.koeniglich.de/fhem/fhem.html
    testet with IPS 2.3 and CUN FW 1.39
    Only use CuxD-Daemon 0.45 !!!!
    http://www.tdressler.net/ipsymcon
    http://www.tdressler.net/ipsymcon/cun_ips.html
    24.09.2010
    */

    $catname='EM1010CUL';
    $sensorname='EM1010 Sensor';

        
    //logging
        
    $logPfad = (IPS_GetKernelDir(). "logs\\");

        
    //echo $logPfad;
        
    $cullog=$logPfad "cul.log";
        
    $emlog=$logPfad "culem.log";
        
    $fs20log=$logPfad "culfs20.log";
        
    $fhtlog=$logPfad "culfht.log";
        
    $wslog=$logPfad "culws.log";
        
    $hmslog=$logPfad "culhms.log";

        
    $datas GetValueString(44069 /*[EM1010CUL\EM1010]*/ );
        
    // Sonderzeichen ersetzen
        
    $datas =  str_replace(" --> "," ",$datas);
        
    $datas =  str_replace(" <-- "," ",$datas);
        
    $datas =  str_replace(chr(10),"",$datas);

        
    // Empfangenen Text in GMA String einfügen Max. X Einträge
       
    $datasets explode(chr(13), $datas);
        foreach(
    $datasets as $datatag)
        {
           
    $data2 explode(" "$datatag);
            if (
    $data2[0] <> "")
            {
                
    $zeit $data2[1];
                
    $data $data2[2];
            }
        }

        
    IPS_Logmessage($catname,$data);
        
    logge($cullog,$data."\n");

        
    //split lines
        
    $rows=preg_split("/\n/",$data);
        
    $data="";

        foreach(
    $rows as $line) {
    //---------------EM1000-----------------------------------

            
    if (preg_match("/^E0.................\s*\$/",$line)) {
          
    //  E0101E2997805002F02
                
    $type=substr($line,2,1);
                
    $addr=substr($line,3,2);
                
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                                
    'Last'=>array('type'=>1,'profile'=>'~UnixTimestamp'),
                                        
    'Total'=>array('type'=>2,'profile'=>'~Electricity'),
                                        
    'Actual'=>array('type'=>2,'profile'=>'~Power'),
                                        
    'Peak'=>array('type'=>2,'profile'=>'~Power'),
                                        
    'total_cnt'=>array('type'=>1,'profile'=>''),
                                        
    'basis_cnt'=>array('type'=>1,'profile'=>''),
                                        
    'cf_power'=>array('type'=>2,'profile'=>''),
                                        
    'cf_energy'=>array('type'=>2,'profile'=>''));
                
    $varids=get_ips_vars($addr,$vartypes,$catname,$sensorname);
                if (
    is_null($varids)) {
                   
    //Error, no vars created
                   
    IPS_LogMessage($catname,'No VarIDs!');
                    return;
                }
                
    $cf1=$varids['cf_power']['val'];
                
    $cf2=$varids['cf_energy']['val'];
                
    $basis_cnt=$varids['basis_cnt']['val'];
                
    $total_cnt_last=$varids['total_cnt']['val'];
                
    $last=$varids['Last']['val'];
                
    //ips_logmessage($catname,"1:$cf1,2:$cf2,B:$basis_cnt,T:$total_cnt_last,L:$last");

                /*
                Set corretion factor
                corr1 is the correction factor for power
                corr2 is the correction factor for energy
                */
                
    $cfnew=(($cf1==0)||($cf2==0));
                if(
    $addr >= && $addr <= 4) {                // EMWZ: nRotation in 5 minutes
                        
    $cf1 = ($cf1 $cf1 150);                    //Zählerkonstanzte U/kwh
                        
    $cf2 = ($cf2 $cf2 150);
                        
    $corr1=12/$cf1;
                        
    $corr2=1/$cf2;

                  } elseif (
    $addr >= && $addr <= 8) {          // EMEM
                       
    $cf1 = ($cf1 $cf1 0.01);
                        
    $cf2 = ($cf2 $cf2 0.001);
                        
    $corr1=$cf1;
                        
    $corr2=$cf2;

                  } elseif(
    $addr >= && $addr <= 12) {          // EMGZ: 0.01
                    
    $cf1 = ($cf1 $cf1 0.01);
                    
    $cf2 = ($cf2 $cf2 0.01);
                    
    $corr1=$cf1;
                    
    $corr2=$cf2;

                } else {
                
    IPS_Logmessage($catname,"Wrong Address:$addr");
                return;
                }
                
    //store default factors
                
    if ($cfnew) {
                    
    SetValue($varids['cf_power']['id'],$cf1);
                    
    SetValue($varids['cf_energy']['id'],$cf2);
                }

    /*
            Decode Packet
            description from CUL_EM.pm
          Ettaacc111122223333
            tt:type 01=EM-1000s, 02=EM-100-EM, 03=1000GZ
            aa:address, depending on the type above 01:01-04, 02:05-08, 03:09-12
            cc:counter, will be incremented by one for each message
            1111: cumulated value
            2222: last value (Not set for type 2)
            3333: top value  (Not set for type 2)
        seqno    =  number of received datagram in sequence, runs from 2 to 255
           total_cnt=  total (cumulated) value in ticks as read from the device
           basis_cnt=  correction to total (cumulated) value in ticks to account for
                   counter wraparounds
           total    =  total (cumulated) value in device units
           current  =  current value (average over latest 5 minutes) in device units
        peak     =  maximum value in device units
    */


                
    $seqno=hexdec(substr($line,5,2));
                
    //total value
                
    $total_cnt=hexdec(substr($line,9,2).substr($line,7,2));
                
    //counter overflow, max value 65535
                
    if($total_cnt$total_cnt_last) {
                  
    $basis_cnt += 65536 /*[Kein(e)]*/;
                  
    SetValue($varids['basis_cnt']['id'],$total);
                }
                
    $total    = ($basis_cnt+$total_cnt)*$corr2;
                
    SetValue($varids['total_cnt']['id'],$total_cnt);

              
    //check time diff tp previous
               
    $now=time();
                
    $tdiff=$now-$last;

                
    // peak and current (5min) value
                
    if ($type<>2) {
                    
    $current_cnt=hexdec(substr($line,13,2).substr($line,11,2));
                    
    $peak_cnt=hexdec(substr($line,17,2).substr($line,15,2));
                    
    $current  $current_cnt*$corr1;
                    
    $peak     $peak_cnt*$corr1;
                }else{
                   
    //calculate current as counter difference
                    
    if ($total_cnt>=$total_cnt_last) {
                        
    $current_cnt=$total_cnt-$total_cnt_last;
                    }else{
                       
    //add overflow
                        
    $current_cnt=$total_cnt+65536-$total_cnt_last;
                    }
                 
    //type 2 has no peak and current entry
                    
    $current  $current_cnt*$corr1;
                    
    $peak=0;
                    
    $peak_cnt=0;
                }
                
    //store in IPS
               
    SetValue($varids['Total']['id'],$total);
               
    SetValue($varids['Actual']['id'],$current);
               
    SetValue($varids['Peak']['id'],$peak);
                
    SetValue($varids['Last']['id'],$now);
                
    //logging to IPS log
                 
    $val sprintf("SEQ: %d CNT: %d Basis: %d DIFF: %d TIME:$tdiff CUM: %0.3f  5MIN: %0.3f  PEAK: %d TOP: %0.3f",
                             
    $seqno$total_cnt$basis_cnt,$current_cnt,$total$current,$peak_cnt$peak);
                 
    $text"Type $type Addr:$addr$val";

               
    //logging
                  
    IPS_Logmessage($catname,$text);
                
    logge($emlog,"$line=>Dev $addr:".$text."\n");

        }
    //if pregmatch
    //-----------------------FS20
        
    elseif (preg_match("/^F[0-9A-F]{8,10}\s*\$/",$line)) {
             
    //F1F1E013A4F
                  
    $hcode=substr($line,1,4);
                 
    $addr=substr($line,5,2);
                 
    $cde=substr($line,7,2);
                
    $id=hex2four($hcode.$addr);
                if (
    strlen($id)==12)$id=substr($id,0,4).' '.substr($id,4,4).' '.substr($id,8,4);
                
    $catname='FS20CUL';
                
    $sensorname='FS20 ';
                
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                                        
    'Status'=>array('type'=>3,'profile'=>'')
                                );
                
    $varids=get_ips_vars($id,$vartypes,$catname,$sensorname);
                if (
    is_null($varids)) {
                   
    //Error, no vars created
                   
    IPS_LogMessage($catname,'No VarIDs!');
                    return;
                }
                 
    $fs20_codes = array(
                 
    //definitions taken from fhem 10_fs20.pm
                      
    "00" => "off",
                      
    "01" => "dim06%",
                      
    "02" => "dim12%",
                      
    "03" => "dim18%",
                      
    "04" => "dim25%",
                      
    "05" => "dim31%",
                      
    "06" => "dim37%",
                      
    "07" => "dim43%",
                      
    "08" => "dim50%",
                      
    "09" => "dim56%",
                      
    "0a" => "dim62%",
                      
    "0b" => "dim68%",
                      
    "0c" => "dim75%",
                      
    "0d" => "dim81%",
                      
    "0e" => "dim87%",
                      
    "0f" => "dim93%",
                      
    "10" => "dim100%",
                      
    "11" => "on",        // Set to previous dim value (before switching it off)
                      
    "12" => "toggle",    // between off and previous dim val
                      
    "13" => "dimup",
                      
    "14" => "dimdown",
                      
    "15" => "dimupdown",
                      
    "16" => "timer",
                      
    "17" => "sendstate",
                      
    "18" => "off-for-timer",
                      
    "19" => "on-for-timer",
                      
    "1a" => "on-old-for-timer",
                      
    "1b" => "reset",
                      
    "1c" => "ramp-on-time",      //time to reach the desired dim value on dimmers
                      
    "1d" => "ramp-off-time",     //time to reach the off state on dimmers
                      
    "1e" => "on-old-for-timer-prev"// old val for timer, then go to prev. state
                      
    "1f" => "on-100-for-timer-prev"// 100% for timer, then go to previous state
                
    );
                 
    $dur 0;
              
    $cx hexdec($cde);
              if(
    $cx 0x20) {
                
    $dur hexdec(substr($line92));
                
    $i = ($dur 0xf0) / 16;
                
    $j = ($dur 0xf);
                
    $dur pow(2,$i)*$j*0.25;
                
    $cde sprintf("%02x"$cx & ~0x20);
              }
              
    $v $fs20_codes[$cde];
              if(!
    $v$v "unknown Code $cde;
              if(
    $dur$v .= " DUR: $dur;


            
    $text"$v($cde)";
            
    SetValue($varids['Status']['id'],$v);
            
    //logging
              
    IPS_Logmessage($catname,$text);
            
    logge($fs20log,"$line=>Dev $id: ".$text."\n");

         } 
    //if pregmatch
    //------------------FHT----------------------------------
        
    elseif (preg_match("/^T[0-9A-F]{8,11}\s*\$/",$line)) {
                 
    //T0A4700BA00
                 
    $varids=null;
                  
    $dev substr($line14);
                  
    $cde substr($line52);

                     
    $catname='FHTCUL';
                
    $sensorname='FHT ';
                
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                                        
    'Low'=>array('type'=>3,'profile'=>''),
                               
    'Position'=>array('type'=>3,'profile'=>''),
                                        
    'Warnings'=>array('type'=>3,'profile'=>''),
                                        
    'Soll'=>array('type'=>2,'profile'=>'~Temperature'),
                                        
    'Temperatur'=>array('type'=>2,'profile'=>'~Temperature'),
                                        
    'Status'=>array('type'=>3,'profile'=>''));
                
    $varids=get_ips_vars($dev,$vartypes,$catname,$sensorname);
                if (
    is_null($varids)) {
                   
    //Error, no vars created
                   
    IPS_LogMessage($catname,'No VarIDs!');
                    return;
                }
                
    $FHT_codes = array(
                      
    "00" => "actuator",
                      
    "01" => "actuator1",
                      
    "02" => "actuator2",
                      
    "03" => "actuator3",
                      
    "04" => "actuator4",
                      
    "05" => "actuator5",
                      
    "06" => "actuator6",
                      
    "07" => "actuator7",
                      
    "08" => "actuator8",

                      
    "14" => "mon-from1",
                      
    "15" => "mon-to1",
                      
    "16" => "mon-from2",
                      
    "17" => "mon-to2",
                      
    "18" => "tue-from1",
                      
    "19" => "tue-to1",
                      
    "1A" => "tue-from2",
                      
    "1B" => "tue-to2",
                      
    "1C" => "wed-from1",
                      
    "1D" => "wed-to1",
                      
    "1E" => "wed-from2",
                      
    "1F" => "wed-to2",
                      
    "20" => "thu-from1",
                      
    "21" => "thu-to1",
                      
    "22" => "thu-from2",
                      
    "23" => "thu-to2",
                      
    "24" => "fri-from1",
                      
    "25" => "fri-to1",
                      
    "26" => "fri-from2",
                      
    "27" => "fri-to2",
                      
    "28" => "sat-from1",
                      
    "29" => "sat-to1",
                      
    "2A" => "sat-from2",
                      
    "2B" => "sat-to2",
                      
    "2C" => "sun-from1",
                      
    "2D" => "sun-to1",
                      
    "2E" => "sun-from2",
                      
    "2F" => "sun-to2",

                      
    "3E" => "mode",
                      
    "3F" => "holiday1",        # Not verified
                      
    "40" => "holiday2",        # Not verified
                      
    "41" => "desired-temp",
                      
    "XX" => "measured-temp",        # sum of next. two, never really sent
                      
    "42" => "measured-low",
                      
    "43" => "measured-high",
                      
    "44" => "warnings",
                      
    "45" => "manu-temp",        # No clue what it does.

                      
    "4B" => "ack",
                      
    "53" => "can-xmit",
                      
    "54" => "can-rcv",

                      
    "60" => "year",
                      
    "61" => "month",
                      
    "62" => "day",
                      
    "63" => "hour",
                      
    "64" => "minute",
                      
    "65" => "report1",
                      
    "66" => "report2",
                      
    "69" => "ack2",

                      
    "7D" => "start-xmit",
                      
    "7E" => "end-xmit",

                      
    "82" => "day-temp",
                      
    "84" => "night-temp",
                      
    "85" => "lowtemp-offset",         # Alarm-Temp.-Differenz
                      
    "8A" => "windowopen-temp",
                );


                
    // additional warnings
                
    $FHT_warnings = array(
                      
    "battery"       => 1,
                      
    "lowtemp"       => 1,
                      
    "window"        => 1,
                      
    "windowsensor"  => 1,
                );

                
    $FHT_priority = array(
                      
    "desired-temp"=> 1,
                      
    "mode"    => 2,
                      
    "report1"     => 3,
                      
    "report2"     => 3,
                      
    "holiday1"    => 4,
                      
    "holiday2"    => 5,
                      
    "day-temp"    => 6,
                      
    "night-temp"    => 7,
                );

                
    $FHT_c2m = array(=> "auto"=> "manual"=> "holiday"=> "holiday_short");

                
    $text="Dev: $dev,";
                if(
    strlen($line) > 9$val substr($line92);

                   
    # Short message
                  
    if(strlen($line) < 9)  {
                    
    $cmd="FHT Short message: $line";
                    
    $val="";
                    
    //continue;
                    
    goto fhtlog;
                  }

              if(!
    $val || $cde == "65" || $cde == "66") {
                
    // This is a confirmation message. We reformat it so that
                
    $confirm 1;
                  }

              
    $val hexdec($val);

              
    $cmd $FHT_codes[$cde];
                 if(!
    $cmd) {
                    
    $cmd"(Unknown: $cde =>$val)";
                    
    $val="";
                    
    //continue;
                    
    goto fhtlog;
                  }

                  if( 
    preg_match("/-from/",$cmd) || preg_match("/-to/",$cmd)) {
                    
    $val sprintf("%02d:%02d"$val/6, ($val%6)*10);

                  } elseif(
    $cmd == "mode") {
                    if(isset(
    $c2m[$val])) $val $c2m[$val] ;

                  } elseif(
    preg_match("/.*-temp/",$cmd)) {
                     
    $val=$val/2;
                    if (
    $cmd== "desired-temp") {
                       
    SetValue($varids['Soll']['id'],$val);
                    }
                    
    $val sprintf("%.1f"$val);
                  } elseif(
    $cmd == "lowtemp-offset") {
                    
    $val sprintf("%d.0"$val);

                  } elseif(
    preg_match("/^actuator/",$cmd)) {

                      
    $sval substr($line,7,2);
                      
    $fv sprintf("%d%%", (integer)(100*$val/255+0.5));

                   if(
    preg_match("/[AB]0/i",$sval)) { $val $fv; }   # sync in the summer
                    
    elseif(preg_match("/.0/",$sval)) { $val "syncnow"; }
                    elseif(
    preg_match("/.1/",$sval)) { $val "99%"; } # FHT set to 30.5, FHT80B=="ON"
                    
    elseif(preg_match("/.2/",$sval)) { $val "0%"; }  # FHT set to  5.5
                    
    elseif(preg_match("/.6/",$sval)) { $val "$fv"; }
                    elseif(
    preg_match("/.8/",$sval)) { $val "offset: $fv"; }
                    elseif(
    preg_match("/.A/",$sval)) { $val "lime-protection"; }
                    elseif(
    preg_match("/.C/",$sval)) { $val sprintf("synctime: %d"int($val/2)-1); }
                    elseif(
    preg_match("/.E/",$sval)) { $val "test"; }
                    elseif(
    preg_match("/.F/",$sval)) { $val "pair"; }
                    else { 
    $val "unknown_$sval$fv"; }

                    
    $pos=strpos($val,"%");
                    if (! (
    $pos===false)) {
                     
    SetValue($varids['Position']['id'],$val);
                  }


                  } elseif(
    $cmd == "measured-low") {

                    
    SetValue($varids['Low']['id'],$val);
                    
    //continue;
                    
    goto fhtlog;

                  } elseif(
    $cmd == "measured-high") {

                   
    // if(defined($varids['Low']['val'])) {
                    
    $low=$varids['Low']['val'];
                  
    $off =  0;
                  
    $val $val*256 $low;
                  
    $val /= 10;
                  
    SetValue($varids['Temperatur']['id'],$val);
                    
    $val sprintf("%.1f (Celsius)"$val+$off);
                  
    $cmd "measured-temp";


                  } elseif(
    $cmd == "warnings") {


                    
    # initialize values for additional warnings
                    # parse warnings
                    
    if($val 1) {
                      
    $nVal  "Battery low";
                      
    $nBattery "low";
                    }
                    if(
    $val 2) {
                      if(
    $nVal$nVal .= "; " ;
                      
    $nVal .= "Temperature too low";
                      
    $nLowTemp "warn";
                    }
                    if(
    $val &32) {
                      if(
    $nVal$nVal .= "; " ;
                      
    $nVal .= "Window open";
                      
    $nWindow "open";
                    }
                    if(
    $val &16) {
                      if(
    $nVal$nVal .= "; " ;
                      
    $nVal .= "Fault on window sensor";
                      
    $nSensor "fault";
                    }

                    
    # set default values or new values if they were changed
                    
    $valBattery = isset($nBattery)? $nBattery "ok";
                    
    $valLowTemp = isset($nLowTemp)? $nLowTemp "ok";
                    
    $valWindow  = isset($nWindow)? $nWindow "closed";
                    
    $valSensor  = isset($nSensor)? $nSensor "ok";
                    
    $val = isset($nVal)? $nVal "none";

                    
    # set additional warnings and trigger notify

                    
    $text.= " battery: $valBattery";
                    
    $text.= " lowtemp: $valLowTemp";
                    
    $text.= " window: $valWindow";
                    
    $text.= " windowsensor: $valSensor";
                    
    SetValue($varids['Warnings']['id'],"$val");

                  }
    //if cmd
        //finish
    fhtlog:
              if(
    substr($line,7,1) == "7") {        # Do not store FHZ acks.
                
    $cmd "FHT:$cmd";
               
    $text.="\n".$cmd;
              } else {
                
    //if($cmd == "measured-temp")
                 
    $text.= $cmd$val;
                 
    SetValue($varids['Status']['id'],"$cmd$val");
              }
          
    //logging
              
    IPS_Logmessage($catname,$text);
            
    logge($fhtlog,"$line=>Dev $dev:".$text."\n");
         }
    //if preg

    //---------------------Wetter(WS300)-----------------------------------------
         
    elseif (preg_match("/^K[0-9A-F]{6,8}\s*\$/",$line)) {
                 
    //K11245265
                 
    $tlist = array("0"=>"temp",
                   
    "1"=>"temp/hum",
                   
    "2"=>"rain",
                   
    "3"=>"wind",
                   
    "4"=>"temp/hum/press",
                   
    "5"=>"brightness",
                   
    "6"=>"pyro",
                   
    "7"=>"temp/hum");
                
    $a=str_split($line);
                
    $len=strlen($line)-1;
                 
    $firstbyte hexdec($a[1]);
                 
    $typebyte=$a[2];
                  
    $cde = ($firstbyte&7);
                  
    $type = isset($tlist[$typebyte]) ? $tlist[$typebyte] : "unknown";
                  
    $typebyte=$typebyte 7;
                 
    $varids=null;
                 
    $val="no data";


                 
    $catname='WSCUL';
                
    $sensorname='WS ';
                
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                               
    'Temperatur'=>array('type'=>2,'profile'=>'~Temperature'),
                               
    'Humidity'=>array('type'=>1,'profile'=>'~Humidity')
                                    );
                
    $varids=get_ips_vars($a[1],$vartypes,$catname,$sensorname);
                if (
    is_null($varids)) {
                   
    //Error, no vars created
                   
    IPS_LogMessage($catname,'No VarIDs!');
                    return;
                }
            if ((
    $firstbyte&7)==7) {
              if(
    $typebyte == && $len 6) {           # temp
                      
    $sgn = ($firstbyte&8) ? -1;
                      
    $tmp $sgn * ($a[6].$a[3].".".$a[4]);
                      
    $val "T: $tmp";
                      
    $hum=0;
                      
    SetValue($varids['Temperatur']['id'],$tmp);
                        
    SetValue($varids['Humidity']['id'],$hum);

                }

                if(
    $typebyte == && $len 8) {           # temp/hum
                  
    $sgn = ($firstbyte&8) ? -1;
                  
    $tmp $sgn * ($a[6].$a[3].".".$a[4]);
                  
    //$hum = ($a[7].$a[8].".".$a[5]) ;
                  
    $hum = ($a[7].$a[8]) ;
                  
    $val "T: $tmp  H: $hum";
                  
    $devtype "PS50";
                  
    $family "WS300";
                  
    SetValue($varids['Temperatur']['id'],$tmp);
                    
    SetValue($varids['Humidity']['id'],$hum);
                }

              }else{
                if (
    $len == ) {                 #  S300TH
                      
    $sgn = ($firstbyte&8) ? -1;
                      
    $tmp $sgn * ($a[6].$a[3].".".$a[4]);
                      
    //$hum = ($a[7].$a[8].".".$a[5]);
                   
    $hum = ($a[7].$a[8]) ;
                        
    $val "T: $tmp  H: $hum";
                      
    $devtype "S300TH";
                      
    SetValue($varids['Temperatur']['id'],$tmp);
                        
    SetValue($varids['Humidity']['id'],$hum);

                } elseif(
    $len == 15) {          # KS300/2

                  
    $c =  255;
                  
    $rain sprintf("%0.1f"hexdec("$a[14]$a[11]$a[12]") * $c 1000);
                  
    $wnd  sprintf("%0.1f""$a[9]$a[10].$a[7]);
                  
    $hum  sprintf"%02d""$a[8]$a[5]");
                  
    $tmp  sprintf("%0.1f", ("$a[6]$a[3].$a[4]"),
                                 ((
    $a[1] & 0xC) ? -1));
                  
    $ir = ((hexdec($a[1]) & 2)) ? "yes" "no";
                    
    SetValue($varids['Temperatur']['id'],$tmp);
                        
    SetValue($varids['Humidity']['id'],$hum);
                  
    $val "T: $tmp  H: $hum  W: $wnd  R: $rain  IR: $ir";
              }
          }
                
    $text="Dev $cde ($type): $val";
                
    IPS_Logmessage($catname,$text);
                
    logge($wslog,"$line (Len:$len)=>".$text."\n");
            }
    //if preg
    //--------------------HMS-------------------------------------------------------
            
    elseif (preg_match("/^H[0-9A-F]{12}\s*\$/",$line)) {
                 
    //H37AE01240000
             
    $codes = array(
                      
    => "HMS100TF",
                      
    => "HMS100T",
                      
    => "HMS100WD",
                      
    => "RM100-2",
                      
    => "HMS100TFK"# Depending on the onboard jumper it is 4 or 5
                      
    => "HMS100TFK",
                      
    => "HMS100MG",
                      
    => "HMS100CO",
                      
    14 => "HMS100FIT"
                
    );

                
    $type hexdec(substr($line,6,1));
                
    $stat $type hexdec(substr($line,7,2)) : hexdec(substr($line,5,2));
                
    $prf  $type "02" "05";
                
    $bat  $type hexdec(substr($line,5,1))+1;
                
    $dev substr($line,1,4);
                
    $val $type ?  "000000" substr($line,7);
                 
    $catname='HMSCUL';
                 
    $sensorname='HMS ';
                
    //if (!isset($sensorname)) $sensorname='HMS ';
                
    switch ($type) {
                   case 
    0://TF
                            
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                                     
    'Type'=>array('type'=>3,'profile'=>''),
                               
    'Temperatur'=>array('type'=>2,'profile'=>'~Temperature'),
                               
    'Humidity'=>array('type'=>1,'profile'=>'~Humidity'),
                               
    'Battery'=>array('type'=>0,'profile'=>'~Battery.Reversed')
                                    );
                                    break;
                   case 
    1://T
                            
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                                     
    'Type'=>array('type'=>3,'profile'=>''),
                               
    'Temperatur'=>array('type'=>2,'profile'=>'~Temperature'),
                               
    'Battery'=>array('type'=>0,'profile'=>'~Battery.Reversed')
                                    );
                                    break;
                   case 
    4://TFK Switch1
                   
    case 5://TFK Switch2
                         
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                                        
    'Type'=>array('type'=>3,'profile'=>''),
                                     
    'Kontakt'=>array('type'=>0,'profile'=>'~Switch'),
                                     
    'Battery'=>array('type'=>0,'profile'=>'~Battery.Reversed')
                                    );
                                    break;

                   case 
    2://WD
                   
    case 3://RM100
                     
    case 6://Gas MG
                   
    case 8://Gas CO
                   
    case 14://FIT
                         
    $vartypes=array(  'ID'=>array('type'=>3,'profile'=>''),
                                        
    'Type'=>array('type'=>3,'profile'=>''),
                                     
    'Alarm'=>array('type'=>0,'profile'=>'~Alert'),
                                     
    'Battery'=>array('type'=>0,'profile'=>'~Battery.Reversed')
                                    );
                                    break;

                   default:
    //type not known
                             
    IPS_LogMessage($catname,"Unknown type: $type");
                                    continue 
    2;
                }
                
    $varids=null;
                
    $varids=get_ips_vars($dev,$vartypes,$catname,$sensorname);
                if (
    is_null($varids)) {
                   
    //Error, no vars created
                   
    IPS_LogMessage($catname,'No VarIDs!');
                    continue;
                }

                
    SetValue($varids['Battery']['id'],($bat==1));
                if (! (
    $varids['Type']['val']) == $codes[$type]) {
                    
    SetValue($varids['Type']['id'],$codes[$type]);
                }
                switch(
    $type) {
                   case 
    0//TF
                   # Codierung <t1><t0><f0><t2><f2><f1>
                            
    $hum=(Integer)(substr($val42).substr($val21))/10;
                                
    SetValue($varids['Humidity']['id'],$hum);
                    case 
    1://T
                          
    $tmp=(substr($val31).substr($val02))/10;
                          if ((
    $stat 128)>0$tmp=-$tmp;
                            
    SetValue($varids['Temperatur']['id'],$tmp);
                            break;
                    case 
    2:
                    case 
    3:
                    case 
    6:
                    case 
    8:
                    case 
    14SetValue($varids['Alarm']['id'],($stat>0));
                                 break;
                    case 
    4:
                    case 
    5SetValue($varids['Kontakt']['id'],($stat>0));
                                 break;
                    default:
                       
    IPS_LogMessage($catname,"Type $type for Dev $HA not known");
                       break;
                }
             
    $text="Dev $dev ($type:".$codes[$type]."): Stat:$stat, Bat: $bat Val: $val";
                
    IPS_Logmessage($catname,$text);
                
    logge($hmslog,"$line =>".$text."\n");

            }
    //if preg
        
    }//foreach
    //}//if  sender

    //-------------------------------------------------------------------------------

    /**
    * IPS Variablen handler
    * creates variables as needed
    * returns assoc. Array with IPS Variable ID and Value
    * @param integer Sensor Address
    * @param array Array with Variable Names, Types and Profiles
    * @param string Sensor Group Master Categorie Name
    * @param string Sensor default name, will be extended with $addr
    */
    function get_ips_vars($addr,$vartypes,$cat,$sens) {

         
    $varids=null;

         
    $master=@IPS_GetObjectIDByName($cat,0);
        
    //no master cat, create new
         
    if (!$master) {
           
    $master=IPS_CreateCategory();
           
    IPS_SetName($master,$cat);
           
    IPS_SetParent($master,0);
            if (
    $master>0) {
               
    IPS_LogMessage('CUL'"Master category created, ID=$master\n");
           }else{
                
    IPS_LogMessage('CUL'"Can't create Master Category\n");
                return 
    null;
            }
         }

      
    $id=0;
      if (
    $master>0) {
      
    //get chilren sensors
       
    $Sensors=IPS_GetChildrenIDs($master);
       foreach(
    $Sensors as $sid) {
           
    $name=IPS_GetName($sid);
    //      print "$sid:".$name."\n";
            //get vars for each sensor
            
    $vars=IPS_GetChildrenIDs($sid);
          foreach(
    $vars as $vid) {
             
    $vname=IPS_GetName($vid);
             
    //if ID, here is the address
             
    if ($vname="ID") {
                 
    $i=GetValue($vid);
                 
    //go out if matches, $id returns the sensor categorie id
                 
    if ($i===$addr) {
                    
    $id=$sid;
                    break;
                 }
             }
          }
          if (
    $id>0) break;
       }
        if (
    $id==0) {
            
    //Sensor with address $addr not found in IPS, create new sensor
           
    $id=ips_createCategory();
           
    ips_setName($id,$sens.' '.$addr);
           
    ips_setParent($id,$master);
            
    //creates all needed variables for the new sensor
            
    foreach (array_keys($vartypes) as $name) {
              
    $typ=$vartypes[$name]['type'];
             
    $profile=$vartypes[$name]['profile'];
                
    $vid=IPS_CreateVariable($typ);
                
    ips_setname($vid,$name);
                
    ips_setParent($vid,$id);
             
    IPS_SetVariableCustomProfile($vid,$profile);
                
    //preload variables
                
    SetValue($vid,0);
             
    $varids[$name]['id']=$vid;
             
    $varids[$name]['val']=0;
             
    //Store address in $ID for next time
             
    if ($name=='ID') {
                 
    SetValue($vid,$addr);
                 
    $varids[$name]['val']=$addr;
                }
            }
        }else{
           
    //found matching cat, collect ids and vals for this sensor
           
    $vars=IPS_GetChildrenIDs($id);
          foreach(
    $vars as $vid) {
             
    $name=IPS_GetName($vid);
             
    $val=GetValue($vid);
             
    $varids[$name]['id']=$vid;
             
    $varids[$name]['val']=$val;
          }

        }
        
    //returns IDs and Values of this Sensor, Name is Key
        
    return $varids;
        }
    }
    //#############################
    //
    /**
    * converting CUL Hex IDs into ELV-4-Ids
    * translated from 10_fs20
    * @param string $v Hex-Value
    * @returns string ELV-ID
    */
    function hex2four($v){
      
    $r "";
      foreach  (
    str_split($v) as $x) {
        
    $r .= sprintf("%d%d", (hexdec($x)/4)+1, (hexdec($x)%4)+1);
      }
      return 
    $r;
    }

    //#############################
    /**
    * converting ELV IDs into CUL Hex-Ids
    * translated from 10_fs20
    * @param string $v ELV ID
    * @returns string Hex- Value
    */

    function four2hex($v,$len){

      
    $r 0;
      foreach  (
    str_split($v) as $x) {
        
    $r $r*4+($x-1);
      }
      return 
    sprintf("%0*x"$len,$r);
    }
    /**
    * do simple logging
    * @param string $logfile Filename for logfile
    * @param string $text
    * @returns void
    */

    function logge($logfile,$text) {
        if (
    strlen($logfile)>0) {
            
    $log=fopen($logfile,"a+");
            if (
    $log) {
               
    $d=date("r");
                
    fwrite($log,"$d $text");
                 
    fflush($log);
                
    fclose($log);
            }
        }
    }

    ?>
    5. Ereignis unter dem Sript anlegen
    Dieses soll das Script aufrufen bei Änderung der oben angelegten Variable unter Punkt 1


    Alles weitere macht das Script.

    Gruß
    MCS-51
    Danke an tommi für das Ursprungsscript.
    http://www.ip-symcon.de/forum/f52/cu...-system-11380/
    IPS 5.0 Windows unlimited
    HW: Synology NAS Docker und Win, CCU2 >100 HM-Geräte, 1-Wire, DRS-155M, Alarmanlage seriell an IPS, IPSLibrary. SW: Server 2012 R2;
    Funktionen: Energie-, Heizungs-, Beleuchtungs-, Alarmanlagen- Steuerung, Android-App, IPSWecker. u.v.m.

  6. #6
    Registriert seit
    Jan 2010
    Ort
    Kiel
    Beiträge
    408

    Hab die Hardware nun auch schon seit 4 Wochen hier liegen, aber leider immer noch keine Zeit gefunden alles einzubinden oder mich weiter damit zu beschäftigen.

    Aber ich ein nützliches PDF könnte ich schon mal anbieten. Vielleicht hilft es ja schon mal dem ein oder anderen.

    Viel Spaß beim rumprobieren, werde bestimmt noch auf eure Erfahrungen zurückgreifen

    http://www.homematic-inside.de/downl...D-Handbuch.pdf

  7. #7
    Registriert seit
    May 2010
    Ort
    Kreis Unna (NRW)
    Beiträge
    202

    Hallo MCS-51,

    danke für disen Ansatz ich habe mir grade den FS20-Mini-Lichtsensor und werde versuche den aktuellen zustand einer LED mithilfe deines Scripts einzubinden. evtl. würde ich nochmal auf dich zu kommen wenn es nicht so klappt

    Gruß Philip

  8. #8
    Registriert seit
    Jan 2010
    Ort
    Kiel
    Beiträge
    408

    Hallo,
    habe nun endlich mal die Zeit gefunden mich mit meinem CUx von Busware zu beschäftigen.
    Eigentlich wollte ich heute schon mal ein wenig damit rumspielen aber es hat mich mal wieder ganz am Anfang ausgebremst.
    Hatte folgende Anleitung gefunden:
    -CUL anstecken Windows erkennt unbekanntes Device
    -Trieber CUL.inf installieren
    -es erscheint ein USB-Device "ATmega32U4"
    -jetzt Flip starten und dieses Device auswählen, nicht das im README-
    File angegebene "AT90USB162"
    -Firmware flashen
    -im Device-Manager erscheint neues Device "USB686" mit gelbem
    Fragezeichen und die Meldung "Neue Hardware gefunden"
    -jetzt zum Installieren der neuen Hardware den Treiber
    "MyUSB_USBtoSerial.inf" auswählen
    -danach wird im Device Manager das neue Device "USB Virtual Serial
    Port (COMx)" angezeigt
    Mein Problem liegt schon darin das ich die CUL.inf gar nicht installiert bekomme. Öffne ich die Datei bekomme ich Einträge für verschiedene Windowssysteme angezeigt. Kann es sein das dieser Weg unter Win7 64 nicht funktioniert?

  9. #9
    Registriert seit
    Dec 2006
    Ort
    Friedberg (Hessen)
    Beiträge
    1,765

    Ich nutze seit einiger Zeit ohne Probleme das CUN von Busware über mein Netzwerk mit tommis Modulen.
    tommi hat dazu einiges für uns geleistet. Das System läuft für mich hervorragend. Die Geräte installieren sich selbst. Am Anfang hatte ich ein paar Starschwierigkeiten, da das CUN unprogrammiert kam. Aber dank tommis Hilfe gings dann schnell.

    Homematic nutze ich nicht und brauche es auch (vorerst) nicht. Warum das CUN über Homematic laufen lassen, wenns mit IPS problemlos direkt geht.
    Ich hatte das CUN eigentlich nur aus dem Grund, dass mein EM1000 Strom- und Gaszähler mit der EM1000PC-Zentrale
    am USB eine Krücke war.

    Nachtrag: Mein IPS läuft allerdings noch mit XP. Zu Windows 7 kann ich (noch) keine Angaben machen.
    Viele Grüße Rainer
    Windows 10,IPS V 5.3 + Testsysteme -- FHZ -- PiVCCU3 -- Phillips Hue --1-Wire, Anwesendheits-Tracker, ESP-Easy und viele, viele Spielereien , I-View, Rasperry 3, Zero, Tinkerboard, Nello, Nuki

  10. #10
    Registriert seit
    Jan 2010
    Ort
    Kiel
    Beiträge
    408

    Ips ist bei mir noch ne Versuchslandschaft und für die wenigen Funktionen die ich bis jetzt installiert habe lohnt es sich noch nicht ein Server 24h laufen zu haben, dennoch möchte ich die Vorteile von HomeMatik und FS20 nutzen.. :-)

    Hab das Problem mit dem ATmega32U4 unter Win7 inzwischen mit einem 64Bit Treiber lösen können.

    CUL ist beschrieben, morgen geht's weiter..

Ähnliche Themen

  1. FS20 Neuigkeiten: IR-Programmer
    Von bladerunner im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 9
    Letzter Beitrag: 21.09.10, 11:41
  2. Antworten: 30
    Letzter Beitrag: 29.06.10, 23:42
  3. FS20 und Elektroinstallation
    Von Thorsten im Forum Allgemeine Diskussion
    Antworten: 4
    Letzter Beitrag: 09.09.05, 15:35

Stichworte