From 4be7cffeeb3df1bf8888a9f4927b9aabc5737c5a Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Fri, 11 Nov 2016 15:21:41 +0000 Subject: [PATCH] 10_ZWave.pm: add zwavealliance links/iages (Forum #60424) git-svn-id: https://svn.fhem.de/fhem/trunk@12546 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_ZWave.pm | 95 ++-- fhem/FHEM/lib/zwave_alliancelinks.csv.gz | Bin 0 -> 10037 bytes fhem/contrib/zwavealliance.images.parse | 587 +++++++++++++++++++++++ 3 files changed, 637 insertions(+), 45 deletions(-) create mode 100644 fhem/FHEM/lib/zwave_alliancelinks.csv.gz create mode 100644 fhem/contrib/zwavealliance.images.parse diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index faeb01508..8f74ce7d9 100755 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -571,8 +571,8 @@ our %zwave_deviceSpecial; my $zwave_cryptRijndael = 0; my $zwave_lastHashSent; -my %zwave_pepperLink; -my %zwave_pepperImg; +my (%zwave_link, %zwave_img); +my @helpSites = ("alliance", "pepper"); # standard definitions for regular expression # naming scheme: p_name @@ -629,24 +629,26 @@ ZWave_Initialize($) } ################ - # Read in the pepper translation table - my $fn = $attr{global}{modpath}."/FHEM/lib/zwave_pepperlinks.csv.gz"; - my $gz = gzopen($fn, "rb"); - if($gz) { - my $line; - while($gz->gzreadline($line)) { - chomp($line); - my @a = split(",",$line); - $zwave_pepperLink{$a[0]} = $a[1]; - $zwave_pepperImg{$a[0]} = $a[2]; + # Read in the pepper/alliance translation table + for my $n (@helpSites) { + my $fn = $attr{global}{modpath}."/FHEM/lib/zwave_${n}links.csv.gz"; + my $gz = gzopen($fn, "rb"); + if($gz) { + my $line; + while($gz->gzreadline($line)) { + chomp($line); + my @a = split(",",$line); + $zwave_link{$n}{lc($a[0])} = $a[1]; + $zwave_img{$n}{lc($a[0])} = $a[2]; + } + $gz->gzclose(); + } else { + Log 3, "Can't open $fn: $!"; } - $gz->gzclose(); - } else { - Log 3, "Can't open $fn: $!"; } # Create cache directory - $fn = $attr{global}{modpath}."/www/deviceimages"; + my $fn = $attr{global}{modpath}."/www/deviceimages"; if(! -d $fn) { mkdir($fn) || Log 3, "Can't create $fn"; } $fn .= "/zwave"; if(! -d $fn) { mkdir($fn) || Log 3, "Can't create $fn"; } @@ -4575,18 +4577,25 @@ sub ZWave_getPic($) { my ($model) = @_; - my $img = $zwave_pepperImg{$model}; - return "" if(!$img); - - my $fn = $attr{global}{modpath}."/www/deviceimages/zwave/$img"; - if(!-f $fn) { # Cache the picture - my $data = GetFileFromURL("http://fhem.de/deviceimages/zwave/$img"); - if($data && open(FH,">$fn")) { - print FH $data; - close(FH) + + for my $n (@helpSites) { + my $img = $zwave_img{$n}{$model}; + next if(!$img); + my $fn = $attr{global}{modpath}."/www/deviceimages/zwave/$img"; + if(!-f $fn) { # Cache the picture + my $url = $n eq "alliance" ? + "http://products.z-wavealliance.org/ProductImages/Index?productName=": + "http://fhem.de/deviceimages/zwave/"; + Log 3, "ZWave: downloading $url/$img for $model"; + my $data = GetFileFromURL("$url/$img"); + if($data && open(FH,">$fn")) { + print FH $data; + close(FH) + } } + return "$FW_ME/deviceimages/zwave/$img"; } - return "$FW_ME/deviceimages/zwave/$img"; + return ""; } sub @@ -4597,26 +4606,22 @@ ZWave_fhemwebFn($$$$) my $pl = ""; # Pepper link and image my $model = ReadingsVal($d, "modelId", ""); if($model) { - my $link = $zwave_pepperLink{$model}; - $pl .= ""; - - my $img = $zwave_pepperImg{$model}; - if($img && !$FW_ss) { - $pl .= "
"; - $pl .= ""; + for my $n (@helpSites) { + my $link = $zwave_link{$n}{$model}; + next if(!$link); + $pl .= ""; + } + + my $img = ZWave_getPic($model); + if($img && !$FW_ss) { + $pl .= "
"; + $pl .= ""; $pl .= "
"; - my $fn = $attr{global}{modpath}."/www/deviceimages/zwave/$img"; - if(!-f $fn) { # Cache the picture - my $data = GetFileFromURL("http://fhem.de/deviceimages/zwave/$img"); - if($data && open(FH,">$fn")) { - print FH $data; - close(FH) - } - } } } diff --git a/fhem/FHEM/lib/zwave_alliancelinks.csv.gz b/fhem/FHEM/lib/zwave_alliancelinks.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..a1b07033abc230affb231a400e4f4d78f99375e9 GIT binary patch literal 10037 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 IX92+f05-b)(f|Me literal 0 HcmV?d00001 diff --git a/fhem/contrib/zwavealliance.images.parse b/fhem/contrib/zwavealliance.images.parse new file mode 100644 index 000000000..b46afc31c --- /dev/null +++ b/fhem/contrib/zwavealliance.images.parse @@ -0,0 +1,587 @@ +#/usr/bin/perl + +# Creates the FHEM file from the raw data + +# Usage: zwavealliance.images.parse downloaddir +# Downloaddir is willed with the following script: +# i=1 +# while test $i -lt 2063 +# do +# echo $i +# wget -q http://products.z-wavealliance.org/products/$i +# i=`expr $i + 1` +# done + +die("Usage: zwavealliance.images.parse downloaddir\n") if(int(@ARGV) != 1); + + +my %mf; +while(my $l = ) { + chomp($l); + my @a = split(" ", $l, 2); + $a[1] =~ s/[^A-Za-z0-9]//g; + $a[1] = lc($a[1]); + die("Double entry for $l\n") if($mf{$a[1]}); + $mf{$a[1]} = $a[0]; + print "MF ADD >$a[1]<\n"; +} + +open(OF, ">zwavealliance_links.csv"); +opendir(DIRH, $ARGV[0]) || die("Cant open $ARGV[0]\n"); +my @files; +while(my $fn = readdir(DIRH)) { + push @files, $fn; +} + +for my $fn (sort { $a <=> $b } @files) { + my $path = "$ARGV[0]/$fn"; + next if (! -f $path); + print("$fn\n"); + open(FH, $path) || die("Cant open $path\n"); + my ($bn,$bn2,$mi,$pti,$pi,$pic) = ('','','','','',''); + while(my $l = ) { + chomp($l); + + if($l =~ m,
Brand Name:(.*)
,) { + $bn = $1; + $bn2 = $bn; + $bn2 =~ s/[^A-Za-z0-9]//g; + $bn2 = lc($bn2); + $mi = $mf{$bn2} if(defined($mf{$bn2})); + } + + $pti = $1 if($l =~ m,
Product Type ID: 0x(....)
,); + $pi = $1 if($l =~ m,
Product ID: 0x(....)
,); + $pic = $1 if($l =~ m,productName=(.*)'.*class=.ProductDetails,); + + } + close(FH); + if($mi eq '' && $pti eq '' && $pi eq '' && -s $path eq 4880) { + printf "DELETE empty $path\n"; + next; + } + if($mi eq '') { + printf "Missing manufId for $fn: $bn/$bn2\n"; + next; + } + if($pti eq '' || $pi eq '') { + printf "Missing parameters for $fn: $bn/$bn2/$mi/$pti/$pi\n"; + next; + } + printf OF "%s-%s-%s,%s,%s\n", $mi,$pti,$pi,$fn,$pic; +} +closedir(DIRH); +close(OF); + +__DATA__ +0000 Sigma Designs (Former Zensys) +0000 sigmadesigns +0001 ACT - Advanced Control Technologies +0002 Danfoss +0003 Wr@p +0004 Exhausto +0005 Intermatic +0006 Intel +0007 Vimar CRS +0008 Wayne Dalton +0009 Sylvania +000A Techniku +000B CasaWorks +000C HomeSeer Technologies +000C HomeSeer +000D Home Automated Living +000E Mohito Networks +000F ConvergeX Ltd. +0010 Residential Control Systems, Inc. (RCS) +0010 rcs +0011 iCOM Technology b.v. +0012 Tell It Online +0013 Internet Dom +0014 Cyberhouse +0015 Lexel +0016 PowerLynx +0017 HiTech Automation +0018 Balboa Instruments +0019 ControlThink LC +001A Cooper Wiring Devices +001A aspirerfwirelessbyeatonwiring +001B ELK Products, Inc. +001C IntelliCon +001D Leviton +001D visiarf +001E Express Controls +001E expresscontrolsllc +001F Scientia Technologies, Inc. +0020 Universal Electronics Inc. +0020 GE +0021 Zykronix +0022 A-1 Components +0023 Boca Devices +0024 Flue Sentinel +0025 Loudwater Technologies, LLC +0026 BuLogics +0027 Meedio, LLC +0028 2B Electronics +0029 Asia Heading +002A 3e Technologies +002B Atech +002C BeSafer +002D Broadband Energy Networks Inc. +002E Carrier +002F Color Kinetics Incorporated +0030 Cytech Technology Pre Ltd. +0031 Destiny Networks +0032 Digital 5, Inc. +0033 Electronic Solutions +0033 electronicsolutionsinc +0034 El-Gev Electronics LTD +0035 Embedit A/S +0036 Exceptional Innovations +0037 Foard Systems +0038 Home Director +0039 Honeywell +0039 mkelectric +003A Inlon Srl +003B Allegion +003C Lifestyle Networks +003D Marmitek BV +003E Martec Access Products +003F Motorola +0040 Novar Electrical Devices and Systems (EDS) +0041 OpenPeak Inc. +0042 Pragmatic Consulting Inc. +0043 Senmatic A/S +0044 Sequoia Technology LTD +0045 Sine Wireless +0046 Smart Products, Inc. +0047 Somfy +0048 Telsey +0049 Twisthink +004A Visualize +004B Watt Stopper +004C Woodward Labs +004D Xanboo +004E Zdata, LLC. +004F Z-Wave Technologia +0050 Homepro +0050 advancedcontroltechnologiesinc +0051 Lagotek Corporation +0052 Bit7 Inc. +0053 Viewsonic +0054 Superna +0055 Tridium +0056 Impact Technologies and Products +0057 Whirlpool +0058 Vitelec +0059 Horstmann Controls Limited +0059 Horstmann +005A American Grid, Inc. +005B Home Automation Inc. +005B HAI +005C Terra Optima B.V. (tidligere Primair Services) +005D Pulse Technologies (Aspalis) +005E ViewSonic Corporation +005F IQ-Group +0060 Everspring +0061 Impact Technologies BV +0062 LVI Produkter AB +0063 Jasco Products +0063 jascoproductscompany +0064 Reitz-Group.de +0064 reitzgmbh +0065 RS Scene Automation +0066 TrickleStar +0067 CyberTAN Technology, Inc. +0068 Good Way Technology Co., Ltd +0069 Seluxit +006A Kellendonk Elektronik +006B Tricklestar Ltd. (former Empower Controls Ltd.) +006C Ingersoll Rand (Schlage) +006C Schlage +006D Nefit +006E Manodo / KTC +006E Manodo +006F Erone +0070 Homemanageables, Inc. +0071 LS Control +0072 Interactive Electronics Systems (IES) +0073 Hawking Technologies Inc. +0073 Hawking +0074 PowerLinx +0075 NextEnergy +0076 Goggin Research +0077 INNOVUS +0078 anyCOMM Corporation +0079 Cooper Lighting +007A Merten +007B PiTech +007C Hunter Douglas +007D CoolGuard +007E Monster Cable +007F Logitech +0080 Vero Duco +0080 Duco +0081 SIEGENIA-AUBI KG +0082 Cisco Consumer Business Group +0082 ciscosystemsinc +0083 MTC Maintronic Germany +0084 FortrezZ LLC +0084 FortrezZ +0085 Fakro +0086 AEON Labs +0086 aeotec +0087 Eka Systems +0088 Airvent SAM S.p.A. +0089 Team Precision PCL +0089 teamprecisionpubliccoltd +008A BeNext +008A BeNextbv +008B Trane Corporation +008B Trane +008C Vera Control +008C veracontrolltd +008D Modstrøm +008E Raritan +008E raritancomputerinc +008F MB Turn Key Design +0090 Black & Decker +0090 kwikset +0091 Kamstrup A/S +0092 Martin Renz GmbH +0093 San Shih Electrical Enterprise Co., Ltd. +0094 Alarm.com +0095 Qees +0095 qeesaps +0096 NorthQ +0096 northqaps +0097 Wintop +0097 wintopelectric +0098 Radio Thermostat Company of America (RTC) +0098 radiothermostatcompanyofamerica +0099 GreenWave Reality Inc. +0099 GreenWave Systems +009A Home Automation Europe +009B 2gig Technologies Inc. +009C Cameo Communications Inc. +009D Coventive Technologies Inc. +009E Adventure Interactive +009F Exigent Sensors +0100 Insignia +0101 ADOX, Inc. +0102 SMK Manufacturing Inc. +0102 SMK +0103 Diehl AKO +0103 diehlcontrols +0104 Panasonic Electric Works Co., Ltd. +0105 Sumitomo +0106 Icontrol Networks +0106 iControl +0107 MegaChips +0108 D-Link +0108 dlinkcorporation +0109 Vision Security +0109 Vision +010A VDA +010B Sharp +010B sharpcorporation +010C There Corporation +010C There +010D e-Home AUTOMATION +010E Poly-control +010E polycontrolaps +010E danalock +010F Fibargroup +010F Fibaro +0110 Frostdale +0111 Airline Mechanical Co., Ltd. +0112 MITSUMI +0112 mitsumielectriccoltd +0113 Evolve +0113 evolveguestcontrols +0114 Kichler +0114 Kichler Lighting +0115 Z-Wave.Me +0116 Chromagic Technologies Corporation +0116 Chromagic +0117 Abilia +0118 TKB Home +0119 Omnima Limited +011A Wenzhou MTLC Electric Appliances Co.,Ltd. +011A enerwave +011A enerwavegreenautomation +011B Connected Object +011C TKH Group / Eminent +011C Eminent +011D Foxconn +011E Secure Wireless +011F Ingersoll Rand (was Ecolink) +0120 Zonoff +0121 Napco Security Technologies, Inc. +0121 Napco +0122 MSK - Miyakawa Seisakusho +0122 miyakawaelectricworksltd +0123 IWATSU +0124 Square Connect +0125 Motion Control Systems +0126 Alertme +0126 Iris +0127 DMP (Digital Monitoring Products) +0127 DMP +0128 Prodrive Technologies +0128 prodrivebv +0129 ASSA ABLOY +0129 yalelocksamphardware +0129 yale +012A Qolsys +012A Qolsysinc +012B Infusion Development +012C SANAV +012D Wilshine Holding Co., Ltd +012E Wuhan NWD Technology Co., Ltd. +012F Tecom Co., Ltd. +0130 Quby +0131 Zipato +0132 DynaQuip Controls +0132 DynaQuip +0133 Netgear +0134 AT&T +0135 ZyXEL +0136 Systech Corporation +0137 FollowGood Technology Company Ltd. +0137 FollowGood +0138 BRK Brands, Inc. +0138 firstalert +0139 Zhome +013A Living Style Enterprises, Ltd. +013B AstraLink +013C Philio Technology Corp +013C Philio +013D Pella +013E Holtec Electronics BV +013F Defacontrols BV +0140 Computime +0141 Innoband Technologies, Inc +0142 Rademacher Geräte-Elektronik GmbH & Co. KG +0143 myStrom +0144 Applied Micro Electronics "AME" BV +0145 Buffalo Inc. +0145 Buffalo +0146 Axesstel Inc +0147 R-import Ltd. +0148 Eurotronics +0148 eurotronictechnologygmbh +0148 stella +0149 wiDom +014A Ecolink +014A ecolinkintelligenttechnology +014B BFT S.p.A. +014C OnSite Pro +014D Enblink Co. Ltd +014D Enblink +014E Check-It Solutions Inc. +014E Check-It +014F Linear Corp +014F Linear +0150 Physical Graph Corporation +0151 Sercomm Corp +0151 Sercomm +0152 UFairy G.R. Tech +0152 ufairygr +0152 ufairygriottechcoltd +0153 Revolv Inc +0154 Popp & Co +0154 Popp +0155 Avadesign Technology Co., Ltd. +0156 Vivint +0157 EcoNet Controls +0158 GuangZhou Zeewave Information Technology Co., Ltd. +0159 Goap +0159 qubino +015A Jin Tao Bao +015B LG Electronics +015C Bosch Security Systems, Inc +015C Bosch +015D Willis Electric Co., Ltd. +015E Locstar Technology Co., Ltd +015E Locstar +015F McoHome Technology Co., Ltd +015F McoHome +0160 Essence Security +0160 essencegroup +0161 Promixis, LLC +0162 HomeScenario +0162 homescenarioinc +0163 Queenlock Ind. Co., Ltd. +0164 JSW Pacific Corporation +0165 ID-RF +0165 nodon +0166 CBCC Domotique SAS +0166 swiid +0167 SecureNet Technologies +0168 STRATTEC Security Corporation +0169 Bönig und Kallenbach oHG +016A Fantem +016B Echostar +016C Advanced Optronic Devices Co.,Ltd +016D Guangzhou Ruixiang M&E Co., Ltd +016E Nanjing Easthouse Electrical Co., Ltd. +016F Zhejiang Jiuxing Electric Co Ltd +0170 Powerhouse Dynamics +0171 WeBeHome AB +0171 WeBeHome +0172 PassivSystems Limited +0173 Leak Intelligence, LLC +0174 Kopera Development Inc. +0175 Devolo +0176 Telldus Technologies AB +0176 Telldus +0177 Domino sistemi d.o.o. +0178 Nexia Home Intelligence +0178 Nexa +0178 Nexia +0179 ConnectHome +017A Liveguard Ltd. +017B Vs-Safety AS +017C EbV +017D DRACOR Inc. +017E Telular +017F Wink Inc. +017F Wink +0180 Huapin Information Technology Co.,Ltd +0181 Holion Electronic Engineering Co., Ltd +0182 Securifi Ltd. +0182 Securifi +0183 Universe Future +0184 Dragon Tech Industrial, Ltd. +0185 Ningbo Sentek Electronics Co., Ltd +0185 Sentek +0186 Team Digital Limited +0187 LEVION Technologies Gmbh +0188 Vipa-Star +0189 Ness Corporation Pty Ltd +018A Globalchina-Tech +018B Grib +018C Dawon DNS +018D Flextronics +018E Climax Technology, Ltd. +018E Climax Technology +018F Focal Point Limited +0190 Building 36 Technologies +0190 Building 36 +0191 Swann Communications Pty Ltd +0193 Universal Devices, Inc +0193 Universal Devices +0195 M2M Solution +0196 Bellatrix Systems, Inc. +0197 RPE Ajax LLC (dbs Secur Ltd) +0198 Venstar Inc. +0198 Venstar +0199 Wireless Maingate AB +019A Sensative AB +019A Sensative +019B ThermoFloor +019B thermoflooras +019B heatit +019C Amdocs +019C Amdocs Software Systems Ltd +019D MOBILUS MOTOR Spólka z o.o. +019E iEXERGY GmbH +019F Webee Life +019F Webee +0200 Cloud Media +0201 Samsung Electronics Co., Ltd. +0201 Samsung +0202 Monoprice +0203 Newland Communication Science Technology Co., Ltd. +0204 Beijing Sino-American Boyi Software Development Co., Ltd +0205 Shanghai Longchuang Eco-energy Systems Co., Ltd +0207 Forest Group Nederland B.V +0209 UTC Fire and Security Americas Corp +020A Decoris Intelligent System Limited +020B Embedded System Design Limited +020C Dongguan Zhou Da Electronics Co.,Ltd +020D Novateqni HK Ltd +020E Domitech Products, LLC +020F Herald Datanetics Limited +0210 Light Engine Limited +0211 Shenzhen Liao Wang Tong Da Technology Ltd +0212 iRevo +0213 BMS Evler LTD +0214 Kaipule Technology Co., Ltd. +0214 shenzhenkaipuletechnologycoltd +0214 KT +0215 Shangdong Smart Life Data System Co.,Ltd +0216 RET Nanjing Intelligence System CO.,Ltd +0217 Strattec Advanced Logic,LLC +0218 iAutomade Pte Ltd +0219 Enwox Technologies s.r.o. +021A SHENZHEN AOYA INDUSTRY CO. LTD +021B ST&T Electric Corporation +021C Shenzhen iSurpass Technology Co. ,Ltd +021C iSurpass +021D Shenzhen Kaadas Intelligent Technology Co., Ltd +021E Red Bee Co. Ltd +021F Elexa Consumer Products Inc. +0221 HOSEOTELNET +0222 MCT CO., LTD +0223 DTV Research Unipessoal, Lda +0224 LifeShield, LLC +0228 DigitalZone +022A TIMEVALVE, Inc. +022A TIMEVALVE +022B GKB Security Corporation +022C Remote Solution +022D Mercury Corporation +022D Mercury +022E Samsung SDS +022F WRT Intelligent Technology CO., LTD. +0230 Alphonsus Tech +0231 ASITEQ +0232 MODACOM CO., LTD. +0233 eZEX Corporation +0235 TAEWON Lighting Co., Ltd. +0236 Bandi Comm Tech Inc. +0236 Bandi +0237 Vestel Elektronik Ticaret ve Sanayi A.S. +0238 Milanity, Inc. +0239 Stelpro +023A KUMHO ELECTRIC, INC +023B ROC-Connect, Inc. +023C SafeTech Products +023D Honest Technology Co., Ltd. +023E Shanghai Dorlink Intelligent Technologies Co.,Ltd +0240 Technicolor +0242 Winytechnology +0243 casenio AG +0244 Athom BV +0244 Athom +0245 permundo GmbH +0245 permundo +0246 CentraLite Systems, Inc +0247 EASY SAVER Co., Inc +024A BTSTAR(HK) TECHNOLOGY COMPANY LIMITED +024A BTSTAR +024B Huawei Technologies Co., Ltd. +024C Hankook Gas Kiki CO.,LTD. +024C Hank +024D Z-works Inc. +024D Z-works +024E Digital Home Systems Pty Ltd, +024F Smartly AS +024F Smartly +0250 Shenzhen Tripath Digital Audio Equipment Co.,Ltd +0251 Beijing Universal Energy Huaxia Technology Co.,Ltd +0252 North China University of Technology +0253 iungo.nl B.V. +0254 Spectrum Brands +0256 Inkel Corp. +0257 PARATECH +0258 Shenzhen Neo Electronics Co., Ltd +0258 shenzhenneoelectronics +0258 Coolcam +0259 Starkoff +025A GES +025C Hauppauge +5254 Remotec +5254 remotetechnologiesincorporated +5254 remotectechnologyltd