2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2024-11-22 09:49:50 +00:00
fhem-mirror/fhem/contrib/zwave_configconvert.pl
2023-10-21 10:50:59 +00:00

79 lines
2.2 KiB
Perl

#!/usr/bin/perl
# Details in Forum #35416
if(@ARGV == 0 || ($ARGV[0] =~ m/^-/ && $ARGV[0] ne "-d")) {
print "Usage:\n".
" cd open-zwave\n".
" perl .../contrib/zwave_configconvert.pl config |\n".
" gzip > .../FHEM/lib/openzwave_deviceconfig.xml.gz\n".
"or\n".
" cd open-zwave\n".
" gzip -d < .../FHEM/lib/openzwave_deviceconfig.xml.gz |\n".
" perl .../contrib/zwave_configconvert.pl -d\n";
exit 1;
}
if($ARGV[0] eq "-d") {
while(my $l = <STDIN>) {
next if($l !~ m/<Product sourceFile="([^"]*)"/);
my $f = $1;
next if(-f "config/$f");
print("Creating: config/$f\n");
my $dir = $f;
$dir =~ s,/[^/]*$,,;
`mkdir -p config/$dir`;
open(FH, ">config/$f") || die("open config/$f: $!\n");
print FH $l;
while($l = <STDIN>) {
print FH $l;
last if($l =~ m,</Product>,);
}
close(FH);
}
exit(0);
}
print '<?xml version="1.0" encoding="utf-8"?>', "\n";
print "<ProductList>\n";
foreach my $file (`find $ARGV[0] -name \\*.xml`) {
chomp($file);
my $name = $file;
$name =~ s+.*config/++;
next if($name !~ m+/+); # Only files from subdirs
open(FH, $file) || die("$file:$!\n");
my $buffer="";
while(my $l = <FH>) {
next if($l =~ m/^<\?xml/);
chomp($l);
if($l =~ m/<Product.*/ && $l !~ m/xmlns/ && $l !~ m/sourceFile/) { #128444
$l .= <FH>;
chomp($l);
}
$l =~ s/<!--.*-->//g;
$l =~ s/^(.*)<Product.*xmlns.*/$1<Product sourceFile="$name">/;
$l =~ s/\r//g;
$l =~ s/\t/ /g;
#$l =~ s/^ *//g;
$l =~ s/ *$//g;
next if($l eq "");
if($l !~ m/>$/ || $l =~ m/^\s*<Help>\s*$/) { $buffer .= " ".$l; next; }
if($buffer && $l =~ m/>$/) { $l = "$buffer $l"; $buffer=""; }
$l =~ s/<!--.*-->//g;
# $l =~ s/<MetaData.*<\/MetaData>//g;
# $l =~ s/<MetaDataItem.*<\/MetaDataItem>//g;
# $l =~ s/<Entry.author.*<\/Entry>//g;
# $l =~ s/<ChangeLog.*<\/ChangeLog>//g;
# $l =~ s/<MetaData>//g;
# $l =~ s/<\/MetaData>//g;
# $l =~ s/<ChangeLog>//g;
# $l =~ s/<\/ChangeLog>//g;
$l =~ s/ *$//g;
print $l,"\n" if($l);
}
close(FH);
print $buffer if($buffer);
print "\n"; # One empty line between products
}
print "</ProductList>\n";