2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 16:05:19 +00:00

MYSENSORS_DEVICE: support better RSSI output for RFM nodes, #129990

git-svn-id: https://svn.fhem.de/fhem/trunk@26669 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Beta-User 2022-11-06 20:15:51 +00:00
parent 4dc3252c70
commit 2adf6426ec
2 changed files with 24 additions and 27 deletions

View File

@ -1054,44 +1054,41 @@ sub onInternalMessage {
if ($type == I_SIGNAL_REPORT_RESPONSE) { if ($type == I_SIGNAL_REPORT_RESPONSE) {
return if $msg->{ack}; return if $msg->{ack};
my %rnames = ( 1 => 'R_RSSI_to_Parent',2 => 'R_RSSI_from_Parent',3 => 'R_SNR_to_Parent',4 => 'R_SNR_from_Parent',5 => 'R_TX_Powerlevel_Pct',6 => 'R_TX_Powerlevel_dBm',7 => 'R_Uplink_Quality');
if ($msg->{payload} != -256) { if ($msg->{payload} != -256) {
my $subSet = $hash->{I_RSSI}; my $subSet = $hash->{I_RSSI};
my %rnames = ( "1" => "R_RSSI_to_Parent","2" => "R_RSSI_from_Parent","3" => "R_SNR_to_Parent","4" => "R_SNR_from_Parent","5" => "R_TX_Powerlevel_Pct","6" => "R_TX_Powerlevel_dBm","7" => "R_Uplink_Quality");
my %payloads = ( "1" => "R!","2" => "S","3" => "S!","4" => "P","5" => "T","6" => "U");
readingsSingleUpdate($hash, $rnames{$subSet}, $msg->{payload}, 1); readingsSingleUpdate($hash, $rnames{$subSet}, $msg->{payload}, 1);
if ($subSet < 7) { if ($subSet < 7) {
$hash->{I_RSSI}++; $hash->{I_RSSI}++;
my %payloads = ( 1 => 'R!',2 => 'S',3 => 'S!',4 => 'P',5 => 'T',6 => 'U');
sendClientMessage($hash, sendClientMessage($hash,
cmd => C_INTERNAL, cmd => C_INTERNAL,
ack => 0, ack => 0,
subType => I_SIGNAL_REPORT_REQUEST, subType => I_SIGNAL_REPORT_REQUEST,
payload => $payloads{$subSet} payload => $payloads{$subSet}
); );
} else { return;
delete $hash->{I_RSSI};
if( $hash->{asyncGet} && $hash->{asyncGet}{reading} eq "RSSI" ) {
RemoveInternalTimer($hash->{asyncGet});
my $uq = $msg->{payload};
my $topar = ReadingsVal($hash->{NAME},'R_RSSI_to_Parent','unknown');
my $frompar = ReadingsVal($hash->{NAME},'R_RSSI_from_Parent','unknown');
my $snr2par = ReadingsVal($hash->{NAME},'R_SNR_to_Parent','unknown');
my $snrfpar = ReadingsVal($hash->{NAME},'R_RSSI_from_Parent','unknown');
my $powpct = ReadingsVal($hash->{NAME},'R_TX_Powerlevel_Pct','unknown');
my $powdbm = ReadingsVal($hash->{NAME},'R_TX_Powerlevel_dBm','unknown');
asyncOutput($hash->{asyncGet}{CL}, "RSSI info:\n----------------------------\nto parent: $topar\nfrom parent: $frompar\nSNR to parent: $snr2par\nSNR from parent: $snrfpar\nPower level %: $powpct\nPower level dBm: powdbm\nUplink Quality: $uq");
delete($hash->{asyncGet});
}
} }
return; }
} elsif( $hash->{asyncGet} && $hash->{asyncGet}{reading} eq "RSSI" ) { if( $hash->{asyncGet} && $hash->{asyncGet}{reading} eq 'RSSI' ) {
RemoveInternalTimer($hash->{asyncGet}); RemoveInternalTimer($hash->{asyncGet});
asyncOutput($hash->{asyncGet}{CL}, "Your transport type seems to be RS485, so asking for RSSI values is not possible"); if ($msg->{payload} == -256 && (!$hash->{I_RSSI} || $hash->{I_RSSI} == 1)) {
asyncOutput($hash->{asyncGet}{CL}, 'Your transport type seems not to support asking RSSI values');
} else {
RemoveInternalTimer($hash->{asyncGet});
my $txt = 'RSSI info:\n----------------------------\n';
my %txts = ( 1 => 'to parent: ',2 => '\nfrom parent:',3 => '\nSNR to parent: ',4 => '\nSNR from parent:',5 => '\nPower level %: ',6 => '\nPower level dBm:',7 => '\nUplink Quality:');
for my $i (1..$hash->{I_RSSI}) {
my $rv = ReadingsVal($hash->{NAME},$rnames{$i},'unknown');
next if $rv eq 'unknown';
$txt .= "$txts{$i} $rv";
}
asyncOutput($hash->{asyncGet}{CL}, $txt);
}
delete($hash->{asyncGet}); delete($hash->{asyncGet});
delete $hash->{I_RSSI};
} }
} }
return; return;
} }

