| emergency | String | Emergency call status |
| service | String | Service Type |
| preconditioning | String | Air conditioning status |
-| preconditioningFailure | String | Airr conditioning failure cause |
+| preconditioningFailure | String | Air conditioning failure cause |
| level | Number:Dimensionless | Fuel level |
| autonomy | Number:Length | Remaining distance |
| consumption | Number:VolumetricFlowRate | Fuel consumption |
import org.openhab.binding.groupepsa.internal.bridge.GroupePSABridgeHandler;
import org.openhab.binding.groupepsa.internal.things.GroupePSAHandler;
import org.openhab.core.auth.client.oauth2.OAuthFactory;
+import org.openhab.core.i18n.TimeZoneProvider;
import org.openhab.core.io.net.http.HttpClientFactory;
import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.Thing;
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_BRIDGE, THING_TYPE_VEHICLE);
private final OAuthFactory oAuthFactory;
- protected final HttpClient httpClient;
+ private final HttpClient httpClient;
+ private final TimeZoneProvider timeZoneProvider;
@Activate
- public GroupePSAHandlerFactory(@Reference OAuthFactory oAuthFactory,
- @Reference HttpClientFactory httpClientFactory) {
+ public GroupePSAHandlerFactory(final @Reference OAuthFactory oAuthFactory, //
+ final @Reference HttpClientFactory httpClientFactory, //
+ final @Reference TimeZoneProvider timeZoneProvider) {
this.oAuthFactory = oAuthFactory;
this.httpClient = httpClientFactory.getCommonHttpClient();
+ this.timeZoneProvider = timeZoneProvider;
}
@Override
ThingTypeUID thingTypeUID = thing.getThingTypeUID();
if (THING_TYPE_VEHICLE.equals(thingTypeUID)) {
- return new GroupePSAHandler(thing);
+ return new GroupePSAHandler(thing, timeZoneProvider);
} else if (THING_TYPE_BRIDGE.equals(thingTypeUID)) {
return new GroupePSABridgeHandler((Bridge) thing, oAuthFactory, httpClient);
}
import org.openhab.binding.groupepsa.internal.rest.api.dto.Service;
import org.openhab.binding.groupepsa.internal.rest.api.dto.VehicleStatus;
import org.openhab.binding.groupepsa.internal.rest.exceptions.GroupePSACommunicationException;
+import org.openhab.core.i18n.TimeZoneProvider;
import org.openhab.core.library.types.DateTimeType;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OpenClosedType;
private final Logger logger = LoggerFactory.getLogger(GroupePSAHandler.class);
+ private final TimeZoneProvider timeZoneProvider;
+
private @Nullable String id = null;
private long lastQueryTimeNs = 0L;
private long maxQueryFrequencyNanos = TimeUnit.MINUTES.toNanos(1);
private long onlineIntervalM;
- public GroupePSAHandler(Thing thing) {
+ public GroupePSAHandler(Thing thing, TimeZoneProvider timeZoneProvider) {
super(thing);
+ this.timeZoneProvider = timeZoneProvider;
}
@Override
if (lastPosition != null) {
Geometry<SinglePosition> geometry = lastPosition.getGeometry();
if (geometry != null) {
- SinglePosition position = (SinglePosition) geometry.positions();
+ SinglePosition position = geometry.positions();
if (Double.isFinite(position.alt())) {
updateState(CHANNEL_POSITION_POSITION, new PointType(new DecimalType(position.lat()),
new DecimalType(position.lon()), new DecimalType(position.alt())));
protected void updateState(String channelID, @Nullable ZonedDateTime date) {
if (date != null) {
- updateState(channelID, new DateTimeType(date));
+ updateState(channelID, new DateTimeType(date).toZone(timeZoneProvider.getTimeZone()));
} else {
updateState(channelID, UnDefType.UNDEF);
}
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.time.ZoneId;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.binding.groupepsa.internal.rest.exceptions.GroupePSACommunicationException;
import org.openhab.core.auth.client.oauth2.OAuthFactory;
import org.openhab.core.config.core.Configuration;
+import org.openhab.core.i18n.TimeZoneProvider;
import org.openhab.core.library.types.DateTimeType;
import org.openhab.core.library.types.StringType;
import org.openhab.core.thing.Bridge;
private @NonNullByDefault({}) @Mock OAuthFactory oAuthFactory;
private @NonNullByDefault({}) @Mock HttpClient httpClient;
+ private @NonNullByDefault({}) @Mock TimeZoneProvider timeZoneProvider;
static String getResourceFileAsString(String fileName) throws GroupePSACommunicationException {
try (InputStream is = GroupePSAConnectApi.class.getResourceAsStream(fileName)) {
}
@BeforeEach
- @SuppressWarnings("null")
public void setUp() throws GroupePSACommunicationException {
closeable = MockitoAnnotations.openMocks(this);
// Create real objects
bridgeHandler = spy(new GroupePSABridgeHandler(bridge, oAuthFactory, httpClient));
- thingHandler = spy(new GroupePSAHandler(thing));
+ thingHandler = spy(new GroupePSAHandler(thing, timeZoneProvider));
api = spy(new GroupePSAConnectApi(httpClient, bridgeHandler, "clientId", "realm"));
// Setup API mock
thingHandler.setCallback(thingCallback);
doReturn(bridge).when(thingHandler).getBridge();
doNothing().when(thingHandler).buildDoorChannels(any());
+ doReturn(ZoneId.systemDefault()).when(timeZoneProvider).getTimeZone();
}
@AfterEach