Nur zum "Mitlesen" und lernen ...
Ich bin gespannt auf die korrekte Umsetzung bzw. Lösung ...
Mein nicht getesteter laienhafter Vorschlag für das setList Attribut:
attr Sauger setList sauge_Raeume:noArg xiaomi {"action": {"siid": 4, "aiid": 13}}\
sauge_Zonen:noArg xiaomi {"action": {"siid": 6, "aiid": 5}}\
waehle_Zone:Esstisch { waehleZone($EVENT) }\
waehle_Raum:Wohnzimmer,Esszimmer,Küche { waehleRaum($EVENT) }\
waehle_Raeume { waehleRaum($EVENT) }\
waehle_Zonen { waehleZone($EVENT) }
Mein nicht getesteter laienhafter Vorschlag für 99_myXiaomiUtils.pm:
##############################################
# $Id: myXiaomiUtils.pm
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
sub
myXiaomiUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
########################################################################
# Raumnamen bzw. Name von mehreren Leerzeichen getrennte Räume in
# einen publish Befehl übersetzen. Übergeben wird in der setList $EVENT.
sub
waehleRaum($)
{
my ($COMD,$ROOM1,$ROOM2,$ROOM3,$ROOM4,$ROOM5) = split(/ /,@_);
my $set_topic = "xiaomi";
my $set_json = '{"set_properties": [{"siid": 6, "piid": 2, "value":"';
# Räume definieren
my %rid = (Wohnzimmer=>1, Esszimmer=>2, Kueche=>3);
# ENDE Definitionen
# Überprüfen der übergebenen Raumnamen als Leerzeichen getrennte Parameter
if ($ROOM1 eq "" || !defined($ROOM1) ) {
return undef;
}
else {
$set_json = $set_json.$rid{$ROOM1},
}
if ($ROOM2 eq "" || !defined($ROOM2) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$rid{$ROOM2};
}
if ($ROOM3 eq "" || !defined($ROOM3) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$rid{$ROOM3};
}
if ($ROOM4 eq "" || !defined($ROOM4) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$rid{$ROOM4};
}
if ($ROOM5 eq "" || !defined($ROOM5) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$rid{$ROOM5}.'"}]}';
}
# Übergabe des auszuführenden publish Befehls
return $set_topic." ".$set_json;
}
# Ende waehle Raum / Räume
########################################################################
########################################################################
# Zonenname bzw. Namen von mehreren Leerzeichen getrennte Zonen in
# einen publish Befehl übersetzen. Übergeben wird in der setList $EVENT.
sub
waehleZone($)
{
my ($COMD,$ZONE1,$ZONE2,$ZONE3,$ZONE4,$ZONE5) = split(/ /,@_);
my $set_topic = "xiaomi";
my $set_json = '{"set_properties": [{"siid": 6, "piid": 2, "value":"';
# Zonen definieren
my %zid = (Esstisch=>"-0.25,-2.4,-0.25,-0.1,2.2,-0.1,2.2,-2.4");
# ENDE Definitionen
# Überprüfen der übergebenen Zonennamen als Leerzeichen getrennte Parameter
if ($ZONE1 eq "" || !defined($ZONE1) ) {
return undef;
}
else {
$set_json = $set_json.$zid{$ZONE1},
}
if ($ZONE2 eq "" || !defined($ZONE2) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$zid{$ZONE2};
}
if ($ZONE3 eq "" || !defined($ZONE3) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$zid{$ZONE3};
}
if ($ZONE4 eq "" || !defined($ZONE4) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$zid{$ZONE4};
}
if ($ZONE5 eq "" || !defined($ZONE5) ) {
$set_json = $set_json.'"}]}';
}
else {
$set_json = $set_json.','.$zid{$ZONE5}.'"}]}';
}
return $set_topic." ".$set_json;
}
# Ende waehle Zone / Zonen
########################################################################
1;