View File

@ -372,14 +372,14 @@ setreading DEVICE attrTemplateVersion 20220913
name:zigbee2mqtt_light_rgbcct_rgb name:zigbee2mqtt_light_rgbcct_rgb
filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.* filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.*
order:L_02e1 order:L_02e1
desc: A dimmable rgbw light connected via zigbee2mqtt<br>rgb value is encoded as HEX value<br>remove color_temp in setlist command <b>on</b> if default white is not desired<br>Tested with:<br><a href="https://www.zigbee2mqtt.io/devices/HG08008.html" target="_blank">Livarno Home LED ceiling light</a><br><a href="https://www.zigbee2mqtt.io/devices/404000_404005_404012_404019.html#m%25C3%25BCller%2520licht-404000%252F404005%252F404012%252F404019" target="_blank">Mueller Light tint RGBW bulb</a> desc: <a href="https://forum.fhem.de/index.php/topic,97303.msg905935.html#msg905935" target="_blank">Forum Thread</a><br>A dimmable rgbw light connected via zigbee2mqtt<br>rgb value is encoded as HEX value<br>remove color_temp in setlist command <b>on</b> if default white is not desired<br>Tested with:<br><a href="https://www.zigbee2mqtt.io/devices/HG08008.html" target="_blank">Livarno Home LED ceiling light</a><br><a href="https://www.zigbee2mqtt.io/devices/404000_404005_404012_404019.html#m%25C3%25BCller%2520licht-404000%252F404005%252F404012%252F404019" target="_blank">Mueller Light tint RGBW bulb</a>
farewell:specified values can be adjusted at any time in the setList attribute farewell:specified values can be adjusted at any time in the setList attribute
par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[\b]?([^/:]+)[/].+, ? $1 : undef } par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[\b]?([^/:]+)[/].+, ? $1 : undef }
par:DEV_ID;name of the device in the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[^/]+[/]([^/:]+).*, ? $1 : undef } par:DEV_ID;name of the device in the zigbee2mqtt bridge;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m,[^/]+[/]([^/:]+).*, ? $1 : undef }
par:BRIGHTNESS;default brightness in <b>on</b>-command (numeric, 0-255, e.g. 120);undef par:BRIGHTNESS;default brightness in <b>on</b>-command (numeric, 0-255, e.g. 120);undef
par:CTVALUE;default color temp (ct) value in <b>on</b>-command (numeric, 0-370, e.g. 320);undef par:CTVALUE;ct (color temp) value in <b>on</b>-command (numeric, 0-370, e.g. 320);undef
par:CTWARMVALUE;default ct value in <b>warm</b>-command (e.g. 320);undef par:CTWARMVALUE;ct value in <b>warm</b>-command (e.g. 320);undef
par:CTWHITEVALUE;default ct value in <b>white</b>-command (e.g. 250);undef par:CTWHITEVALUE;ct value in <b>white</b>-command (e.g. 250);undef
par:ICON;ICON as set, defaults to hue_filled_white_and_color_e27_b22;{ AttrVal('DEVICE','icon','hue_filled_white_and_color_e27_b22') } par:ICON;ICON as set, defaults to hue_filled_white_and_color_e27_b22;{ AttrVal('DEVICE','icon','hue_filled_white_and_color_e27_b22') }
attr DEVICE icon ICON attr DEVICE icon ICON
attr DEVICE devStateIcon {zigbee2mqtt_devStateIcon255($name)} attr DEVICE devStateIcon {zigbee2mqtt_devStateIcon255($name)}
@ -399,7 +399,7 @@ attr DEVICE userReadings rgb:color_y.* {Color::xyY2hex(ReadingsVal($name,'color_
attr DEVICE comment The specified ct and brightness values in on and warm etc. commands can be adjusted at any time via the setList attribute attr DEVICE comment The specified ct and brightness values in on and warm etc. commands can be adjusted at any time via the setList attribute
set DEVICE attrTemplate speechcontrol_type_light_255 set DEVICE attrTemplate speechcontrol_type_light_255
attr DEVICE model zigbee2mqtt_light_rgbcct_rgb attr DEVICE model zigbee2mqtt_light_rgbcct_rgb
setreading DEVICE attrTemplateVersion 20221106 setreading DEVICE attrTemplateVersion 20221106_2
# zigbee2mqtt 2 channel dimmer device # zigbee2mqtt 2 channel dimmer device
name:zigbee2mqtt_2channel_dimmer_split name:zigbee2mqtt_2channel_dimmer_split