]> git.basschouten.com Git - openhab-addons.git/commitdiff
Fix #6939 - Forced channel triggering without previous state (#10356)
authorGabor Bicskei <gbicskei@gmail.com>
Wed, 31 Mar 2021 19:47:26 +0000 (21:47 +0200)
committerGitHub <noreply@github.com>
Wed, 31 Mar 2021 19:47:26 +0000 (21:47 +0200)
Signed-off-by: Gabor Bicskei <gbicskei@gmail.com>
bundles/org.openhab.binding.gpstracker/README.md
bundles/org.openhab.binding.gpstracker/src/main/java/org/openhab/binding/gpstracker/internal/handler/TrackerHandler.java

index f5c2ac1d6ced02bd21016a19f857723df3ed247e..80e069431799d3c3b48d9ab05f32f8cb9fc1cb38 100644 (file)
@@ -249,8 +249,6 @@ After a location message received from the tracker the log should contain these
 2018-10-05 09:27:58.794 [TRACE] [cker.internal.handler.TrackerHandler] - System uses SI measurement units. No conversion is needed.
 ```
 
-**Note**: If the binding was restarted or the distance channel is new (this is the first location message for the channel) only the second location update will trigger event as the binding has to know the previous state.
-
 ### External Region and Presence Switch
 
 Assumptions:
index 9d4ede111d19598a51ebf8d470393773e54d82fd..582ed15b92e6f2a22ab7303ba56f81430cbf2866 100644 (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);
                     }
                 }
             }