Fix #6939 - Forced channel triggering without previous state (#10356)

Signed-off-by: Gabor Bicskei <gbicskei@gmail.com>
This commit is contained in:
Gabor Bicskei
2021-03-31 21:47:26 +02:00
committed by GitHub
parent 6f516ee7ac
commit d64f13351e
2 changed files with 6 additions and 7 deletions

View File

@@ -262,7 +262,7 @@ public class TrackerHandler extends BaseThingHandler {
*/
private void updateTriggerChannelsWithTransition(TransitionMessage message) {
String regionName = message.getRegionName();
triggerRegionChannel(regionName, message.getEvent());
triggerRegionChannel(regionName, message.getEvent(), true);
}
/**
@@ -270,11 +270,12 @@ public class TrackerHandler extends BaseThingHandler {
*
* @param regionName Region name
* @param event Occurred event
* @param forced Force channel triggering in case the transition event is received from the mobile application.
*/
private void triggerRegionChannel(@NonNull String regionName, @NonNull String event) {
private void triggerRegionChannel(@NonNull String regionName, @NonNull String event, boolean forced) {
Boolean lastState = lastTriggeredStates.get(regionName);
Boolean newState = EVENT_ENTER.equals(event);
if (!newState.equals(lastState) && lastState != null) {
if (!newState.equals(lastState) || forced) {
String payload = regionName + "/" + event;
triggerChannel(CHANNEL_REGION_TRIGGER, payload);
lastTriggeredStates.put(regionName, newState);
@@ -327,9 +328,9 @@ public class TrackerHandler extends BaseThingHandler {
// convert into meters which is the unit of the calculated distance
double radiusMeter = convertToMeters(ConfigHelper.getRegionRadius(c.getConfiguration()));
if (radiusMeter > newDistance) {
triggerRegionChannel(regionName, EVENT_ENTER);
triggerRegionChannel(regionName, EVENT_ENTER, false);
} else {
triggerRegionChannel(regionName, EVENT_LEAVE);
triggerRegionChannel(regionName, EVENT_LEAVE, false);
}
}
}