From 43585f32ed4a98551924a5eb3b654031bdbc69ba Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 25 Jan 2024 14:57:24 +0100 Subject: [PATCH 001/135] update linky binding to use new dataconnect api Signed-off-by: Laurent ARNAL --- .../src/main/feature/feature.xml | 2 + .../linky/internal/LinkyAccountHandler.java | 45 +++ .../linky/internal/LinkyAuthService.java | 202 ++++++++++++ .../linky/internal/LinkyAuthServlet.java | 104 ++++++ .../linky/internal/LinkyBindingConstants.java | 23 +- .../linky/internal/LinkyConfiguration.java | 9 +- .../linky/internal/LinkyHandlerFactory.java | 37 ++- .../linky/internal/api/EnedisHttpApi.java | 301 ++++++++---------- .../linky/internal/dto/AddressInfo.java | 39 +++ .../linky/internal/dto/ContactInfo.java | 27 ++ .../binding/linky/internal/dto/Contracts.java | 46 +++ .../binding/linky/internal/dto/Customer.java | 33 ++ .../internal/dto/CustomerIdResponse.java | 34 ++ .../linky/internal/dto/CustomerReponse.java | 26 ++ .../linky/internal/dto/IdentityDetails.java | 29 ++ .../linky/internal/dto/IdentityInfo.java | 28 ++ .../linky/internal/dto/IntervalReading.java | 33 ++ .../linky/internal/dto/MeterReading.java | 45 +++ .../linky/internal/dto/MeterResponse.java | 30 ++ .../binding/linky/internal/dto/PrmInfo.java | 12 +- .../linky/internal/dto/ReadingType.java | 38 +++ .../linky/internal/dto/UsagePoint.java | 31 ++ .../linky/internal/dto/UsagePointDetails.java | 38 +++ .../linky/internal/handler/LinkyHandler.java | 32 +- .../resources/OH-INF/thing/thing-types.xml | 20 +- .../src/main/resources/templates/index.html | 89 ++++++ 26 files changed, 1142 insertions(+), 211 deletions(-) create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePointDetails.java create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/templates/index.html diff --git a/bundles/org.openhab.binding.linky/src/main/feature/feature.xml b/bundles/org.openhab.binding.linky/src/main/feature/feature.xml index 41dad925440..7e83306ff37 100644 --- a/bundles/org.openhab.binding.linky/src/main/feature/feature.xml +++ b/bundles/org.openhab.binding.linky/src/main/feature/feature.xml @@ -4,7 +4,9 @@ openhab-runtime-base + openhab-core-auth-oauth2client mvn:org.jsoup/jsoup/1.14.3 mvn:org.openhab.addons.bundles/org.openhab.binding.linky/${project.version} + diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java new file mode 100644 index 00000000000..1cebc3e7b5e --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * @author Gaël L'hopital - Initial contribution * + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ +@NonNullByDefault +public interface LinkyAccountHandler { + + /** + * @return Returns true if the Spotify Bridge is authorized. + */ + boolean isAuthorized(); + + /** + * Calls Smartthings Api to obtain refresh and access tokens and persist data with Thing. + * + * @param redirectUrl The redirect url Smartthings calls back to + * @param reqCode The unique code passed by Smartthings to obtain the refresh and access tokens + * @return returns the name of the Smartthings user that is authorized + */ + String authorize(String redirectUrl, String reqCode); + + /** + * Formats the Url to use to call Smartthings to authorize the application. + * + * @param redirectUri The uri Smartthings will redirect back to + * @return the formatted url that should be used to call Smartthings Web Api with + */ + String formatAuthorizationUrl(String redirectUri); +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java new file mode 100644 index 00000000000..9f6bed55693 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -0,0 +1,202 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.Hashtable; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.osgi.framework.BundleContext; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.http.HttpService; +import org.osgi.service.http.NamespaceException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Gaël L'hopital - Initial contribution * + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ +@Component(service = LinkyAuthService.class, configurationPid = "binding.internal.authService") +@NonNullByDefault +public class LinkyAuthService { + + private static final String TEMPLATE_PATH = "templates/"; + private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; + private static final String ERROR_UKNOWN_BRIDGE = "Returned 'state' by doesn't match any Bridges. Has the bridge been removed?"; + + private final Logger logger = LoggerFactory.getLogger(LinkyAuthService.class); + + // private final List handlers = new ArrayList<>(); + + private @NonNullByDefault({}) HttpService httpService; + private @NonNullByDefault({}) BundleContext bundleContext; + private @Nullable LinkyAccountHandler accountHandler; + + @Activate + protected void activate(ComponentContext componentContext, Map properties) { + try { + bundleContext = componentContext.getBundleContext(); + httpService.registerServlet(LinkyBindingConstants.LINKY_ALIAS, createServlet(), new Hashtable<>(), + httpService.createDefaultHttpContext()); + httpService.registerResources(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS, + "web", null); + } catch (NamespaceException | ServletException | IOException e) { + logger.warn("Error during spotify servlet startup", e); + } + } + + @Deactivate + protected void deactivate(ComponentContext componentContext) { + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); + } + + /** + * Creates a new {@link SpotifyAuthServlet}. + * + * @return the newly created servlet + * @throws IOException thrown when an HTML template could not be read + */ + private HttpServlet createServlet() throws IOException { + return new LinkyAuthServlet(this, readTemplate(TEMPLATE_INDEX)); + } + + /** + * Reads a template from file and returns the content as String. + * + * @param templateName name of the template file to read + * @return The content of the template file + * @throws IOException thrown when an HTML template could not be read + */ + private String readTemplate(String templateName) throws IOException { + final URL index = bundleContext.getBundle().getEntry(templateName); + + if (index == null) { + throw new FileNotFoundException( + String.format("Cannot find '{}' - failed to initialize Linky servlet", templateName)); + } else { + try (InputStream inputStream = index.openStream()) { + return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + } + } + } + + /** + * Call with Spotify redirect uri returned State and Code values to get the refresh and access tokens and persist + * these values + * + * @param servletBaseURL the servlet base, which will be the Spotify redirect url + * @param state The Spotify returned state value + * @param code The Spotify returned code value + * @return returns the name of the Spotify user that is authorized + */ + public String authorize(String servletBaseURL, String state, String code) { + LinkyAccountHandler accountHandler = getLinkyAccountHandler(); + if (accountHandler == null) { + logger.debug( + "Linky redirected with state '{}' but no matching bridge was found. Possible bridge has been removed.", + state); + throw new RuntimeException(ERROR_UKNOWN_BRIDGE); + } else { + return accountHandler.authorize(servletBaseURL, code); + } + } + + /** + * @param listener Adds the given handler + */ + public void setLinkyAccountHandler(LinkyAccountHandler accountHandler) { + this.accountHandler = accountHandler; + } + + /** + * @param handler Removes the given handler + */ + public void unsetLinkyAccountHandler(LinkyAccountHandler accountHandler) { + this.accountHandler = null; + } + + /** + * @param listener Adds the given handler + */ + public @Nullable LinkyAccountHandler getLinkyAccountHandler() { + return this.accountHandler; + } + + /** + * @param listener Adds the given handler + */ + /* + * public void addSpotifyAccountHandler(SpotifyAccountHandler listener) { + * if (!handlers.contains(listener)) { + * handlers.add(listener); + * } + * } + */ + + /** + * @param handler Removes the given handler + */ + /* + * public void removeSpotifyAccountHandler(SpotifyAccountHandler handler) { + * handlers.remove(handler); + * } + */ + + /** + * @return Returns all {@link SpotifyAccountHandler}s. + */ + /* + * public List getSpotifyAccountHandlers() { + * return handlers; + * } + */ + + /** + * Get the {@link SpotifyAccountHandler} that matches the given thing UID. + * + * @param thingUID UID of the thing to match the handler with + * @return the {@link SpotifyAccountHandler} matching the thing UID or null + */ + /* + * private @Nullable SpotifyAccountHandler getSpotifyAuthListener(String thingUID) { + * final Optional maybeListener = handlers.stream().filter(l -> l.equalsThingUID(thingUID)) + * .findFirst(); + * return maybeListener.isPresent() ? maybeListener.get() : null; + * } + */ + + @Reference + protected void setHttpService(HttpService httpService) { + this.httpService = httpService; + } + + protected void unsetHttpService(HttpService httpService) { + this.httpService = null; + } +} \ No newline at end of file diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java new file mode 100644 index 00000000000..f659de06d36 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The xxx manages the authorization with the Linky Web API. The servlet implements the + * Authorization Code flow and saves the resulting refreshToken with the bridge. + * + * @author Gaël L'hopital - Initial contribution * + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ +@NonNullByDefault +public class LinkyAuthServlet extends HttpServlet { + + private static final long serialVersionUID = -4719613645562518231L; + + private static final Pattern MESSAGE_KEY_PATTERN = Pattern.compile("\\$\\{([^\\}]+)\\}"); + + // Keys present in the index.html + private static final String KEY_BRIDGE_URI = "bridge.uri"; + + private final Logger logger = LoggerFactory.getLogger(LinkyAuthServlet.class); + private final LinkyAuthService linkyAuthService; + private final String indexTemplate; + + public LinkyAuthServlet(LinkyAuthService linkyAuthService, String indexTemplate) { + this.linkyAuthService = linkyAuthService; + this.indexTemplate = indexTemplate; + } + + @Override + protected void doGet(@Nullable HttpServletRequest req, @Nullable HttpServletResponse resp) + throws ServletException, IOException { + logger.debug("Linky auth callback servlet received GET request {}.", req.getRequestURI()); + final Map replaceMap = new HashMap<>(); + /* + * + * final String servletBaseURL = req.getRequestURL().toString(); + * final String queryString = req.getQueryString(); + * + * + * String servletBaseURLSecure = servletBaseURL.replace("http://", "https://").replace("8080", "8443"); + * handleSmartthingsRedirect(replaceMap, servletBaseURLSecure, queryString); + * resp.setContentType(CONTENT_TYPE); + * LinkyAccountHandler accountHandler = linkyAuthService.getLinkyAccountHandler(); + */ + String uri = "https://mon-compte-particulier.enedis.fr/dataconnect/v1/oauth2/authorize?client_id=e551937c-5250-48bc-b4a6-2323af68db92&duration=P36M&response_type=code"; + + // replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); + replaceMap.put(KEY_BRIDGE_URI, uri); + resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); + resp.getWriter().close(); + } + + /** + * Replaces all keys from the map found in the template with values from the map. If the key is not found the key + * will be kept in the template. + * + * @param template template to replace keys with values + * @param map map with key value pairs to replace in the template + * @return a template with keys replaced + */ + private String replaceKeysFromMap(String template, Map map) { + final Matcher m = MESSAGE_KEY_PATTERN.matcher(template); + final StringBuffer sb = new StringBuffer(); + + while (m.find()) { + try { + final String key = m.group(1); + m.appendReplacement(sb, Matcher.quoteReplacement(map.getOrDefault(key, "${" + key + '}'))); + } catch (RuntimeException e) { + logger.debug("Error occurred during template filling, cause ", e); + } + } + m.appendTail(sb); + return sb.toString(); + } +} \ No newline at end of file diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 9ceacb91fb1..119926c61e3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -12,6 +12,9 @@ */ package org.openhab.binding.linky.internal; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.ThingTypeUID; @@ -20,6 +23,7 @@ import org.openhab.core.thing.ThingTypeUID; * used across the whole binding. * * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API * */ @NonNullByDefault public class LinkyBindingConstants { @@ -32,7 +36,7 @@ public class LinkyBindingConstants { // Thing properties public static final String PUISSANCE = "puissance"; public static final String PRM_ID = "prmId"; - public static final String USER_ID = "av2_interne_id"; + public static final String USER_ID = "customerId"; // List of all Channel id's public static final String YESTERDAY = "daily#yesterday"; @@ -44,4 +48,21 @@ public class LinkyBindingConstants { public static final String LAST_MONTH = "monthly#lastMonth"; public static final String THIS_YEAR = "yearly#thisYear"; public static final String LAST_YEAR = "yearly#lastYear"; + + // Authorization related Servlet and resources aliases. + public static final String LINKY_ALIAS = "/connectlinky"; + public static final String LINKY_IMG_ALIAS = "/img"; + + /** + * Smartthings scopes needed by this binding to work. + */ + public static final String LINKY_SCOPES = Stream.of("r:devices:*", "w:devices:*", "x:devices:*", "r:hubs:*", + "r:locations:*", "w:locations:*", "x:locations:*", "r:scenes:*", "x:scenes:*", "r:rules:*", "w:rules:*", + "r:installedapps", "w:installedapps").collect(Collectors.joining(" ")); + + // List of Spotify services related urls, information + public static final String LINKY_ACCOUNT_URL = "https://api.smartthings.com/oauth"; + public static final String LINKY_AUTHORIZE_URL = LINKY_ACCOUNT_URL + "/authorize"; + public static final String LINKY_API_TOKEN_URL = LINKY_ACCOUNT_URL + "/token"; + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java index 3c75363fd83..6bfa0f6403b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java @@ -19,15 +19,14 @@ import org.eclipse.jdt.annotation.NonNullByDefault; * thing configuration. * * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault public class LinkyConfiguration { - public static final String INTERNAL_AUTH_ID = "internalAuthId"; - public String username = ""; - public String password = ""; - public String internalAuthId = ""; + public String token = ""; + public String prmId = ""; public boolean seemsValid() { - return !username.isBlank() && !password.isBlank() && !internalAuthId.isBlank(); + return !token.isBlank() && !prmId.isBlank(); } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 315ed268c12..91882a07146 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal; -import static org.openhab.binding.linky.internal.LinkyBindingConstants.THING_TYPE_LINKY; - import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.time.ZonedDateTime; @@ -27,6 +25,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.openhab.binding.linky.internal.handler.LinkyHandler; +import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.io.net.http.TrustAllTrustManager; @@ -50,10 +49,11 @@ import com.google.gson.JsonDeserializer; * The {@link LinkyHandlerFactory} is responsible for creating things handlers. * * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault @Component(service = ThingHandlerFactory.class, configurationPid = "binding.linky") -public class LinkyHandlerFactory extends BaseThingHandlerFactory { +public class LinkyHandlerFactory extends BaseThingHandlerFactory implements LinkyAccountHandler { private static final DateTimeFormatter LINKY_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); private static final int REQUEST_BUFFER_SIZE = 8000; private static final int RESPONSE_BUFFER_SIZE = 200000; @@ -65,10 +65,13 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { .create(); private final LocaleProvider localeProvider; private final HttpClient httpClient; + private final OAuthFactory oAuthFactory; + private final LinkyAuthService authService; @Activate public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, - final @Reference HttpClientFactory httpClientFactory) { + final @Reference HttpClientFactory httpClientFactory, final @Reference LinkyAuthService authService, + final @Reference OAuthFactory oAuthFactory) { this.localeProvider = localeProvider; SslContextFactory sslContextFactory = new SslContextFactory.Client(); try { @@ -85,6 +88,8 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { httpClient.setFollowRedirects(false); httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); httpClient.setResponseBufferSize(RESPONSE_BUFFER_SIZE); + this.oAuthFactory = oAuthFactory; + this.authService = authService; } @Override @@ -109,12 +114,32 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { - return THING_TYPE_LINKY.equals(thingTypeUID); + return LinkyBindingConstants.THING_TYPE_LINKY.equals(thingTypeUID); } @Override protected @Nullable ThingHandler createHandler(Thing thing) { - return supportsThingType(thing.getThingTypeUID()) ? new LinkyHandler(thing, localeProvider, gson, httpClient) + + authService.setLinkyAccountHandler(this); + + return supportsThingType(thing.getThingTypeUID()) + ? new LinkyHandler(thing, localeProvider, gson, httpClient, oAuthFactory) : null; } + + @Override + public boolean isAuthorized() { + return true; + } + + @Override + public String authorize(String redirectUrl, String reqCode) { + return ""; + } + + @Override + public String formatAuthorizationUrl(String redirectUri) { + return ""; + } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 2c2a755d3ba..fbe2404d647 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.api; -import java.net.HttpCookie; -import java.net.URI; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.HashMap; @@ -22,8 +20,6 @@ import java.util.Objects; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.ws.rs.core.MediaType; @@ -42,13 +38,17 @@ import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; -import org.openhab.binding.linky.internal.dto.AuthData; -import org.openhab.binding.linky.internal.dto.AuthResult; +import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ConsumptionReport; import org.openhab.binding.linky.internal.dto.ConsumptionReport.Consumption; -import org.openhab.binding.linky.internal.dto.PrmDetail; +import org.openhab.binding.linky.internal.dto.ContactInfo; +import org.openhab.binding.linky.internal.dto.Customer; +import org.openhab.binding.linky.internal.dto.CustomerIdResponse; +import org.openhab.binding.linky.internal.dto.CustomerReponse; +import org.openhab.binding.linky.internal.dto.IdentityInfo; +import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.binding.linky.internal.dto.UserInfo; +import org.openhab.binding.linky.internal.dto.UsagePoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,23 +59,18 @@ import com.google.gson.JsonSyntaxException; * {@link EnedisHttpApi} wraps the Enedis Webservice. * * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault public class EnedisHttpApi { - private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); - private static final String ENEDIS_DOMAIN = ".enedis.fr"; - private static final String URL_APPS_LINCS = "https://alex.microapplications" + ENEDIS_DOMAIN; - private static final String URL_MON_COMPTE = "https://mon-compte" + ENEDIS_DOMAIN; - private static final String URL_COMPTE_PART = URL_MON_COMPTE.replace("compte", "compte-particulier"); - private static final String URL_ENEDIS_AUTHENTICATE = URL_APPS_LINCS + "/authenticate?target=" + URL_COMPTE_PART; - private static final String USER_INFO_CONTRACT_URL = URL_APPS_LINCS + "/mon-compte-client/api/private/v1/userinfos"; - private static final String USER_INFO_URL = URL_APPS_LINCS + "/userinfos"; - private static final String PRM_INFO_BASE_URL = URL_APPS_LINCS + "/mes-mesures/api/private/v1/personnes/"; - private static final String PRM_INFO_URL = URL_APPS_LINCS + "/mes-prms-part/api/private/v2/personnes/%s/prms"; - private static final String MEASURE_URL = PRM_INFO_BASE_URL - + "%s/prms/%s/donnees-%s?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; - private static final URI COOKIE_URI = URI.create(URL_COMPTE_PART); - private static final Pattern REQ_PATTERN = Pattern.compile("ReqID%(.*?)%26"); + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + private static final String BASE_URL = "https://www.myelectricaldata.fr/"; + private static final String CONTRACT_URL = BASE_URL + "contracts"; + private static final String IDENTITY_URL = BASE_URL + "identity"; + private static final String CONTACT_URL = BASE_URL + "contact"; + private static final String ADDRESS_URL = BASE_URL + "addresses"; + private static final String MEASURE_URL = BASE_URL + "%s/%s/start/%s/end/%s/cache"; private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; @@ -91,108 +86,6 @@ public class EnedisHttpApi { } public void initialize() throws LinkyException { - logger.debug("Starting login process for user: {}", config.username); - - try { - addCookie(LinkyConfiguration.INTERNAL_AUTH_ID, config.internalAuthId); - logger.debug("Step 1: getting authentification"); - String data = getContent(URL_ENEDIS_AUTHENTICATE); - - logger.debug("Reception request SAML"); - Document htmlDocument = Jsoup.parse(data); - Element el = htmlDocument.select("form").first(); - Element samlInput = el.select("input[name=SAMLRequest]").first(); - - logger.debug("Step 2: send SSO SAMLRequest"); - ContentResponse result = httpClient.POST(el.attr("action")) - .content(getFormContent("SAMLRequest", samlInput.attr("value"))).send(); - if (result.getStatus() != HttpStatus.FOUND_302) { - throw new LinkyException("Connection failed step 2"); - } - - logger.debug("Get the location and the ReqID"); - Matcher m = REQ_PATTERN.matcher(getLocation(result)); - if (!m.find()) { - throw new LinkyException("Unable to locate ReqId in header"); - } - - String reqId = m.group(1); - String authenticateUrl = URL_MON_COMPTE - + "/auth/json/authenticate?realm=/enedis&forward=true&spEntityID=SP-ODW-PROD&goto=/auth/SSOPOST/metaAlias/enedis/providerIDP?ReqID%" - + reqId + "%26index%3Dnull%26acsURL%3D" + URL_APPS_LINCS - + "/saml/SSO%26spEntityID%3DSP-ODW-PROD%26binding%3Durn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST&AMAuthCookie="; - - logger.debug("Step 3: auth1 - retrieve the template, thanks to cookie internalAuthId user is already set"); - result = httpClient.POST(authenticateUrl).header("X-NoSession", "true").header("X-Password", "anonymous") - .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous").send(); - if (result.getStatus() != HttpStatus.OK_200) { - throw new LinkyException("Connection failed step 3 - auth1: %s", result.getContentAsString()); - } - - AuthData authData = gson.fromJson(result.getContentAsString(), AuthData.class); - if (authData == null || authData.callbacks.size() < 2 || authData.callbacks.get(0).input.isEmpty() - || authData.callbacks.get(1).input.isEmpty() || !config.username - .equals(Objects.requireNonNull(authData.callbacks.get(0).input.get(0)).valueAsString())) { - logger.debug("auth1 - invalid template for auth data: {}", result.getContentAsString()); - throw new LinkyException("Authentication error, the authentication_cookie is probably wrong"); - } - - authData.callbacks.get(1).input.get(0).value = config.password; - logger.debug("Step 4: auth2 - send the auth data"); - result = httpClient.POST(authenticateUrl).header(HttpHeader.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .header("X-NoSession", "true").header("X-Password", "anonymous") - .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous") - .content(new StringContentProvider(gson.toJson(authData))).send(); - if (result.getStatus() != HttpStatus.OK_200) { - throw new LinkyException("Connection failed step 3 - auth2: %s", result.getContentAsString()); - } - - AuthResult authResult = gson.fromJson(result.getContentAsString(), AuthResult.class); - if (authResult == null) { - throw new LinkyException("Invalid authentication result data"); - } - - logger.debug("Add the tokenId cookie"); - addCookie("enedisExt", authResult.tokenId); - - logger.debug("Step 5: retrieve the SAMLresponse"); - data = getContent(URL_MON_COMPTE + "/" + authResult.successUrl); - htmlDocument = Jsoup.parse(data); - el = htmlDocument.select("form").first(); - samlInput = el.select("input[name=SAMLResponse]").first(); - - logger.debug("Step 6: post the SAMLresponse to finish the authentication"); - result = httpClient.POST(el.attr("action")).content(getFormContent("SAMLResponse", samlInput.attr("value"))) - .send(); - if (result.getStatus() != HttpStatus.FOUND_302) { - throw new LinkyException("Connection failed step 6"); - } - - logger.debug("Step 7: retrieve cookieKey"); - result = httpClient.GET(USER_INFO_CONTRACT_URL); - - @SuppressWarnings("unchecked") - HashMap hashRes = gson.fromJson(result.getContentAsString(), HashMap.class); - - String cookieKey; - if (hashRes != null && hashRes.containsKey("cnAlex")) { - cookieKey = "personne_for_" + hashRes.get("cnAlex"); - } else { - throw new LinkyException("Connection failed step 7, missing cookieKey"); - } - - List lCookie = httpClient.getCookieStore().getCookies(); - Optional cookie = lCookie.stream().filter(it -> it.getName().contains(cookieKey)).findFirst(); - - String cookieVal = cookie.map(HttpCookie::getValue) - .orElseThrow(() -> new LinkyException("Connection failed step 7, missing cookieVal")); - - addCookie(cookieKey, cookieVal); - - connected = true; - } catch (InterruptedException | TimeoutException | ExecutionException | JsonSyntaxException e) { - throw new LinkyException(e, "Error opening connection with Enedis webservice"); - } } private String getLocation(ContentResponse response) { @@ -203,14 +96,6 @@ public class EnedisHttpApi { if (connected) { logger.debug("Logout process"); connected = false; - try { // Three times in a row to get disconnected - String location = getLocation(httpClient.GET(URL_APPS_LINCS + "/logout")); - location = getLocation(httpClient.GET(location)); - getLocation(httpClient.GET(location)); - httpClient.getCookieStore().removeAll(); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - throw new LinkyException(e, "Error while disconnecting from Enedis webservice"); - } } } @@ -222,27 +107,15 @@ public class EnedisHttpApi { disconnect(); } - private void addCookie(String key, String value) { - HttpCookie cookie = new HttpCookie(key, value); - cookie.setDomain(ENEDIS_DOMAIN); - cookie.setPath("/"); - httpClient.getCookieStore().add(COOKIE_URI, cookie); - } - - private FormContentProvider getFormContent(String fieldName, String fieldValue) { - Fields fields = new Fields(); - fields.put(fieldName, fieldValue); - return new FormContentProvider(fields); - } - - private String getContent(String url) throws LinkyException { + private String getData(String url) throws LinkyException { try { - Request request = httpClient.newRequest(url) - .agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"); + Request request = httpClient.newRequest(url); request = request.method(HttpMethod.GET); + request = request.header("Authorization", config.token); + ContentResponse result = request.send(); - if (result.getStatus() != HttpStatus.OK_200) { - throw new LinkyException("Error requesting '%s': %s", url, result.getContentAsString()); + if (result.getStatus() != 200) { + throw new LinkyException("Error requesting '%s' : %s", url, result.getContentAsString()); } String content = result.getContentAsString(); logger.trace("getContent returned {}", content); @@ -252,54 +125,134 @@ public class EnedisHttpApi { } } - private T getData(String url, Class clazz) throws LinkyException { + public PrmInfo getPrmInfo() throws LinkyException { + PrmInfo result = new PrmInfo(); + Customer customer = getCustomer(); + UsagePoint usagePoint = customer.usagePoints[0]; + + result.contractInfo = usagePoint.contracts; + result.usagePointInfo = usagePoint.usagePoint; + result.identityInfo = getIdentity(); + result.addressInfo = getAddress(); + result.contactInfo = getContact(); + + result.prmId = result.usagePointInfo.usagePointId; + result.customerId = customer.customerId; + + return result; + } + + public Customer getCustomer() throws LinkyException { if (!connected) { initialize(); } - String data = getContent(url); + String data = getData(String.format("%s/%s/cache", CONTRACT_URL, config.prmId)); if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", url); + throw new LinkyException("Requesting '%s' returned an empty response", CONTRACT_URL); } try { - return Objects.requireNonNull(gson.fromJson(data, clazz)); + CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); + if (cResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return cResponse.customer; } catch (JsonSyntaxException e) { - logger.debug("Invalid JSON response not matching {}: {}", clazz.getName(), data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); + logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", CONTRACT_URL); } } - public PrmInfo getPrmInfo(String internId) throws LinkyException { - String url = PRM_INFO_URL.formatted(internId); - PrmInfo[] prms = getData(url, PrmInfo[].class); - if (prms.length < 1) { - throw new LinkyException("Invalid prms data received"); + public AddressInfo getAddress() throws LinkyException { + if (!connected) { + initialize(); + } + String data = getData(String.format("%s/%s/cache", ADDRESS_URL, "21454992660003")); + if (data.isEmpty()) { + throw new LinkyException("Requesting '%s' returned an empty response", ADDRESS_URL); + } + try { + CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); + if (cResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return cResponse.customer.usagePoints[0].usagePoint.usagePointAddresses; + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", ADDRESS_URL); } - return prms[0]; } - public PrmDetail getPrmDetails(String internId, String prmId) throws LinkyException { - String url = PRM_INFO_URL.formatted(internId) + "/" + prmId - + "?embed=SITALI&embed=SITCOM&embed=SITCON&embed=SYNCON"; - return getData(url, PrmDetail.class); + public IdentityInfo getIdentity() throws LinkyException { + if (!connected) { + initialize(); + } + String data = getData(String.format("%s/%s/cache", IDENTITY_URL, "21454992660003")); + if (data.isEmpty()) { + throw new LinkyException("Requesting '%s' returned an empty response", IDENTITY_URL); + } + try { + CustomerIdResponse iResponse = gson.fromJson(data, CustomerIdResponse.class); + if (iResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return iResponse.identity.naturalPerson; + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", IDENTITY_URL); + } } - public UserInfo getUserInfo() throws LinkyException { - return getData(USER_INFO_URL, UserInfo.class); + public ContactInfo getContact() throws LinkyException { + if (!connected) { + initialize(); + } + String data = getData(String.format("%s/%s/cache", CONTACT_URL, "21454992660003")); + if (data.isEmpty()) { + throw new LinkyException("Requesting '%s' returned an empty response", CONTACT_URL); + } + try { + CustomerIdResponse cResponse = gson.fromJson(data, CustomerIdResponse.class); + if (cResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return cResponse.contactData; + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", CONTACT_URL); + } } private Consumption getMeasures(String userId, String prmId, LocalDate from, LocalDate to, String request) throws LinkyException { - String url = String.format(MEASURE_URL, userId, prmId, request, from.format(API_DATE_FORMAT), - to.format(API_DATE_FORMAT)); - ConsumptionReport report = getData(url, ConsumptionReport.class); - return report.firstLevel.consumptions; + String dtStart = from.format(API_DATE_FORMAT); + String dtEnd = to.format(API_DATE_FORMAT); + + String url = String.format(MEASURE_URL, request, prmId, dtStart, dtEnd); + if (!connected) { + initialize(); + } + String data = getData(url); + if (data.isEmpty()) { + throw new LinkyException("Requesting '%s' returned an empty response", url); + } + logger.trace("getData returned {}", data); + try { + MeterResponse meterResponse = gson.fromJson(data, MeterResponse.class); + if (meterResponse == null) { + throw new LinkyException("No report data received"); + } + return new ConsumptionReport().new Consumption(); + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching ConsumptionReport.class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); + } } public Consumption getEnergyData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(userId, prmId, from, to, "energie"); + return getMeasures(userId, prmId, from, to, "daily_consumption"); } public Consumption getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(userId, prmId, from, to, "pmax"); + return getMeasures(userId, prmId, from, to, "daily_consumption_max_power"); } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java new file mode 100644 index 00000000000..bb7170b1649 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class AddressInfo { + public String street; + public String locality; + + @SerializedName("postalCode") + public String postal_code; + + @SerializedName("insee_code") + public String inseeCode; + + public String city; + public String country; + +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java new file mode 100644 index 00000000000..94c40c43253 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class ContactInfo { + public String phone; + public String email; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java new file mode 100644 index 00000000000..c9bf59b0022 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class Contracts { + public String segment; + + @SerializedName("subscribed_power") + public String subscribedPower; + + @SerializedName("last_activation_date") + public String lastActivationDate; + + @SerializedName("distribution_tariff") + public String distributionTariff; + + @SerializedName("offpeak_hours") + public String offpeakHours; + + @SerializedName("contract_status") + public String contractStatus; + + @SerializedName("last_distribution_tariff_change_date") + public String lastDistributionTariffChangeDate; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java new file mode 100644 index 00000000000..de2caae124a --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class Customer { + @SerializedName("customer_id") + public String customerId; + + @SerializedName("usage_points") + public UsagePoint[] usagePoints; + +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java new file mode 100644 index 00000000000..f0e46550263 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class CustomerIdResponse { + @SerializedName("customer_id") + public String customerId; + + public IdentityDetails identity; + + @SerializedName("contact_data") + public ContactInfo contactData; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java new file mode 100644 index 00000000000..1215134483b --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class CustomerReponse { + public Customer customer; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java new file mode 100644 index 00000000000..15a07b6a275 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class IdentityDetails { + @SerializedName("natural_person") + public IdentityInfo naturalPerson; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java new file mode 100644 index 00000000000..8923636061c --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class IdentityInfo { + public String title; + public String firstname; + public String lastname; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java new file mode 100644 index 00000000000..23bf0d4018c --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class IntervalReading { + @SerializedName("value") + public String value; + + @SerializedName("date") + public String date; + +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java new file mode 100644 index 00000000000..8d32d1b722d --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class MeterReading { + @SerializedName("usage_point_id") + public String usagePointId; + + @SerializedName("start") + public String startDate; + + @SerializedName("end") + public String endDate; + + @SerializedName("quality") + public String quality; + + @SerializedName("reading_type") + public ReadingType readingType; + + @SerializedName("interval_reading") + public IntervalReading[] intervalReading; + +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java new file mode 100644 index 00000000000..ff307fd9fee --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class MeterResponse { + @SerializedName("meter_reading") + public MeterReading meterReading; + +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java index b03f577de79..9318ac3f322 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java @@ -12,12 +12,22 @@ */ package org.openhab.binding.linky.internal.dto; +import org.eclipse.jetty.jaas.spi.UserInfo; + /** * The {@link UserInfo} holds ids of existing Prms * * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API */ public class PrmInfo { - public String idPrm; + public String prmId; + public String customerId; + + public Contracts contractInfo; + public UsagePointDetails usagePointInfo; + public ContactInfo contactInfo; + public AddressInfo addressInfo; + public IdentityInfo identityInfo; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java new file mode 100644 index 00000000000..454f04fe295 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class ReadingType { + @SerializedName("measurement_kind") + public String measurementKind; + + @SerializedName("measuring_period") + public String measuringPeriod; + + @SerializedName("unit") + public String unit; + + @SerializedName("aggregate") + public String aggregate; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java new file mode 100644 index 00000000000..aa8d6bbf359 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class UsagePoint { + @SerializedName("usage_point") + public UsagePointDetails usagePoint; + + public Contracts contracts; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePointDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePointDetails.java new file mode 100644 index 00000000000..2b2eeb81111 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePointDetails.java @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API + */ + +public class UsagePointDetails { + @SerializedName("usage_point_id") + public String usagePointId; + + @SerializedName("usage_point_status") + public String usagePointStatus; + + @SerializedName("meter_type") + public String meterType; + + @SerializedName("usage_point_addresses") + public AddressInfo usagePointAddresses; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index d38809b29a9..f83636f0de6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -29,6 +29,7 @@ import java.util.concurrent.TimeUnit; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; +import org.openhab.binding.linky.internal.LinkyBindingConstants; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; @@ -37,7 +38,8 @@ import org.openhab.binding.linky.internal.dto.ConsumptionReport.Aggregate; import org.openhab.binding.linky.internal.dto.ConsumptionReport.Consumption; import org.openhab.binding.linky.internal.dto.PrmDetail; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.binding.linky.internal.dto.UserInfo; +import org.openhab.core.auth.client.oauth2.OAuthClientService; +import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.library.types.DateTimeType; import org.openhab.core.library.types.QuantityType; @@ -61,6 +63,7 @@ import com.google.gson.Gson; * sent to one of the channels. * * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault @@ -81,6 +84,8 @@ public class LinkyHandler extends BaseThingHandler { private @Nullable ScheduledFuture refreshJob; private @Nullable EnedisHttpApi enedisApi; + private final OAuthFactory oAuthFactory; + private @NonNullByDefault({}) String prmId; private @NonNullByDefault({}) String userId; @@ -90,7 +95,10 @@ public class LinkyHandler extends BaseThingHandler { ALL } - public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient) { + private @Nullable OAuthClientService oAuthService; + + public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient, + OAuthFactory oAuthFactory) { super(thing); this.gson = gson; this.httpClient = httpClient; @@ -107,6 +115,8 @@ public class LinkyHandler extends BaseThingHandler { return consumption; }); + this.oAuthFactory = oAuthFactory; + this.cachedPowerData = new ExpiringDayCache<>("power cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { // We request data for yesterday and the day before yesterday, even if the data for the day before yesterday // is not needed by the binding. This is only a workaround to an API bug that will return @@ -152,6 +162,11 @@ public class LinkyHandler extends BaseThingHandler { LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { + + OAuthClientService oAuthService = oAuthFactory.createOAuthClientService(thing.getUID().getAsString(), + LinkyBindingConstants.LINKY_API_TOKEN_URL, LinkyBindingConstants.LINKY_AUTHORIZE_URL, "clientId", + "clientSecret", LinkyBindingConstants.LINKY_SCOPES, true); + enedisApi = new EnedisHttpApi(config, gson, httpClient); scheduler.submit(() -> { try { @@ -159,15 +174,9 @@ public class LinkyHandler extends BaseThingHandler { api.initialize(); updateStatus(ThingStatus.ONLINE); - if (thing.getProperties().isEmpty()) { - UserInfo userInfo = api.getUserInfo(); - PrmInfo prmInfo = api.getPrmInfo(userInfo.userProperties.internId); - PrmDetail details = api.getPrmDetails(userInfo.userProperties.internId, prmInfo.idPrm); - updateProperties(Map.of(USER_ID, userInfo.userProperties.internId, PUISSANCE, - details.situationContractuelleDtos[0].structureTarifaire().puissanceSouscrite().valeur() - + " kVA", - PRM_ID, prmInfo.idPrm)); - } + PrmInfo prmInfo = api.getPrmInfo(); + updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, + prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); prmId = thing.getProperties().get(PRM_ID); userId = thing.getProperties().get(USER_ID); @@ -544,4 +553,5 @@ public class LinkyHandler extends BaseThingHandler { aggregate.datas.get(index)); } } + } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index fbcdbb509e3..778b374ed24 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -20,19 +20,13 @@ - - - email - Your Enedis Username - - - - password - Your Enedis Password - - - - Authentication ID delivered after the captcha (see documentation). + + + Your PrmId + + + + Your Enedis token diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html new file mode 100644 index 00000000000..b5e0ce91ca5 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html @@ -0,0 +1,89 @@ + + + + + +${pageRefresh} +Authorize openHAB binding for Smartthings + + + + + + +

Authorize openHAB binding for Smartthings

+

On this page you can authorize the openHAB Smartthings biding to access your Smartthings account.

+

+ The redirect URI to use with Smartthings for this openHAB installation is + ${redirectUri} +

+ ${error} ${authorizedUser} + +
+ Connect to SmartThings: +

+

+

+
+ + + \ No newline at end of file From 91215a729427f53c0e3ea7b9ca041ae08fe52f46 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 26 Jan 2024 12:00:04 +0100 Subject: [PATCH 002/135] implements daily meter readings, 1st phase Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyHandlerFactory.java | 13 +- .../linky/internal/api/EnedisHttpApi.java | 18 +- .../console/LinkyCommandExtension.java | 10 +- .../linky/internal/dto/IntervalReading.java | 6 +- .../linky/internal/dto/MeterReading.java | 4 + .../linky/internal/handler/LinkyHandler.java | 579 ++++++++++-------- 6 files changed, 363 insertions(+), 267 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 91882a07146..fcc2f06a48d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -14,6 +14,7 @@ package org.openhab.binding.linky.internal; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; +import java.time.LocalDate; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; @@ -55,14 +56,20 @@ import com.google.gson.JsonDeserializer; @Component(service = ThingHandlerFactory.class, configurationPid = "binding.linky") public class LinkyHandlerFactory extends BaseThingHandlerFactory implements LinkyAccountHandler { private static final DateTimeFormatter LINKY_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); + private static final DateTimeFormatter LINKY_FORMATTER2 = DateTimeFormatter.ofPattern("uuuu-MM-dd"); private static final int REQUEST_BUFFER_SIZE = 8000; private static final int RESPONSE_BUFFER_SIZE = 200000; private final Logger logger = LoggerFactory.getLogger(LinkyHandlerFactory.class); - private final Gson gson = new GsonBuilder().registerTypeAdapter(ZonedDateTime.class, - (JsonDeserializer) (json, type, jsonDeserializationContext) -> ZonedDateTime - .parse(json.getAsJsonPrimitive().getAsString(), LINKY_FORMATTER)) + private final Gson gson = new GsonBuilder() + .registerTypeAdapter(ZonedDateTime.class, + (JsonDeserializer) (json, type, jsonDeserializationContext) -> ZonedDateTime + .parse(json.getAsJsonPrimitive().getAsString(), LINKY_FORMATTER)) + .registerTypeAdapter(LocalDate.class, + (JsonDeserializer) (json, type, jsonDeserializationContext) -> LocalDate + .parse(json.getAsJsonPrimitive().getAsString(), LINKY_FORMATTER2)) .create(); + private final LocaleProvider localeProvider; private final HttpClient httpClient; private final OAuthFactory oAuthFactory; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index fbe2404d647..58827531f18 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -39,13 +39,12 @@ import org.jsoup.nodes.Element; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; -import org.openhab.binding.linky.internal.dto.ConsumptionReport; -import org.openhab.binding.linky.internal.dto.ConsumptionReport.Consumption; import org.openhab.binding.linky.internal.dto.ContactInfo; import org.openhab.binding.linky.internal.dto.Customer; import org.openhab.binding.linky.internal.dto.CustomerIdResponse; import org.openhab.binding.linky.internal.dto.CustomerReponse; import org.openhab.binding.linky.internal.dto.IdentityInfo; +import org.openhab.binding.linky.internal.dto.MeterReading; import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.binding.linky.internal.dto.UsagePoint; @@ -222,7 +221,7 @@ public class EnedisHttpApi { } } - private Consumption getMeasures(String userId, String prmId, LocalDate from, LocalDate to, String request) + private MeterReading getMeasures(String userId, String prmId, LocalDate from, LocalDate to, String request) throws LinkyException { String dtStart = from.format(API_DATE_FORMAT); String dtEnd = to.format(API_DATE_FORMAT); @@ -241,18 +240,21 @@ public class EnedisHttpApi { if (meterResponse == null) { throw new LinkyException("No report data received"); } - return new ConsumptionReport().new Consumption(); + return meterResponse.meterReading; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching ConsumptionReport.class: {}", data); throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); } } - public Consumption getEnergyData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { + public MeterReading getEnergyData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { return getMeasures(userId, prmId, from, to, "daily_consumption"); } - public Consumption getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(userId, prmId, from, to, "daily_consumption_max_power"); - } + /* + * public MeterReading getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException + * { + * return getMeasures(userId, prmId, from, to, "daily_consumption_max_power"); + * } + */ } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java index 95d54a81224..099a49ae807 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java @@ -57,8 +57,13 @@ public class LinkyCommandExtension extends AbstractConsoleCommandExtension imple this.thingRegistry = thingRegistry; } + + + @Override public void execute(String[] args, Console console) { + /* + if (args.length >= 2) { Thing thing = getThing(args[0]); ThingHandler thingHandler = null; @@ -121,8 +126,11 @@ public class LinkyCommandExtension extends AbstractConsoleCommandExtension imple } else { printUsage(console); } + */ + } - + + @Override public List getUsages() { return Arrays diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index 23bf0d4018c..c998b6b2571 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.linky.internal.dto; +import java.time.LocalDate; + import org.eclipse.jetty.jaas.spi.UserInfo; import com.google.gson.annotations.SerializedName; @@ -25,9 +27,9 @@ import com.google.gson.annotations.SerializedName; public class IntervalReading { @SerializedName("value") - public String value; + public double value; @SerializedName("date") - public String date; + public LocalDate date; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 8d32d1b722d..06a4645a75b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -42,4 +42,8 @@ public class MeterReading { @SerializedName("interval_reading") public IntervalReading[] intervalReading; + public IntervalReading[] WeekValue; + public IntervalReading[] MonthValue; + public IntervalReading[] YearValue; + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index f83636f0de6..2af4c4f9b36 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -16,12 +16,9 @@ import static org.openhab.binding.linky.internal.LinkyBindingConstants.*; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.WeekFields; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -34,14 +31,12 @@ import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.binding.linky.internal.api.ExpiringDayCache; -import org.openhab.binding.linky.internal.dto.ConsumptionReport.Aggregate; -import org.openhab.binding.linky.internal.dto.ConsumptionReport.Consumption; -import org.openhab.binding.linky.internal.dto.PrmDetail; +import org.openhab.binding.linky.internal.dto.IntervalReading; +import org.openhab.binding.linky.internal.dto.MeterReading; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.core.auth.client.oauth2.OAuthClientService; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.i18n.LocaleProvider; -import org.openhab.core.library.types.DateTimeType; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.unit.MetricPrefix; import org.openhab.core.library.unit.Units; @@ -76,10 +71,11 @@ public class LinkyHandler extends BaseThingHandler { private final Gson gson; private final WeekFields weekFields; - private final ExpiringDayCache cachedDailyData; - private final ExpiringDayCache cachedPowerData; - private final ExpiringDayCache cachedMonthlyData; - private final ExpiringDayCache cachedYearlyData; + private final ExpiringDayCache dailyConsumption; + + // private final ExpiringDayCache cachedPowerData; + // private final ExpiringDayCache cachedMonthlyData; + // private final ExpiringDayCache cachedYearlyData; private @Nullable ScheduledFuture refreshJob; private @Nullable EnedisHttpApi enedisApi; @@ -103,56 +99,61 @@ public class LinkyHandler extends BaseThingHandler { this.gson = gson; this.httpClient = httpClient; this.weekFields = WeekFields.of(localeProvider.getLocale()); - - this.cachedDailyData = new ExpiringDayCache<>("daily cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { - LocalDate today = LocalDate.now(); - Consumption consumption = getConsumptionData(today.minusDays(15), today); - if (consumption != null) { - logData(consumption.aggregats.days, "Day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); - logData(consumption.aggregats.weeks, "Week", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); - consumption = getConsumptionAfterChecks(consumption, Target.LAST); - } - return consumption; - }); - this.oAuthFactory = oAuthFactory; - this.cachedPowerData = new ExpiringDayCache<>("power cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { - // We request data for yesterday and the day before yesterday, even if the data for the day before yesterday - // is not needed by the binding. This is only a workaround to an API bug that will return - // INTERNAL_SERVER_ERROR rather than the expected data with a NaN value when the data for yesterday is not - // yet available. - // By requesting two days, the API is not failing and you get the expected NaN value for yesterday when the - // data is not yet available. + this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); - Consumption consumption = getPowerData(today.minusDays(2), today); - if (consumption != null) { - logData(consumption.aggregats.days, "Day (peak)", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, - Target.ALL); - consumption = getConsumptionAfterChecks(consumption, Target.LAST); - } - return consumption; + MeterReading meterReading = getConsumptionData(today.minusDays(1095), today); + meterReading = getMeterReadingAfterChecks(meterReading); + /* + * if (consumption != null) { + * logData(consumption.aggregats.days, "Day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); + * logData(consumption.aggregats.weeks, "Week", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); + * + * } + */ + return meterReading; }); - this.cachedMonthlyData = new ExpiringDayCache<>("monthly cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { - LocalDate today = LocalDate.now(); - Consumption consumption = getConsumptionData(today.withDayOfMonth(1).minusMonths(1), today); - if (consumption != null) { - logData(consumption.aggregats.months, "Month", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); - consumption = getConsumptionAfterChecks(consumption, Target.LAST); - } - return consumption; - }); - - this.cachedYearlyData = new ExpiringDayCache<>("yearly cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { - LocalDate today = LocalDate.now(); - Consumption consumption = getConsumptionData(LocalDate.of(today.getYear() - 1, 1, 1), today); - if (consumption != null) { - logData(consumption.aggregats.years, "Year", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); - consumption = getConsumptionAfterChecks(consumption, Target.LAST); - } - return consumption; - }); + /* + * this.cachedPowerData = new ExpiringDayCache<>("power cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { + * // We request data for yesterday and the day before yesterday, even if the data for the day before yesterday + * // is not needed by the binding. This is only a workaround to an API bug that will return + * // INTERNAL_SERVER_ERROR rather than the expected data with a NaN value when the data for yesterday is not + * // yet available. + * // By requesting two days, the API is not failing and you get the expected NaN value for yesterday when the + * // data is not yet available. + * LocalDate today = LocalDate.now(); + * Consumption consumption = getPowerData(today.minusDays(2), today); + * if (consumption != null) { + * logData(consumption.aggregats.days, "Day (peak)", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, + * Target.ALL); + * consumption = getConsumptionAfterChecks(consumption, Target.LAST); + * } + * return consumption; + * }); + * + * + * this.cachedMonthlyData = new ExpiringDayCache<>("monthly cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { + * LocalDate today = LocalDate.now(); + * Consumption consumption = getConsumptionData(today.withDayOfMonth(1).minusMonths(1), today); + * if (consumption != null) { + * logData(consumption.aggregats.months, "Month", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); + * consumption = getConsumptionAfterChecks(consumption, Target.LAST); + * } + * return consumption; + * }); + * + * this.cachedYearlyData = new ExpiringDayCache<>("yearly cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { + * LocalDate today = LocalDate.now(); + * Consumption consumption = getConsumptionData(LocalDate.of(today.getYear() - 1, 1, 1), today); + * if (consumption != null) { + * logData(consumption.aggregats.years, "Year", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); + * consumption = getConsumptionAfterChecks(consumption, Target.LAST); + * } + * return consumption; + * }); + */ } @Override @@ -207,27 +208,32 @@ public class LinkyHandler extends BaseThingHandler { */ private synchronized void updateData() { boolean connectedBefore = isConnected(); - updatePowerData(); + updateDailyWeeklyData(); - updateMonthlyData(); - updateYearlyData(); + + // updatePowerData(); + // updateMonthlyData(); + // updateYearlyData(); + if (!connectedBefore && isConnected()) { disconnect(); } } - private synchronized void updatePowerData() { - if (isLinked(PEAK_POWER) || isLinked(PEAK_TIMESTAMP)) { - cachedPowerData.getValue().ifPresentOrElse(values -> { - Aggregate days = values.aggregats.days; - updatekVAChannel(PEAK_POWER, days.datas.get(days.datas.size() - 1)); - updateState(PEAK_TIMESTAMP, new DateTimeType(days.periodes.get(days.datas.size() - 1).dateDebut)); - }, () -> { - updateKwhChannel(PEAK_POWER, Double.NaN); - updateState(PEAK_TIMESTAMP, UnDefType.UNDEF); - }); - } - } + /* + * private synchronized void updatePowerData() { + * if (isLinked(PEAK_POWER) || isLinked(PEAK_TIMESTAMP)) { + * cachedPowerData.getValue().ifPresentOrElse(values -> { + * Aggregate days = values.aggregats.days; + * updateVAChannel(PEAK_POWER, days.datas.get(days.datas.size() - 1)); + * updateState(PEAK_TIMESTAMP, new DateTimeType(days.periodes.get(days.datas.size() - 1).dateDebut)); + * }, () -> { + * updateKwhChannel(PEAK_POWER, Double.NaN); + * updateState(PEAK_TIMESTAMP, UnDefType.UNDEF); + * }); + * } + * } + */ private void setCurrentAndPrevious(Aggregate periods, String currentChannel, String previousChannel) { double currentValue = 0.0; @@ -245,20 +251,38 @@ public class LinkyHandler extends BaseThingHandler { /** * Request new dayly/weekly data and updates channels */ + private synchronized void updateDailyWeeklyData() { if (isLinked(YESTERDAY) || isLinked(LAST_WEEK) || isLinked(THIS_WEEK)) { - cachedDailyData.getValue().ifPresentOrElse(values -> { - Aggregate days = values.aggregats.days; - updateKwhChannel(YESTERDAY, days.datas.get(days.datas.size() - 1)); - setCurrentAndPrevious(values.aggregats.weeks, THIS_WEEK, LAST_WEEK); + dailyConsumption.getValue().ifPresentOrElse(values -> { + int dSize = values.intervalReading.length; + updateKwhChannel(YESTERDAY, values.intervalReading[dSize - 1].value / 1000.00); + + LocalDate currentDt = LocalDate.now(); + int idxCurrentYear = currentDt.getYear() - 2021; + + int currentWeek = (currentDt.getDayOfYear() / 7) + 1; + int currentMonth = currentDt.getMonthValue(); + + int idxCurrentWeek = (52 * idxCurrentYear) + currentWeek; + int idxCurrentMonth = (12 * idxCurrentYear) + currentMonth; + + int idxPreviousWeek = idxCurrentWeek - 1; + int idxPreviousMonth = idxCurrentMonth - 1; + int idxPreviousYear = idxCurrentYear - 1; + + updateKwhChannel(THIS_WEEK, values.WeekValue[idxCurrentWeek].value / 1000.00); + updateKwhChannel(LAST_WEEK, values.WeekValue[idxPreviousWeek].value / 1000.00); + + updateKwhChannel(THIS_MONTH, values.MonthValue[idxCurrentMonth].value / 1000.00); + updateKwhChannel(LAST_MONTH, values.WeekValue[idxPreviousMonth].value / 1000.00); + + updateKwhChannel(THIS_YEAR, values.YearValue[idxCurrentYear].value / 1000.00); + updateKwhChannel(LAST_YEAR, values.YearValue[idxPreviousYear].value / 1000.00); }, () -> { updateKwhChannel(YESTERDAY, Double.NaN); - if (ZonedDateTime.now().get(weekFields.dayOfWeek()) == 1) { - updateKwhChannel(THIS_WEEK, 0.0); - updateKwhChannel(LAST_WEEK, Double.NaN); - } else { - updateKwhChannel(THIS_WEEK, Double.NaN); - } + updateKwhChannel(THIS_WEEK, Double.NaN); + updateKwhChannel(LAST_WEEK, Double.NaN); }); } } @@ -266,36 +290,57 @@ public class LinkyHandler extends BaseThingHandler { /** * Request new monthly data and updates channels */ - private synchronized void updateMonthlyData() { - if (isLinked(LAST_MONTH) || isLinked(THIS_MONTH)) { - cachedMonthlyData.getValue().ifPresentOrElse( - values -> setCurrentAndPrevious(values.aggregats.months, THIS_MONTH, LAST_MONTH), () -> { - if (ZonedDateTime.now().getDayOfMonth() == 1) { - updateKwhChannel(THIS_MONTH, 0.0); - updateKwhChannel(LAST_MONTH, Double.NaN); - } else { - updateKwhChannel(THIS_MONTH, Double.NaN); - } - }); - } - } + + /* + * private synchronized void updateMonthlyData() { + * if (isLinked(LAST_MONTH) || isLinked(THIS_MONTH)) { + * cachedMonthlyData.getValue().ifPresentOrElse(values -> { + * Aggregate months = values.aggregats.months; + * updateKwhChannel(LAST_MONTH, months.datas.get(0)); + * if (months.datas.size() > 1) { + * updateKwhChannel(THIS_MONTH, months.datas.get(1)); + * } else { + * updateKwhChannel(THIS_MONTH, 0.0); + * } + * }, () -> { + * if (ZonedDateTime.now().getDayOfMonth() == 1) { + * updateKwhChannel(THIS_MONTH, 0.0); + * updateKwhChannel(LAST_MONTH, Double.NaN); + * } else { + * updateKwhChannel(THIS_MONTH, Double.NaN); + * } + * }); + * } + * } + */ + /** * Request new yearly data and updates channels */ - private synchronized void updateYearlyData() { - if (isLinked(LAST_YEAR) || isLinked(THIS_YEAR)) { - cachedYearlyData.getValue().ifPresentOrElse( - values -> setCurrentAndPrevious(values.aggregats.years, THIS_YEAR, LAST_YEAR), () -> { - if (ZonedDateTime.now().getDayOfYear() == 1) { - updateKwhChannel(THIS_YEAR, 0.0); - updateKwhChannel(LAST_YEAR, Double.NaN); - } else { - updateKwhChannel(THIS_YEAR, Double.NaN); - } - }); - } - } + + /* + * private synchronized void updateYearlyData() { + * if (isLinked(LAST_YEAR) || isLinked(THIS_YEAR)) { + * cachedYearlyData.getValue().ifPresentOrElse(values -> { + * Aggregate years = values.aggregats.years; + * updateKwhChannel(LAST_YEAR, years.datas.get(0)); + * if (years.datas.size() > 1) { + * updateKwhChannel(THIS_YEAR, years.datas.get(1)); + * } else { + * updateKwhChannel(THIS_YEAR, 0.0); + * } + * }, () -> { + * if (ZonedDateTime.now().getDayOfYear() == 1) { + * updateKwhChannel(THIS_YEAR, 0.0); + * updateKwhChannel(LAST_YEAR, Double.NaN); + * } else { + * updateKwhChannel(THIS_YEAR, Double.NaN); + * } + * }); + * } + * } + */ private void updateKwhChannel(String channelId, double consumption) { logger.debug("Update channel {} with {}", channelId, consumption); @@ -318,65 +363,64 @@ public class LinkyHandler extends BaseThingHandler { * * @return the report as a list of string */ - public synchronized List reportValues(LocalDate startDay, LocalDate endDay, @Nullable String separator) { - List report = buildReport(startDay, endDay, separator); - disconnect(); - return report; - } - private List buildReport(LocalDate startDay, LocalDate endDay, @Nullable String separator) { - List report = new ArrayList<>(); - if (startDay.getYear() == endDay.getYear() && startDay.getMonthValue() == endDay.getMonthValue()) { - // All values in the same month - Consumption result = getConsumptionData(startDay, endDay.plusDays(1)); - if (result != null) { - Aggregate days = result.aggregats.days; - int size = (days.datas == null || days.periodes == null) ? 0 - : (days.datas.size() <= days.periodes.size() ? days.datas.size() : days.periodes.size()); - for (int i = 0; i < size; i++) { - double consumption = days.datas.get(i); - LocalDate day = days.periodes.get(i).dateDebut.toLocalDate(); - // Filter data in case it contains data from dates outside the requested period - if (day.isBefore(startDay) || day.isAfter(endDay)) { - continue; - } - String line = days.periodes.get(i).dateDebut.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator; - if (consumption >= 0) { - line += String.valueOf(consumption); - } - report.add(line); - } - } else { - LocalDate currentDay = startDay; - while (!currentDay.isAfter(endDay)) { - report.add(currentDay.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator); - currentDay = currentDay.plusDays(1); - } - } - } else { - // Concatenate the report produced for each month between the two dates - LocalDate first = startDay; - do { - LocalDate last = first.withDayOfMonth(first.lengthOfMonth()); - if (last.isAfter(endDay)) { - last = endDay; - } - report.addAll(buildReport(first, last, separator)); - first = last.plusDays(1); - } while (!first.isAfter(endDay)); - } - return report; - } + /* + * public synchronized List reportValues(LocalDate startDay, LocalDate endDay, @Nullable String separator) { + * List report = buildReport(startDay, endDay, separator); + * disconnect(); + * return report; + * } + * + * private List buildReport(LocalDate startDay, LocalDate endDay, @Nullable String separator) { + * List report = new ArrayList<>(); + * if (startDay.getYear() == endDay.getYear() && startDay.getMonthValue() == endDay.getMonthValue()) { + * // All values in the same month + * Consumption result = getConsumptionData(startDay, endDay.plusDays(1)); + * if (result != null) { + * Aggregate days = result.aggregats.days; + * int size = (days.datas == null || days.periodes == null) ? 0 + * : (days.datas.size() <= days.periodes.size() ? days.datas.size() : days.periodes.size()); + * for (int i = 0; i < size; i++) { + * double consumption = days.datas.get(i); + * String line = days.periodes.get(i).dateDebut.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator; + * if (consumption >= 0) { + * line += String.valueOf(consumption); + * } + * report.add(line); + * } + * } else { + * LocalDate currentDay = startDay; + * while (!currentDay.isAfter(endDay)) { + * report.add(currentDay.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator); + * currentDay = currentDay.plusDays(1); + * } + * } + * } else { + * // Concatenate the report produced for each month between the two dates + * LocalDate first = startDay; + * do { + * LocalDate last = first.withDayOfMonth(first.lengthOfMonth()); + * if (last.isAfter(endDay)) { + * last = endDay; + * } + * report.addAll(buildReport(first, last, separator)); + * first = last.plusDays(1); + * } while (!first.isAfter(endDay)); + * } + * return report; + * } + */ - private @Nullable Consumption getConsumptionData(LocalDate from, LocalDate to) { + private @Nullable MeterReading getConsumptionData(LocalDate from, LocalDate to) { logger.debug("getConsumptionData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), to.format(DateTimeFormatter.ISO_LOCAL_DATE)); + EnedisHttpApi api = this.enedisApi; if (api != null) { try { - Consumption consumption = api.getEnergyData(userId, prmId, from, to); + MeterReading meterReading = api.getEnergyData(userId, prmId, from, to); updateStatus(ThingStatus.ONLINE); - return consumption; + return meterReading; } catch (LinkyException e) { logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); @@ -385,22 +429,26 @@ public class LinkyHandler extends BaseThingHandler { return null; } - private @Nullable Consumption getPowerData(LocalDate from, LocalDate to) { - logger.debug("getPowerData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), - to.format(DateTimeFormatter.ISO_LOCAL_DATE)); - EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - Consumption consumption = api.getPowerData(userId, prmId, from, to); - updateStatus(ThingStatus.ONLINE); - return consumption; - } catch (LinkyException e) { - logger.debug("Exception when getting power data: {}", e.getMessage(), e); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); - } - } - return null; - } + /* + * + * private @Nullable Consumption getPowerData(LocalDate from, LocalDate to) { + * logger.debug("getPowerData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), + * to.format(DateTimeFormatter.ISO_LOCAL_DATE)); + * EnedisHttpApi api = this.enedisApi; + * if (api != null) { + * try { + * Consumption consumption = api.getPowerData(userId, prmId, from, to); + * updateStatus(ThingStatus.ONLINE); + * return consumption; + * } catch (LinkyException e) { + * logger.debug("Exception when getting power data: {}", e.getMessage(), e); + * updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + * } + * } + * return null; + * } + * + */ private boolean isConnected() { EnedisHttpApi api = this.enedisApi; @@ -443,15 +491,15 @@ public class LinkyHandler extends BaseThingHandler { break; case LAST_MONTH: case THIS_MONTH: - updateMonthlyData(); + // updateMonthlyData(); break; case LAST_YEAR: case THIS_YEAR: - updateYearlyData(); + // updateYearlyData(); break; case PEAK_POWER: case PEAK_TIMESTAMP: - updatePowerData(); + // updatePowerData(); break; default: break; @@ -464,94 +512,119 @@ public class LinkyHandler extends BaseThingHandler { } } - private @Nullable Consumption getConsumptionAfterChecks(Consumption consumption, Target target) { + private @Nullable MeterReading getMeterReadingAfterChecks(@Nullable MeterReading meterReading) { try { - checkData(consumption); + checkData(meterReading); } catch (LinkyException e) { logger.debug("Consumption data: {}", e.getMessage()); return null; } - if (target == Target.FIRST && !isDataFirstDayAvailable(consumption)) { - logger.debug("Data including yesterday are not yet available"); - return null; + + meterReading.WeekValue = new IntervalReading[208]; + meterReading.MonthValue = new IntervalReading[48]; + meterReading.YearValue = new IntervalReading[4]; + + for (int idx = 0; idx < 208; idx++) { + meterReading.WeekValue[idx] = new IntervalReading(); } - if (target == Target.LAST && !isDataLastDayAvailable(consumption)) { - logger.debug("Data including yesterday are not yet available"); - return null; + for (int idx = 0; idx < 48; idx++) { + meterReading.MonthValue[idx] = new IntervalReading(); } - return consumption; + for (int idx = 0; idx < 4; idx++) { + meterReading.YearValue[idx] = new IntervalReading(); + } + + int size = meterReading.intervalReading.length; + int baseYear = meterReading.intervalReading[0].date.getYear(); + + for (int idx = 0; idx < size; idx++) { + IntervalReading ir = meterReading.intervalReading[idx]; + LocalDate dt = ir.date; + double value = ir.value; + + int idxYear = dt.getYear() - baseYear; + + int dayOfYear = dt.getDayOfYear(); + int week = (dayOfYear / 7) + 1; + int month = dt.getMonthValue(); + + int idxMonth = (idxYear * 12) + month; + int idxWeek = (idxYear * 52) + week; + + meterReading.WeekValue[idxWeek].value += value; + meterReading.MonthValue[idxMonth].value += value; + meterReading.YearValue[idxYear].value += value; + } + + return meterReading; } - private void checkData(Consumption consumption) throws LinkyException { - if (consumption.aggregats.days.periodes.isEmpty()) { - throw new LinkyException("Invalid consumptions data: no day period"); + private void checkData(@Nullable MeterReading meterReading) throws LinkyException { + if (meterReading.intervalReading.length == 0) { + throw new LinkyException("Invalid meterReading data: no day period"); } - if (consumption.aggregats.days.periodes.size() != consumption.aggregats.days.datas.size()) { - throw new LinkyException("Invalid consumptions data: not any data for each day period"); - } - if (consumption.aggregats.weeks.periodes.isEmpty()) { - throw new LinkyException("Invalid consumptions data: no week period"); - } - if (consumption.aggregats.weeks.periodes.size() != consumption.aggregats.weeks.datas.size()) { - throw new LinkyException("Invalid consumptions data: not any data for each week period"); - } - if (consumption.aggregats.months.periodes.isEmpty()) { - throw new LinkyException("Invalid consumptions data: no month period"); - } - if (consumption.aggregats.months.periodes.size() != consumption.aggregats.months.datas.size()) { - throw new LinkyException("Invalid consumptions data: not any data for each month period"); - } - if (consumption.aggregats.years.periodes.isEmpty()) { - throw new LinkyException("Invalid consumptions data: no year period"); - } - if (consumption.aggregats.years.periodes.size() != consumption.aggregats.years.datas.size()) { - throw new LinkyException("Invalid consumptions data: not any data for each year period"); + if (meterReading.intervalReading.length != 1095) { + throw new LinkyException("Imcomplete meterReading data < 1095 days"); } + } - private boolean isDataFirstDayAvailable(Consumption consumption) { - Aggregate days = consumption.aggregats.days; - logData(days, "First day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.FIRST); - return days.datas != null && !days.datas.isEmpty() && !days.datas.get(0).isNaN(); - } - - private boolean isDataLastDayAvailable(Consumption consumption) { - Aggregate days = consumption.aggregats.days; - logData(days, "Last day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.LAST); - return days.datas != null && !days.datas.isEmpty() && !days.datas.get(days.datas.size() - 1).isNaN(); - } - - private void logData(Aggregate aggregate, String title, boolean withDateFin, DateTimeFormatter dateTimeFormatter, - Target target) { - if (logger.isDebugEnabled()) { - int size = (aggregate.datas == null || aggregate.periodes == null) ? 0 - : (aggregate.datas.size() <= aggregate.periodes.size() ? aggregate.datas.size() - : aggregate.periodes.size()); - if (target == Target.FIRST) { - if (size > 0) { - logData(aggregate, 0, title, withDateFin, dateTimeFormatter); - } - } else if (target == Target.LAST) { - if (size > 0) { - logData(aggregate, size - 1, title, withDateFin, dateTimeFormatter); - } - } else { - for (int i = 0; i < size; i++) { - logData(aggregate, i, title, withDateFin, dateTimeFormatter); - } - } - } - } - - private void logData(Aggregate aggregate, int index, String title, boolean withDateFin, - DateTimeFormatter dateTimeFormatter) { - if (withDateFin) { - logger.debug("{} {} {} value {}", title, aggregate.periodes.get(index).dateDebut.format(dateTimeFormatter), - aggregate.periodes.get(index).dateFin.format(dateTimeFormatter), aggregate.datas.get(index)); - } else { - logger.debug("{} {} value {}", title, aggregate.periodes.get(index).dateDebut.format(dateTimeFormatter), - aggregate.datas.get(index)); - } - } + /* + * private @Nullable Consumption getConsumptionAfterChecks(Consumption consumption, Target target) { + * + * + * + * return consumption; + * } + * + * + * + * private boolean isDataFirstDayAvailable(Consumption consumption) { + * Aggregate days = consumption.aggregats.days; + * logData(days, "First day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.FIRST); + * return days.datas != null && !days.datas.isEmpty() && !days.datas.get(0).isNaN(); + * } + * + * private boolean isDataLastDayAvailable(Consumption consumption) { + * Aggregate days = consumption.aggregats.days; + * logData(days, "Last day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.LAST); + * return days.datas != null && !days.datas.isEmpty() && !days.datas.get(days.datas.size() - 1).isNaN(); + * } + * + * + * private void logData(Aggregate aggregate, String title, boolean withDateFin, DateTimeFormatter dateTimeFormatter, + * Target target) { + * if (logger.isDebugEnabled()) { + * int size = (aggregate.datas == null || aggregate.periodes == null) ? 0 + * : (aggregate.datas.size() <= aggregate.periodes.size() ? aggregate.datas.size() + * : aggregate.periodes.size()); + * if (target == Target.FIRST) { + * if (size > 0) { + * logData(aggregate, 0, title, withDateFin, dateTimeFormatter); + * } + * } else if (target == Target.LAST) { + * if (size > 0) { + * logData(aggregate, size - 1, title, withDateFin, dateTimeFormatter); + * } + * } else { + * for (int i = 0; i < size; i++) { + * logData(aggregate, i, title, withDateFin, dateTimeFormatter); + * } + * } + * } + * } + * + * private void logData(Aggregate aggregate, int index, String title, boolean withDateFin, + * DateTimeFormatter dateTimeFormatter) { + * if (withDateFin) { + * logger.debug("{} {} {} value {}", title, aggregate.periodes.get(index).dateDebut.format(dateTimeFormatter), + * aggregate.periodes.get(index).dateFin.format(dateTimeFormatter), aggregate.datas.get(index)); + * } else { + * logger.debug("{} {} value {}", title, aggregate.periodes.get(index).dateDebut.format(dateTimeFormatter), + * aggregate.datas.get(index)); + * } + * } + * + */ } From cfda793db1342a14e4589bca4dcff18720b61f77 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 26 Jan 2024 15:55:24 +0100 Subject: [PATCH 003/135] add max consumption data Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 29 +++++++++---- .../linky/internal/LinkyHandlerFactory.java | 18 +++++++- .../linky/internal/api/EnedisHttpApi.java | 15 +++---- .../linky/internal/dto/IntervalReading.java | 4 +- .../linky/internal/dto/MeterReading.java | 8 ++-- .../resources/OH-INF/thing/thing-types.xml | 43 +++++++++++++++---- 6 files changed, 82 insertions(+), 35 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 119926c61e3..0e058a9e633 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -39,15 +39,26 @@ public class LinkyBindingConstants { public static final String USER_ID = "customerId"; // List of all Channel id's - public static final String YESTERDAY = "daily#yesterday"; - public static final String PEAK_POWER = "daily#power"; - public static final String PEAK_TIMESTAMP = "daily#timestamp"; - public static final String THIS_WEEK = "weekly#thisWeek"; - public static final String LAST_WEEK = "weekly#lastWeek"; - public static final String THIS_MONTH = "monthly#thisMonth"; - public static final String LAST_MONTH = "monthly#lastMonth"; - public static final String THIS_YEAR = "yearly#thisYear"; - public static final String LAST_YEAR = "yearly#lastYear"; + public static final String DAY_MINUS_1 = "daily#day-1"; + public static final String DAY_MINUS_2 = "daily#day-2"; + public static final String DAY_MINUS_3 = "daily#day-3"; + + public static final String PEAK_POWER_DAY_MINUS_1 = "daily#maxPower-day-1"; + public static final String PEAK_POWER_TS_DAY_MINUS_1 = "daily#maxPowerTs-day-1"; + public static final String PEAK_POWER_DAY_MINUS_2 = "daily#maxPower-day-2"; + public static final String PEAK_POWER_TS_DAY_MINUS_2 = "daily#maxPowerTs-day-2"; + public static final String PEAK_POWER_DAY_MINUS_3 = "daily#maxPower-day-3"; + public static final String PEAK_POWER_TS_DAY_MINUS_3 = "daily#maxPowerTs-day-3"; + + public static final String WEEK_MINUS_0 = "weekly#week-0"; + public static final String WEEK_MINUS_1 = "weekly#week-1"; + public static final String WEEK_MINUS_2 = "weekly#week-2"; + public static final String MONTH_MINUS_0 = "monthly#month-0"; + public static final String MONTH_MINUS_1 = "monthly#month-1"; + public static final String MONTH_MINUS_2 = "monthly#month-2"; + public static final String YEAR_MINUS_0 = "yearly#year-0"; + public static final String YEAR_MINUS_1 = "yearly#year-1"; + public static final String YEAR_MINUS_2 = "yearly#year-2"; // Authorization related Servlet and resources aliases. public static final String LINKY_ALIAS = "/connectlinky"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index fcc2f06a48d..8eac00ca475 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -15,6 +15,7 @@ package org.openhab.binding.linky.internal; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; @@ -56,7 +57,9 @@ import com.google.gson.JsonDeserializer; @Component(service = ThingHandlerFactory.class, configurationPid = "binding.linky") public class LinkyHandlerFactory extends BaseThingHandlerFactory implements LinkyAccountHandler { private static final DateTimeFormatter LINKY_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); - private static final DateTimeFormatter LINKY_FORMATTER2 = DateTimeFormatter.ofPattern("uuuu-MM-dd"); + private static final DateTimeFormatter LINKY_LOCALDATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd"); + private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = DateTimeFormatter + .ofPattern("uuuu-MM-dd HH:mm:ss"); private static final int REQUEST_BUFFER_SIZE = 8000; private static final int RESPONSE_BUFFER_SIZE = 200000; @@ -67,7 +70,18 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link .parse(json.getAsJsonPrimitive().getAsString(), LINKY_FORMATTER)) .registerTypeAdapter(LocalDate.class, (JsonDeserializer) (json, type, jsonDeserializationContext) -> LocalDate - .parse(json.getAsJsonPrimitive().getAsString(), LINKY_FORMATTER2)) + .parse(json.getAsJsonPrimitive().getAsString(), LINKY_LOCALDATE_FORMATTER)) + .registerTypeAdapter(LocalDateTime.class, + (JsonDeserializer) (json, type, jsonDeserializationContext) -> { + try { + return LocalDateTime.parse(json.getAsJsonPrimitive().getAsString(), + LINKY_LOCALDATETIME_FORMATTER); + } catch (Exception ex) { + return LocalDate.parse(json.getAsJsonPrimitive().getAsString(), LINKY_LOCALDATE_FORMATTER) + .atStartOfDay(); + } + }) + .create(); private final LocaleProvider localeProvider; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 58827531f18..5903548481b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -165,7 +165,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(String.format("%s/%s/cache", ADDRESS_URL, "21454992660003")); + String data = getData(String.format("%s/%s/cache", ADDRESS_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", ADDRESS_URL); } @@ -185,7 +185,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(String.format("%s/%s/cache", IDENTITY_URL, "21454992660003")); + String data = getData(String.format("%s/%s/cache", IDENTITY_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", IDENTITY_URL); } @@ -205,7 +205,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(String.format("%s/%s/cache", CONTACT_URL, "21454992660003")); + String data = getData(String.format("%s/%s/cache", CONTACT_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTACT_URL); } @@ -251,10 +251,7 @@ public class EnedisHttpApi { return getMeasures(userId, prmId, from, to, "daily_consumption"); } - /* - * public MeterReading getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException - * { - * return getMeasures(userId, prmId, from, to, "daily_consumption_max_power"); - * } - */ + public MeterReading getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { + return getMeasures(userId, prmId, from, to, "daily_consumption_max_power"); + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index c998b6b2571..7c8055aebea 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -12,7 +12,7 @@ */ package org.openhab.binding.linky.internal.dto; -import java.time.LocalDate; +import java.time.LocalDateTime; import org.eclipse.jetty.jaas.spi.UserInfo; @@ -30,6 +30,6 @@ public class IntervalReading { public double value; @SerializedName("date") - public LocalDate date; + public LocalDateTime date; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 06a4645a75b..c182bb86a0a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -40,10 +40,10 @@ public class MeterReading { public ReadingType readingType; @SerializedName("interval_reading") - public IntervalReading[] intervalReading; + public IntervalReading[] dayValue; - public IntervalReading[] WeekValue; - public IntervalReading[] MonthValue; - public IntervalReading[] YearValue; + public IntervalReading[] weekValue; + public IntervalReading[] monthValue; + public IntervalReading[] yearValue; } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 778b374ed24..8d1f55ad0e7 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -34,50 +34,75 @@ - + - - + + + + + + + + Maximum power usage timestamp + + + + Maximum power usage timestamp + + + + + Maximum power usage timestamp + - + - + + + + - + - + + + + - + - + + + + From 3f27bf33658ddae16ec441035b122cbc93f56893 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 26 Jan 2024 17:41:08 +0100 Subject: [PATCH 004/135] reintegrate repporting features inside binding Signed-off-by: Laurent ARNAL --- .../console/LinkyCommandExtension.java | 10 +- .../linky/internal/handler/LinkyHandler.java | 94 ++++++++++--------- 2 files changed, 49 insertions(+), 55 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java index 099a49ae807..95d54a81224 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java @@ -57,13 +57,8 @@ public class LinkyCommandExtension extends AbstractConsoleCommandExtension imple this.thingRegistry = thingRegistry; } - - - @Override public void execute(String[] args, Console console) { - /* - if (args.length >= 2) { Thing thing = getThing(args[0]); ThingHandler thingHandler = null; @@ -126,11 +121,8 @@ public class LinkyCommandExtension extends AbstractConsoleCommandExtension imple } else { printUsage(console); } - */ - } - - + @Override public List getUsages() { return Arrays diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 2af4c4f9b36..8d145fa2c0f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -19,6 +19,8 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.WeekFields; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -364,52 +366,52 @@ public class LinkyHandler extends BaseThingHandler { * @return the report as a list of string */ - /* - * public synchronized List reportValues(LocalDate startDay, LocalDate endDay, @Nullable String separator) { - * List report = buildReport(startDay, endDay, separator); - * disconnect(); - * return report; - * } - * - * private List buildReport(LocalDate startDay, LocalDate endDay, @Nullable String separator) { - * List report = new ArrayList<>(); - * if (startDay.getYear() == endDay.getYear() && startDay.getMonthValue() == endDay.getMonthValue()) { - * // All values in the same month - * Consumption result = getConsumptionData(startDay, endDay.plusDays(1)); - * if (result != null) { - * Aggregate days = result.aggregats.days; - * int size = (days.datas == null || days.periodes == null) ? 0 - * : (days.datas.size() <= days.periodes.size() ? days.datas.size() : days.periodes.size()); - * for (int i = 0; i < size; i++) { - * double consumption = days.datas.get(i); - * String line = days.periodes.get(i).dateDebut.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator; - * if (consumption >= 0) { - * line += String.valueOf(consumption); - * } - * report.add(line); - * } - * } else { - * LocalDate currentDay = startDay; - * while (!currentDay.isAfter(endDay)) { - * report.add(currentDay.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator); - * currentDay = currentDay.plusDays(1); - * } - * } - * } else { - * // Concatenate the report produced for each month between the two dates - * LocalDate first = startDay; - * do { - * LocalDate last = first.withDayOfMonth(first.lengthOfMonth()); - * if (last.isAfter(endDay)) { - * last = endDay; - * } - * report.addAll(buildReport(first, last, separator)); - * first = last.plusDays(1); - * } while (!first.isAfter(endDay)); - * } - * return report; - * } - */ + public synchronized List reportValues(LocalDate startDay, LocalDate endDay, @Nullable String separator) { + List report = buildReport(startDay, endDay, separator); + disconnect(); + return report; + } + + private List buildReport(LocalDate startDay, LocalDate endDay, @Nullable String separator) { + List report = new ArrayList<>(); + if (startDay.getYear() == endDay.getYear() && startDay.getMonthValue() == endDay.getMonthValue()) { + // All values in the same month + MeterReading meterReading = getConsumptionData(startDay, endDay.plusDays(1)); + if (meterReading != null) { + + IntervalReading[] days = meterReading.dayValue; + + int size = days.length; + + for (int i = 0; i < size; i++) { + double consumption = days[i].value; + String line = days[i].date.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator; + if (consumption >= 0) { + line += String.valueOf(consumption); + } + report.add(line); + } + } else { + LocalDate currentDay = startDay; + while (!currentDay.isAfter(endDay)) { + report.add(currentDay.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator); + currentDay = currentDay.plusDays(1); + } + } + } else { + // Concatenate the report produced for each month between the two dates + LocalDate first = startDay; + do { + LocalDate last = first.withDayOfMonth(first.lengthOfMonth()); + if (last.isAfter(endDay)) { + last = endDay; + } + report.addAll(buildReport(first, last, separator)); + first = last.plusDays(1); + } while (!first.isAfter(endDay)); + } + return report; + } private @Nullable MeterReading getConsumptionData(LocalDate from, LocalDate to) { logger.debug("getConsumptionData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), From 3e2b9bba1ce5e371a7f7b70ceba38b8eaab5a9d0 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 27 Jan 2024 09:25:33 +0100 Subject: [PATCH 005/135] refactor authservice to break link between handler and auth Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthServlet.java | 88 +++++++++-- .../linky/internal/LinkyBindingConstants.java | 10 +- .../linky/internal/LinkyConfiguration.java | 2 +- .../linky/internal/LinkyHandlerFactory.java | 141 +++++++++++++++++- .../linky/internal/api/EnedisHttpApi.java | 32 +++- .../linky/internal/handler/LinkyHandler.java | 15 +- .../resources/OH-INF/i18n/linky.properties | 2 +- .../resources/OH-INF/i18n/linky_fr.properties | 3 +- .../resources/OH-INF/thing/thing-types.xml | 4 +- .../src/main/resources/templates/index.html | 17 ++- 10 files changed, 261 insertions(+), 53 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index f659de06d36..bd15331dbeb 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -13,6 +13,7 @@ package org.openhab.binding.linky.internal; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -25,6 +26,9 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jetty.util.MultiMap; +import org.eclipse.jetty.util.StringUtil; +import org.eclipse.jetty.util.UrlEncoded; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,8 +46,20 @@ public class LinkyAuthServlet extends HttpServlet { private static final Pattern MESSAGE_KEY_PATTERN = Pattern.compile("\\$\\{([^\\}]+)\\}"); + private static final String CONTENT_TYPE = "text/html;charset=UTF-8"; + + private static final String HTML_USER_AUTHORIZED = "

Addon authorized for user %s.

"; + private static final String HTML_ERROR = "

Call to Enedis failed with error: %s

"; + + private static final String HTML_META_REFRESH_CONTENT = ""; + // Keys present in the index.html - private static final String KEY_BRIDGE_URI = "bridge.uri"; + private static final String KEY_AUTHORIZE_URI = "authorize.uri"; + private static final String KEY_RETRIEVE_TOKEN_URI = "retrieveToken.uri"; + private static final String KEY_REDIRECT_URI = "redirectUri"; + private static final String KEY_AUTHORIZED_USER = "authorizedUser"; + private static final String KEY_ERROR = "error"; + private static final String KEY_PAGE_REFRESH = "pageRefresh"; private final Logger logger = LoggerFactory.getLogger(LinkyAuthServlet.class); private final LinkyAuthService linkyAuthService; @@ -59,25 +75,67 @@ public class LinkyAuthServlet extends HttpServlet { throws ServletException, IOException { logger.debug("Linky auth callback servlet received GET request {}.", req.getRequestURI()); final Map replaceMap = new HashMap<>(); - /* - * - * final String servletBaseURL = req.getRequestURL().toString(); - * final String queryString = req.getQueryString(); - * - * - * String servletBaseURLSecure = servletBaseURL.replace("http://", "https://").replace("8080", "8443"); - * handleSmartthingsRedirect(replaceMap, servletBaseURLSecure, queryString); - * resp.setContentType(CONTENT_TYPE); - * LinkyAccountHandler accountHandler = linkyAuthService.getLinkyAccountHandler(); - */ - String uri = "https://mon-compte-particulier.enedis.fr/dataconnect/v1/oauth2/authorize?client_id=e551937c-5250-48bc-b4a6-2323af68db92&duration=P36M&response_type=code"; - // replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); - replaceMap.put(KEY_BRIDGE_URI, uri); + final String servletBaseURL = req.getRequestURL().toString(); + + String servletBaseURLSecure = servletBaseURL; + // .replace("http://", "https://"); + // .replace("8080", "8443"); + servletBaseURLSecure = servletBaseURLSecure + "?state=OK"; + + handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); + + LinkyAccountHandler accountHandler = linkyAuthService.getLinkyAccountHandler(); + + resp.setContentType(CONTENT_TYPE); + replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); + replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure); + replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); resp.getWriter().close(); } + /** + * Handles a possible call from Enedis to the redirect_uri. If that is the case Spotify will pass the authorization + * codes via the url and these are processed. In case of an error this is shown to the user. If the user was + * authorized this is passed on to the handler. Based on all these different outcomes the HTML is generated to + * inform the user. + * + * @param replaceMap a map with key String values that will be mapped in the HTML templates. + * @param servletBaseURL the servlet base, which should be used as the Spotify redirect_uri value + * @param queryString the query part of the GET request this servlet is processing + */ + private void handleLinkyRedirect(Map replaceMap, String servletBaseURL, + @Nullable String queryString) { + replaceMap.put(KEY_AUTHORIZED_USER, ""); + replaceMap.put(KEY_ERROR, ""); + replaceMap.put(KEY_PAGE_REFRESH, ""); + + if (queryString != null) { + final MultiMap params = new MultiMap<>(); + UrlEncoded.decodeTo(queryString, params, StandardCharsets.UTF_8.name()); + final String reqCode = params.getString("code"); + final String reqState = params.getString("state"); + final String reqError = params.getString("error"); + + replaceMap.put(KEY_PAGE_REFRESH, + params.isEmpty() ? "" : String.format(HTML_META_REFRESH_CONTENT, servletBaseURL)); + + if (!StringUtil.isBlank(reqError)) { + logger.debug("Spotify redirected with an error: {}", reqError); + replaceMap.put(KEY_ERROR, String.format(HTML_ERROR, reqError)); + } else if (!StringUtil.isBlank(reqState)) { + try { + replaceMap.put(KEY_AUTHORIZED_USER, String.format(HTML_USER_AUTHORIZED, + linkyAuthService.authorize(servletBaseURL, reqState, reqCode))); + } catch (RuntimeException e) { + logger.debug("Exception during authorizaton: ", e); + replaceMap.put(KEY_ERROR, String.format(HTML_ERROR, e.getMessage())); + } + } + } + } + /** * Replaces all keys from the map found in the template with values from the map. If the key is not found the key * will be kept in the template. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 0e058a9e633..7846f53f37b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -72,8 +72,12 @@ public class LinkyBindingConstants { "r:installedapps", "w:installedapps").collect(Collectors.joining(" ")); // List of Spotify services related urls, information - public static final String LINKY_ACCOUNT_URL = "https://api.smartthings.com/oauth"; - public static final String LINKY_AUTHORIZE_URL = LINKY_ACCOUNT_URL + "/authorize"; - public static final String LINKY_API_TOKEN_URL = LINKY_ACCOUNT_URL + "/token"; + public static final String LINKY_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; + public static final String LINKY_AUTHORIZE_URL = LINKY_ACCOUNT_URL + "v1/oauth2/authorize"; + public static final String LINKY_API_TOKEN_URL = LINKY_ACCOUNT_URL + "token"; + + public static final String ENEDIS_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; + public static final String ENEDIS_AUTHORIZE_URL = ENEDIS_ACCOUNT_URL + "dataconnect/v1/oauth2/authorize"; + public static final String ENEDIS_API_TOKEN_URL = ENEDIS_ACCOUNT_URL + "token"; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java index 6bfa0f6403b..5847b113b72 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java @@ -27,6 +27,6 @@ public class LinkyConfiguration { public String prmId = ""; public boolean seemsValid() { - return !token.isBlank() && !prmId.isBlank(); + return !prmId.isBlank(); } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 8eac00ca475..940d4238493 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -12,12 +12,14 @@ */ package org.openhab.binding.linky.internal; +import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; +import java.util.Collection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; @@ -27,11 +29,17 @@ import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.openhab.binding.linky.internal.handler.LinkyHandler; +import org.openhab.core.auth.client.oauth2.AccessTokenResponse; +import org.openhab.core.auth.client.oauth2.OAuthClientService; +import org.openhab.core.auth.client.oauth2.OAuthException; import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.auth.client.oauth2.OAuthResponseException; +import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.io.net.http.TrustAllTrustManager; import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingRegistry; import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.binding.BaseThingHandlerFactory; import org.openhab.core.thing.binding.ThingHandler; @@ -63,6 +71,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link private static final int REQUEST_BUFFER_SIZE = 8000; private static final int RESPONSE_BUFFER_SIZE = 200000; + private final String clientId = "e551937c-5250-48bc-b4a6-2323af68db92"; + private final String clientSecret = ""; + private final Logger logger = LoggerFactory.getLogger(LinkyHandlerFactory.class); private final Gson gson = new GsonBuilder() .registerTypeAdapter(ZonedDateTime.class, @@ -88,11 +99,14 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link private final HttpClient httpClient; private final OAuthFactory oAuthFactory; private final LinkyAuthService authService; + private final boolean oAuthSupport = false; + private @Nullable OAuthClientService oAuthService; + private final ThingRegistry thingRegistry; @Activate public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, final @Reference HttpClientFactory httpClientFactory, final @Reference LinkyAuthService authService, - final @Reference OAuthFactory oAuthFactory) { + final @Reference OAuthFactory oAuthFactory, final @Reference ThingRegistry thingRegistry) { this.localeProvider = localeProvider; SslContextFactory sslContextFactory = new SslContextFactory.Client(); try { @@ -105,12 +119,19 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link } catch (KeyManagementException e) { logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); } + this.thingRegistry = thingRegistry; this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); httpClient.setFollowRedirects(false); httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); httpClient.setResponseBufferSize(RESPONSE_BUFFER_SIZE); this.oAuthFactory = oAuthFactory; this.authService = authService; + + this.oAuthService = oAuthFactory.createOAuthClientService("Linky", LinkyBindingConstants.LINKY_API_TOKEN_URL, + LinkyBindingConstants.LINKY_AUTHORIZE_URL, clientId, clientSecret, LinkyBindingConstants.LINKY_SCOPES, + true); + this.authService.setLinkyAccountHandler(this); + } @Override @@ -141,26 +162,130 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link @Override protected @Nullable ThingHandler createHandler(Thing thing) { - authService.setLinkyAccountHandler(this); + if (supportsThingType(thing.getThingTypeUID())) { + LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient, oAuthFactory); + return handler; + } - return supportsThingType(thing.getThingTypeUID()) - ? new LinkyHandler(thing, localeProvider, gson, httpClient, oAuthFactory) - : null; + return null; } + // =========================================================================== + @Override public boolean isAuthorized() { - return true; + final AccessTokenResponse accessTokenResponse = getAccessTokenResponse(); + + return accessTokenResponse != null && accessTokenResponse.getAccessToken() != null + && accessTokenResponse.getRefreshToken() != null; + + } + + private @Nullable AccessTokenResponse getAccessTokenResponse() { + try { + OAuthClientService oAuthService = this.oAuthService; + return oAuthService == null ? null : oAuthService.getAccessTokenResponse(); + } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { + logger.debug("Exception checking authorization: ", e); + return null; + } } @Override - public String authorize(String redirectUrl, String reqCode) { + public String authorize(String redirectUri, String reqCode) { + // Will work only in case of direct oAuth2 authentification to enedis + // this is not the case in v1 as we go trough MyElectricalData + + if (oAuthSupport) { + try { + OAuthClientService oAuthService = this.oAuthService; + if (oAuthService == null) { + throw new OAuthException("OAuth service is not initialized"); + } + logger.debug("Make call to Smartthings to get access token."); + final AccessTokenResponse credentials = oAuthService.getAccessTokenResponseByAuthorizationCode(reqCode, + redirectUri); + final String user = updateProperties(credentials); + logger.debug("Authorized for user: {}", user); + return user; + } catch (RuntimeException | OAuthException | IOException e) { + // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); + throw new RuntimeException(e.getMessage(), e); + } catch (final OAuthResponseException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + // Fallback for MyElectricalData + else { + String token = ""; + /* + * String token = enedisApi.getToken(clientId, config.prmId); + * config.token = token; + * + * Configuration configuration = getConfig(); + * configuration.put("token", token); + * updateConfiguration(configuration); + */ + return token; + } + } + + private String updateProperties(AccessTokenResponse credentials) { + /* + * if (spotifyApi != null) { + * + * final Me me = spotifyApi.getMe(); + * final String user = me.getDisplayName() == null ? me.getId() : me.getDisplayName(); + * final Map props = editProperties(); + * + * props.put(PROPERTY_SPOTIFY_USER, user); + * updateProperties(props); + * return user; + * } + */ return ""; } @Override public String formatAuthorizationUrl(String redirectUri) { - return ""; + // Will work only in case of direct oAuth2 authentification to enedis + // this is not the case in v1 as we go trough MyElectricalData + if (oAuthSupport) { + try { + OAuthClientService oAuthService = this.oAuthService; + if (oAuthService == null) { + throw new OAuthException("OAuth service is not initialized"); + } + + String uri = oAuthService.getAuthorizationUrl(redirectUri, null, "Linky"); + return uri; + } catch (final OAuthException e) { + logger.debug("Error constructing AuthorizationUrl: ", e); + return ""; + } + } + // Fallback for MyElectricalData + else { + Collection col = this.thingRegistry.getAll(); + for (Thing thing : col) { + if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { + + Configuration config = thing.getConfiguration(); + + String prmId = (String) config.get("prmId"); + prmId = prmId + ""; + + } + } + + String uri = LinkyBindingConstants.ENEDIS_AUTHORIZE_URL; + uri = uri + "?"; + uri = uri + "&client_id=" + clientId; + uri = uri + "&duration=" + "P36M"; + uri = uri + "&response_type=" + "code"; + return uri; + } + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 5903548481b..c77dc4e7e6c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeoutException; import javax.ws.rs.core.MediaType; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; @@ -71,14 +72,17 @@ public class EnedisHttpApi { private static final String ADDRESS_URL = BASE_URL + "addresses"; private static final String MEASURE_URL = BASE_URL + "%s/%s/start/%s/end/%s/cache"; + private static final String TOKEN_URL = BASE_URL + + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; + private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; - private final LinkyConfiguration config; + private @Nullable LinkyConfiguration config; private boolean connected = false; - public EnedisHttpApi(LinkyConfiguration config, Gson gson, HttpClient httpClient) { + public EnedisHttpApi(@Nullable LinkyConfiguration config, Gson gson, HttpClient httpClient) { this.gson = gson; this.httpClient = httpClient; this.config = config; @@ -110,9 +114,21 @@ public class EnedisHttpApi { try { Request request = httpClient.newRequest(url); request = request.method(HttpMethod.GET); - request = request.header("Authorization", config.token); ContentResponse result = request.send(); + if (result.getStatus() == 307) { + String loc = result.getHeaders().get("Location"); + url = BASE_URL + loc.substring(1); + request = httpClient.newRequest(url); + request = request.method(HttpMethod.GET); + result = request.send(); + + if (result.getStatus() == 307) { + loc = result.getHeaders().get("Location"); + String res = loc.split("/")[3]; + return res; + } + } if (result.getStatus() != 200) { throw new LinkyException("Error requesting '%s' : %s", url, result.getContentAsString()); } @@ -254,4 +270,14 @@ public class EnedisHttpApi { public MeterReading getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { return getMeasures(userId, prmId, from, to, "daily_consumption_max_power"); } + + public String getToken(String clientId, String prmId) { + try { + String url = String.format(TOKEN_URL, clientId, prmId); + String token = getData(url); + return token; + } catch (LinkyException e) { + return ""; + } + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 8d145fa2c0f..56001489b79 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -28,7 +28,6 @@ import java.util.concurrent.TimeUnit; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; -import org.openhab.binding.linky.internal.LinkyBindingConstants; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; @@ -36,7 +35,6 @@ import org.openhab.binding.linky.internal.api.ExpiringDayCache; import org.openhab.binding.linky.internal.dto.IntervalReading; import org.openhab.binding.linky.internal.dto.MeterReading; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.core.auth.client.oauth2.OAuthClientService; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.library.types.QuantityType; @@ -75,9 +73,7 @@ public class LinkyHandler extends BaseThingHandler { private final ExpiringDayCache dailyConsumption; - // private final ExpiringDayCache cachedPowerData; - // private final ExpiringDayCache cachedMonthlyData; - // private final ExpiringDayCache cachedYearlyData; + private @Nullable LinkyConfiguration config; private @Nullable ScheduledFuture refreshJob; private @Nullable EnedisHttpApi enedisApi; @@ -93,8 +89,6 @@ public class LinkyHandler extends BaseThingHandler { ALL } - private @Nullable OAuthClientService oAuthService; - public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient, OAuthFactory oAuthFactory) { super(thing); @@ -163,13 +157,8 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("Initializing Linky handler."); updateStatus(ThingStatus.UNKNOWN); - LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); + config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { - - OAuthClientService oAuthService = oAuthFactory.createOAuthClientService(thing.getUID().getAsString(), - LinkyBindingConstants.LINKY_API_TOKEN_URL, LinkyBindingConstants.LINKY_AUTHORIZE_URL, "clientId", - "clientSecret", LinkyBindingConstants.LINKY_SCOPES, true); - enedisApi = new EnedisHttpApi(config, gson, httpClient); scheduler.submit(() -> { try { diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties index 9eeaf4460fd..4c38a8b0de1 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties @@ -43,4 +43,4 @@ channel-type.linky.timestamp.label = Timestamp # Thing status descriptions -offline.config-error-mandatory-settings = Username, password and authId are mandatory. +offline.config-error-mandatory-settings = The PrmId is mandatory. diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties index a62d52db76e..9dc8f36289e 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties @@ -43,4 +43,5 @@ channel-type.linky.timestamp.label = Horodatage # Thing status descriptions -offline.config-error-mandatory-settings = Le nom d'utilisateur, le mot de passe et l'ID d'authentification sont obligatoires. +offline.config-error-mandatory-settings = Le PrmId est obligatoire. + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 8d1f55ad0e7..b2725d14847 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -24,9 +24,9 @@ Your PrmId - + - Your Enedis token + Your Enedis token (can be left empty, use the connection page to automatically fill it http://youopenhab/connectlinky) diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html index b5e0ce91ca5..0a637709206 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html @@ -4,7 +4,7 @@ ${pageRefresh} -Authorize openHAB binding for Smartthings +Authorize openHAB Linky binding for Enedis + + - + + +


+

Authorize openHAB Linky binding for Enedis

On this page you can authorize the openHAB Linky binding to access your Enedis account.

@@ -75,19 +166,48 @@ html {

${error} ${authorizedUser} +
+

This process need to be done for each electrical meter you have (each prmId).
+ This is a two step process:
+

    +
  1. First you will need to do a consent on the enedis Site.
    + For this, click on the Authorize button.
    + You will be redirect to the enedis site. Login as usual with your userName / Password.
    + You will then be redirect to a consentment page.
    + You will have to select which prmId you would like to give the consent, click the checkbox, and then click on the validate button.
    + After this, you will be redirect to myelectricaldata information page.
    +
  2. + +
  3. Second, come back to the /connectlinky page.
    + If you have multiple prm, select the PrmId in the combobox you want to authorize.v + Then click the Retrieve token button.
    + It will fill you linky thing configuration with the token.
    +
+ + +

+ +


- Connect to Enedis: -

-

-

- -

+

Connect to Enedis:

+
+
+
+
+ Please select your prmId : + +
+ + +
From 6f8b6a621ae7f12c7f55a9b31aa8ff4afab5a559 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 1 Feb 2024 19:31:05 +0100 Subject: [PATCH 008/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../src/main/feature/feature.xml | 2 +- .../linky/internal/LinkyAuthService.java | 2 +- .../linky/internal/LinkyAuthServlet.java | 2 +- .../linky/internal/LinkyBindingConstants.java | 1 - .../linky/internal/LinkyHandlerFactory.java | 4 - .../linky/internal/dto/AddressInfo.java | 1 - .../binding/linky/internal/dto/Customer.java | 1 - .../linky/internal/dto/IntervalReading.java | 1 - .../linky/internal/dto/MeterReading.java | 1 - .../linky/internal/dto/MeterResponse.java | 1 - .../linky/internal/handler/LinkyHandler.java | 12 +-- .../resources/OH-INF/thing/thing-types.xml | 101 +++++++++--------- 12 files changed, 57 insertions(+), 72 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/feature/feature.xml b/bundles/org.openhab.binding.linky/src/main/feature/feature.xml index 7e83306ff37..16185d9fffd 100644 --- a/bundles/org.openhab.binding.linky/src/main/feature/feature.xml +++ b/bundles/org.openhab.binding.linky/src/main/feature/feature.xml @@ -7,6 +7,6 @@ openhab-core-auth-oauth2client mvn:org.jsoup/jsoup/1.14.3 mvn:org.openhab.addons.bundles/org.openhab.binding.linky/${project.version} - + diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java index 9f6bed55693..db00174987d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -199,4 +199,4 @@ public class LinkyAuthService { protected void unsetHttpService(HttpService httpService) { this.httpService = null; } -} \ No newline at end of file +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index e98c810eb56..75ad3d3dd98 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -169,4 +169,4 @@ public class LinkyAuthServlet extends HttpServlet { m.appendTail(sb); return sb.toString(); } -} \ No newline at end of file +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 4b7289f374c..1787c67f1d6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -81,5 +81,4 @@ public class LinkyBindingConstants { public static final String ENEDIS_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; public static final String ENEDIS_AUTHORIZE_URL = ENEDIS_ACCOUNT_URL + "dataconnect/v1/oauth2/authorize"; public static final String ENEDIS_API_TOKEN_URL = ENEDIS_ACCOUNT_URL + "token"; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index bdf8bb1bd17..0ec0c6f2f35 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -134,7 +134,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link LinkyBindingConstants.LINKY_AUTHORIZE_URL, clientId, clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); this.authService.setLinkyAccountHandler(this); - } @Override @@ -181,7 +180,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link return accessTokenResponse != null && accessTokenResponse.getAccessToken() != null && accessTokenResponse.getRefreshToken() != null; - } private @Nullable AccessTokenResponse getAccessTokenResponse() { @@ -288,7 +286,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link uri = uri + "&response_type=" + "code"; return uri; } - } @Override @@ -308,5 +305,4 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link return result.toArray(new String[0]); } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java index bb7170b1649..54f9b19af81 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java @@ -35,5 +35,4 @@ public class AddressInfo { public String city; public String country; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java index de2caae124a..26e7abe6ade 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java @@ -29,5 +29,4 @@ public class Customer { @SerializedName("usage_points") public UsagePoint[] usagePoints; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index 7c8055aebea..bcfadd57069 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -31,5 +31,4 @@ public class IntervalReading { @SerializedName("date") public LocalDateTime date; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index c182bb86a0a..eb967967af1 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -45,5 +45,4 @@ public class MeterReading { public IntervalReading[] weekValue; public IntervalReading[] monthValue; public IntervalReading[] yearValue; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java index ff307fd9fee..f5d1f85ad73 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java @@ -26,5 +26,4 @@ import com.google.gson.annotations.SerializedName; public class MeterResponse { @SerializedName("meter_reading") public MeterReading meterReading; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 03d63b3d4c9..402c68ad2d6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -39,11 +39,7 @@ import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.library.types.QuantityType; -<<<<<<< HEAD -import org.openhab.core.library.unit.MetricPrefix; -======= import org.openhab.core.library.types.StringType; ->>>>>>> 8179e0592f (some fixes on connectlinky page) import org.openhab.core.library.unit.Units; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; @@ -594,10 +590,9 @@ public class LinkyHandler extends BaseThingHandler { if (meterReading.intervalReading.length == 0) { throw new LinkyException("Invalid meterReading data: no day period"); } - if (meterReading.intervalReading.length != 1095) { - throw new LinkyException("Imcomplete meterReading data < 1095 days"); - } - + // if (meterReading.intervalReading.length != 1095) { + // throw new LinkyException("Imcomplete meterReading data < 1095 days"); + // } } /* @@ -687,5 +682,4 @@ public class LinkyHandler extends BaseThingHandler { public void saveConfiguration(Configuration config) { updateConfiguration(config); } - } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index f6d4ff1a4f0..43b60a1fb1d 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -12,31 +12,32 @@ https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. - + - + - + - - - + + + - - - Your PrmId - + + + Your PrmId + - Your Enedis token (can be left empty, use the connection page to automatically fill it http://youopenhab/connectlinky) + Your Enedis token (can be left empty, use the connection page to automatically fill it + http://youopenhab/connectlinky) - - + + @@ -46,26 +47,26 @@ - - - - - + + + + + Maximum power usage timestamp - - - - Maximum power usage timestamp - - - - - Maximum power usage timestamp - + + + + Maximum power usage timestamp + + + + + Maximum power usage timestamp + @@ -79,8 +80,8 @@ - - + + @@ -93,9 +94,9 @@ - - - + + + @@ -108,27 +109,27 @@ - - - + + + - + - - - - - - - - - + + + + + + + + + - String - - Test Select - + String + + Test Select + Number:Energy From a84023ee3cfb2fc932c8838444fabbdac92a7558 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 1 Feb 2024 19:38:16 +0100 Subject: [PATCH 009/135] fix code violation Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAccountHandler.java | 4 +- .../linky/internal/LinkyAuthService.java | 61 +++---------------- .../linky/internal/LinkyAuthServlet.java | 8 +-- .../linky/internal/LinkyBindingConstants.java | 2 +- .../linky/internal/LinkyHandlerFactory.java | 14 +---- 5 files changed, 16 insertions(+), 73 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java index 17cfb65c510..bc60528b201 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2023 Contributors to the openHAB project + * Copyright (c) 2010-2024 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. @@ -22,7 +22,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; public interface LinkyAccountHandler { /** - * @return Returns true if the Spotify Bridge is authorized. + * @return Returns true if the Linky Bridge is authorized. */ boolean isAuthorized(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java index db00174987d..237faa3c3f4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2023 Contributors to the openHAB project + * Copyright (c) 2010-2024 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. @@ -51,8 +51,6 @@ public class LinkyAuthService { private final Logger logger = LoggerFactory.getLogger(LinkyAuthService.class); - // private final List handlers = new ArrayList<>(); - private @NonNullByDefault({}) HttpService httpService; private @NonNullByDefault({}) BundleContext bundleContext; private @Nullable LinkyAccountHandler accountHandler; @@ -66,7 +64,7 @@ public class LinkyAuthService { httpService.registerResources(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS, "web", null); } catch (NamespaceException | ServletException | IOException e) { - logger.warn("Error during spotify servlet startup", e); + logger.warn("Error during linky servlet startup", e); } } @@ -77,7 +75,7 @@ public class LinkyAuthService { } /** - * Creates a new {@link SpotifyAuthServlet}. + * Creates a new {@link LinkyAuthServlet}. * * @return the newly created servlet * @throws IOException thrown when an HTML template could not be read @@ -107,13 +105,13 @@ public class LinkyAuthService { } /** - * Call with Spotify redirect uri returned State and Code values to get the refresh and access tokens and persist + * Call with Linky redirect uri returned State and Code values to get the refresh and access tokens and persist * these values * - * @param servletBaseURL the servlet base, which will be the Spotify redirect url - * @param state The Spotify returned state value - * @param code The Spotify returned code value - * @return returns the name of the Spotify user that is authorized + * @param servletBaseURL the servlet base, which will be the Linky redirect url + * @param state The Linky returned state value + * @param code The Linky returned code value + * @return returns the name of the Linky user that is authorized */ public String authorize(String servletBaseURL, String state, String code) { LinkyAccountHandler accountHandler = getLinkyAccountHandler(); @@ -148,49 +146,6 @@ public class LinkyAuthService { return this.accountHandler; } - /** - * @param listener Adds the given handler - */ - /* - * public void addSpotifyAccountHandler(SpotifyAccountHandler listener) { - * if (!handlers.contains(listener)) { - * handlers.add(listener); - * } - * } - */ - - /** - * @param handler Removes the given handler - */ - /* - * public void removeSpotifyAccountHandler(SpotifyAccountHandler handler) { - * handlers.remove(handler); - * } - */ - - /** - * @return Returns all {@link SpotifyAccountHandler}s. - */ - /* - * public List getSpotifyAccountHandlers() { - * return handlers; - * } - */ - - /** - * Get the {@link SpotifyAccountHandler} that matches the given thing UID. - * - * @param thingUID UID of the thing to match the handler with - * @return the {@link SpotifyAccountHandler} matching the thing UID or null - */ - /* - * private @Nullable SpotifyAccountHandler getSpotifyAuthListener(String thingUID) { - * final Optional maybeListener = handlers.stream().filter(l -> l.equalsThingUID(thingUID)) - * .findFirst(); - * return maybeListener.isPresent() ? maybeListener.get() : null; - * } - */ - @Reference protected void setHttpService(HttpService httpService) { this.httpService = httpService; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 75ad3d3dd98..a1c1e42303d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2023 Contributors to the openHAB project + * Copyright (c) 2010-2024 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. @@ -105,13 +105,13 @@ public class LinkyAuthServlet extends HttpServlet { } /** - * Handles a possible call from Enedis to the redirect_uri. If that is the case Spotify will pass the authorization + * Handles a possible call from Enedis to the redirect_uri. If that is the case Linky will pass the authorization * codes via the url and these are processed. In case of an error this is shown to the user. If the user was * authorized this is passed on to the handler. Based on all these different outcomes the HTML is generated to * inform the user. * * @param replaceMap a map with key String values that will be mapped in the HTML templates. - * @param servletBaseURL the servlet base, which should be used as the Spotify redirect_uri value + * @param servletBaseURL the servlet base, which should be used as the Linky redirect_uri value * @param queryString the query part of the GET request this servlet is processing */ private void handleLinkyRedirect(Map replaceMap, String servletBaseURL, @@ -132,7 +132,7 @@ public class LinkyAuthServlet extends HttpServlet { // params.isEmpty() ? "" : String.format(HTML_META_REFRESH_CONTENT, servletBaseURL) if (!StringUtil.isBlank(reqError)) { - logger.debug("Spotify redirected with an error: {}", reqError); + logger.debug("Linky redirected with an error: {}", reqError); replaceMap.put(KEY_ERROR, String.format(HTML_ERROR, reqError)); } else if (!StringUtil.isBlank(reqState)) { try { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 1787c67f1d6..71709ab40b6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -73,7 +73,7 @@ public class LinkyBindingConstants { "r:locations:*", "w:locations:*", "x:locations:*", "r:scenes:*", "x:scenes:*", "r:rules:*", "w:rules:*", "r:installedapps", "w:installedapps").collect(Collectors.joining(" ")); - // List of Spotify services related urls, information + // List of Linky services related urls, information public static final String LINKY_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; public static final String LINKY_AUTHORIZE_URL = LINKY_ACCOUNT_URL + "v1/oauth2/authorize"; public static final String LINKY_API_TOKEN_URL = LINKY_ACCOUNT_URL + "token"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 0ec0c6f2f35..f7e9d83d422 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -220,7 +220,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link else { String token = EnedisHttpApi.getToken(httpClient, clientId, reqCode); - logger.debug("token:" + token); + logger.debug("token: {}", token); Collection col = this.thingRegistry.getAll(); for (Thing thing : col) { @@ -244,18 +244,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link } private String updateProperties(AccessTokenResponse credentials) { - /* - * if (spotifyApi != null) { - * - * final Me me = spotifyApi.getMe(); - * final String user = me.getDisplayName() == null ? me.getId() : me.getDisplayName(); - * final Map props = editProperties(); - * - * props.put(PROPERTY_SPOTIFY_USER, user); - * updateProperties(props); - * return user; - * } - */ return ""; } From 34459b3a483244516b4b34dce33b25a8d4b0e5fe Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 2 Feb 2024 09:49:52 +0100 Subject: [PATCH 010/135] review null annotation and null pointer warning Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthServlet.java | 25 +++--- .../linky/internal/LinkyHandlerFactory.java | 9 +- .../linky/internal/api/EnedisHttpApi.java | 16 +--- .../linky/internal/dto/TempoResponse.java | 2 + .../linky/internal/handler/LinkyHandler.java | 87 +++++++++---------- 5 files changed, 64 insertions(+), 75 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index a1c1e42303d..50fc4fab286 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -51,8 +51,6 @@ public class LinkyAuthServlet extends HttpServlet { private static final String HTML_USER_AUTHORIZED = "

Addon authorized for %s.

"; private static final String HTML_ERROR = "

Call to Enedis failed with error: %s

"; - private static final String HTML_META_REFRESH_CONTENT = ""; - // Keys present in the index.html private static final String KEY_AUTHORIZE_URI = "authorize.uri"; private static final String KEY_RETRIEVE_TOKEN_URI = "retrieveToken.uri"; @@ -72,16 +70,17 @@ public class LinkyAuthServlet extends HttpServlet { } @Override - protected void doGet(@Nullable HttpServletRequest req, @Nullable HttpServletResponse resp) - throws ServletException, IOException { + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { logger.debug("Linky auth callback servlet received GET request {}.", req.getRequestURI()); final Map replaceMap = new HashMap<>(); - final String servletBaseURL = req.getRequestURL().toString(); + String servletBaseURL = ""; + StringBuffer requestURL = req.getRequestURL(); + if (requestURL != null) { + servletBaseURL = requestURL.toString(); + } String servletBaseURLSecure = servletBaseURL; - // .replace("http://", "https://"); - // .replace("8080", "8443"); handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); @@ -91,15 +90,19 @@ public class LinkyAuthServlet extends HttpServlet { StringBuffer optionBuffer = new StringBuffer(); - String[] prmIds = accountHandler.getAllPrmId(); - for (String prmId : prmIds) { - optionBuffer.append(""); + if (accountHandler != null) { + String[] prmIds = accountHandler.getAllPrmId(); + for (String prmId : prmIds) { + optionBuffer.append(""); + } } replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString()); replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK"); - replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); + if (accountHandler != null) { + replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); + } resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); resp.getWriter().close(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index f7e9d83d422..5fa56ed77e8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -100,7 +100,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link private final LocaleProvider localeProvider; private final HttpClient httpClient; - private final OAuthFactory oAuthFactory; private final LinkyAuthService authService; private final boolean oAuthSupport = false; private @Nullable OAuthClientService oAuthService; @@ -126,8 +125,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); httpClient.setFollowRedirects(false); httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); - httpClient.setResponseBufferSize(RESPONSE_BUFFER_SIZE); - this.oAuthFactory = oAuthFactory; this.authService = authService; this.oAuthService = oAuthFactory.createOAuthClientService("Linky", LinkyBindingConstants.LINKY_API_TOKEN_URL, @@ -165,7 +162,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link protected @Nullable ThingHandler createHandler(Thing thing) { if (supportsThingType(thing.getThingTypeUID())) { - LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient, oAuthFactory); + LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient); return handler; } @@ -235,7 +232,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link config.put("token", token); LinkyHandler handler = (LinkyHandler) thing.getHandler(); - handler.saveConfiguration(config); + if (handler != null) { + handler.saveConfiguration(config); + } } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 3cc4ec6ae95..f6cbd3b9ba9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -24,13 +24,9 @@ import java.util.concurrent.TimeoutException; import javax.ws.rs.core.MediaType; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.util.FormContentProvider; -import org.eclipse.jetty.client.util.StringContentProvider; -import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.util.Fields; @@ -80,11 +76,11 @@ public class EnedisHttpApi { private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; - private @Nullable LinkyConfiguration config; + private LinkyConfiguration config; private boolean connected = false; - public EnedisHttpApi(@Nullable LinkyConfiguration config, Gson gson, HttpClient httpClient) { + public EnedisHttpApi(LinkyConfiguration config, Gson gson, HttpClient httpClient) { this.gson = gson; this.httpClient = httpClient; this.config = config; @@ -93,10 +89,6 @@ public class EnedisHttpApi { public void initialize() throws LinkyException { } - private String getLocation(ContentResponse response) { - return response.getHeaders().get(HttpHeader.LOCATION); - } - private void disconnect() throws LinkyException { if (connected) { logger.debug("Logout process"); @@ -127,8 +119,8 @@ public class EnedisHttpApi { ContentResponse result = request.send(); if (result.getStatus() == 307) { String loc = result.getHeaders().get("Location"); - url = BASE_URL + loc.substring(1); - request = httpClient.newRequest(url); + String newUrl = BASE_URL + loc.substring(1); + request = httpClient.newRequest(newUrl); request = request.method(HttpMethod.GET); result = request.send(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java index 509772ddacf..f799ef7f391 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java @@ -24,5 +24,7 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class TempoResponse extends HashMap { + @java.io.Serial + private static final long serialVersionUID = 362498820763181264L; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 402c68ad2d6..29acd0ad837 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -18,7 +18,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; -import java.time.temporal.WeekFields; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -35,7 +34,6 @@ import org.openhab.binding.linky.internal.api.ExpiringDayCache; import org.openhab.binding.linky.internal.dto.IntervalReading; import org.openhab.binding.linky.internal.dto.MeterReading; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.library.types.QuantityType; @@ -70,17 +68,12 @@ public class LinkyHandler extends BaseThingHandler { private final Logger logger = LoggerFactory.getLogger(LinkyHandler.class); private final HttpClient httpClient; private final Gson gson; - private final WeekFields weekFields; private final ExpiringDayCache dailyConsumption; - private @Nullable LinkyConfiguration config; - private @Nullable ScheduledFuture refreshJob; private @Nullable EnedisHttpApi enedisApi; - private final OAuthFactory oAuthFactory; - private @NonNullByDefault({}) String prmId; private @NonNullByDefault({}) String userId; @@ -90,13 +83,10 @@ public class LinkyHandler extends BaseThingHandler { ALL } - public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient, - OAuthFactory oAuthFactory) { + public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient) { super(thing); this.gson = gson; this.httpClient = httpClient; - this.weekFields = WeekFields.of(localeProvider.getLocale()); - this.oAuthFactory = oAuthFactory; this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); @@ -158,16 +148,18 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("Initializing Linky handler."); updateStatus(ThingStatus.UNKNOWN); - config = getConfigAs(LinkyConfiguration.class); + LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { - enedisApi = new EnedisHttpApi(config, gson, httpClient); + + EnedisHttpApi api = new EnedisHttpApi(config, gson, httpClient); + this.enedisApi = api; scheduler.submit(() -> { try { - enedisApi.initialize(); + api.initialize(); updateStatus(ThingStatus.ONLINE); - PrmInfo prmInfo = enedisApi.getPrmInfo(); + PrmInfo prmInfo = api.getPrmInfo(); updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); @@ -547,52 +539,53 @@ public class LinkyHandler extends BaseThingHandler { return null; } - meterReading.WeekValue = new IntervalReading[208]; - meterReading.MonthValue = new IntervalReading[48]; - meterReading.YearValue = new IntervalReading[4]; + if (meterReading != null) { + meterReading.weekValue = new IntervalReading[208]; + meterReading.monthValue = new IntervalReading[48]; + meterReading.yearValue = new IntervalReading[4]; - for (int idx = 0; idx < 208; idx++) { - meterReading.WeekValue[idx] = new IntervalReading(); - } - for (int idx = 0; idx < 48; idx++) { - meterReading.MonthValue[idx] = new IntervalReading(); - } - for (int idx = 0; idx < 4; idx++) { - meterReading.YearValue[idx] = new IntervalReading(); - } + for (int idx = 0; idx < 208; idx++) { + meterReading.weekValue[idx] = new IntervalReading(); + } + for (int idx = 0; idx < 48; idx++) { + meterReading.monthValue[idx] = new IntervalReading(); + } + for (int idx = 0; idx < 4; idx++) { + meterReading.yearValue[idx] = new IntervalReading(); + } - int size = meterReading.intervalReading.length; - int baseYear = meterReading.intervalReading[0].date.getYear(); + int size = meterReading.dayValue.length; + int baseYear = meterReading.dayValue[0].date.getYear(); - for (int idx = 0; idx < size; idx++) { - IntervalReading ir = meterReading.intervalReading[idx]; - LocalDate dt = ir.date; - double value = ir.value; + for (int idx = 0; idx < size; idx++) { + IntervalReading ir = meterReading.dayValue[idx]; + LocalDateTime dt = ir.date; + double value = ir.value; - int idxYear = dt.getYear() - baseYear; + int idxYear = dt.getYear() - baseYear; - int dayOfYear = dt.getDayOfYear(); - int week = (dayOfYear / 7) + 1; - int month = dt.getMonthValue(); + int dayOfYear = dt.getDayOfYear(); + int week = ((dayOfYear - 1) / 7) + 1; + int month = dt.getMonthValue(); - int idxMonth = (idxYear * 12) + month; - int idxWeek = (idxYear * 52) + week; + int idxMonth = (idxYear * 12) + month; + int idxWeek = (idxYear * 52) + week; - meterReading.WeekValue[idxWeek].value += value; - meterReading.MonthValue[idxMonth].value += value; - meterReading.YearValue[idxYear].value += value; + meterReading.weekValue[idxWeek].value += value; + meterReading.monthValue[idxMonth].value += value; + meterReading.yearValue[idxYear].value += value; + } } return meterReading; } private void checkData(@Nullable MeterReading meterReading) throws LinkyException { - if (meterReading.intervalReading.length == 0) { - throw new LinkyException("Invalid meterReading data: no day period"); + if (meterReading != null) { + if (meterReading.dayValue.length == 0) { + throw new LinkyException("Invalid meterReading data: no day period"); + } } - // if (meterReading.intervalReading.length != 1095) { - // throw new LinkyException("Imcomplete meterReading data < 1095 days"); - // } } /* From 4a19a1d243caebd3b0d3cc8306a8a0a8e279b399 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 2 Feb 2024 09:49:52 +0100 Subject: [PATCH 011/135] review null annotation and null pointer warning Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/dto/TempoResponse.java | 1 - 1 file changed, 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java index f799ef7f391..0eede845b6d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java @@ -26,5 +26,4 @@ import org.eclipse.jetty.jaas.spi.UserInfo; public class TempoResponse extends HashMap { @java.io.Serial private static final long serialVersionUID = 362498820763181264L; - } From 7a4a9969d2f9a96cbdee5600b9ffe52a21d53ce7 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 2 Feb 2024 10:44:35 +0100 Subject: [PATCH 012/135] fix code violations Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAccountHandler.java | 2 +- .../linky/internal/LinkyAuthService.java | 4 +- .../linky/internal/LinkyAuthServlet.java | 41 +++++++++------- .../linky/internal/LinkyHandlerFactory.java | 10 ++-- .../linky/internal/dto/AddressInfo.java | 2 +- .../binding/linky/internal/dto/AuthData.java | 48 ------------------- .../linky/internal/dto/AuthResult.java | 24 ---------- .../linky/internal/handler/LinkyHandler.java | 3 -- 8 files changed, 31 insertions(+), 103 deletions(-) delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java index bc60528b201..4cffdbbf2b2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java @@ -33,7 +33,7 @@ public interface LinkyAccountHandler { * @param reqCode The unique code passed by Smartthings to obtain the refresh and access tokens * @return returns the name of the Smartthings user that is authorized */ - String authorize(String redirectUrl, String reqCode); + String authorize(String redirectUrl, String reqCode) throws LinkyException; /** * Formats the Url to use to call Smartthings to authorize the application. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java index 237faa3c3f4..ec1a52f6010 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -113,13 +113,13 @@ public class LinkyAuthService { * @param code The Linky returned code value * @return returns the name of the Linky user that is authorized */ - public String authorize(String servletBaseURL, String state, String code) { + public String authorize(String servletBaseURL, String state, String code) throws LinkyException { LinkyAccountHandler accountHandler = getLinkyAccountHandler(); if (accountHandler == null) { logger.debug( "Linky redirected with state '{}' but no matching bridge was found. Possible bridge has been removed.", state); - throw new RuntimeException(ERROR_UKNOWN_BRIDGE); + throw new LinkyException(ERROR_UKNOWN_BRIDGE); } else { return accountHandler.authorize(servletBaseURL, code); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 50fc4fab286..41635fff937 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -82,29 +82,36 @@ public class LinkyAuthServlet extends HttpServlet { String servletBaseURLSecure = servletBaseURL; - handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); + try { + handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); - LinkyAccountHandler accountHandler = linkyAuthService.getLinkyAccountHandler(); + LinkyAccountHandler accountHandler = linkyAuthService.getLinkyAccountHandler(); - resp.setContentType(CONTENT_TYPE); + resp.setContentType(CONTENT_TYPE); - StringBuffer optionBuffer = new StringBuffer(); + StringBuffer optionBuffer = new StringBuffer(); - if (accountHandler != null) { - String[] prmIds = accountHandler.getAllPrmId(); - for (String prmId : prmIds) { - optionBuffer.append(""); + if (accountHandler != null) { + String[] prmIds = accountHandler.getAllPrmId(); + for (String prmId : prmIds) { + optionBuffer.append(""); + } } - } - replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString()); - replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); - replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK"); - if (accountHandler != null) { - replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); + replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString()); + replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); + replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK"); + if (accountHandler != null) { + replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); + } + resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); + resp.getWriter().close(); + } catch (LinkyException ex) { + resp.setContentType(CONTENT_TYPE); + replaceMap.put(KEY_ERROR, "Error during request handling : " + ex.getMessage()); + resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); + resp.getWriter().close(); } - resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); - resp.getWriter().close(); } /** @@ -118,7 +125,7 @@ public class LinkyAuthServlet extends HttpServlet { * @param queryString the query part of the GET request this servlet is processing */ private void handleLinkyRedirect(Map replaceMap, String servletBaseURL, - @Nullable String queryString) { + @Nullable String queryString) throws LinkyException { replaceMap.put(KEY_AUTHORIZED_USER, ""); replaceMap.put(KEY_ERROR, ""); replaceMap.put(KEY_PAGE_REFRESH, ""); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 5fa56ed77e8..3dea43c16f9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -160,7 +160,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link @Override protected @Nullable ThingHandler createHandler(Thing thing) { - if (supportsThingType(thing.getThingTypeUID())) { LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient); return handler; @@ -190,7 +189,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link } @Override - public String authorize(String redirectUri, String reqCode) { + public String authorize(String redirectUri, String reqCode) throws LinkyException { // Will work only in case of direct oAuth2 authentification to enedis // this is not the case in v1 as we go trough MyElectricalData @@ -208,9 +207,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link return user; } catch (RuntimeException | OAuthException | IOException e) { // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); - throw new RuntimeException(e.getMessage(), e); + throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); } catch (final OAuthResponseException e) { - throw new RuntimeException(e.getMessage(), e); + throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); } } // Fallback for MyElectricalData @@ -222,7 +221,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link Collection col = this.thingRegistry.getAll(); for (Thing thing : col) { if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - Configuration config = thing.getConfiguration(); String prmId = (String) config.get("prmId"); @@ -281,12 +279,10 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link List result = new ArrayList(); for (Thing thing : col) { if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - Configuration config = thing.getConfiguration(); String prmId = (String) config.get("prmId"); result.add(prmId); - } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java index 54f9b19af81..b748c17176d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java @@ -28,7 +28,7 @@ public class AddressInfo { public String locality; @SerializedName("postalCode") - public String postal_code; + public String postalCode; @SerializedName("insee_code") public String inseeCode; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java deleted file mode 100644 index 27eddb18695..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -import java.util.List; - -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; - -/** - * The {@link AuthData} holds authentication information - * - * @author Gaël L'hopital - Initial contribution - */ -@NonNullByDefault -public class AuthData { - public class AuthDataCallBack { - public class NameValuePair { - public @Nullable String name; - public @Nullable Object value; - - public @Nullable String valueAsString() { - return (value instanceof String stringValue) ? stringValue : null; - } - } - - public @Nullable String type; - - public List output = List.of(); - public List input = List.of(); - } - - public @Nullable String authId; - public @Nullable String template; - public @Nullable String stage; - public @Nullable String header; - public List callbacks = List.of(); -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java deleted file mode 100644 index 8339f1436ae..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -/** - * The {@link AuthResult} holds informations about the ongoing authentication process - * - * @author Gaël L'hopital - Initial contribution - */ - -public class AuthResult { - public String successUrl; - public String tokenId; -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 29acd0ad837..f512181464b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -150,7 +150,6 @@ public class LinkyHandler extends BaseThingHandler { LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { - EnedisHttpApi api = new EnedisHttpApi(config, gson, httpClient); this.enedisApi = api; @@ -378,7 +377,6 @@ public class LinkyHandler extends BaseThingHandler { // All values in the same month MeterReading meterReading = getConsumptionData(startDay, endDay.plusDays(1)); if (meterReading != null) { - IntervalReading[] days = meterReading.dayValue; int size = days.length; @@ -647,7 +645,6 @@ public class LinkyHandler extends BaseThingHandler { */ private void logData(IntervalReading[] ivArray, String title, DateTimeFormatter dateTimeFormatter, Target target) { - if (logger.isDebugEnabled()) { int size = ivArray.length; From cc827a01665a74fc8aae39ad46513704293c30a2 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 29 Mar 2024 13:29:23 +0100 Subject: [PATCH 013/135] fix pull request Signed-off-by: Laurent ARNAL --- .../src/main/feature/feature.xml | 1 - .../linky/internal/LinkyAccountHandler.java | 6 +- .../linky/internal/LinkyAuthService.java | 2 +- .../linky/internal/LinkyAuthServlet.java | 14 +- .../linky/internal/LinkyHandlerFactory.java | 14 +- .../linky/internal/api/EnedisHttpApi.java | 9 +- .../linky/internal/dto/AddressInfo.java | 3 +- .../linky/internal/dto/ContactInfo.java | 3 +- .../binding/linky/internal/dto/Contracts.java | 3 +- .../linky/internal/dto/IntervalReading.java | 4 - .../linky/internal/dto/TempoResponse.java | 2 - .../src/main/resources/templates/index.html | 428 +++++++++--------- 12 files changed, 240 insertions(+), 249 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/feature/feature.xml b/bundles/org.openhab.binding.linky/src/main/feature/feature.xml index 16185d9fffd..68373fd3f5f 100644 --- a/bundles/org.openhab.binding.linky/src/main/feature/feature.xml +++ b/bundles/org.openhab.binding.linky/src/main/feature/feature.xml @@ -7,6 +7,5 @@ openhab-core-auth-oauth2client mvn:org.jsoup/jsoup/1.14.3 mvn:org.openhab.addons.bundles/org.openhab.binding.linky/${project.version} - diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java index 4cffdbbf2b2..460f52ff539 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java @@ -12,10 +12,12 @@ */ package org.openhab.binding.linky.internal; +import java.util.List; + import org.eclipse.jdt.annotation.NonNullByDefault; /** - * @author Gaël L'hopital - Initial contribution * + * @author Gaël L'hopital - Initial contribution * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault @@ -43,5 +45,5 @@ public interface LinkyAccountHandler { */ String formatAuthorizationUrl(String redirectUri); - String[] getAllPrmId(); + List getAllPrmId(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java index ec1a52f6010..012a32d1204 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory; /** * - * @author Gaël L'hopital - Initial contribution * + * @author Gaël L'hopital - Initial contribution * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @Component(service = LinkyAuthService.class, configurationPid = "binding.internal.authService") diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 41635fff937..7703521b36a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -15,6 +15,7 @@ package org.openhab.binding.linky.internal; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -36,7 +37,7 @@ import org.slf4j.LoggerFactory; * The xxx manages the authorization with the Linky Web API. The servlet implements the * Authorization Code flow and saves the resulting refreshToken with the bridge. * - * @author Gaël L'hopital - Initial contribution * + * @author Gaël L'hopital - Initial contribution * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault @@ -74,13 +75,10 @@ public class LinkyAuthServlet extends HttpServlet { logger.debug("Linky auth callback servlet received GET request {}.", req.getRequestURI()); final Map replaceMap = new HashMap<>(); - String servletBaseURL = ""; - StringBuffer requestURL = req.getRequestURL(); - if (requestURL != null) { - servletBaseURL = requestURL.toString(); - } + StringBuffer requestUrl = req.getRequestURL(); + String servletBaseUrl = requestUrl != null ? requestUrl.toString() : ""; - String servletBaseURLSecure = servletBaseURL; + String servletBaseURLSecure = servletBaseUrl; try { handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); @@ -92,7 +90,7 @@ public class LinkyAuthServlet extends HttpServlet { StringBuffer optionBuffer = new StringBuffer(); if (accountHandler != null) { - String[] prmIds = accountHandler.getAllPrmId(); + List prmIds = accountHandler.getAllPrmId(); for (String prmId : prmIds) { optionBuffer.append(""); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 3dea43c16f9..92f6f5d271b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -54,6 +54,7 @@ import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializer; @@ -95,8 +96,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link .atStartOfDay(); } }) - - .create(); + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); private final LocaleProvider localeProvider; private final HttpClient httpClient; @@ -127,9 +127,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); this.authService = authService; - this.oAuthService = oAuthFactory.createOAuthClientService("Linky", LinkyBindingConstants.LINKY_API_TOKEN_URL, - LinkyBindingConstants.LINKY_AUTHORIZE_URL, clientId, clientSecret, LinkyBindingConstants.LINKY_SCOPES, - true); + this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, + LinkyBindingConstants.LINKY_API_TOKEN_URL, LinkyBindingConstants.LINKY_AUTHORIZE_URL, clientId, + clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); this.authService.setLinkyAccountHandler(this); } @@ -274,7 +274,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link } @Override - public String[] getAllPrmId() { + public List getAllPrmId() { Collection col = this.thingRegistry.getAll(); List result = new ArrayList(); for (Thing thing : col) { @@ -286,6 +286,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link } } - return result.toArray(new String[0]); + return result; } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index f6cbd3b9ba9..26fb3df629b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -162,7 +162,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(String.format("%s/%s/cache", CONTRACT_URL, config.prmId)); + String data = getData("%s/%s/cache".formatted(CONTRACT_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTRACT_URL); } @@ -182,7 +182,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(String.format("%s/%s/cache", ADDRESS_URL, config.prmId)); + String data = getData("%s/%s/cache".formatted(ADDRESS_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", ADDRESS_URL); } @@ -202,7 +202,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(String.format("%s/%s/cache", IDENTITY_URL, config.prmId)); + String data = getData("%s/%s/cache".formatted(IDENTITY_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", IDENTITY_URL); } @@ -222,7 +222,8 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(String.format("%s/%s/cache", CONTACT_URL, config.prmId)); + String data = getData("%s/%s/cache".formatted(CONTACT_URL, config.prmId)); + if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTACT_URL); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java index b748c17176d..7c7f4de0e78 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java @@ -19,8 +19,7 @@ import com.google.gson.annotations.SerializedName; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API + * @author Laurent Arnal - Initial contribution */ public class AddressInfo { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java index 94c40c43253..83cf9f89c86 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java @@ -17,8 +17,7 @@ import org.eclipse.jetty.jaas.spi.UserInfo; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API + * @author Laurent Arnal - Initial contribution */ public class ContactInfo { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java index c9bf59b0022..89dae9f1d2b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java @@ -19,8 +19,7 @@ import com.google.gson.annotations.SerializedName; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API + * @author Laurent Arnal - Initial contribution */ public class Contracts { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index bcfadd57069..ac03f412546 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -16,8 +16,6 @@ import java.time.LocalDateTime; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -26,9 +24,7 @@ import com.google.gson.annotations.SerializedName; */ public class IntervalReading { - @SerializedName("value") public double value; - @SerializedName("date") public LocalDateTime date; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java index 0eede845b6d..bbc3b4d39ac 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import java.util.HashMap; -import org.eclipse.jetty.jaas.spi.UserInfo; - /** * The {@link UserInfo} holds informations about energy delivery point * diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html index fa66b86f72c..199cfc7a496 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html @@ -1,214 +1,214 @@ - - - - - -${pageRefresh} -Authorize openHAB Linky binding for Enedis - - - - - - - - - -


- -

Authorize openHAB Linky binding for Enedis

-

On this page you can authorize the openHAB Linky binding to access your Enedis account.

-

- The redirect URI to use with Enedis for this openHAB installation is - ${redirectUri} -

- ${error} ${authorizedUser} - -
-

This process need to be done for each electrical meter you have (each prmId).
- This is a two step process:
-

    -
  1. First you will need to do a consent on the enedis Site.
    - For this, click on the Authorize button.
    - You will be redirect to the enedis site. Login as usual with your userName / Password.
    - You will then be redirect to a consentment page.
    - You will have to select which prmId you would like to give the consent, click the checkbox, and then click on the validate button.
    - After this, you will be redirect to myelectricaldata information page.
    -
  2. - -
  3. Second, come back to the /connectlinky page.
    - If you have multiple prm, select the PrmId in the combobox you want to authorize.v - Then click the Retrieve token button.
    - It will fill you linky thing configuration with the token.
    -
- - -

- -


-
-

Connect to Enedis:

-
-
-
-
- Please select your prmId : - -
- - -
-
- - - \ No newline at end of file + + + + + +${pageRefresh} +Authorize openHAB Linky binding for Enedis + + + + + + + + + +


+ +

Authorize openHAB Linky binding for Enedis

+

On this page you can authorize the openHAB Linky binding to access your Enedis account.

+

+ The redirect URI to use with Enedis for this openHAB installation is + ${redirectUri} +

+ ${error} ${authorizedUser} + +
+

This process need to be done for each electrical meter you have (each prmId).
+ This is a two step process:
+

    +
  1. First you will need to do a consent on the enedis Site.
    + For this, click on the Authorize button.
    + You will be redirect to the enedis site. Login as usual with your userName / Password.
    + You will then be redirect to a consentment page.
    + You will have to select which prmId you would like to give the consent, click the checkbox, and then click on the validate button.
    + After this, you will be redirect to myelectricaldata information page.
    +
  2. + +
  3. Second, come back to the /connectlinky page.
    + If you have multiple prm, select the PrmId in the combobox you want to authorize.v + Then click the Retrieve token button.
    + It will fill you linky thing configuration with the token.
    +
+ + +

+ +


+
+

Connect to Enedis:

+
+
+
+
+ Please select your prmId : + +
+ + +
+
+ + + From 73d36c30a728499d6e3565d3fda31eef606b1d71 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 17 Apr 2024 15:38:29 +0200 Subject: [PATCH 014/135] Start refactoring AuthService to handle direct Enedis service call and cleaner code Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAccountHandler.java | 2 +- .../linky/internal/LinkyAuthService.java | 177 +++++++++++++----- .../linky/internal/LinkyAuthServlet.java | 14 +- .../linky/internal/LinkyBindingConstants.java | 19 +- .../linky/internal/LinkyConfiguration.java | 2 + .../linky/internal/LinkyHandlerFactory.java | 156 +-------------- .../resources/OH-INF/thing/thing-types.xml | 10 + 7 files changed, 168 insertions(+), 212 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java index 460f52ff539..ca536e3478b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java @@ -35,7 +35,7 @@ public interface LinkyAccountHandler { * @param reqCode The unique code passed by Smartthings to obtain the refresh and access tokens * @return returns the name of the Smartthings user that is authorized */ - String authorize(String redirectUrl, String reqCode) throws LinkyException; + String authorize(String redirectUrl, String reqState, String reqCode) throws LinkyException; /** * Formats the Url to use to call Smartthings to authorize the application. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java index 012a32d1204..96514cf055d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -17,18 +17,22 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Hashtable; -import java.util.Map; +import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.auth.client.oauth2.AccessTokenResponse; +import org.openhab.core.auth.client.oauth2.OAuthClientService; +import org.openhab.core.auth.client.oauth2.OAuthException; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.auth.client.oauth2.OAuthResponseException; import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; -import org.osgi.service.component.annotations.Activate; -import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; import org.osgi.service.http.HttpService; @@ -41,28 +45,38 @@ import org.slf4j.LoggerFactory; * @author Gaël L'hopital - Initial contribution * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -@Component(service = LinkyAuthService.class, configurationPid = "binding.internal.authService") @NonNullByDefault -public class LinkyAuthService { +public class LinkyAuthService implements LinkyAccountHandler { private static final String TEMPLATE_PATH = "templates/"; private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; - private static final String ERROR_UKNOWN_BRIDGE = "Returned 'state' by doesn't match any Bridges. Has the bridge been removed?"; private final Logger logger = LoggerFactory.getLogger(LinkyAuthService.class); private @NonNullByDefault({}) HttpService httpService; private @NonNullByDefault({}) BundleContext bundleContext; - private @Nullable LinkyAccountHandler accountHandler; - @Activate - protected void activate(ComponentContext componentContext, Map properties) { + private final boolean oAuthSupport = true; + private @Nullable OAuthClientService oAuthService; + + public LinkyAuthService(final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, + final @Reference ComponentContext componentContext) { + + this.httpService = httpService; + + this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, + LinkyBindingConstants.ENEDIS_API_TOKEN_URL, LinkyBindingConstants.ENEDIS_AUTH_AUTHORIZE_URL, + LinkyBindingConstants.clientId, LinkyBindingConstants.clientSecret, LinkyBindingConstants.LINKY_SCOPES, + true); + try { bundleContext = componentContext.getBundleContext(); + httpService.registerServlet(LinkyBindingConstants.LINKY_ALIAS, createServlet(), new Hashtable<>(), httpService.createDefaultHttpContext()); httpService.registerResources(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS, "web", null); + } catch (NamespaceException | ServletException | IOException e) { logger.warn("Error during linky servlet startup", e); } @@ -104,54 +118,123 @@ public class LinkyAuthService { } } - /** - * Call with Linky redirect uri returned State and Code values to get the refresh and access tokens and persist - * these values - * - * @param servletBaseURL the servlet base, which will be the Linky redirect url - * @param state The Linky returned state value - * @param code The Linky returned code value - * @return returns the name of the Linky user that is authorized - */ - public String authorize(String servletBaseURL, String state, String code) throws LinkyException { - LinkyAccountHandler accountHandler = getLinkyAccountHandler(); - if (accountHandler == null) { - logger.debug( - "Linky redirected with state '{}' but no matching bridge was found. Possible bridge has been removed.", - state); - throw new LinkyException(ERROR_UKNOWN_BRIDGE); - } else { - return accountHandler.authorize(servletBaseURL, code); + @Override + public String authorize(String redirectUri, String reqState, String reqCode) throws LinkyException { + // Will work only in case of direct oAuth2 authentification to enedis + // this is not the case in v1 as we go trough MyElectricalData + + if (oAuthSupport) { + try { + OAuthClientService oAuthService = this.oAuthService; + if (oAuthService == null) { + throw new OAuthException("OAuth service is not initialized"); + } + logger.debug("Make call to Enedis to get access token."); + final AccessTokenResponse credentials = oAuthService + .getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); + + final String user = updateProperties(credentials); + logger.debug("Authorized for user: {}", user); + return user; + } catch (RuntimeException | OAuthException | IOException e) { + // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); + throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); + } catch (final OAuthResponseException e) { + throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); + } + } + // Fallback for MyElectricalData + else { + /* + * String token = EnedisHttpApi.getToken(httpClient, LinkyBindingConstants.clientId, reqCode); + * + * logger.debug("token: {}", token); + * + * Collection col = this.thingRegistry.getAll(); + * for (Thing thing : col) { + * if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { + * Configuration config = thing.getConfiguration(); + * String prmId = (String) config.get("prmId"); + * + * if (!prmId.equals(reqCode)) { + * continue; + * } + * + * config.put("token", token); + * LinkyHandler handler = (LinkyHandler) thing.getHandler(); + * if (handler != null) { + * handler.saveConfiguration(config); + * } + * } + * } + * + * return token; + */ + + return ""; } } - /** - * @param listener Adds the given handler - */ - public void setLinkyAccountHandler(LinkyAccountHandler accountHandler) { - this.accountHandler = accountHandler; + @Override + public boolean isAuthorized() { + final AccessTokenResponse accessTokenResponse = getAccessTokenResponse(); + + return accessTokenResponse != null && accessTokenResponse.getAccessToken() != null + && accessTokenResponse.getRefreshToken() != null; } - /** - * @param handler Removes the given handler - */ - public void unsetLinkyAccountHandler(LinkyAccountHandler accountHandler) { - this.accountHandler = null; + private @Nullable AccessTokenResponse getAccessTokenResponse() { + try { + OAuthClientService oAuthService = this.oAuthService; + return oAuthService == null ? null : oAuthService.getAccessTokenResponse(); + } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { + logger.debug("Exception checking authorization: ", e); + return null; + } } - /** - * @param listener Adds the given handler - */ - public @Nullable LinkyAccountHandler getLinkyAccountHandler() { - return this.accountHandler; + private String updateProperties(AccessTokenResponse credentials) { + return credentials.getAccessToken(); } - @Reference - protected void setHttpService(HttpService httpService) { - this.httpService = httpService; + @Override + public String formatAuthorizationUrl(String redirectUri) { + // Will work only in case of direct oAuth2 authentification to enedis + // this is not the case in v1 as we go trough MyElectricalData + if (oAuthSupport) { + try { + OAuthClientService oAuthService = this.oAuthService; + if (oAuthService == null) { + throw new OAuthException("OAuth service is not initialized"); + } + + String uri = oAuthService.getAuthorizationUrl(redirectUri, null, "Linky"); + return uri; + } catch (final OAuthException e) { + logger.debug("Error constructing AuthorizationUrl: ", e); + return ""; + } + } + return ""; } - protected void unsetHttpService(HttpService httpService) { - this.httpService = null; + @Override + public List getAllPrmId() { + List result = new ArrayList(); + /* + * Collection col = this.thingRegistry.getAll(); + * + * for (Thing thing : col) { + * if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { + * Configuration config = thing.getConfiguration(); + * + * String prmId = (String) config.get("prmId"); + * result.add(prmId); + * } + * } + */ + + return result; } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 7703521b36a..a37b6239cb4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -83,25 +83,19 @@ public class LinkyAuthServlet extends HttpServlet { try { handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); - LinkyAccountHandler accountHandler = linkyAuthService.getLinkyAccountHandler(); - resp.setContentType(CONTENT_TYPE); StringBuffer optionBuffer = new StringBuffer(); - if (accountHandler != null) { - List prmIds = accountHandler.getAllPrmId(); - for (String prmId : prmIds) { - optionBuffer.append(""); - } + List prmIds = linkyAuthService.getAllPrmId(); + for (String prmId : prmIds) { + optionBuffer.append(""); } replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString()); replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK"); - if (accountHandler != null) { - replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); - } + replaceMap.put(KEY_AUTHORIZE_URI, linkyAuthService.formatAuthorizationUrl(servletBaseURLSecure)); resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); resp.getWriter().close(); } catch (LinkyException ex) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 71709ab40b6..c4c3b609407 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -30,6 +30,9 @@ public class LinkyBindingConstants { public static final String BINDING_ID = "linky"; + public static final String clientId = "_88uJnEjEs_IMf4bjGZJV6gGxYga"; + public static final String clientSecret = "6lsPfCmu0fEXuKYy3e0e6w8ydIca"; + // List of all Thing Type UIDs public static final ThingTypeUID THING_TYPE_LINKY = new ThingTypeUID(BINDING_ID, "linky"); @@ -69,16 +72,20 @@ public class LinkyBindingConstants { /** * Smartthings scopes needed by this binding to work. */ - public static final String LINKY_SCOPES = Stream.of("r:devices:*", "w:devices:*", "x:devices:*", "r:hubs:*", - "r:locations:*", "w:locations:*", "x:locations:*", "r:scenes:*", "x:scenes:*", "r:rules:*", "w:rules:*", - "r:installedapps", "w:installedapps").collect(Collectors.joining(" ")); + public static final String LINKY_SCOPES = Stream.of("am_application_scope", "default") + .collect(Collectors.joining(" ")); + // "r:devices:*", "w:devices:*", "x:devices:*", "r:hubs:*", + // "r:locations:*", "w:locations:*", "x:locations:*", "r:scenes:*", "x:scenes:*", "r:rules:*", "w:rules:*", + // "r:installedapps", "w:installedapps" // List of Linky services related urls, information public static final String LINKY_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; public static final String LINKY_AUTHORIZE_URL = LINKY_ACCOUNT_URL + "v1/oauth2/authorize"; public static final String LINKY_API_TOKEN_URL = LINKY_ACCOUNT_URL + "token"; - public static final String ENEDIS_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; - public static final String ENEDIS_AUTHORIZE_URL = ENEDIS_ACCOUNT_URL + "dataconnect/v1/oauth2/authorize"; - public static final String ENEDIS_API_TOKEN_URL = ENEDIS_ACCOUNT_URL + "token"; + public static final String ENEDIS_API_ACCOUNT_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + public static final String ENEDIS_API_TOKEN_URL = ENEDIS_API_ACCOUNT_URL + "oauth2/v3/token"; + + public static final String ENEDIS_AUTH_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; + public static final String ENEDIS_AUTH_AUTHORIZE_URL = ENEDIS_AUTH_ACCOUNT_URL + "dataconnect/v1/oauth2/authorize"; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java index 5847b113b72..6e16317d4a4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java @@ -25,6 +25,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault; public class LinkyConfiguration { public String token = ""; public String prmId = ""; + public String clientId = ""; + public String clientSecret = ""; public boolean seemsValid() { return !prmId.isBlank(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 92f6f5d271b..33ae98a903e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -12,16 +12,12 @@ */ package org.openhab.binding.linky.internal; -import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; @@ -30,19 +26,12 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.binding.linky.internal.handler.LinkyHandler; -import org.openhab.core.auth.client.oauth2.AccessTokenResponse; -import org.openhab.core.auth.client.oauth2.OAuthClientService; -import org.openhab.core.auth.client.oauth2.OAuthException; import org.openhab.core.auth.client.oauth2.OAuthFactory; -import org.openhab.core.auth.client.oauth2.OAuthResponseException; -import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.io.net.http.TrustAllTrustManager; import org.openhab.core.thing.Thing; -import org.openhab.core.thing.ThingRegistry; import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.binding.BaseThingHandlerFactory; import org.openhab.core.thing.binding.ThingHandler; @@ -51,6 +40,7 @@ import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; +import org.osgi.service.http.HttpService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,7 +57,7 @@ import com.google.gson.JsonDeserializer; */ @NonNullByDefault @Component(service = ThingHandlerFactory.class, configurationPid = "binding.linky") -public class LinkyHandlerFactory extends BaseThingHandlerFactory implements LinkyAccountHandler { +public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final DateTimeFormatter LINKY_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); private static final DateTimeFormatter LINKY_LOCALDATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd"); private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = DateTimeFormatter @@ -75,9 +65,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link private static final int REQUEST_BUFFER_SIZE = 8000; private static final int RESPONSE_BUFFER_SIZE = 200000; - private final String clientId = "e551937c-5250-48bc-b4a6-2323af68db92"; - private final String clientSecret = ""; - private final Logger logger = LoggerFactory.getLogger(LinkyHandlerFactory.class); private final Gson gson = new GsonBuilder() .registerTypeAdapter(ZonedDateTime.class, @@ -100,43 +87,36 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link private final LocaleProvider localeProvider; private final HttpClient httpClient; - private final LinkyAuthService authService; - private final boolean oAuthSupport = false; - private @Nullable OAuthClientService oAuthService; - private final ThingRegistry thingRegistry; @Activate public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, - final @Reference HttpClientFactory httpClientFactory, final @Reference LinkyAuthService authService, - final @Reference OAuthFactory oAuthFactory, final @Reference ThingRegistry thingRegistry) { + final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, + final @Reference HttpService httpService, ComponentContext componentContext) { this.localeProvider = localeProvider; SslContextFactory sslContextFactory = new SslContextFactory.Client(); try { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[] { TrustAllTrustManager.getInstance() }, null); sslContextFactory.setSslContext(sslContext); + + LinkyAuthService authService = new LinkyAuthService(oAuthFactory, httpService, componentContext); + } catch (NoSuchAlgorithmException e) { logger.warn("An exception occurred while requesting the SSL encryption algorithm : '{}'", e.getMessage(), e); } catch (KeyManagementException e) { logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); } - this.thingRegistry = thingRegistry; this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); httpClient.setFollowRedirects(false); httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); - this.authService = authService; - - this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, - LinkyBindingConstants.LINKY_API_TOKEN_URL, LinkyBindingConstants.LINKY_AUTHORIZE_URL, clientId, - clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); - this.authService.setLinkyAccountHandler(this); } @Override protected void activate(ComponentContext componentContext) { super.activate(componentContext); try { + httpClient.start(); } catch (Exception e) { logger.warn("Unable to start Jetty HttpClient {}", e.getMessage()); @@ -168,124 +148,4 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link return null; } - // =========================================================================== - - @Override - public boolean isAuthorized() { - final AccessTokenResponse accessTokenResponse = getAccessTokenResponse(); - - return accessTokenResponse != null && accessTokenResponse.getAccessToken() != null - && accessTokenResponse.getRefreshToken() != null; - } - - private @Nullable AccessTokenResponse getAccessTokenResponse() { - try { - OAuthClientService oAuthService = this.oAuthService; - return oAuthService == null ? null : oAuthService.getAccessTokenResponse(); - } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { - logger.debug("Exception checking authorization: ", e); - return null; - } - } - - @Override - public String authorize(String redirectUri, String reqCode) throws LinkyException { - // Will work only in case of direct oAuth2 authentification to enedis - // this is not the case in v1 as we go trough MyElectricalData - - if (oAuthSupport) { - try { - OAuthClientService oAuthService = this.oAuthService; - if (oAuthService == null) { - throw new OAuthException("OAuth service is not initialized"); - } - logger.debug("Make call to Smartthings to get access token."); - final AccessTokenResponse credentials = oAuthService.getAccessTokenResponseByAuthorizationCode(reqCode, - redirectUri); - final String user = updateProperties(credentials); - logger.debug("Authorized for user: {}", user); - return user; - } catch (RuntimeException | OAuthException | IOException e) { - // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); - throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); - } catch (final OAuthResponseException e) { - throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); - } - } - // Fallback for MyElectricalData - else { - String token = EnedisHttpApi.getToken(httpClient, clientId, reqCode); - - logger.debug("token: {}", token); - - Collection col = this.thingRegistry.getAll(); - for (Thing thing : col) { - if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - Configuration config = thing.getConfiguration(); - String prmId = (String) config.get("prmId"); - - if (!prmId.equals(reqCode)) { - continue; - } - - config.put("token", token); - LinkyHandler handler = (LinkyHandler) thing.getHandler(); - if (handler != null) { - handler.saveConfiguration(config); - } - } - } - - return token; - } - } - - private String updateProperties(AccessTokenResponse credentials) { - return ""; - } - - @Override - public String formatAuthorizationUrl(String redirectUri) { - // Will work only in case of direct oAuth2 authentification to enedis - // this is not the case in v1 as we go trough MyElectricalData - if (oAuthSupport) { - try { - OAuthClientService oAuthService = this.oAuthService; - if (oAuthService == null) { - throw new OAuthException("OAuth service is not initialized"); - } - - String uri = oAuthService.getAuthorizationUrl(redirectUri, null, "Linky"); - return uri; - } catch (final OAuthException e) { - logger.debug("Error constructing AuthorizationUrl: ", e); - return ""; - } - } - // Fallback for MyElectricalData - else { - String uri = LinkyBindingConstants.ENEDIS_AUTHORIZE_URL; - uri = uri + "?"; - uri = uri + "&client_id=" + clientId; - uri = uri + "&duration=" + "P36M"; - uri = uri + "&response_type=" + "code"; - return uri; - } - } - - @Override - public List getAllPrmId() { - Collection col = this.thingRegistry.getAll(); - List result = new ArrayList(); - for (Thing thing : col) { - if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - Configuration config = thing.getConfiguration(); - - String prmId = (String) config.get("prmId"); - result.add(prmId); - } - } - - return result; - } } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 43b60a1fb1d..d9bd18e4a86 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -35,6 +35,16 @@ Your Enedis token (can be left empty, use the connection page to automatically fill it http://youopenhab/connectlinky)
+ + + + Your Enedis clientId + + + + Your Enedis clientSecret + + From 214194e8954f0b2100011f5625fe857d6f22d7d2 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 17 Apr 2024 15:38:29 +0200 Subject: [PATCH 015/135] Start refactoring AuthService to handle direct Enedis service call and cleaner code Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAccountHandler.java | 49 ------ .../linky/internal/LinkyAuthService.java | 160 ++++++++---------- .../linky/internal/LinkyHandlerFactory.java | 14 +- .../linky/internal/api/EnedisHttpApi.java | 22 +-- .../linky/internal/handler/LinkyHandler.java | 8 +- 5 files changed, 99 insertions(+), 154 deletions(-) delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java deleted file mode 100644 index ca536e3478b..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAccountHandler.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal; - -import java.util.List; - -import org.eclipse.jdt.annotation.NonNullByDefault; - -/** - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API - */ -@NonNullByDefault -public interface LinkyAccountHandler { - - /** - * @return Returns true if the Linky Bridge is authorized. - */ - boolean isAuthorized(); - - /** - * Calls Smartthings Api to obtain refresh and access tokens and persist data with Thing. - * - * @param redirectUrl The redirect url Smartthings calls back to - * @param reqCode The unique code passed by Smartthings to obtain the refresh and access tokens - * @return returns the name of the Smartthings user that is authorized - */ - String authorize(String redirectUrl, String reqState, String reqCode) throws LinkyException; - - /** - * Formats the Url to use to call Smartthings to authorize the application. - * - * @param redirectUri The uri Smartthings will redirect back to - * @return the formatted url that should be used to call Smartthings Web Api with - */ - String formatAuthorizationUrl(String redirectUri); - - List getAllPrmId(); -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java index 96514cf055d..446513b9669 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -18,6 +18,7 @@ import java.io.InputStream; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Collection; import java.util.Hashtable; import java.util.List; @@ -31,6 +32,9 @@ import org.openhab.core.auth.client.oauth2.OAuthClientService; import org.openhab.core.auth.client.oauth2.OAuthException; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.auth.client.oauth2.OAuthResponseException; +import org.openhab.core.config.core.Configuration; +import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingRegistry; import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Deactivate; @@ -46,7 +50,7 @@ import org.slf4j.LoggerFactory; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault -public class LinkyAuthService implements LinkyAccountHandler { +public class LinkyAuthService { private static final String TEMPLATE_PATH = "templates/"; private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; @@ -56,14 +60,14 @@ public class LinkyAuthService implements LinkyAccountHandler { private @NonNullByDefault({}) HttpService httpService; private @NonNullByDefault({}) BundleContext bundleContext; - private final boolean oAuthSupport = true; - private @Nullable OAuthClientService oAuthService; + private OAuthClientService oAuthService; + private final ThingRegistry thingRegistry; public LinkyAuthService(final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, - final @Reference ComponentContext componentContext) { + final @Reference ThingRegistry thingRegistry, final @Reference ComponentContext componentContext) { this.httpService = httpService; - + this.thingRegistry = thingRegistry; this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, LinkyBindingConstants.ENEDIS_API_TOKEN_URL, LinkyBindingConstants.ENEDIS_AUTH_AUTHORIZE_URL, LinkyBindingConstants.clientId, LinkyBindingConstants.clientSecret, LinkyBindingConstants.LINKY_SCOPES, @@ -118,64 +122,54 @@ public class LinkyAuthService implements LinkyAccountHandler { } } - @Override public String authorize(String redirectUri, String reqState, String reqCode) throws LinkyException { // Will work only in case of direct oAuth2 authentification to enedis // this is not the case in v1 as we go trough MyElectricalData - if (oAuthSupport) { - try { - OAuthClientService oAuthService = this.oAuthService; - if (oAuthService == null) { - throw new OAuthException("OAuth service is not initialized"); - } - logger.debug("Make call to Enedis to get access token."); - final AccessTokenResponse credentials = oAuthService - .getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); + try { - final String user = updateProperties(credentials); - logger.debug("Authorized for user: {}", user); - return user; - } catch (RuntimeException | OAuthException | IOException e) { - // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); - throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); - } catch (final OAuthResponseException e) { - throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); - } - } - // Fallback for MyElectricalData - else { - /* - * String token = EnedisHttpApi.getToken(httpClient, LinkyBindingConstants.clientId, reqCode); - * - * logger.debug("token: {}", token); - * - * Collection col = this.thingRegistry.getAll(); - * for (Thing thing : col) { - * if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - * Configuration config = thing.getConfiguration(); - * String prmId = (String) config.get("prmId"); - * - * if (!prmId.equals(reqCode)) { - * continue; - * } - * - * config.put("token", token); - * LinkyHandler handler = (LinkyHandler) thing.getHandler(); - * if (handler != null) { - * handler.saveConfiguration(config); - * } - * } - * } - * - * return token; - */ + logger.debug("Make call to Enedis to get access token."); + final AccessTokenResponse credentials = oAuthService + .getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); - return ""; + String accessToken = credentials.getAccessToken(); + + logger.debug("Acces token: {}", accessToken); + return accessToken; + } catch (RuntimeException | OAuthException | IOException e) { + // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); + throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); + } catch (final OAuthResponseException e) { + throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); } + + /* + * String token = EnedisHttpApi.getToken(httpClient, LinkyBindingConstants.clientId, reqCode); + * + * logger.debug("token: {}", token); + * + * Collection col = this.thingRegistry.getAll(); + * for (Thing thing : col) { + * if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { + * Configuration config = thing.getConfiguration(); + * String prmId = (String) config.get("prmId"); + * + * if (!prmId.equals(reqCode)) { + * continue; + * } + * + * config.put("token", token); + * LinkyHandler handler = (LinkyHandler) thing.getHandler(); + * if (handler != null) { + * handler.saveConfiguration(config); + * } + * } + * } + * + * return token; + */ } - @Override public boolean isAuthorized() { final AccessTokenResponse accessTokenResponse = getAccessTokenResponse(); @@ -183,56 +177,46 @@ public class LinkyAuthService implements LinkyAccountHandler { && accessTokenResponse.getRefreshToken() != null; } + public String getToken() { + AccessTokenResponse accesToken = getAccessTokenResponse(); + return accesToken.getAccessToken(); + } + private @Nullable AccessTokenResponse getAccessTokenResponse() { try { - OAuthClientService oAuthService = this.oAuthService; - return oAuthService == null ? null : oAuthService.getAccessTokenResponse(); + return oAuthService.getAccessTokenResponse(); } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { logger.debug("Exception checking authorization: ", e); return null; } } - private String updateProperties(AccessTokenResponse credentials) { - return credentials.getAccessToken(); - } - - @Override public String formatAuthorizationUrl(String redirectUri) { // Will work only in case of direct oAuth2 authentification to enedis // this is not the case in v1 as we go trough MyElectricalData - if (oAuthSupport) { - try { - OAuthClientService oAuthService = this.oAuthService; - if (oAuthService == null) { - throw new OAuthException("OAuth service is not initialized"); - } - - String uri = oAuthService.getAuthorizationUrl(redirectUri, null, "Linky"); - return uri; - } catch (final OAuthException e) { - logger.debug("Error constructing AuthorizationUrl: ", e); - return ""; - } + try { + String uri = this.oAuthService.getAuthorizationUrl(redirectUri, LinkyBindingConstants.LINKY_SCOPES, + LinkyBindingConstants.BINDING_ID); + return uri; + } catch (final OAuthException e) { + logger.debug("Error constructing AuthorizationUrl: ", e); + return ""; } - return ""; } - @Override public List getAllPrmId() { List result = new ArrayList(); - /* - * Collection col = this.thingRegistry.getAll(); - * - * for (Thing thing : col) { - * if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - * Configuration config = thing.getConfiguration(); - * - * String prmId = (String) config.get("prmId"); - * result.add(prmId); - * } - * } - */ + + Collection col = this.thingRegistry.getAll(); + + for (Thing thing : col) { + if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { + Configuration config = thing.getConfiguration(); + + String prmId = (String) config.get("prmId"); + result.add(prmId); + } + } return result; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 33ae98a903e..40fd4e6f55a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -32,6 +32,7 @@ import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.io.net.http.TrustAllTrustManager; import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingRegistry; import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.binding.BaseThingHandlerFactory; import org.openhab.core.thing.binding.ThingHandler; @@ -66,6 +67,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final int RESPONSE_BUFFER_SIZE = 200000; private final Logger logger = LoggerFactory.getLogger(LinkyHandlerFactory.class); + + private LinkyAuthService authService; + private final Gson gson = new GsonBuilder() .registerTypeAdapter(ZonedDateTime.class, (JsonDeserializer) (json, type, jsonDeserializationContext) -> ZonedDateTime @@ -91,16 +95,18 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { @Activate public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, - final @Reference HttpService httpService, ComponentContext componentContext) { + final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, + ComponentContext componentContext) { this.localeProvider = localeProvider; + + authService = new LinkyAuthService(oAuthFactory, httpService, thingRegistry, componentContext); + SslContextFactory sslContextFactory = new SslContextFactory.Client(); try { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[] { TrustAllTrustManager.getInstance() }, null); sslContextFactory.setSslContext(sslContext); - LinkyAuthService authService = new LinkyAuthService(oAuthFactory, httpService, componentContext); - } catch (NoSuchAlgorithmException e) { logger.warn("An exception occurred while requesting the SSL encryption algorithm : '{}'", e.getMessage(), e); @@ -141,7 +147,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { @Override protected @Nullable ThingHandler createHandler(Thing thing) { if (supportsThingType(thing.getThingTypeUID())) { - LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient); + LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient, authService); return handler; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 26fb3df629b..d4e4b5950a0 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -28,11 +28,7 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.http.HttpMethod; -import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.util.Fields; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; +import org.openhab.binding.linky.internal.LinkyAuthService; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; @@ -62,8 +58,10 @@ import com.google.gson.JsonSyntaxException; public class EnedisHttpApi { private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private static final String BASE_URL = "https://www.myelectricaldata.fr/"; - private static final String CONTRACT_URL = BASE_URL + "contracts"; + // private static final String BASE_URL = "https://www.myelectricaldata.fr/"; + private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + + private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts"; private static final String IDENTITY_URL = BASE_URL + "identity"; private static final String CONTACT_URL = BASE_URL + "contact"; private static final String ADDRESS_URL = BASE_URL + "addresses"; @@ -77,12 +75,14 @@ public class EnedisHttpApi { private final Gson gson; private final HttpClient httpClient; private LinkyConfiguration config; + private LinkyAuthService authService; private boolean connected = false; - public EnedisHttpApi(LinkyConfiguration config, Gson gson, HttpClient httpClient) { + public EnedisHttpApi(LinkyConfiguration config, Gson gson, HttpClient httpClient, LinkyAuthService authService) { this.gson = gson; this.httpClient = httpClient; + this.authService = authService; this.config = config; } @@ -105,7 +105,7 @@ public class EnedisHttpApi { } private String getData(String url) throws LinkyException { - return getData(url, httpClient, config.token); + return getData(url, httpClient, authService.getToken()); } private static String getData(String url, HttpClient httpClient, String token) throws LinkyException { @@ -113,7 +113,7 @@ public class EnedisHttpApi { Request request = httpClient.newRequest(url); request = request.method(HttpMethod.GET); if (!("".equals(token))) { - request = request.header("Authorization", token); + request = request.header("Authorization: Bearer ", token); } ContentResponse result = request.send(); @@ -162,7 +162,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData("%s/%s/cache".formatted(CONTRACT_URL, config.prmId)); + String data = getData("%s?usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTRACT_URL); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index f512181464b..50be92f4551 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -27,6 +27,7 @@ import java.util.concurrent.TimeUnit; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; +import org.openhab.binding.linky.internal.LinkyAuthService; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; @@ -73,6 +74,7 @@ public class LinkyHandler extends BaseThingHandler { private @Nullable ScheduledFuture refreshJob; private @Nullable EnedisHttpApi enedisApi; + private LinkyAuthService authService; private @NonNullByDefault({}) String prmId; private @NonNullByDefault({}) String userId; @@ -83,10 +85,12 @@ public class LinkyHandler extends BaseThingHandler { ALL } - public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient) { + public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient, + LinkyAuthService authService) { super(thing); this.gson = gson; this.httpClient = httpClient; + this.authService = authService; this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); @@ -150,7 +154,7 @@ public class LinkyHandler extends BaseThingHandler { LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { - EnedisHttpApi api = new EnedisHttpApi(config, gson, httpClient); + EnedisHttpApi api = new EnedisHttpApi(config, gson, httpClient, authService); this.enedisApi = api; scheduler.submit(() -> { From 5d48bc0120db871975aaa095128bc0847f1f5bd0 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 17 Apr 2024 16:53:16 +0200 Subject: [PATCH 016/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthService.java | 1 - .../linky/internal/LinkyHandlerFactory.java | 1 - .../linky/internal/api/EnedisHttpApi.java | 7 +++++-- .../resources/OH-INF/thing/thing-types.xml | 18 +++++++++--------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java index 446513b9669..674091e0a9f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java @@ -220,5 +220,4 @@ public class LinkyAuthService { return result; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 40fd4e6f55a..3b022ab8681 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -153,5 +153,4 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { return null; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index d4e4b5950a0..0175aca3efa 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -61,7 +61,9 @@ public class EnedisHttpApi { // private static final String BASE_URL = "https://www.myelectricaldata.fr/"; private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; - private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts"; + private static final String CONTRACT_URL = BASE_URL + + "metering_data_dc/v5/daily_consumption?start=2024-04-01&end=2024-04-17"; + // private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts"; private static final String IDENTITY_URL = BASE_URL + "identity"; private static final String CONTACT_URL = BASE_URL + "contact"; private static final String ADDRESS_URL = BASE_URL + "addresses"; @@ -162,7 +164,8 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData("%s?usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); + // String data = getData("%s?usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); + String data = getData("%s&usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTRACT_URL); } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index d9bd18e4a86..73c513ca2f9 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -35,16 +35,16 @@ Your Enedis token (can be left empty, use the connection page to automatically fill it http://youopenhab/connectlinky) - + - - Your Enedis clientId - - - - Your Enedis clientSecret - - + + Your Enedis clientId + + + + Your Enedis clientSecret + + From e45f6a06156dabdc025804dcaa60e3b179c160e5 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 21 Apr 2024 17:14:11 +0200 Subject: [PATCH 017/135] refactor binding (WIP) Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthServlet.java | 13 +- .../linky/internal/LinkyBindingConstants.java | 7 + .../linky/internal/LinkyHandlerFactory.java | 79 +++------ .../linky/internal/api/EnedisHttpApi.java | 52 +++--- .../ApiBridgeHandler.java} | 154 +++++++++++++++--- .../internal/handler/EnedisBridgeHandler.java | 55 +++++++ .../linky/internal/handler/LinkyHandler.java | 96 +++++------ .../MyElectricalDataBridgeHandler.java | 55 +++++++ .../resources/OH-INF/thing/thing-types.xml | 59 +++++-- 9 files changed, 398 insertions(+), 172 deletions(-) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/{LinkyAuthService.java => handler/ApiBridgeHandler.java} (61%) create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index a37b6239cb4..65357178efc 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -30,6 +30,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.util.MultiMap; import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.UrlEncoded; +import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,11 +63,11 @@ public class LinkyAuthServlet extends HttpServlet { private static final String KEY_PAGE_REFRESH = "pageRefresh"; private final Logger logger = LoggerFactory.getLogger(LinkyAuthServlet.class); - private final LinkyAuthService linkyAuthService; private final String indexTemplate; - public LinkyAuthServlet(LinkyAuthService linkyAuthService, String indexTemplate) { - this.linkyAuthService = linkyAuthService; + private @NonNullByDefault({}) ApiBridgeHandler apiBridgeHandler; + + public LinkyAuthServlet(ApiBridgeHandler apiBridgeHandler, String indexTemplate) { this.indexTemplate = indexTemplate; } @@ -87,7 +88,7 @@ public class LinkyAuthServlet extends HttpServlet { StringBuffer optionBuffer = new StringBuffer(); - List prmIds = linkyAuthService.getAllPrmId(); + List prmIds = apiBridgeHandler.getAllPrmId(); for (String prmId : prmIds) { optionBuffer.append(""); } @@ -95,7 +96,7 @@ public class LinkyAuthServlet extends HttpServlet { replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString()); replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK"); - replaceMap.put(KEY_AUTHORIZE_URI, linkyAuthService.formatAuthorizationUrl(servletBaseURLSecure)); + replaceMap.put(KEY_AUTHORIZE_URI, apiBridgeHandler.formatAuthorizationUrl(servletBaseURLSecure)); resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); resp.getWriter().close(); } catch (LinkyException ex) { @@ -139,7 +140,7 @@ public class LinkyAuthServlet extends HttpServlet { } else if (!StringUtil.isBlank(reqState)) { try { replaceMap.put(KEY_AUTHORIZED_USER, String.format(HTML_USER_AUTHORIZED, - reqCode + " / " + linkyAuthService.authorize(servletBaseURL, reqState, reqCode))); + reqCode + " / " + apiBridgeHandler.authorize(servletBaseURL, reqState, reqCode))); } catch (RuntimeException e) { logger.debug("Exception during authorizaton: ", e); replaceMap.put(KEY_ERROR, String.format(HTML_ERROR, e.getMessage())); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index c4c3b609407..10a8b8ec1b5 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -12,6 +12,7 @@ */ package org.openhab.binding.linky.internal; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -34,8 +35,14 @@ public class LinkyBindingConstants { public static final String clientSecret = "6lsPfCmu0fEXuKYy3e0e6w8ydIca"; // List of all Thing Type UIDs + public static final ThingTypeUID THING_TYPE_API_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "EnedisBridge"); + public static final ThingTypeUID THING_TYPE_API_MYELECTRICALDATA_BRIDGE = new ThingTypeUID(BINDING_ID, + "MyElectricalDataBridge"); public static final ThingTypeUID THING_TYPE_LINKY = new ThingTypeUID(BINDING_ID, "linky"); + public static final Set SUPPORTED_DEVICE_THING_TYPES_UIDS = Set.of(THING_TYPE_API_ENEDIS_BRIDGE, + THING_TYPE_API_MYELECTRICALDATA_BRIDGE, THING_TYPE_LINKY); + // Thing properties public static final String PUISSANCE = "puissance"; public static final String PRM_ID = "prmId"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 3b022ab8681..bb44205ed0b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -12,25 +12,20 @@ */ package org.openhab.binding.linky.internal; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; - import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.openhab.binding.linky.internal.handler.EnedisBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler; +import org.openhab.binding.linky.internal.handler.MyElectricalDataBridgeHandler; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.io.net.http.HttpClientFactory; -import org.openhab.core.io.net.http.TrustAllTrustManager; +import org.openhab.core.thing.Bridge; import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingRegistry; import org.openhab.core.thing.ThingTypeUID; @@ -63,12 +58,14 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final DateTimeFormatter LINKY_LOCALDATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd"); private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = DateTimeFormatter .ofPattern("uuuu-MM-dd HH:mm:ss"); - private static final int REQUEST_BUFFER_SIZE = 8000; - private static final int RESPONSE_BUFFER_SIZE = 200000; private final Logger logger = LoggerFactory.getLogger(LinkyHandlerFactory.class); - private LinkyAuthService authService; + private final HttpClientFactory httpClientFactory; + private final OAuthFactory oAuthFactory; + private final HttpService httpService; + private final ThingRegistry thingRegistry; + private final ComponentContext componentContext; private final Gson gson = new GsonBuilder() .registerTypeAdapter(ZonedDateTime.class, @@ -90,7 +87,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); private final LocaleProvider localeProvider; - private final HttpClient httpClient; @Activate public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, @@ -99,58 +95,37 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { ComponentContext componentContext) { this.localeProvider = localeProvider; - authService = new LinkyAuthService(oAuthFactory, httpService, thingRegistry, componentContext); + this.httpClientFactory = httpClientFactory; + this.oAuthFactory = oAuthFactory; + this.httpService = httpService; + this.thingRegistry = thingRegistry; + this.componentContext = componentContext; - SslContextFactory sslContextFactory = new SslContextFactory.Client(); - try { - SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[] { TrustAllTrustManager.getInstance() }, null); - sslContextFactory.setSslContext(sslContext); - - } catch (NoSuchAlgorithmException e) { - logger.warn("An exception occurred while requesting the SSL encryption algorithm : '{}'", e.getMessage(), - e); - } catch (KeyManagementException e) { - logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); - } - this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); - httpClient.setFollowRedirects(false); - httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); - } - - @Override - protected void activate(ComponentContext componentContext) { - super.activate(componentContext); - try { - - httpClient.start(); - } catch (Exception e) { - logger.warn("Unable to start Jetty HttpClient {}", e.getMessage()); - } - } - - @Override - protected void deactivate(ComponentContext componentContext) { - super.deactivate(componentContext); - try { - httpClient.stop(); - } catch (Exception e) { - logger.warn("Unable to stop Jetty HttpClient {}", e.getMessage()); - } } @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { - return LinkyBindingConstants.THING_TYPE_LINKY.equals(thingTypeUID); + return LinkyBindingConstants.SUPPORTED_DEVICE_THING_TYPES_UIDS.contains(thingTypeUID); + } @Override protected @Nullable ThingHandler createHandler(Thing thing) { - if (supportsThingType(thing.getThingTypeUID())) { - LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient, authService); + if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_API_ENEDIS_BRIDGE)) { + EnedisBridgeHandler handler = new EnedisBridgeHandler((Bridge) thing, this.httpClientFactory, + this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); + return handler; + } else if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_API_MYELECTRICALDATA_BRIDGE)) { + MyElectricalDataBridgeHandler handler = new MyElectricalDataBridgeHandler((Bridge) thing, + this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); + return handler; + } else if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_LINKY)) { + LinkyHandler handler = new LinkyHandler(thing, localeProvider); return handler; } return null; + } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 0175aca3efa..e5e36fb827d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -28,8 +28,6 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.http.HttpMethod; -import org.openhab.binding.linky.internal.LinkyAuthService; -import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ContactInfo; @@ -42,6 +40,7 @@ import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.binding.linky.internal.dto.UsagePoint; +import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,14 +55,15 @@ import com.google.gson.JsonSyntaxException; */ @NonNullByDefault public class EnedisHttpApi { + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // private static final String BASE_URL = "https://www.myelectricaldata.fr/"; private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; - private static final String CONTRACT_URL = BASE_URL - + "metering_data_dc/v5/daily_consumption?start=2024-04-01&end=2024-04-17"; - // private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts"; + // private static final String CONTRACT_URL = BASE_URL + // + "metering_data_dc/v5/daily_consumption?start=2024-04-01&end=2024-04-17"; + private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts"; private static final String IDENTITY_URL = BASE_URL + "identity"; private static final String CONTACT_URL = BASE_URL + "contact"; private static final String ADDRESS_URL = BASE_URL + "addresses"; @@ -76,16 +76,14 @@ public class EnedisHttpApi { private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; - private LinkyConfiguration config; - private LinkyAuthService authService; + private ApiBridgeHandler apiBridgeHandler; private boolean connected = false; - public EnedisHttpApi(LinkyConfiguration config, Gson gson, HttpClient httpClient, LinkyAuthService authService) { + public EnedisHttpApi(ApiBridgeHandler apiBridgeHandler, Gson gson, HttpClient httpClient) { this.gson = gson; this.httpClient = httpClient; - this.authService = authService; - this.config = config; + this.apiBridgeHandler = apiBridgeHandler; } public void initialize() throws LinkyException { @@ -107,7 +105,7 @@ public class EnedisHttpApi { } private String getData(String url) throws LinkyException { - return getData(url, httpClient, authService.getToken()); + return getData(url, httpClient, apiBridgeHandler.getToken()); } private static String getData(String url, HttpClient httpClient, String token) throws LinkyException { @@ -115,7 +113,8 @@ public class EnedisHttpApi { Request request = httpClient.newRequest(url); request = request.method(HttpMethod.GET); if (!("".equals(token))) { - request = request.header("Authorization: Bearer ", token); + request = request.header("Authorization", "Bearer " + token); + request = request.header("accept", "application/json"); } ContentResponse result = request.send(); @@ -143,16 +142,16 @@ public class EnedisHttpApi { } } - public PrmInfo getPrmInfo() throws LinkyException { + public PrmInfo getPrmInfo(String prmId) throws LinkyException { PrmInfo result = new PrmInfo(); - Customer customer = getCustomer(); + Customer customer = getCustomer(prmId); UsagePoint usagePoint = customer.usagePoints[0]; result.contractInfo = usagePoint.contracts; result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(); - result.addressInfo = getAddress(); - result.contactInfo = getContact(); + result.identityInfo = getIdentity(prmId); + result.addressInfo = getAddress(prmId); + result.contactInfo = getContact(prmId); result.prmId = result.usagePointInfo.usagePointId; result.customerId = customer.customerId; @@ -160,12 +159,12 @@ public class EnedisHttpApi { return result; } - public Customer getCustomer() throws LinkyException { + public Customer getCustomer(String prmId) throws LinkyException { if (!connected) { initialize(); } - // String data = getData("%s?usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); - String data = getData("%s&usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); + String data = getData("%s?usage_point_id=%s".formatted(CONTRACT_URL, prmId)); + // String data = getData("%s&usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTRACT_URL); } @@ -181,11 +180,11 @@ public class EnedisHttpApi { } } - public AddressInfo getAddress() throws LinkyException { + public AddressInfo getAddress(String prmId) throws LinkyException { if (!connected) { initialize(); } - String data = getData("%s/%s/cache".formatted(ADDRESS_URL, config.prmId)); + String data = getData("%s/%s/cache".formatted(ADDRESS_URL, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", ADDRESS_URL); } @@ -201,11 +200,11 @@ public class EnedisHttpApi { } } - public IdentityInfo getIdentity() throws LinkyException { + public IdentityInfo getIdentity(String prmId) throws LinkyException { if (!connected) { initialize(); } - String data = getData("%s/%s/cache".formatted(IDENTITY_URL, config.prmId)); + String data = getData("%s/%s/cache".formatted(IDENTITY_URL, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", IDENTITY_URL); } @@ -221,11 +220,11 @@ public class EnedisHttpApi { } } - public ContactInfo getContact() throws LinkyException { + public ContactInfo getContact(String prmId) throws LinkyException { if (!connected) { initialize(); } - String data = getData("%s/%s/cache".formatted(CONTACT_URL, config.prmId)); + String data = getData("%s/%s/cache".formatted(CONTACT_URL, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTACT_URL); @@ -312,4 +311,5 @@ public class EnedisHttpApi { return ""; } } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java similarity index 61% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 674091e0a9f..fc46973bad7 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthService.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -10,86 +10,197 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.linky.internal; +package org.openhab.binding.linky.internal.handler; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; import java.util.List; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.openhab.binding.linky.internal.LinkyAuthServlet; +import org.openhab.binding.linky.internal.LinkyBindingConstants; +import org.openhab.binding.linky.internal.LinkyException; +import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.core.auth.client.oauth2.AccessTokenResponse; import org.openhab.core.auth.client.oauth2.OAuthClientService; import org.openhab.core.auth.client.oauth2.OAuthException; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.auth.client.oauth2.OAuthResponseException; import org.openhab.core.config.core.Configuration; +import org.openhab.core.io.net.http.HttpClientFactory; +import org.openhab.core.io.net.http.TrustAllTrustManager; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingRegistry; +import org.openhab.core.thing.ThingStatus; +import org.openhab.core.thing.ThingStatusDetail; +import org.openhab.core.thing.binding.BaseBridgeHandler; +import org.openhab.core.types.Command; import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; -import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; import org.osgi.service.http.HttpService; import org.osgi.service.http.NamespaceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.Gson; + /** + * {@link ApiBridgeHandler} is the base handler to access enedis data. * - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API + * @author Laurent Arnal - Initial contribution */ @NonNullByDefault -public class LinkyAuthService { +public class ApiBridgeHandler extends BaseBridgeHandler { + private final Logger logger = LoggerFactory.getLogger(ApiBridgeHandler.class); - private static final String TEMPLATE_PATH = "templates/"; - private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; + private static final int REFRESH_FIRST_HOUR_OF_DAY = 1; - private final Logger logger = LoggerFactory.getLogger(LinkyAuthService.class); + private static final int REQUEST_BUFFER_SIZE = 8000; private @NonNullByDefault({}) HttpService httpService; private @NonNullByDefault({}) BundleContext bundleContext; + private final HttpClient httpClient; + private @Nullable EnedisHttpApi enedisApi; + private final Gson gson; private OAuthClientService oAuthService; private final ThingRegistry thingRegistry; - public LinkyAuthService(final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, - final @Reference ThingRegistry thingRegistry, final @Reference ComponentContext componentContext) { + private static @Nullable HttpServlet servlet; + private static final String TEMPLATE_PATH = "templates/"; + private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; + + public ApiBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, + final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, + final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { + super(bridge); + + SslContextFactory sslContextFactory = new SslContextFactory.Client(); + try { + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, new TrustManager[] { TrustAllTrustManager.getInstance() }, null); + sslContextFactory.setSslContext(sslContext); + + } catch (NoSuchAlgorithmException e) { + logger.warn("An exception occurred while requesting the SSL encryption algorithm : '{}'", e.getMessage(), + e); + } catch (KeyManagementException e) { + logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); + } + + this.gson = gson; this.httpService = httpService; this.thingRegistry = thingRegistry; + this.bundleContext = componentContext.getBundleContext(); + + this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); + httpClient.setFollowRedirects(false); + httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); + + try { + httpClient.start(); + } catch (Exception e) { + logger.warn("Unable to start Jetty HttpClient {}", e.getMessage()); + } + this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, LinkyBindingConstants.ENEDIS_API_TOKEN_URL, LinkyBindingConstants.ENEDIS_AUTH_AUTHORIZE_URL, LinkyBindingConstants.clientId, LinkyBindingConstants.clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); - try { - bundleContext = componentContext.getBundleContext(); + registerServlet(); - httpService.registerServlet(LinkyBindingConstants.LINKY_ALIAS, createServlet(), new Hashtable<>(), - httpService.createDefaultHttpContext()); - httpService.registerResources(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS, - "web", null); + updateStatus(ThingStatus.UNKNOWN); + } + + public @Nullable EnedisHttpApi getEnedisApi() { + return enedisApi; + } + + @Override + public void initialize() { + logger.debug("Initializing Netatmo API bridge handler."); + + updateStatus(ThingStatus.UNKNOWN); + + EnedisHttpApi api = new EnedisHttpApi(this, gson, this.httpClient); + + this.enedisApi = api; + + scheduler.submit(() -> { + try { + api.initialize(); + updateStatus(ThingStatus.ONLINE); + } catch (LinkyException e) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); + } + }); + + } + + /* + * @Override + * protected void deactivate(ComponentContext componentContext) { + * super.deactivate(componentContext); + * try { + * httpClient.stop(); + * } catch (Exception e) { + * logger.warn("Unable to stop Jetty HttpClient {}", e.getMessage()); + * } + * } + */ + + @Override + public void handleCommand(ChannelUID channelUID, Command command) { + // TODO Auto-generated method stub + + } + + @Override + public void dispose() { + logger.debug("Shutting down Netatmo API bridge handler."); + + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); + + super.dispose(); + } + + private void registerServlet() { + try { + if (servlet == null) { + servlet = createServlet(); + + httpService.registerServlet(LinkyBindingConstants.LINKY_ALIAS, servlet, new Hashtable<>(), + httpService.createDefaultHttpContext()); + httpService.registerResources(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS, + "web", null); + } } catch (NamespaceException | ServletException | IOException e) { logger.warn("Error during linky servlet startup", e); } - } - @Deactivate - protected void deactivate(ComponentContext componentContext) { - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); } /** @@ -220,4 +331,5 @@ public class LinkyAuthService { return result; } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java new file mode 100644 index 00000000000..63c997d7aa9 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.handler; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.io.net.http.HttpClientFactory; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.ThingRegistry; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.http.HttpService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; + +/** + * {@link EnedisBridgeHandler} is the base handler to access enedis data. + * + * @author Laurent Arnal - Initial contribution + */ +@NonNullByDefault +public class EnedisBridgeHandler extends ApiBridgeHandler { + private final Logger logger = LoggerFactory.getLogger(EnedisBridgeHandler.class); + + public EnedisBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, + final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, + final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { + super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); + } + + @Override + public void initialize() { + super.initialize(); + } + + @Override + public void dispose() { + logger.debug("Shutting down Netatmo API bridge handler."); + + super.dispose(); + } + +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 50be92f4551..a8f19e9c61d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -22,12 +22,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.jetty.client.HttpClient; -import org.openhab.binding.linky.internal.LinkyAuthService; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; @@ -51,8 +48,6 @@ import org.openhab.core.types.UnDefType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.gson.Gson; - /** * The {@link LinkyHandler} is responsible for handling commands, which are * sent to one of the channels. @@ -67,30 +62,24 @@ public class LinkyHandler extends BaseThingHandler { private static final int REFRESH_INTERVAL_IN_MIN = 120; private final Logger logger = LoggerFactory.getLogger(LinkyHandler.class); - private final HttpClient httpClient; - private final Gson gson; private final ExpiringDayCache dailyConsumption; private @Nullable ScheduledFuture refreshJob; - private @Nullable EnedisHttpApi enedisApi; - private LinkyAuthService authService; private @NonNullByDefault({}) String prmId; private @NonNullByDefault({}) String userId; + private @Nullable EnedisHttpApi enedisApi; + private enum Target { FIRST, LAST, ALL } - public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient, - LinkyAuthService authService) { + public LinkyHandler(Thing thing, LocaleProvider localeProvider) { super(thing); - this.gson = gson; - this.httpClient = httpClient; - this.authService = authService; this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); @@ -150,44 +139,43 @@ public class LinkyHandler extends BaseThingHandler { @Override public void initialize() { logger.debug("Initializing Linky handler."); + + ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) getBridge().getHandler(); + enedisApi = bridgeHandler.getEnedisApi(); + updateStatus(ThingStatus.UNKNOWN); LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { - EnedisHttpApi api = new EnedisHttpApi(config, gson, httpClient, authService); - this.enedisApi = api; - scheduler.submit(() -> { try { - api.initialize(); - updateStatus(ThingStatus.ONLINE); - PrmInfo prmInfo = api.getPrmInfo(); + PrmInfo prmInfo = enedisApi.getPrmInfo(config.prmId); updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); - prmId = thing.getProperties().get(PRM_ID); - userId = thing.getProperties().get(USER_ID); + // prmId = thing.getProperties().get(PRM_ID); + // userId = thing.getProperties().get(USER_ID); - updateData(); + // updateData(); - disconnect(); + // disconnect(); final LocalDateTime now = LocalDateTime.now(); final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) .truncatedTo(ChronoUnit.HOURS); - refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, - ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, - REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); - } catch (LinkyException e) { + // refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, + // ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, + // REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); + + updateStatus(ThingStatus.ONLINE); + } catch (Exception e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); } }); - } else { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, - "@text/offline.config-error-mandatory-settings"); } + } /** @@ -420,6 +408,7 @@ public class LinkyHandler extends BaseThingHandler { to.format(DateTimeFormatter.ISO_LOCAL_DATE)); EnedisHttpApi api = this.enedisApi; + if (api != null) { try { MeterReading meterReading = api.getEnergyData(userId, prmId, from, to); @@ -430,29 +419,28 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } + return null; } - /* - * - * private @Nullable Consumption getPowerData(LocalDate from, LocalDate to) { - * logger.debug("getPowerData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), - * to.format(DateTimeFormatter.ISO_LOCAL_DATE)); - * EnedisHttpApi api = this.enedisApi; - * if (api != null) { - * try { - * Consumption consumption = api.getPowerData(userId, prmId, from, to); - * updateStatus(ThingStatus.ONLINE); - * return consumption; - * } catch (LinkyException e) { - * logger.debug("Exception when getting power data: {}", e.getMessage(), e); - * updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); - * } - * } - * return null; - * } - * - */ + private @Nullable MeterReading getPowerData(LocalDate from, LocalDate to) { + logger.debug("getPowerData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), + to.format(DateTimeFormatter.ISO_LOCAL_DATE)); + EnedisHttpApi api = this.enedisApi; + + if (api != null) { + try { + MeterReading meterReading = api.getPowerData(userId, prmId, from, to); + updateStatus(ThingStatus.ONLINE); + return meterReading; + } catch (LinkyException e) { + logger.debug("Exception when getting power data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + } + } + + return null; + } private @Nullable String getTempoData() { logger.debug("getTempoData from"); @@ -468,15 +456,18 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } + return null; } private boolean isConnected() { EnedisHttpApi api = this.enedisApi; - return api == null ? false : api.isConnected(); + // return api == null ? false : api.isConnected(); + return true; } private void disconnect() { + EnedisHttpApi api = this.enedisApi; if (api != null) { try { @@ -485,6 +476,7 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("disconnect: {}", e.getMessage()); } } + } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java new file mode 100644 index 00000000000..0e96673a5f3 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.handler; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.io.net.http.HttpClientFactory; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.ThingRegistry; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.http.HttpService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; + +/** + * {@link MyElectricalDataBridgeHandler} is the base handler to access enedis data. + * + * @author Laurent Arnal - Initial contribution + */ +@NonNullByDefault +public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { + private final Logger logger = LoggerFactory.getLogger(MyElectricalDataBridgeHandler.class); + + public MyElectricalDataBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, + final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, + final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { + super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); + } + + @Override + public void initialize() { + super.initialize(); + } + + @Override + public void dispose() { + logger.debug("Shutting down Netatmo API bridge handler."); + + super.dispose(); + } + +} diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 73c513ca2f9..b5c655dbfef 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -4,7 +4,51 @@ xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0" xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd"> + + + + Provides your energy consumption data. + In order to receive the data, you must activate your account at + https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. + + + + + + Your Enedis clientId + + + + Your Enedis clientSecret + + + + + + + + + Provides your energy consumption data. + In order to receive the data, you must activate your account at + https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. + + + + + + Your Enedis token (can be left empty, use the connection page to automatically fill it + http://youopenhab/connectlinky) + + + + + + + + + + Provides your energy consumption data. @@ -30,21 +74,6 @@ Your PrmId - - - Your Enedis token (can be left empty, use the connection page to automatically fill it - http://youopenhab/connectlinky) - - - - - Your Enedis clientId - - - - Your Enedis clientSecret - - From e04cfea00a909090c28b363885589dbd0e570bbc Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 21 Apr 2024 17:14:11 +0200 Subject: [PATCH 018/135] refactor binding (WIP) Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyHandlerFactory.java | 4 - .../internal/handler/ApiBridgeHandler.java | 4 - .../internal/handler/EnedisBridgeHandler.java | 1 - .../MyElectricalDataBridgeHandler.java | 1 - .../resources/OH-INF/thing/thing-types.xml | 88 +++++++++---------- 5 files changed, 44 insertions(+), 54 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index bb44205ed0b..e85a829151d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -100,13 +100,11 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { this.httpService = httpService; this.thingRegistry = thingRegistry; this.componentContext = componentContext; - } @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { return LinkyBindingConstants.SUPPORTED_DEVICE_THING_TYPES_UIDS.contains(thingTypeUID); - } @Override @@ -125,7 +123,5 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { } return null; - } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index fc46973bad7..212ce90187a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -155,7 +155,6 @@ public class ApiBridgeHandler extends BaseBridgeHandler { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); } }); - } /* @@ -173,7 +172,6 @@ public class ApiBridgeHandler extends BaseBridgeHandler { @Override public void handleCommand(ChannelUID channelUID, Command command) { // TODO Auto-generated method stub - } @Override @@ -200,7 +198,6 @@ public class ApiBridgeHandler extends BaseBridgeHandler { } catch (NamespaceException | ServletException | IOException e) { logger.warn("Error during linky servlet startup", e); } - } /** @@ -331,5 +328,4 @@ public class ApiBridgeHandler extends BaseBridgeHandler { return result; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 63c997d7aa9..90c3232f721 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -51,5 +51,4 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { super.dispose(); } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 0e96673a5f3..771f95f6cbd 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -51,5 +51,4 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { super.dispose(); } - } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index b5c655dbfef..ae6274f3fb8 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -4,51 +4,51 @@ xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0" xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd"> - - - - Provides your energy consumption data. - In order to receive the data, you must activate your account at - https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. - - - - - - Your Enedis clientId - - - - Your Enedis clientSecret - - - - - - - - - Provides your energy consumption data. - In order to receive the data, you must activate your account at - https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. - - - - - - Your Enedis token (can be left empty, use the connection page to automatically fill it - http://youopenhab/connectlinky) - - - - + + + + Provides your energy consumption data. + In order to receive the data, you must activate your account at + https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. + + + + + + Your Enedis clientId + + + + Your Enedis clientSecret + + + + + + + + + Provides your energy consumption data. + In order to receive the data, you must activate your account at + https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. + + + + + + Your Enedis token (can be left empty, use the connection page to automatically fill it + http://youopenhab/connectlinky) + + + + - - - - - - + + + + + + Provides your energy consumption data. From 4e34da2e3696daebe5fa7718419b5c2991e258fa Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 21 Apr 2024 17:14:11 +0200 Subject: [PATCH 019/135] refactor binding (WIP) Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/api/EnedisHttpApi.java | 1 - .../openhab/binding/linky/internal/handler/LinkyHandler.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index e5e36fb827d..277d26e3efe 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -311,5 +311,4 @@ public class EnedisHttpApi { return ""; } } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index a8f19e9c61d..7edd401b074 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -175,7 +175,6 @@ public class LinkyHandler extends BaseThingHandler { } }); } - } /** @@ -476,7 +475,6 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("disconnect: {}", e.getMessage()); } } - } @Override From cd53876b0b07ad2b537e92318cc823cc63c41f2a Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 3 Jun 2024 15:48:56 +0200 Subject: [PATCH 020/135] quick fix on dto objects Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/dto/AddressInfo.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/Contracts.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java index 7c7f4de0e78..b7b4f8360e9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java @@ -26,7 +26,7 @@ public class AddressInfo { public String street; public String locality; - @SerializedName("postalCode") + @SerializedName("postal_code") public String postalCode; @SerializedName("insee_code") diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java index 89dae9f1d2b..2a04cbe0618 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java @@ -40,6 +40,9 @@ public class Contracts { @SerializedName("contract_status") public String contractStatus; + @SerializedName("contract_type") + public String contractType; + @SerializedName("last_distribution_tariff_change_date") public String lastDistributionTariffChangeDate; } From a6717ce69bf277b04263d7d4e26f47ba55cefb8c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 3 Jun 2024 15:53:05 +0200 Subject: [PATCH 021/135] add new channels Signed-off-by: Laurent ARNAL --- .../resources/OH-INF/thing/thing-types.xml | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index ae6274f3fb8..afef803d978 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -161,6 +161,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f95b6e5691d77357e7ffa7a9c4b7a3a39773b71c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 3 Jun 2024 16:34:31 +0200 Subject: [PATCH 022/135] direct Enedis Api call support Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 45 ++++++++++++++++--- .../linky/internal/api/EnedisHttpApi.java | 39 +++++++++------- 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 10a8b8ec1b5..f80e04c98a0 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -31,6 +31,9 @@ public class LinkyBindingConstants { public static final String BINDING_ID = "linky"; + // public final String clientId = "e551937c-5250-48bc-b4a6-2323af68db92"; + // public final String clientSecret = ""; + public static final String clientId = "_88uJnEjEs_IMf4bjGZJV6gGxYga"; public static final String clientSecret = "6lsPfCmu0fEXuKYy3e0e6w8ydIca"; @@ -72,6 +75,30 @@ public class LinkyBindingConstants { public static final String TEST_SELECT = "main#linkyTestSelect"; + public static final String MAIN_IDENTITY = "main#Identity"; + + public static final String MAIN_CONTRACT_SUBSCRIBED_POWER = "main#contractSubscribedPower"; + public static final String MAIN_CONTRACT_LAST_ACTIVATION_DATE = "main#contractLastActivationDate"; + public static final String MAIN_CONTRACT_DISTRIBUTION_TARIFF = "main#contractDistributionTariff"; + public static final String MAIN_CONTRACT_OFF_PEAK_HOURS = "main#contractOffpeakHours"; + public static final String MAIN_CONTRACT_CONTRACT_STATUS = "main#contractStatus"; + public static final String MAIN_CONTRACT_CONTRACT_TYPE = "main#contractType"; + public static final String MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE = "main#contractLastDistributionTariffChangeDate"; + public static final String MAIN_CONTRACT_SEGMENT = "main#contractSegment"; + + public static final String MAIN_USAGEPOINT_ID = "main#usagePointId"; + public static final String MAIN_USAGEPOINT_STATUS = "main#usagePointStatus"; + public static final String MAIN_USAGEPOINT_METER_TYPE = "main#usagePointMeterType"; + + public static final String MAIN_USAGEPOINT_METER_ADDRESS_CITY = "main#usagePointAddressCity"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY = "main#usagePointAddressCountry"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE = "main#usagePointAddressInseeCode"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE = "main#usagePointAddressPostalCode"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_STREET = "main#usagePointAddressStreet"; + + public static final String MAIN_CONTACT_MAIL = "main#contactMail"; + public static final String MAIN_CONTACT_PHONE = "main#contactPhone"; + // Authorization related Servlet and resources aliases. public static final String LINKY_ALIAS = "/connectlinky"; public static final String LINKY_IMG_ALIAS = "/img"; @@ -86,13 +113,17 @@ public class LinkyBindingConstants { // "r:installedapps", "w:installedapps" // List of Linky services related urls, information - public static final String LINKY_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; - public static final String LINKY_AUTHORIZE_URL = LINKY_ACCOUNT_URL + "v1/oauth2/authorize"; - public static final String LINKY_API_TOKEN_URL = LINKY_ACCOUNT_URL + "token"; + public static final String LINKY_MYELECTRICALDATA_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; + public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + + "v1/oauth2/authorize"; + public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + "token"; - public static final String ENEDIS_API_ACCOUNT_URL = "https://ext.prod-sandbox.api.enedis.fr/"; - public static final String ENEDIS_API_TOKEN_URL = ENEDIS_API_ACCOUNT_URL + "oauth2/v3/token"; + public static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; + public static final String ENEDIS_AUTHORIZE_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "dataconnect/v1/oauth2/authorize"; + public static final String ENEDIS_API_TOKEN_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "oauth2/v3/token"; - public static final String ENEDIS_AUTH_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; - public static final String ENEDIS_AUTH_AUTHORIZE_URL = ENEDIS_AUTH_ACCOUNT_URL + "dataconnect/v1/oauth2/authorize"; + public static final String ENEDIS_ACCOUNT_URL_PREPROD = "https://ext.prod-sandbox.api.enedis.fr/"; + public static final String ENEDIS_AUTHORIZE_URL_PREPROD = ENEDIS_ACCOUNT_URL_PREPROD + + "dataconnect/v1/oauth2/authorize"; + public static final String ENEDIS_API_TOKEN_URL_PREPROD = ENEDIS_ACCOUNT_URL_PREPROD + "oauth2/v3/token"; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 277d26e3efe..917b2d7565d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -58,16 +58,17 @@ public class EnedisHttpApi { private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - // private static final String BASE_URL = "https://www.myelectricaldata.fr/"; private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; - // private static final String CONTRACT_URL = BASE_URL - // + "metering_data_dc/v5/daily_consumption?start=2024-04-01&end=2024-04-17"; private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts"; - private static final String IDENTITY_URL = BASE_URL + "identity"; - private static final String CONTACT_URL = BASE_URL + "contact"; - private static final String ADDRESS_URL = BASE_URL + "addresses"; - private static final String MEASURE_URL = BASE_URL + "%s/%s/start/%s/end/%s/cache"; + private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity"; + private static final String CONTACT_URL = BASE_URL + "customers_cd/v5/contact_data"; + private static final String ADDRESS_URL = BASE_URL + "customers_upa/v5/usage_points/addresses"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; + private static final String MEASURE_MAX_POWER_URL = BASE_URL + + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; + private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; private static final String TOKEN_URL = BASE_URL @@ -114,7 +115,7 @@ public class EnedisHttpApi { request = request.method(HttpMethod.GET); if (!("".equals(token))) { request = request.header("Authorization", "Bearer " + token); - request = request.header("accept", "application/json"); + request = request.header("Accept", "application/json"); } ContentResponse result = request.send(); @@ -159,12 +160,16 @@ public class EnedisHttpApi { return result; } + public String formatUrl(String apiUrl, String prmId) { + // return "%s/%s/cache".formatted(apiUrl, config.prmId); + return "%s?usage_point_id=%s".formatted(apiUrl, prmId); + } + public Customer getCustomer(String prmId) throws LinkyException { if (!connected) { initialize(); } - String data = getData("%s?usage_point_id=%s".formatted(CONTRACT_URL, prmId)); - // String data = getData("%s&usage_point_id=%s".formatted(CONTRACT_URL, config.prmId)); + String data = getData(formatUrl(CONTRACT_URL, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTRACT_URL); } @@ -184,7 +189,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData("%s/%s/cache".formatted(ADDRESS_URL, prmId)); + String data = getData(formatUrl(ADDRESS_URL, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", ADDRESS_URL); } @@ -204,7 +209,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData("%s/%s/cache".formatted(IDENTITY_URL, prmId)); + String data = getData(formatUrl(IDENTITY_URL, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", IDENTITY_URL); } @@ -224,7 +229,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData("%s/%s/cache".formatted(CONTACT_URL, prmId)); + String data = getData(formatUrl(CONTACT_URL, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", CONTACT_URL); @@ -241,12 +246,12 @@ public class EnedisHttpApi { } } - private MeterReading getMeasures(String userId, String prmId, LocalDate from, LocalDate to, String request) + private MeterReading getMeasures(String apiUrl, String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { String dtStart = from.format(API_DATE_FORMAT); String dtEnd = to.format(API_DATE_FORMAT); - String url = String.format(MEASURE_URL, request, prmId, dtStart, dtEnd); + String url = String.format(apiUrl, prmId, dtStart, dtEnd); if (!connected) { initialize(); } @@ -268,11 +273,11 @@ public class EnedisHttpApi { } public MeterReading getEnergyData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(userId, prmId, from, to, "daily_consumption"); + return getMeasures(MEASURE_DAILY_CONSUMPTION_URL, userId, prmId, from, to); } public MeterReading getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(userId, prmId, from, to, "daily_consumption_max_power"); + return getMeasures(MEASURE_MAX_POWER_URL, userId, prmId, from, to); } public String getTempoData() throws LinkyException { From bd28b37441764f6c5eb8ff7b5fb64bc9ebe6ecf9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 3 Jun 2024 16:35:14 +0200 Subject: [PATCH 023/135] refactor binding Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyHandlerFactory.java | 5 +- .../internal/handler/ApiBridgeHandler.java | 24 +++- .../linky/internal/handler/LinkyHandler.java | 115 +++++++++++++----- 3 files changed, 107 insertions(+), 37 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index e85a829151d..ea4a91f73b6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -37,8 +37,6 @@ import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.service.http.HttpService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; @@ -59,7 +57,8 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = DateTimeFormatter .ofPattern("uuuu-MM-dd HH:mm:ss"); - private final Logger logger = LoggerFactory.getLogger(LinkyHandlerFactory.class); + // private final String clientId = "e551937c-5250-48bc-b4a6-2323af68db92"; + // private final String clientSecret = ""; private final HttpClientFactory httpClientFactory; private final OAuthFactory oAuthFactory; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 212ce90187a..be9a0bf88ce 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -72,8 +72,6 @@ import com.google.gson.Gson; public class ApiBridgeHandler extends BaseBridgeHandler { private final Logger logger = LoggerFactory.getLogger(ApiBridgeHandler.class); - private static final int REFRESH_FIRST_HOUR_OF_DAY = 1; - private static final int REQUEST_BUFFER_SIZE = 8000; private @NonNullByDefault({}) HttpService httpService; @@ -124,7 +122,7 @@ public class ApiBridgeHandler extends BaseBridgeHandler { } this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, - LinkyBindingConstants.ENEDIS_API_TOKEN_URL, LinkyBindingConstants.ENEDIS_AUTH_AUTHORIZE_URL, + LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD, LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD, LinkyBindingConstants.clientId, LinkyBindingConstants.clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); @@ -285,11 +283,29 @@ public class ApiBridgeHandler extends BaseBridgeHandler { && accessTokenResponse.getRefreshToken() != null; } - public String getToken() { + public String getToken() throws LinkyException { + AccessTokenResponse accesToken = getAccessTokenResponse(); + if (accesToken == null) { + accesToken = getAccessTokenByClientCredentials(); + } + + if (accesToken == null) { + throw new LinkyException("no token"); + } + return accesToken.getAccessToken(); } + private @Nullable AccessTokenResponse getAccessTokenByClientCredentials() { + try { + return oAuthService.getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); + } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { + logger.debug("Exception checking authorization: ", e); + return null; + } + } + private @Nullable AccessTokenResponse getAccessTokenResponse() { try { return oAuthService.getAccessTokenResponse(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 7edd401b074..3cb0fb9d8cc 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; @@ -37,6 +38,7 @@ import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; import org.openhab.core.library.unit.Units; +import org.openhab.core.thing.Bridge; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingStatus; @@ -69,7 +71,7 @@ public class LinkyHandler extends BaseThingHandler { private @NonNullByDefault({}) String prmId; private @NonNullByDefault({}) String userId; - + private @Nullable LinkyConfiguration config; private @Nullable EnedisHttpApi enedisApi; private enum Target { @@ -140,40 +142,99 @@ public class LinkyHandler extends BaseThingHandler { public void initialize() { logger.debug("Initializing Linky handler."); - ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) getBridge().getHandler(); + Bridge bridge = getBridge(); + if (bridge == null) { + return; + } + + ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) bridge.getHandler(); + if (bridgeHandler == null) { + return; + } enedisApi = bridgeHandler.getEnedisApi(); updateStatus(ThingStatus.UNKNOWN); - LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); + config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { scheduler.submit(() -> { try { - PrmInfo prmInfo = enedisApi.getPrmInfo(config.prmId); - updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, - prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); + EnedisHttpApi api = this.enedisApi; + LinkyConfiguration config = this.config; - // prmId = thing.getProperties().get(PRM_ID); - // userId = thing.getProperties().get(USER_ID); + if (api != null && config != null) { + PrmInfo prmInfo = api.getPrmInfo(config.prmId); + updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, + prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); - // updateData(); + // prmId = thing.getProperties().get(PRM_ID); + // userId = thing.getProperties().get(USER_ID); - // disconnect(); + updateMetaData(); + updateData(); - final LocalDateTime now = LocalDateTime.now(); - final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) - .truncatedTo(ChronoUnit.HOURS); + disconnect(); - // refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, - // ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, - // REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); + final LocalDateTime now = LocalDateTime.now(); + final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) + .truncatedTo(ChronoUnit.HOURS); - updateStatus(ThingStatus.ONLINE); - } catch (Exception e) { + refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, + ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, + REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); + } + } catch (LinkyException e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); } }); + } else { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, + "@text/offline.config-error-mandatory-settings"); + } + } + + private synchronized void updateMetaData() { + EnedisHttpApi api = this.enedisApi; + LinkyConfiguration config = this.config; + + if (api != null && config != null) { + try { + PrmInfo info = api.getPrmInfo(config.prmId); + String title = info.identityInfo.title; + String firstName = info.identityInfo.firstname; + String lastName = info.identityInfo.lastname; + + updateState(MAIN_IDENTITY, new StringType(title + " " + firstName + " " + lastName)); + + updateState(MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); + updateState(MAIN_CONTRACT_CONTRACT_STATUS, new StringType(info.contractInfo.contractStatus)); + updateState(MAIN_CONTRACT_CONTRACT_TYPE, new StringType(info.contractInfo.contractType)); + updateState(MAIN_CONTRACT_DISTRIBUTION_TARIFF, new StringType(info.contractInfo.distributionTariff)); + updateState(MAIN_CONTRACT_LAST_ACTIVATION_DATE, new StringType(info.contractInfo.lastActivationDate)); + updateState(MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE, + new StringType(info.contractInfo.lastDistributionTariffChangeDate)); + updateState(MAIN_CONTRACT_OFF_PEAK_HOURS, new StringType(info.contractInfo.offpeakHours)); + updateState(MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); + updateState(MAIN_CONTRACT_SUBSCRIBED_POWER, new StringType(info.contractInfo.subscribedPower)); + + updateState(MAIN_USAGEPOINT_ID, new StringType(info.usagePointInfo.usagePointId)); + updateState(MAIN_USAGEPOINT_STATUS, new StringType(info.usagePointInfo.usagePointStatus)); + updateState(MAIN_USAGEPOINT_METER_TYPE, new StringType(info.usagePointInfo.meterType)); + + updateState(MAIN_USAGEPOINT_METER_ADDRESS_CITY, new StringType(info.addressInfo.city)); + updateState(MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY, new StringType(info.addressInfo.country)); + updateState(MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE, new StringType(info.addressInfo.postalCode)); + updateState(MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE, new StringType(info.addressInfo.inseeCode)); + updateState(MAIN_USAGEPOINT_METER_ADDRESS_STREET, new StringType(info.addressInfo.street)); + + updateState(MAIN_CONTACT_MAIL, new StringType(info.contactInfo.email)); + updateState(MAIN_CONTACT_PHONE, new StringType(info.contactInfo.phone)); + + } catch (LinkyException e) { + logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + } } } @@ -189,7 +250,7 @@ public class LinkyHandler extends BaseThingHandler { // updateMonthlyData(); // updateYearlyData(); - String tempoData = getTempoData(); + // String tempoData = getTempoData(); // LinkedTreeMap obj = gson.fromJson(tempoData, LinkedTreeMap.class); @@ -205,8 +266,6 @@ public class LinkyHandler extends BaseThingHandler { * } */ - updateState(TEST_SELECT, new StringType(tempoData)); - if (!connectedBefore && isConnected()) { disconnect(); } @@ -407,7 +466,6 @@ public class LinkyHandler extends BaseThingHandler { to.format(DateTimeFormatter.ISO_LOCAL_DATE)); EnedisHttpApi api = this.enedisApi; - if (api != null) { try { MeterReading meterReading = api.getEnergyData(userId, prmId, from, to); @@ -418,15 +476,14 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } - return null; } private @Nullable MeterReading getPowerData(LocalDate from, LocalDate to) { logger.debug("getPowerData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), to.format(DateTimeFormatter.ISO_LOCAL_DATE)); - EnedisHttpApi api = this.enedisApi; + EnedisHttpApi api = this.enedisApi; if (api != null) { try { MeterReading meterReading = api.getPowerData(userId, prmId, from, to); @@ -437,10 +494,10 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } - return null; } + /* private @Nullable String getTempoData() { logger.debug("getTempoData from"); @@ -455,18 +512,16 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } - return null; } - + */ + private boolean isConnected() { EnedisHttpApi api = this.enedisApi; - // return api == null ? false : api.isConnected(); - return true; + return api == null ? false : api.isConnected(); } private void disconnect() { - EnedisHttpApi api = this.enedisApi; if (api != null) { try { From 4fa244e771329a3406791d55eb499169f46439f0 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 3 Jun 2024 17:06:48 +0200 Subject: [PATCH 024/135] code cleanup Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 6 --- .../linky/internal/LinkyHandlerFactory.java | 3 -- .../linky/internal/api/EnedisHttpApi.java | 12 ++--- .../internal/handler/ApiBridgeHandler.java | 33 ++----------- .../linky/internal/handler/LinkyHandler.java | 48 +++++++++---------- 5 files changed, 33 insertions(+), 69 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index f80e04c98a0..3958d9cbc63 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -31,12 +31,6 @@ public class LinkyBindingConstants { public static final String BINDING_ID = "linky"; - // public final String clientId = "e551937c-5250-48bc-b4a6-2323af68db92"; - // public final String clientSecret = ""; - - public static final String clientId = "_88uJnEjEs_IMf4bjGZJV6gGxYga"; - public static final String clientSecret = "6lsPfCmu0fEXuKYy3e0e6w8ydIca"; - // List of all Thing Type UIDs public static final ThingTypeUID THING_TYPE_API_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "EnedisBridge"); public static final ThingTypeUID THING_TYPE_API_MYELECTRICALDATA_BRIDGE = new ThingTypeUID(BINDING_ID, diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index ea4a91f73b6..b33412af330 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -57,9 +57,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = DateTimeFormatter .ofPattern("uuuu-MM-dd HH:mm:ss"); - // private final String clientId = "e551937c-5250-48bc-b4a6-2323af68db92"; - // private final String clientSecret = ""; - private final HttpClientFactory httpClientFactory; private final OAuthFactory oAuthFactory; private final HttpService httpService; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 917b2d7565d..f5eefb0d091 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -161,7 +161,6 @@ public class EnedisHttpApi { } public String formatUrl(String apiUrl, String prmId) { - // return "%s/%s/cache".formatted(apiUrl, config.prmId); return "%s?usage_point_id=%s".formatted(apiUrl, prmId); } @@ -246,8 +245,7 @@ public class EnedisHttpApi { } } - private MeterReading getMeasures(String apiUrl, String userId, String prmId, LocalDate from, LocalDate to) - throws LinkyException { + private MeterReading getMeasures(String apiUrl, String prmId, LocalDate from, LocalDate to) throws LinkyException { String dtStart = from.format(API_DATE_FORMAT); String dtEnd = to.format(API_DATE_FORMAT); @@ -272,12 +270,12 @@ public class EnedisHttpApi { } } - public MeterReading getEnergyData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(MEASURE_DAILY_CONSUMPTION_URL, userId, prmId, from, to); + public MeterReading getEnergyData(String prmId, LocalDate from, LocalDate to) throws LinkyException { + return getMeasures(MEASURE_DAILY_CONSUMPTION_URL, prmId, from, to); } - public MeterReading getPowerData(String userId, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(MEASURE_MAX_POWER_URL, userId, prmId, from, to); + public MeterReading getPowerData(String prmId, LocalDate from, LocalDate to) throws LinkyException { + return getMeasures(MEASURE_MAX_POWER_URL, prmId, from, to); } public String getTempoData() throws LinkyException { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index be9a0bf88ce..e955bbd3002 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -35,6 +35,7 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.openhab.binding.linky.internal.LinkyAuthServlet; import org.openhab.binding.linky.internal.LinkyBindingConstants; +import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.core.auth.client.oauth2.AccessTokenResponse; @@ -84,6 +85,7 @@ public class ApiBridgeHandler extends BaseBridgeHandler { private final ThingRegistry thingRegistry; private static @Nullable HttpServlet servlet; + private @Nullable LinkyConfiguration config; private static final String TEMPLATE_PATH = "templates/"; private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; @@ -121,10 +123,11 @@ public class ApiBridgeHandler extends BaseBridgeHandler { logger.warn("Unable to start Jetty HttpClient {}", e.getMessage()); } + config = getConfigAs(LinkyConfiguration.class); + this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD, LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD, - LinkyBindingConstants.clientId, LinkyBindingConstants.clientSecret, LinkyBindingConstants.LINKY_SCOPES, - true); + config.clientId, config.clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); registerServlet(); @@ -248,32 +251,6 @@ public class ApiBridgeHandler extends BaseBridgeHandler { } catch (final OAuthResponseException e) { throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); } - - /* - * String token = EnedisHttpApi.getToken(httpClient, LinkyBindingConstants.clientId, reqCode); - * - * logger.debug("token: {}", token); - * - * Collection col = this.thingRegistry.getAll(); - * for (Thing thing : col) { - * if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - * Configuration config = thing.getConfiguration(); - * String prmId = (String) config.get("prmId"); - * - * if (!prmId.equals(reqCode)) { - * continue; - * } - * - * config.put("token", token); - * LinkyHandler handler = (LinkyHandler) thing.getHandler(); - * if (handler != null) { - * handler.saveConfiguration(config); - * } - * } - * } - * - * return token; - */ } public boolean isAuthorized() { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 3cb0fb9d8cc..37f52362a8c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -68,9 +68,6 @@ public class LinkyHandler extends BaseThingHandler { private final ExpiringDayCache dailyConsumption; private @Nullable ScheduledFuture refreshJob; - - private @NonNullByDefault({}) String prmId; - private @NonNullByDefault({}) String userId; private @Nullable LinkyConfiguration config; private @Nullable EnedisHttpApi enedisApi; @@ -168,9 +165,6 @@ public class LinkyHandler extends BaseThingHandler { updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); - // prmId = thing.getProperties().get(PRM_ID); - // userId = thing.getProperties().get(USER_ID); - updateMetaData(); updateData(); @@ -194,6 +188,10 @@ public class LinkyHandler extends BaseThingHandler { } } + public @Nullable LinkyConfiguration getLinkyConfig() { + return config; + } + private synchronized void updateMetaData() { EnedisHttpApi api = this.enedisApi; LinkyConfiguration config = this.config; @@ -468,7 +466,7 @@ public class LinkyHandler extends BaseThingHandler { EnedisHttpApi api = this.enedisApi; if (api != null) { try { - MeterReading meterReading = api.getEnergyData(userId, prmId, from, to); + MeterReading meterReading = api.getEnergyData(config.prmId, from, to); updateStatus(ThingStatus.ONLINE); return meterReading; } catch (LinkyException e) { @@ -486,7 +484,7 @@ public class LinkyHandler extends BaseThingHandler { EnedisHttpApi api = this.enedisApi; if (api != null) { try { - MeterReading meterReading = api.getPowerData(userId, prmId, from, to); + MeterReading meterReading = api.getPowerData(config.prmId, from, to); updateStatus(ThingStatus.ONLINE); return meterReading; } catch (LinkyException e) { @@ -498,24 +496,24 @@ public class LinkyHandler extends BaseThingHandler { } /* - private @Nullable String getTempoData() { - logger.debug("getTempoData from"); + * private @Nullable String getTempoData() { + * logger.debug("getTempoData from"); + * + * EnedisHttpApi api = this.enedisApi; + * if (api != null) { + * try { + * String result = api.getTempoData(); + * updateStatus(ThingStatus.ONLINE); + * return result; + * } catch (LinkyException e) { + * logger.debug("Exception when getting power data: {}", e.getMessage(), e); + * updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + * } + * } + * return null; + * } + */ - EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - String result = api.getTempoData(); - updateStatus(ThingStatus.ONLINE); - return result; - } catch (LinkyException e) { - logger.debug("Exception when getting power data: {}", e.getMessage(), e); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); - } - } - return null; - } - */ - private boolean isConnected() { EnedisHttpApi api = this.enedisApi; return api == null ? false : api.isConnected(); From fe75abe9790c8951b9961d876ec311309792518c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 3 Jun 2024 18:10:56 +0200 Subject: [PATCH 025/135] fix MyElectricalData api Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 129 ++++++++++-------- .../internal/handler/ApiBridgeHandler.java | 23 +++- .../internal/handler/EnedisBridgeHandler.java | 57 ++++++++ .../MyElectricalDataBridgeHandler.java | 57 ++++++++ 4 files changed, 209 insertions(+), 57 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index f5eefb0d091..268e54d743c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -31,6 +31,7 @@ import org.eclipse.jetty.http.HttpMethod; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ContactInfo; +import org.openhab.binding.linky.internal.dto.Contracts; import org.openhab.binding.linky.internal.dto.Customer; import org.openhab.binding.linky.internal.dto.CustomerIdResponse; import org.openhab.binding.linky.internal.dto.CustomerReponse; @@ -40,7 +41,9 @@ import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.binding.linky.internal.dto.UsagePoint; +import org.openhab.binding.linky.internal.dto.UsagePointDetails; import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; +import org.openhab.binding.linky.internal.handler.MyElectricalDataBridgeHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,22 +61,6 @@ public class EnedisHttpApi { private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; - - private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts"; - private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity"; - private static final String CONTACT_URL = BASE_URL + "customers_cd/v5/contact_data"; - private static final String ADDRESS_URL = BASE_URL + "customers_upa/v5/usage_points/addresses"; - private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL - + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; - private static final String MEASURE_MAX_POWER_URL = BASE_URL - + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; - - private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; - - private static final String TOKEN_URL = BASE_URL - + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; - private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; @@ -106,22 +93,23 @@ public class EnedisHttpApi { } private String getData(String url) throws LinkyException { - return getData(url, httpClient, apiBridgeHandler.getToken()); + return getData(apiBridgeHandler, url, httpClient, apiBridgeHandler.getToken()); } - private static String getData(String url, HttpClient httpClient, String token) throws LinkyException { + private static String getData(ApiBridgeHandler apiBridgeHandler, String url, HttpClient httpClient, String token) + throws LinkyException { try { Request request = httpClient.newRequest(url); request = request.method(HttpMethod.GET); if (!("".equals(token))) { - request = request.header("Authorization", "Bearer " + token); + request = request.header("Authorization", "" + token); request = request.header("Accept", "application/json"); } ContentResponse result = request.send(); if (result.getStatus() == 307) { String loc = result.getHeaders().get("Location"); - String newUrl = BASE_URL + loc.substring(1); + String newUrl = apiBridgeHandler.getBaseUrl() + loc.substring(1); request = httpClient.newRequest(newUrl); request = request.method(HttpMethod.GET); result = request.send(); @@ -145,32 +133,71 @@ public class EnedisHttpApi { public PrmInfo getPrmInfo(String prmId) throws LinkyException { PrmInfo result = new PrmInfo(); - Customer customer = getCustomer(prmId); - UsagePoint usagePoint = customer.usagePoints[0]; - result.contractInfo = usagePoint.contracts; - result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(prmId); - result.addressInfo = getAddress(prmId); - result.contactInfo = getContact(prmId); + if (apiBridgeHandler instanceof MyElectricalDataBridgeHandler) { + result.contractInfo = new Contracts(); + result.addressInfo = new AddressInfo(); + result.contactInfo = new ContactInfo(); + result.identityInfo = new IdentityInfo(); + result.usagePointInfo = new UsagePointDetails(); - result.prmId = result.usagePointInfo.usagePointId; - result.customerId = customer.customerId; + result.contractInfo.subscribedPower = "12Kva"; + result.contactInfo.email = "lxxyyy@domain.net"; + result.contactInfo.phone = "--.--.--.--.--"; + result.contractInfo.contractStatus = "unknow"; + result.contractInfo.contractType = "unknow"; + result.contractInfo.distributionTariff = "unknow"; + result.contractInfo.lastActivationDate = "unknow"; + result.contractInfo.lastDistributionTariffChangeDate = "unknow"; + result.contractInfo.segment = "unknow"; + result.contractInfo.offpeakHours = "unknow"; + + result.addressInfo.city = "Ville"; + result.addressInfo.country = "France"; + result.addressInfo.postalCode = "xxxxx"; + result.addressInfo.inseeCode = "0"; + result.addressInfo.street = "xx Rue de yyyyyy"; + + result.identityInfo.firstname = "Laurent"; + result.identityInfo.lastname = "ARNAL"; + result.identityInfo.title = "M."; + + result.usagePointInfo.meterType = "unknow"; + result.usagePointInfo.usagePointId = "unknow"; + result.usagePointInfo.usagePointStatus = "unknow"; + + result.prmId = prmId; + result.customerId = "xxxxxxxxxx"; + + } else { + Customer customer = getCustomer(prmId); + UsagePoint usagePoint = customer.usagePoints[0]; + + result.contractInfo = usagePoint.contracts; + result.usagePointInfo = usagePoint.usagePoint; + result.identityInfo = getIdentity(prmId); + result.addressInfo = getAddress(prmId); + result.contactInfo = getContact(prmId); + + result.prmId = result.usagePointInfo.usagePointId; + result.customerId = customer.customerId; + } return result; } public String formatUrl(String apiUrl, String prmId) { - return "%s?usage_point_id=%s".formatted(apiUrl, prmId); + return apiUrl.formatted(prmId); } public Customer getCustomer(String prmId) throws LinkyException { if (!connected) { initialize(); } - String data = getData(formatUrl(CONTRACT_URL, prmId)); + String contractUrl = apiBridgeHandler.getContractUrl(); + String data = getData(formatUrl(contractUrl, prmId)); if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", CONTRACT_URL); + throw new LinkyException("Requesting '%s' returned an empty response", contractUrl); } try { CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); @@ -180,7 +207,7 @@ public class EnedisHttpApi { return cResponse.customer; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", CONTRACT_URL); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contractUrl); } } @@ -188,9 +215,10 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(formatUrl(ADDRESS_URL, prmId)); + String addressUrl = apiBridgeHandler.getAddressUrl(); + String data = getData(formatUrl(addressUrl, prmId)); if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", ADDRESS_URL); + throw new LinkyException("Requesting '%s' returned an empty response", addressUrl); } try { CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); @@ -200,7 +228,7 @@ public class EnedisHttpApi { return cResponse.customer.usagePoints[0].usagePoint.usagePointAddresses; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", ADDRESS_URL); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", addressUrl); } } @@ -208,9 +236,10 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(formatUrl(IDENTITY_URL, prmId)); + String identityUrl = apiBridgeHandler.getIdentityUrl(); + String data = getData(formatUrl(identityUrl, prmId)); if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", IDENTITY_URL); + throw new LinkyException("Requesting '%s' returned an empty response", identityUrl); } try { CustomerIdResponse iResponse = gson.fromJson(data, CustomerIdResponse.class); @@ -220,7 +249,7 @@ public class EnedisHttpApi { return iResponse.identity.naturalPerson; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", IDENTITY_URL); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", identityUrl); } } @@ -228,10 +257,11 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(formatUrl(CONTACT_URL, prmId)); + String contactUrl = apiBridgeHandler.getContactUrl(); + String data = getData(formatUrl(contactUrl, prmId)); if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", CONTACT_URL); + throw new LinkyException("Requesting '%s' returned an empty response", contactUrl); } try { CustomerIdResponse cResponse = gson.fromJson(data, CustomerIdResponse.class); @@ -241,7 +271,7 @@ public class EnedisHttpApi { return cResponse.contactData; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", CONTACT_URL); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contactUrl); } } @@ -271,15 +301,15 @@ public class EnedisHttpApi { } public MeterReading getEnergyData(String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(MEASURE_DAILY_CONSUMPTION_URL, prmId, from, to); + return getMeasures(apiBridgeHandler.getDailyConsumptionUrl(), prmId, from, to); } public MeterReading getPowerData(String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(MEASURE_MAX_POWER_URL, prmId, from, to); + return getMeasures(apiBridgeHandler.getMaxPowerUrl(), prmId, from, to); } public String getTempoData() throws LinkyException { - String url = String.format(TEMPO_URL, "2024-01-01", "2024-01-31"); + String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-01-31"); if (!connected) { initialize(); } @@ -305,13 +335,4 @@ public class EnedisHttpApi { // return data; } - public static String getToken(HttpClient httpClient, String clientId, String prmId) { - try { - String url = String.format(TOKEN_URL, clientId, prmId); - String token = getData(url, httpClient, ""); - return token; - } catch (LinkyException e) { - return ""; - } - } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index e955bbd3002..15e1f0a105f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -70,7 +70,7 @@ import com.google.gson.Gson; * @author Laurent Arnal - Initial contribution */ @NonNullByDefault -public class ApiBridgeHandler extends BaseBridgeHandler { +public abstract class ApiBridgeHandler extends BaseBridgeHandler { private final Logger logger = LoggerFactory.getLogger(ApiBridgeHandler.class); private static final int REQUEST_BUFFER_SIZE = 8000; @@ -85,7 +85,7 @@ public class ApiBridgeHandler extends BaseBridgeHandler { private final ThingRegistry thingRegistry; private static @Nullable HttpServlet servlet; - private @Nullable LinkyConfiguration config; + protected @Nullable LinkyConfiguration config; private static final String TEMPLATE_PATH = "templates/"; private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; @@ -271,7 +271,7 @@ public class ApiBridgeHandler extends BaseBridgeHandler { throw new LinkyException("no token"); } - return accesToken.getAccessToken(); + return "Bearer " + accesToken.getAccessToken(); } private @Nullable AccessTokenResponse getAccessTokenByClientCredentials() { @@ -321,4 +321,21 @@ public class ApiBridgeHandler extends BaseBridgeHandler { return result; } + + public abstract String getBaseUrl(); + + public abstract String getContactUrl(); + + public abstract String getContractUrl(); + + public abstract String getIdentityUrl(); + + public abstract String getAddressUrl(); + + public abstract String getDailyConsumptionUrl(); + + public abstract String getMaxPowerUrl(); + + public abstract String getTempoUrl(); + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 90c3232f721..188e724b6ff 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -34,6 +34,23 @@ import com.google.gson.Gson; public class EnedisBridgeHandler extends ApiBridgeHandler { private final Logger logger = LoggerFactory.getLogger(EnedisBridgeHandler.class); + private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + + private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; + private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity?usage_point_id=%s"; + private static final String CONTACT_URL = BASE_URL + "customers_cd/v5/contact_data?usage_point_id=%s"; + private static final String ADDRESS_URL = BASE_URL + "customers_upa/v5/usage_points/addresses?usage_point_id=%s"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; + private static final String MEASURE_MAX_POWER_URL = BASE_URL + + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; + + private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; + + // private static final String TOKEN_URL = BASE_URL + // + + // "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; + public EnedisBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -51,4 +68,44 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { super.dispose(); } + + @Override + public String getBaseUrl() { + return BASE_URL; + } + + @Override + public String getContactUrl() { + return CONTACT_URL; + } + + @Override + public String getContractUrl() { + return CONTRACT_URL; + } + + @Override + public String getIdentityUrl() { + return IDENTITY_URL; + } + + @Override + public String getAddressUrl() { + return ADDRESS_URL; + } + + @Override + public String getDailyConsumptionUrl() { + return MEASURE_DAILY_CONSUMPTION_URL; + } + + @Override + public String getMaxPowerUrl() { + return MEASURE_MAX_POWER_URL; + } + + @Override + public String getTempoUrl() { + return TEMPO_URL; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 771f95f6cbd..bca359736eb 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -13,6 +13,7 @@ package org.openhab.binding.linky.internal.handler; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.linky.internal.LinkyException; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; @@ -34,6 +35,17 @@ import com.google.gson.Gson; public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { private final Logger logger = LoggerFactory.getLogger(MyElectricalDataBridgeHandler.class); + private static final String BASE_URL = "https://www.myelectricaldata.fr/"; + + private static final String CONTRACT_URL = BASE_URL + "contracts/%s/"; + private static final String IDENTITY_URL = BASE_URL + "identity/%s/"; + private static final String CONTACT_URL = BASE_URL + "contact/%s/"; + private static final String ADDRESS_URL = BASE_URL + "addresses/%s/"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + "daily_consumption/%s/start/%s/end/%s"; + private static final String MEASURE_MAX_POWER_URL = BASE_URL + "daily_consumption_max_power/%s/start/%s/end/%s"; + + private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; + public MyElectricalDataBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -51,4 +63,49 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { super.dispose(); } + + @Override + public String getToken() throws LinkyException { + return config.token; + } + + @Override + public String getBaseUrl() { + return BASE_URL; + } + + @Override + public String getContactUrl() { + return CONTACT_URL; + } + + @Override + public String getContractUrl() { + return CONTRACT_URL; + } + + @Override + public String getIdentityUrl() { + return IDENTITY_URL; + } + + @Override + public String getAddressUrl() { + return ADDRESS_URL; + } + + @Override + public String getDailyConsumptionUrl() { + return MEASURE_DAILY_CONSUMPTION_URL; + } + + @Override + public String getMaxPowerUrl() { + return MEASURE_MAX_POWER_URL; + } + + @Override + public String getTempoUrl() { + return TEMPO_URL; + } } From d1920f21db5b85e630833a6205fb31b1dc0afb9a Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 4 Jun 2024 15:51:56 +0200 Subject: [PATCH 026/135] review consent / authorisation flow to be compatible with both MyElectricalData and Enedis Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthServlet.java | 1 + .../linky/internal/LinkyBindingConstants.java | 16 ++--- .../linky/internal/api/EnedisHttpApi.java | 55 +++++++++------- .../internal/handler/ApiBridgeHandler.java | 43 +++++++------ .../internal/handler/EnedisBridgeHandler.java | 31 +++++++-- .../linky/internal/handler/LinkyHandler.java | 8 +-- .../MyElectricalDataBridgeHandler.java | 63 ++++++++++++++++++- .../resources/OH-INF/thing/thing-types.xml | 12 ++-- 8 files changed, 161 insertions(+), 68 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 65357178efc..2feb6f85275 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -69,6 +69,7 @@ public class LinkyAuthServlet extends HttpServlet { public LinkyAuthServlet(ApiBridgeHandler apiBridgeHandler, String indexTemplate) { this.indexTemplate = indexTemplate; + this.apiBridgeHandler = apiBridgeHandler; } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 3958d9cbc63..77465e8eb46 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -106,18 +106,20 @@ public class LinkyBindingConstants { // "r:locations:*", "w:locations:*", "x:locations:*", "r:scenes:*", "x:scenes:*", "r:rules:*", "w:rules:*", // "r:installedapps", "w:installedapps" - // List of Linky services related urls, information - public static final String LINKY_MYELECTRICALDATA_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; - public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL - + "v1/oauth2/authorize"; - public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + "token"; - public static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; public static final String ENEDIS_AUTHORIZE_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "dataconnect/v1/oauth2/authorize"; public static final String ENEDIS_API_TOKEN_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "oauth2/v3/token"; public static final String ENEDIS_ACCOUNT_URL_PREPROD = "https://ext.prod-sandbox.api.enedis.fr/"; - public static final String ENEDIS_AUTHORIZE_URL_PREPROD = ENEDIS_ACCOUNT_URL_PREPROD + public static final String ENEDIS_AUTHORIZE_URL_PREPROD = ENEDIS_ACCOUNT_URL_PROD + "dataconnect/v1/oauth2/authorize"; public static final String ENEDIS_API_TOKEN_URL_PREPROD = ENEDIS_ACCOUNT_URL_PREPROD + "oauth2/v3/token"; + + // List of Linky services related urls, information + public static final String LINKY_MYELECTRICALDATA_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; + // public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + // + "v1/oauth2/authorize?usage_points_id=21454992660003&user_type=aa&person_id=-1"; + public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = ENEDIS_AUTHORIZE_URL_PROD; + public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 268e54d743c..0bdab767a17 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -43,6 +43,7 @@ import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.binding.linky.internal.dto.UsagePoint; import org.openhab.binding.linky.internal.dto.UsagePointDetails; import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; +import org.openhab.binding.linky.internal.handler.LinkyHandler; import org.openhab.binding.linky.internal.handler.MyElectricalDataBridgeHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,8 +93,12 @@ public class EnedisHttpApi { disconnect(); } - private String getData(String url) throws LinkyException { - return getData(apiBridgeHandler, url, httpClient, apiBridgeHandler.getToken()); + public String getData(LinkyHandler handler, String url) throws LinkyException { + return getData(apiBridgeHandler, url, httpClient, apiBridgeHandler.getToken(handler)); + } + + public String getData(String url) throws LinkyException { + return getData(apiBridgeHandler, url, httpClient, ""); } private static String getData(ApiBridgeHandler apiBridgeHandler, String url, HttpClient httpClient, String token) @@ -131,7 +136,7 @@ public class EnedisHttpApi { } } - public PrmInfo getPrmInfo(String prmId) throws LinkyException { + public PrmInfo getPrmInfo(LinkyHandler handler, String prmId) throws LinkyException { PrmInfo result = new PrmInfo(); if (apiBridgeHandler instanceof MyElectricalDataBridgeHandler) { @@ -170,14 +175,14 @@ public class EnedisHttpApi { result.customerId = "xxxxxxxxxx"; } else { - Customer customer = getCustomer(prmId); + Customer customer = getCustomer(handler, prmId); UsagePoint usagePoint = customer.usagePoints[0]; result.contractInfo = usagePoint.contracts; result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(prmId); - result.addressInfo = getAddress(prmId); - result.contactInfo = getContact(prmId); + result.identityInfo = getIdentity(handler, prmId); + result.addressInfo = getAddress(handler, prmId); + result.contactInfo = getContact(handler, prmId); result.prmId = result.usagePointInfo.usagePointId; result.customerId = customer.customerId; @@ -190,12 +195,12 @@ public class EnedisHttpApi { return apiUrl.formatted(prmId); } - public Customer getCustomer(String prmId) throws LinkyException { + public Customer getCustomer(LinkyHandler handler, String prmId) throws LinkyException { if (!connected) { initialize(); } String contractUrl = apiBridgeHandler.getContractUrl(); - String data = getData(formatUrl(contractUrl, prmId)); + String data = getData(handler, formatUrl(contractUrl, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", contractUrl); } @@ -211,12 +216,12 @@ public class EnedisHttpApi { } } - public AddressInfo getAddress(String prmId) throws LinkyException { + public AddressInfo getAddress(LinkyHandler handler, String prmId) throws LinkyException { if (!connected) { initialize(); } String addressUrl = apiBridgeHandler.getAddressUrl(); - String data = getData(formatUrl(addressUrl, prmId)); + String data = getData(handler, formatUrl(addressUrl, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", addressUrl); } @@ -232,12 +237,12 @@ public class EnedisHttpApi { } } - public IdentityInfo getIdentity(String prmId) throws LinkyException { + public IdentityInfo getIdentity(LinkyHandler handler, String prmId) throws LinkyException { if (!connected) { initialize(); } String identityUrl = apiBridgeHandler.getIdentityUrl(); - String data = getData(formatUrl(identityUrl, prmId)); + String data = getData(handler, formatUrl(identityUrl, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", identityUrl); } @@ -253,12 +258,12 @@ public class EnedisHttpApi { } } - public ContactInfo getContact(String prmId) throws LinkyException { + public ContactInfo getContact(LinkyHandler handler, String prmId) throws LinkyException { if (!connected) { initialize(); } String contactUrl = apiBridgeHandler.getContactUrl(); - String data = getData(formatUrl(contactUrl, prmId)); + String data = getData(handler, formatUrl(contactUrl, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", contactUrl); @@ -275,7 +280,8 @@ public class EnedisHttpApi { } } - private MeterReading getMeasures(String apiUrl, String prmId, LocalDate from, LocalDate to) throws LinkyException { + private MeterReading getMeasures(LinkyHandler handler, String apiUrl, String prmId, LocalDate from, LocalDate to) + throws LinkyException { String dtStart = from.format(API_DATE_FORMAT); String dtEnd = to.format(API_DATE_FORMAT); @@ -283,7 +289,7 @@ public class EnedisHttpApi { if (!connected) { initialize(); } - String data = getData(url); + String data = getData(handler, url); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", url); } @@ -300,20 +306,22 @@ public class EnedisHttpApi { } } - public MeterReading getEnergyData(String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(apiBridgeHandler.getDailyConsumptionUrl(), prmId, from, to); + public MeterReading getEnergyData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) + throws LinkyException { + return getMeasures(handler, apiBridgeHandler.getDailyConsumptionUrl(), prmId, from, to); } - public MeterReading getPowerData(String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(apiBridgeHandler.getMaxPowerUrl(), prmId, from, to); + public MeterReading getPowerData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) + throws LinkyException { + return getMeasures(handler, apiBridgeHandler.getMaxPowerUrl(), prmId, from, to); } - public String getTempoData() throws LinkyException { + public String getTempoData(LinkyHandler handler) throws LinkyException { String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-01-31"); if (!connected) { initialize(); } - String data = getData(url); + String data = getData(handler, url); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", url); } @@ -334,5 +342,4 @@ public class EnedisHttpApi { // return data; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 15e1f0a105f..c8503879ab3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -82,7 +82,7 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { private @Nullable EnedisHttpApi enedisApi; private final Gson gson; private OAuthClientService oAuthService; - private final ThingRegistry thingRegistry; + protected final ThingRegistry thingRegistry; private static @Nullable HttpServlet servlet; protected @Nullable LinkyConfiguration config; @@ -125,9 +125,19 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { config = getConfigAs(LinkyConfiguration.class); - this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, - LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD, LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD, - config.clientId, config.clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); + String tokenUrl = ""; + String authorizeUrl = ""; + if (this instanceof MyElectricalDataBridgeHandler) { + tokenUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_API_TOKEN_URL; + authorizeUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_AUTHORIZE_URL; + } else if (this instanceof EnedisBridgeHandler) { + tokenUrl = LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD; + authorizeUrl = LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD; + + } + + this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, tokenUrl, + authorizeUrl, config.clientId, config.clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); registerServlet(); @@ -138,6 +148,10 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { return enedisApi; } + public abstract String getClientId(); + + public abstract String getClientSecret(); + @Override public void initialize() { logger.debug("Initializing Netatmo API bridge handler."); @@ -260,21 +274,9 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { && accessTokenResponse.getRefreshToken() != null; } - public String getToken() throws LinkyException { + public abstract String getToken(LinkyHandler handler) throws LinkyException; - AccessTokenResponse accesToken = getAccessTokenResponse(); - if (accesToken == null) { - accesToken = getAccessTokenByClientCredentials(); - } - - if (accesToken == null) { - throw new LinkyException("no token"); - } - - return "Bearer " + accesToken.getAccessToken(); - } - - private @Nullable AccessTokenResponse getAccessTokenByClientCredentials() { + protected @Nullable AccessTokenResponse getAccessTokenByClientCredentials() { try { return oAuthService.getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { @@ -283,7 +285,7 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { } } - private @Nullable AccessTokenResponse getAccessTokenResponse() { + protected @Nullable AccessTokenResponse getAccessTokenResponse() { try { return oAuthService.getAccessTokenResponse(); } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { @@ -293,8 +295,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { } public String formatAuthorizationUrl(String redirectUri) { - // Will work only in case of direct oAuth2 authentification to enedis - // this is not the case in v1 as we go trough MyElectricalData try { String uri = this.oAuthService.getAuthorizationUrl(redirectUri, LinkyBindingConstants.LINKY_SCOPES, LinkyBindingConstants.BINDING_ID); @@ -337,5 +337,4 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { public abstract String getMaxPowerUrl(); public abstract String getTempoUrl(); - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 188e724b6ff..c8be15ebd68 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -13,6 +13,8 @@ package org.openhab.binding.linky.internal.handler; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.linky.internal.LinkyException; +import org.openhab.core.auth.client.oauth2.AccessTokenResponse; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; @@ -47,10 +49,6 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; - // private static final String TOKEN_URL = BASE_URL - // + - // "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; - public EnedisBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -62,6 +60,16 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { super.initialize(); } + @Override + public String getClientId() { + return config.clientId; + } + + @Override + public String getClientSecret() { + return config.clientSecret; + } + @Override public void dispose() { logger.debug("Shutting down Netatmo API bridge handler."); @@ -69,6 +77,21 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { super.dispose(); } + @Override + public String getToken(LinkyHandler handler) throws LinkyException { + + AccessTokenResponse accesToken = getAccessTokenResponse(); + if (accesToken == null) { + accesToken = getAccessTokenByClientCredentials(); + } + + if (accesToken == null) { + throw new LinkyException("no token"); + } + + return "Bearer " + accesToken.getAccessToken(); + } + @Override public String getBaseUrl() { return BASE_URL; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 37f52362a8c..a17647136d8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -161,7 +161,7 @@ public class LinkyHandler extends BaseThingHandler { LinkyConfiguration config = this.config; if (api != null && config != null) { - PrmInfo prmInfo = api.getPrmInfo(config.prmId); + PrmInfo prmInfo = api.getPrmInfo(this, config.prmId); updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); @@ -198,7 +198,7 @@ public class LinkyHandler extends BaseThingHandler { if (api != null && config != null) { try { - PrmInfo info = api.getPrmInfo(config.prmId); + PrmInfo info = api.getPrmInfo(this, config.prmId); String title = info.identityInfo.title; String firstName = info.identityInfo.firstname; String lastName = info.identityInfo.lastname; @@ -466,7 +466,7 @@ public class LinkyHandler extends BaseThingHandler { EnedisHttpApi api = this.enedisApi; if (api != null) { try { - MeterReading meterReading = api.getEnergyData(config.prmId, from, to); + MeterReading meterReading = api.getEnergyData(this, config.prmId, from, to); updateStatus(ThingStatus.ONLINE); return meterReading; } catch (LinkyException e) { @@ -484,7 +484,7 @@ public class LinkyHandler extends BaseThingHandler { EnedisHttpApi api = this.enedisApi; if (api != null) { try { - MeterReading meterReading = api.getPowerData(config.prmId, from, to); + MeterReading meterReading = api.getPowerData(this, config.prmId, from, to); updateStatus(ThingStatus.ONLINE); return meterReading; } catch (LinkyException e) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index bca359736eb..eaaab2623be 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -12,11 +12,18 @@ */ package org.openhab.binding.linky.internal.handler; +import java.util.Collection; + import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.linky.internal.LinkyBindingConstants; +import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; +import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.config.core.Configuration; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingRegistry; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Reference; @@ -46,6 +53,8 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; + // https://www.myelectricaldata.fr/v1/oauth2/authorize?response_type=code&client_id=&state=linky&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fconnectlinky&scope=am_application_scope+default&user_type=aa&person_id=-1&usage_points_id=aa + public MyElectricalDataBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -57,6 +66,54 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { super.initialize(); } + @Override + public String getClientId() { + return "e551937c-5250-48bc-b4a6-2323af68db92"; + } + + @Override + public String getClientSecret() { + return ""; + } + + @Override + public String formatAuthorizationUrl(String redirectUri) { + return super.formatAuthorizationUrl(""); + } + + @Override + public String authorize(String redirectUri, String reqState, String reqCode) throws LinkyException { + String url = String.format(LinkyBindingConstants.LINKY_MYELECTRICALDATA_API_TOKEN_URL, getClientId(), reqCode); + EnedisHttpApi enedisApi = getEnedisApi(); + if (enedisApi == null) { + return ""; + } + String token = enedisApi.getData(url); + + logger.debug("token: {}", token); + + Collection col = this.thingRegistry.getAll(); + + for (Thing thing : col) { + if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { + Configuration config = thing.getConfiguration(); + String prmId = (String) config.get("prmId"); + + if (!prmId.equals(reqCode)) { + continue; + } + + config.put("token", token); + LinkyHandler handler = (LinkyHandler) thing.getHandler(); + if (handler != null) { + handler.saveConfiguration(config); + } + + } + } + return token; + } + @Override public void dispose() { logger.debug("Shutting down Netatmo API bridge handler."); @@ -65,7 +122,11 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { } @Override - public String getToken() throws LinkyException { + public String getToken(LinkyHandler handler) throws LinkyException { + LinkyConfiguration config = handler.getLinkyConfig(); + if (config == null) { + return ""; + } return config.token; } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index afef803d978..d5042020c83 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -26,7 +26,7 @@ - + Provides your energy consumption data. In order to receive the data, you must activate your account at @@ -34,11 +34,6 @@ - - - Your Enedis token (can be left empty, use the connection page to automatically fill it - http://youopenhab/connectlinky) - @@ -74,6 +69,11 @@ Your PrmId + + + Your Enedis token (can be left empty, use the connection page to automatically fill it + http://youopenhab/connectlinky) + From 004074010aea6e3b27225360e11b421decacbd2f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 4 Jun 2024 17:25:00 +0200 Subject: [PATCH 027/135] realign channel naming conventions Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 34 ++++++++++--------- .../resources/OH-INF/thing/thing-types.xml | 26 +++++++------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 77465e8eb46..b5561cfd059 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -46,28 +46,30 @@ public class LinkyBindingConstants { public static final String USER_ID = "customerId"; // List of all Channel id's - public static final String DAY_MINUS_1 = "daily#day-1"; + public static final String DAY_MINUS_1 = "daily#yesterday"; public static final String DAY_MINUS_2 = "daily#day-2"; public static final String DAY_MINUS_3 = "daily#day-3"; - public static final String PEAK_POWER_DAY_MINUS_1 = "daily#maxPower-day-1"; - public static final String PEAK_POWER_TS_DAY_MINUS_1 = "daily#maxPowerTs-day-1"; - public static final String PEAK_POWER_DAY_MINUS_2 = "daily#maxPower-day-2"; - public static final String PEAK_POWER_TS_DAY_MINUS_2 = "daily#maxPowerTs-day-2"; - public static final String PEAK_POWER_DAY_MINUS_3 = "daily#maxPower-day-3"; - public static final String PEAK_POWER_TS_DAY_MINUS_3 = "daily#maxPowerTs-day-3"; + public static final String PEAK_POWER_DAY_MINUS_1 = "daily#power"; + public static final String PEAK_POWER_TS_DAY_MINUS_1 = "daily#timestamp"; - public static final String WEEK_MINUS_0 = "weekly#week-0"; - public static final String WEEK_MINUS_1 = "weekly#week-1"; + public static final String PEAK_POWER_DAY_MINUS_2 = "daily#power-2"; + public static final String PEAK_POWER_TS_DAY_MINUS_2 = "daily#timestamp-2"; + + public static final String PEAK_POWER_DAY_MINUS_3 = "daily#power-3"; + public static final String PEAK_POWER_TS_DAY_MINUS_3 = "daily#timestamp-3"; + + public static final String WEEK_MINUS_0 = "weekly#thisWeek"; + public static final String WEEK_MINUS_1 = "weekly#lastWeek"; public static final String WEEK_MINUS_2 = "weekly#week-2"; - public static final String MONTH_MINUS_0 = "monthly#month-0"; - public static final String MONTH_MINUS_1 = "monthly#month-1"; - public static final String MONTH_MINUS_2 = "monthly#month-2"; - public static final String YEAR_MINUS_0 = "yearly#year-0"; - public static final String YEAR_MINUS_1 = "yearly#year-1"; - public static final String YEAR_MINUS_2 = "yearly#year-2"; - public static final String TEST_SELECT = "main#linkyTestSelect"; + public static final String MONTH_MINUS_0 = "monthly#thisMonth"; + public static final String MONTH_MINUS_1 = "monthly#lastMonth"; + public static final String MONTH_MINUS_2 = "monthly#month-2"; + + public static final String YEAR_MINUS_0 = "yearly#thisYear"; + public static final String YEAR_MINUS_1 = "yearly#lastYear"; + public static final String YEAR_MINUS_2 = "yearly#year-2"; public static final String MAIN_IDENTITY = "main#Identity"; diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index d5042020c83..115c37e9e58 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -82,7 +82,7 @@ - + @@ -91,18 +91,18 @@ - - + + Maximum power usage timestamp - - + + Maximum power usage timestamp - - + + Maximum power usage timestamp @@ -112,10 +112,10 @@ - + - + @@ -127,10 +127,10 @@ - + - + @@ -142,10 +142,10 @@ - + - + From ef5a168be0ece6d33dc3c4728edb1b024ada9624 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 4 Jun 2024 17:26:40 +0200 Subject: [PATCH 028/135] review null pointer warnings Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/ApiBridgeHandler.java | 2 +- .../binding/linky/internal/handler/LinkyHandler.java | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index c8503879ab3..410ea26aafd 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -85,7 +85,7 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { protected final ThingRegistry thingRegistry; private static @Nullable HttpServlet servlet; - protected @Nullable LinkyConfiguration config; + protected LinkyConfiguration config; private static final String TEMPLATE_PATH = "templates/"; private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index a17647136d8..575ffcbe643 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -68,7 +68,7 @@ public class LinkyHandler extends BaseThingHandler { private final ExpiringDayCache dailyConsumption; private @Nullable ScheduledFuture refreshJob; - private @Nullable LinkyConfiguration config; + private LinkyConfiguration config; private @Nullable EnedisHttpApi enedisApi; private enum Target { @@ -80,6 +80,8 @@ public class LinkyHandler extends BaseThingHandler { public LinkyHandler(Thing thing, LocaleProvider localeProvider) { super(thing); + config = getConfigAs(LinkyConfiguration.class); + this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); MeterReading meterReading = getConsumptionData(today.minusDays(1095), today); @@ -152,15 +154,13 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.UNKNOWN); - config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { scheduler.submit(() -> { try { EnedisHttpApi api = this.enedisApi; - LinkyConfiguration config = this.config; - if (api != null && config != null) { + if (api != null) { PrmInfo prmInfo = api.getPrmInfo(this, config.prmId); updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); @@ -194,9 +194,8 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateMetaData() { EnedisHttpApi api = this.enedisApi; - LinkyConfiguration config = this.config; - if (api != null && config != null) { + if (api != null) { try { PrmInfo info = api.getPrmInfo(this, config.prmId); String title = info.identityInfo.title; From de194e15b7a16a91317f4387ae847de8703ce13e Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 4 Jun 2024 17:40:18 +0200 Subject: [PATCH 029/135] div fixes based on clinic review Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 2 ++ .../linky/internal/dto/AddressInfo.java | 7 ------- .../binding/linky/internal/dto/Contracts.java | 16 ---------------- .../binding/linky/internal/dto/Customer.java | 4 ---- .../linky/internal/dto/CustomerIdResponse.java | 6 ------ .../linky/internal/dto/IdentityDetails.java | 3 --- .../linky/internal/dto/IntervalReading.java | 1 - .../linky/internal/dto/MeterReading.java | 3 --- .../linky/internal/dto/MeterResponse.java | 3 --- .../linky/internal/dto/ReadingType.java | 9 --------- .../binding/linky/internal/dto/UsagePoint.java | 4 ---- .../internal/handler/ApiBridgeHandler.java | 18 +++++++----------- .../internal/handler/EnedisBridgeHandler.java | 4 +--- .../handler/MyElectricalDataBridgeHandler.java | 16 +++++++++------- 14 files changed, 19 insertions(+), 77 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index b5561cfd059..34e0dce65b2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -124,4 +124,6 @@ public class LinkyBindingConstants { public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = ENEDIS_AUTHORIZE_URL_PROD; public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; + + public static final String LINKY_MYELECTRICALDATA_CLIENT_ID = "e551937c-5250-48bc-b4a6-2323af68db92"; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java index b7b4f8360e9..d7deef5c98a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -25,13 +23,8 @@ import com.google.gson.annotations.SerializedName; public class AddressInfo { public String street; public String locality; - - @SerializedName("postal_code") public String postalCode; - - @SerializedName("insee_code") public String inseeCode; - public String city; public String country; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java index 2a04cbe0618..aa7a505c504 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,25 +22,11 @@ import com.google.gson.annotations.SerializedName; public class Contracts { public String segment; - - @SerializedName("subscribed_power") public String subscribedPower; - - @SerializedName("last_activation_date") public String lastActivationDate; - - @SerializedName("distribution_tariff") public String distributionTariff; - - @SerializedName("offpeak_hours") public String offpeakHours; - - @SerializedName("contract_status") public String contractStatus; - - @SerializedName("contract_type") public String contractType; - - @SerializedName("last_distribution_tariff_change_date") public String lastDistributionTariffChangeDate; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java index 26e7abe6ade..a41a555643b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,9 +22,7 @@ import com.google.gson.annotations.SerializedName; */ public class Customer { - @SerializedName("customer_id") public String customerId; - @SerializedName("usage_points") public UsagePoint[] usagePoints; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java index f0e46550263..62bb3d7cff4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,11 +22,7 @@ import com.google.gson.annotations.SerializedName; */ public class CustomerIdResponse { - @SerializedName("customer_id") public String customerId; - public IdentityDetails identity; - - @SerializedName("contact_data") public ContactInfo contactData; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java index 15a07b6a275..45d99606ee1 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,6 +22,5 @@ import com.google.gson.annotations.SerializedName; */ public class IdentityDetails { - @SerializedName("natural_person") public IdentityInfo naturalPerson; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index ac03f412546..7cd1a23658b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -25,6 +25,5 @@ import org.eclipse.jetty.jaas.spi.UserInfo; public class IntervalReading { public double value; - public LocalDateTime date; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index eb967967af1..e7155eb238c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -24,7 +24,6 @@ import com.google.gson.annotations.SerializedName; */ public class MeterReading { - @SerializedName("usage_point_id") public String usagePointId; @SerializedName("start") @@ -33,10 +32,8 @@ public class MeterReading { @SerializedName("end") public String endDate; - @SerializedName("quality") public String quality; - @SerializedName("reading_type") public ReadingType readingType; @SerializedName("interval_reading") diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java index f5d1f85ad73..726987e602f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,6 +22,5 @@ import com.google.gson.annotations.SerializedName; */ public class MeterResponse { - @SerializedName("meter_reading") public MeterReading meterReading; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java index 454f04fe295..4642ea53edc 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,15 +22,8 @@ import com.google.gson.annotations.SerializedName; */ public class ReadingType { - @SerializedName("measurement_kind") public String measurementKind; - - @SerializedName("measuring_period") public String measuringPeriod; - - @SerializedName("unit") public String unit; - - @SerializedName("aggregate") public String aggregate; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index aa8d6bbf359..f0cd3cd421e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; -import com.google.gson.annotations.SerializedName; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,8 +22,6 @@ import com.google.gson.annotations.SerializedName; */ public class UsagePoint { - @SerializedName("usage_point") public UsagePointDetails usagePoint; - public Contracts contracts; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 410ea26aafd..e2dd36cdf7a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -75,12 +75,11 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { private static final int REQUEST_BUFFER_SIZE = 8000; - private @NonNullByDefault({}) HttpService httpService; - private @NonNullByDefault({}) BundleContext bundleContext; + private HttpService httpService; + private BundleContext bundleContext; private final HttpClient httpClient; - private @Nullable EnedisHttpApi enedisApi; - private final Gson gson; + private EnedisHttpApi enedisApi; private OAuthClientService oAuthService; protected final ThingRegistry thingRegistry; @@ -108,7 +107,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); } - this.gson = gson; this.httpService = httpService; this.thingRegistry = thingRegistry; this.bundleContext = componentContext.getBundleContext(); @@ -117,6 +115,8 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { httpClient.setFollowRedirects(false); httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); + this.enedisApi = new EnedisHttpApi(this, gson, this.httpClient); + try { httpClient.start(); } catch (Exception e) { @@ -154,17 +154,13 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { @Override public void initialize() { - logger.debug("Initializing Netatmo API bridge handler."); + logger.debug("Initializing Linky API bridge handler."); updateStatus(ThingStatus.UNKNOWN); - EnedisHttpApi api = new EnedisHttpApi(this, gson, this.httpClient); - - this.enedisApi = api; - scheduler.submit(() -> { try { - api.initialize(); + enedisApi.initialize(); updateStatus(ThingStatus.ONLINE); } catch (LinkyException e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index c8be15ebd68..de49cb2a96c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -47,8 +47,6 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { private static final String MEASURE_MAX_POWER_URL = BASE_URL + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; - private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; - public EnedisBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -129,6 +127,6 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public String getTempoUrl() { - return TEMPO_URL; + return ""; } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index eaaab2623be..4762ac9ffd6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -44,12 +44,14 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { private static final String BASE_URL = "https://www.myelectricaldata.fr/"; - private static final String CONTRACT_URL = BASE_URL + "contracts/%s/"; - private static final String IDENTITY_URL = BASE_URL + "identity/%s/"; - private static final String CONTACT_URL = BASE_URL + "contact/%s/"; - private static final String ADDRESS_URL = BASE_URL + "addresses/%s/"; - private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + "daily_consumption/%s/start/%s/end/%s"; - private static final String MEASURE_MAX_POWER_URL = BASE_URL + "daily_consumption_max_power/%s/start/%s/end/%s"; + private static final String CONTRACT_URL = BASE_URL + "contracts/%s/cache/"; + private static final String IDENTITY_URL = BASE_URL + "identity/%s/cache/"; + private static final String CONTACT_URL = BASE_URL + "contact/%s/cache/"; + private static final String ADDRESS_URL = BASE_URL + "addresses/%s/cache/"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + + "daily_consumption/%s/start/%s/end/%s/cache/"; + private static final String MEASURE_MAX_POWER_URL = BASE_URL + + "daily_consumption_max_power/%s/start/%s/end/%s/cache/"; private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; @@ -68,7 +70,7 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { @Override public String getClientId() { - return "e551937c-5250-48bc-b4a6-2323af68db92"; + return LinkyBindingConstants.LINKY_MYELECTRICALDATA_CLIENT_ID; } @Override From ae793ff83b2c3515ef1b93299462cfadab282b10 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 5 Jun 2024 08:03:15 +0200 Subject: [PATCH 030/135] review thing-types Signed-off-by: Laurent ARNAL --- .../resources/OH-INF/thing/thing-types.xml | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 115c37e9e58..42a07fc2d05 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -154,76 +154,82 @@ + + + + + + + + + - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -234,11 +240,13 @@ - - String - - Test Select - + + String + + + + + Number:Energy From 62cdfe16225dee75b3e61c5fa48e15f8725a6450 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 17 Jun 2024 21:25:24 +0200 Subject: [PATCH 031/135] WIP : support time series Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 6 + .../linky/internal/api/EnedisHttpApi.java | 7 +- .../linky/internal/handler/LinkyHandler.java | 112 ++++++++++++------ .../resources/OH-INF/thing/thing-types.xml | 47 +++++--- 4 files changed, 119 insertions(+), 53 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 34e0dce65b2..f398169d458 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -46,6 +46,9 @@ public class LinkyBindingConstants { public static final String USER_ID = "customerId"; // List of all Channel id's + + public static final String CONSUMPTION = "timeseries#consumption"; + public static final String DAY_MINUS_1 = "daily#yesterday"; public static final String DAY_MINUS_2 = "daily#day-2"; public static final String DAY_MINUS_3 = "daily#day-3"; @@ -73,6 +76,9 @@ public class LinkyBindingConstants { public static final String MAIN_IDENTITY = "main#Identity"; + public static final String TEMPO_TEMPO_INFO = "tempo#tempoInfo"; + public static final String TEMPO_TEMPO_INFO_TIME_SERIES = "tempo#tempoInfoTimeSeries"; + public static final String MAIN_CONTRACT_SUBSCRIBED_POWER = "main#contractSubscribedPower"; public static final String MAIN_CONTRACT_LAST_ACTIVATION_DATE = "main#contractLastActivationDate"; public static final String MAIN_CONTRACT_DISTRIBUTION_TARIFF = "main#contractDistributionTariff"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 0bdab767a17..2d8c8281ca9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -316,8 +316,8 @@ public class EnedisHttpApi { return getMeasures(handler, apiBridgeHandler.getMaxPowerUrl(), prmId, from, to); } - public String getTempoData(LinkyHandler handler) throws LinkyException { - String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-01-31"); + public TempoResponse getTempoData(LinkyHandler handler) throws LinkyException { + String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-06-30"); if (!connected) { initialize(); } @@ -333,8 +333,7 @@ public class EnedisHttpApi { throw new LinkyException("No report data received"); } - return "{\"2024-01-20\":\"WHITE\",\"2024-01-21\":\"RED\",\"array\":[\"2024-01-20\",\"2024-01-21\"]}"; - // return tempResponse.tempoDayInfo; + return tempResponse; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching ConsumptionReport.class: {}", data); throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 575ffcbe643..49c17c01d5a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -14,11 +14,17 @@ package org.openhab.binding.linky.internal.handler; import static org.openhab.binding.linky.internal.LinkyBindingConstants.*; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledFuture; @@ -33,8 +39,11 @@ import org.openhab.binding.linky.internal.api.ExpiringDayCache; import org.openhab.binding.linky.internal.dto.IntervalReading; import org.openhab.binding.linky.internal.dto.MeterReading; import org.openhab.binding.linky.internal.dto.PrmInfo; +import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; +import org.openhab.core.library.types.DateTimeType; +import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; import org.openhab.core.library.unit.Units; @@ -46,6 +55,8 @@ import org.openhab.core.thing.ThingStatusDetail; import org.openhab.core.thing.binding.BaseThingHandler; import org.openhab.core.types.Command; import org.openhab.core.types.RefreshType; +import org.openhab.core.types.TimeSeries; +import org.openhab.core.types.TimeSeries.Policy; import org.openhab.core.types.UnDefType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -241,27 +252,60 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateData() { boolean connectedBefore = isConnected(); - updateDailyWeeklyData(); - + // updateEnergyData(); // updatePowerData(); - // updateMonthlyData(); - // updateYearlyData(); - // String tempoData = getTempoData(); + TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); + TempoResponse tempoData = getTempoData(); - // LinkedTreeMap obj = gson.fromJson(tempoData, LinkedTreeMap.class); + tempoData.forEach((k, v) -> { + try { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date date = df.parse(k); + long epoch = date.getTime(); + Instant timestamp = Instant.ofEpochMilli(epoch); - /* - * - * - * ArrayList list = new ArrayList(); - * for (Object key : obj.keySet()) { - * Object val = obj.get(key); - * - * Pair keyValue = new ImmutablePair(key, val); - * list.add(keyValue); - * } - */ + int val = 0; + if (v.equals("WHITE")) { + val = 0; + } + if (v.equals("BLUE")) { + val = 1; + } + if (v.equals("RED")) { + val = 2; + } + timeSeries.add(timestamp, new DecimalType(val)); + } catch (ParseException ex) { + + } + + }); + + sendTimeSeries(TEMPO_TEMPO_INFO_TIME_SERIES, timeSeries); + updateState(TEMPO_TEMPO_INFO_TIME_SERIES, new DecimalType(1)); + + TimeSeries timeSeries2 = new TimeSeries(Policy.REPLACE); + + LocalDate today = LocalDate.now(); + MeterReading meterReading = getConsumptionData(today.minusDays(1095), today); + meterReading = getMeterReadingAfterChecks(meterReading); + if (meterReading != null) { + + IntervalReading[] iv = meterReading.dayValue; + + for (int i = 0; i < iv.length; i++) { + + // iv[i].value + + Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); + timeSeries2.add(timestamp, new DecimalType(iv[i].value)); + + } + } + + sendTimeSeries(CONSUMPTION, timeSeries2); + updateState(CONSUMPTION, new DecimalType(0)); if (!connectedBefore && isConnected()) { disconnect(); @@ -494,24 +538,22 @@ public class LinkyHandler extends BaseThingHandler { return null; } - /* - * private @Nullable String getTempoData() { - * logger.debug("getTempoData from"); - * - * EnedisHttpApi api = this.enedisApi; - * if (api != null) { - * try { - * String result = api.getTempoData(); - * updateStatus(ThingStatus.ONLINE); - * return result; - * } catch (LinkyException e) { - * logger.debug("Exception when getting power data: {}", e.getMessage(), e); - * updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); - * } - * } - * return null; - * } - */ + private @Nullable TempoResponse getTempoData() { + logger.debug("getTempoData from"); + + EnedisHttpApi api = this.enedisApi; + if (api != null) { + try { + TempoResponse result = api.getTempoData(this); + updateStatus(ThingStatus.ONLINE); + return result; + } catch (LinkyException e) { + logger.debug("Exception when getting power data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + } + } + return null; + } private boolean isConnected() { EnedisHttpApi api = this.enedisApi; diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 42a07fc2d05..8975e898632 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -54,10 +54,12 @@ + + @@ -79,6 +81,15 @@ + + + + + + + + + @@ -91,16 +102,19 @@ + Maximum power usage timestamp + Maximum power usage timestamp + @@ -154,14 +168,17 @@ - - - - - - - - + + + + + + + + + + + @@ -240,13 +257,15 @@ - - String - - - + + String + + an information + energy + + + - Number:Energy From 1241ad3ef49dda55e062ae16ec9c099b831924c4 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 18 Jun 2024 17:11:35 +0200 Subject: [PATCH 032/135] some quick fixes on last clinique review Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/LinkyBindingConstants.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index f398169d458..70a16ed427c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -74,7 +74,7 @@ public class LinkyBindingConstants { public static final String YEAR_MINUS_1 = "yearly#lastYear"; public static final String YEAR_MINUS_2 = "yearly#year-2"; - public static final String MAIN_IDENTITY = "main#Identity"; + public static final String MAIN_IDENTITY = "main#identity"; public static final String TEMPO_TEMPO_INFO = "tempo#tempoInfo"; public static final String TEMPO_TEMPO_INFO_TIME_SERIES = "tempo#tempoInfoTimeSeries"; @@ -110,9 +110,6 @@ public class LinkyBindingConstants { */ public static final String LINKY_SCOPES = Stream.of("am_application_scope", "default") .collect(Collectors.joining(" ")); - // "r:devices:*", "w:devices:*", "x:devices:*", "r:hubs:*", - // "r:locations:*", "w:locations:*", "x:locations:*", "r:scenes:*", "x:scenes:*", "r:rules:*", "w:rules:*", - // "r:installedapps", "w:installedapps" public static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; public static final String ENEDIS_AUTHORIZE_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "dataconnect/v1/oauth2/authorize"; From 8a7e4bd3a7fef3ba2c606c5f73855709a6046625 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 13 Aug 2024 18:38:22 +0200 Subject: [PATCH 033/135] add WebBrigeHandler Signed-off-by: Laurent ARNAL --- .../handler/EnedisWebBridgeHandler.java | 258 ++++++++++++++++++ .../resources/OH-INF/thing/thing-types.xml | 29 ++ 2 files changed, 287 insertions(+) create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java new file mode 100644 index 00000000000..b72838c90e4 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -0,0 +1,258 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.handler; + +import java.time.format.DateTimeFormatter; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jetty.client.api.ContentResponse; +import org.eclipse.jetty.client.util.StringContentProvider; +import org.eclipse.jetty.http.HttpHeader; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.openhab.binding.linky.internal.LinkyConfiguration; +import org.openhab.binding.linky.internal.LinkyException; +import org.openhab.binding.linky.internal.api.EnedisHttpApi; +import org.openhab.binding.linky.internal.dto.AuthData; +import org.openhab.binding.linky.internal.dto.AuthResult; +import org.openhab.core.auth.client.oauth2.AccessTokenResponse; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.io.net.http.HttpClientFactory; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.ThingRegistry; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.http.HttpService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; + +/** + * {@link EnedisBridgeHandler} is the base handler to access enedis data. + * + * @author Laurent Arnal - Initial contribution + * + */ +@NonNullByDefault +public class EnedisWebBridgeHandler extends ApiBridgeHandler { + private final Logger logger = LoggerFactory.getLogger(EnedisWebBridgeHandler.class); + + private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + + private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; + private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity?usage_point_id=%s"; + private static final String CONTACT_URL = BASE_URL + "customers_cd/v5/contact_data?usage_point_id=%s"; + private static final String ADDRESS_URL = BASE_URL + "customers_upa/v5/usage_points/addresses?usage_point_id=%s"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; + private static final String MEASURE_MAX_POWER_URL = BASE_URL + + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; + + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + private static final String URL_APPS_LINCS = "https://alex.microapplications" + EnedisHttpApi.ENEDIS_DOMAIN; + private static final String URL_ENEDIS_AUTHENTICATE = URL_APPS_LINCS + "/authenticate?target=" + + EnedisHttpApi.URL_COMPTE_PART; + private static final String USER_INFO_URL = URL_APPS_LINCS + "/userinfos"; + private static final String PRM_INFO_BASE_URL = URL_APPS_LINCS + "/mes-mesures/api/private/v1/personnes/"; + private static final String PRM_INFO_URL = PRM_INFO_BASE_URL + "null/prms"; + private static final String MEASURE_URL = PRM_INFO_BASE_URL + + "%s/prms/%s/donnees-%s?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; + private static final Pattern REQ_PATTERN = Pattern.compile("ReqID%(.*?)%26"); + + private boolean connected = false; + + public EnedisWebBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, + final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, + final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { + super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); + } + + @Override + public void initialize() { + super.initialize(); + + try { + doAuth(); + } catch (LinkyException ex) { + logger.debug("Exception: {}", ex.getMessage()); + } + } + + @Override + public String getClientId() { + return config.clientId; + } + + @Override + public String getClientSecret() { + return config.clientSecret; + } + + @Override + public void dispose() { + logger.debug("Shutting down Netatmo API bridge handler."); + try { + enedisApi.disconnect(); + } catch (LinkyException ex) { + logger.debug("Exception: {}", ex.getMessage()); + } + super.dispose(); + } + + @Override + public String getToken(LinkyHandler handler) throws LinkyException { + + AccessTokenResponse accesToken = getAccessTokenResponse(); + if (accesToken == null) { + accesToken = getAccessTokenByClientCredentials(); + } + + if (accesToken == null) { + throw new LinkyException("no token"); + } + + return "Bearer " + accesToken.getAccessToken(); + } + + @Override + public String getBaseUrl() { + return BASE_URL; + } + + @Override + public String getContactUrl() { + return CONTACT_URL; + } + + @Override + public String getContractUrl() { + return CONTRACT_URL; + } + + @Override + public String getIdentityUrl() { + return IDENTITY_URL; + } + + @Override + public String getAddressUrl() { + return ADDRESS_URL; + } + + @Override + public String getDailyConsumptionUrl() { + return MEASURE_DAILY_CONSUMPTION_URL; + } + + @Override + public String getMaxPowerUrl() { + return MEASURE_MAX_POWER_URL; + } + + @Override + public String getTempoUrl() { + return ""; + } + + public void doAuth() throws LinkyException { + logger.debug("Starting login process for user : {}", config.username); + + try { + enedisApi.addCookie(LinkyConfiguration.INTERNAL_AUTH_ID, config.internalAuthId); + logger.debug("Step 1 : getting authentification"); + String data = enedisApi.getData(URL_ENEDIS_AUTHENTICATE); + + logger.debug("Reception request SAML"); + Document htmlDocument = Jsoup.parse(data); + Element el = htmlDocument.select("form").first(); + Element samlInput = el.select("input[name=SAMLRequest]").first(); + + logger.debug("Step 2 : send SSO SAMLRequest"); + ContentResponse result = httpClient.POST(el.attr("action")) + .content(enedisApi.getFormContent("SAMLRequest", samlInput.attr("value"))).send(); + if (result.getStatus() != 302) { + throw new LinkyException("Connection failed step 2"); + } + + logger.debug("Get the location and the ReqID"); + Matcher m = REQ_PATTERN.matcher(enedisApi.getLocation(result)); + if (!m.find()) { + throw new LinkyException("Unable to locate ReqId in header"); + } + + String reqId = m.group(1); + String authenticateUrl = EnedisHttpApi.URL_MON_COMPTE + + "/auth/json/authenticate?realm=/enedis&forward=true&spEntityID=SP-ODW-PROD&goto=/auth/SSOPOST/metaAlias/enedis/providerIDP?ReqID%" + + reqId + "%26index%3Dnull%26acsURL%3D" + URL_APPS_LINCS + + "/saml/SSO%26spEntityID%3DSP-ODW-PROD%26binding%3Durn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST&AMAuthCookie="; + + logger.debug("Step 3 : auth1 - retrieve the template, thanks to cookie internalAuthId user is already set"); + result = httpClient.POST(authenticateUrl).header("X-NoSession", "true").header("X-Password", "anonymous") + .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous").send(); + if (result.getStatus() != 200) { + throw new LinkyException("Connection failed step 3 - auth1 : %s", result.getContentAsString()); + } + + AuthData authData = gson.fromJson(result.getContentAsString(), AuthData.class); + if (authData == null || authData.callbacks.size() < 2 || authData.callbacks.get(0).input.isEmpty() + || authData.callbacks.get(1).input.isEmpty() || !config.username + .equals(Objects.requireNonNull(authData.callbacks.get(0).input.get(0)).valueAsString())) { + logger.debug("auth1 - invalid template for auth data: {}", result.getContentAsString()); + throw new LinkyException("Authentication error, the authentication_cookie is probably wrong"); + } + + authData.callbacks.get(1).input.get(0).value = config.password; + logger.debug("Step 4 : auth2 - send the auth data"); + result = httpClient.POST(authenticateUrl).header(HttpHeader.CONTENT_TYPE, "application/json") + .header("X-NoSession", "true").header("X-Password", "anonymous") + .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous") + .content(new StringContentProvider(gson.toJson(authData))).send(); + if (result.getStatus() != 200) { + throw new LinkyException("Connection failed step 3 - auth2 : %s", result.getContentAsString()); + } + + AuthResult authResult = gson.fromJson(result.getContentAsString(), AuthResult.class); + if (authResult == null) { + throw new LinkyException("Invalid authentication result data"); + } + + logger.debug("Add the tokenId cookie"); + enedisApi.addCookie("enedisExt", authResult.tokenId); + + logger.debug("Step 5 : retrieve the SAMLresponse"); + data = enedisApi.getData(EnedisHttpApi.URL_MON_COMPTE + "/" + authResult.successUrl); + htmlDocument = Jsoup.parse(data); + el = htmlDocument.select("form").first(); + samlInput = el.select("input[name=SAMLResponse]").first(); + + logger.debug("Step 6 : post the SAMLresponse to finish the authentication"); + result = httpClient.POST(el.attr("action")) + .content(enedisApi.getFormContent("SAMLResponse", samlInput.attr("value"))).send(); + if (result.getStatus() != 302) { + throw new LinkyException("Connection failed step 6"); + } + connected = true; + } catch (InterruptedException | TimeoutException | ExecutionException | JsonSyntaxException e) { + throw new LinkyException(e, "Error opening connection with Enedis webservice"); + } + } +} diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 8975e898632..9ab4b67965b 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -25,6 +25,34 @@ + + + + Provides your energy consumption data. + In order to receive the data, you must activate your account at + https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. + + + + + + email + Your Enedis Username + + + + password + Your Enedis Password + + + + Authentication ID delivered after the captcha (see documentation). + + + + + + @@ -41,6 +69,7 @@ + From 238d906b72c48e440a9edccbbe90b0f2cc4df70f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 13 Aug 2024 18:38:51 +0200 Subject: [PATCH 034/135] start backporting code from old binding Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 4 +- .../linky/internal/LinkyConfiguration.java | 6 + .../linky/internal/LinkyHandlerFactory.java | 10 +- .../linky/internal/api/EnedisHttpApi.java | 114 +++++++++--------- .../binding/linky/internal/dto/AuthData.java | 48 ++++++++ .../linky/internal/dto/AuthResult.java | 24 ++++ .../internal/handler/ApiBridgeHandler.java | 15 ++- 7 files changed, 157 insertions(+), 64 deletions(-) create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 70a16ed427c..449f5ebde7a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -33,17 +33,19 @@ public class LinkyBindingConstants { // List of all Thing Type UIDs public static final ThingTypeUID THING_TYPE_API_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "EnedisBridge"); + public static final ThingTypeUID THING_TYPE_API_WEB_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "EnedisWebBridge"); public static final ThingTypeUID THING_TYPE_API_MYELECTRICALDATA_BRIDGE = new ThingTypeUID(BINDING_ID, "MyElectricalDataBridge"); public static final ThingTypeUID THING_TYPE_LINKY = new ThingTypeUID(BINDING_ID, "linky"); public static final Set SUPPORTED_DEVICE_THING_TYPES_UIDS = Set.of(THING_TYPE_API_ENEDIS_BRIDGE, - THING_TYPE_API_MYELECTRICALDATA_BRIDGE, THING_TYPE_LINKY); + THING_TYPE_API_WEB_ENEDIS_BRIDGE, THING_TYPE_API_MYELECTRICALDATA_BRIDGE, THING_TYPE_LINKY); // Thing properties public static final String PUISSANCE = "puissance"; public static final String PRM_ID = "prmId"; public static final String USER_ID = "customerId"; + public static final String AV2_ID = "av2_interne_id"; // List of all Channel id's diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java index 6e16317d4a4..15de2ca1e26 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java @@ -23,11 +23,17 @@ import org.eclipse.jdt.annotation.NonNullByDefault; */ @NonNullByDefault public class LinkyConfiguration { + public static final String INTERNAL_AUTH_ID = "internalAuthId"; + public String token = ""; public String prmId = ""; public String clientId = ""; public String clientSecret = ""; + public String username = ""; + public String password = ""; + public String internalAuthId = ""; + public boolean seemsValid() { return !prmId.isBlank(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index b33412af330..3e77a025297 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -20,6 +20,7 @@ import java.time.format.DateTimeFormatter; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.linky.internal.handler.EnedisBridgeHandler; +import org.openhab.binding.linky.internal.handler.EnedisWebBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler; import org.openhab.binding.linky.internal.handler.MyElectricalDataBridgeHandler; import org.openhab.core.auth.client.oauth2.OAuthFactory; @@ -38,7 +39,6 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.service.http.HttpService; -import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializer; @@ -80,7 +80,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { .atStartOfDay(); } }) - .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); + .create(); + + // .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) private final LocaleProvider localeProvider; @@ -109,6 +111,10 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { EnedisBridgeHandler handler = new EnedisBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; + } else if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_API_WEB_ENEDIS_BRIDGE)) { + EnedisWebBridgeHandler handler = new EnedisWebBridgeHandler((Bridge) thing, this.httpClientFactory, + this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); + return handler; } else if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_API_MYELECTRICALDATA_BRIDGE)) { MyElectricalDataBridgeHandler handler = new MyElectricalDataBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 2d8c8281ca9..b413beb1e18 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.linky.internal.api; +import java.net.HttpCookie; +import java.net.URI; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.HashMap; @@ -27,11 +29,13 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; +import org.eclipse.jetty.client.util.FormContentProvider; +import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; +import org.eclipse.jetty.util.Fields; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ContactInfo; -import org.openhab.binding.linky.internal.dto.Contracts; import org.openhab.binding.linky.internal.dto.Customer; import org.openhab.binding.linky.internal.dto.CustomerIdResponse; import org.openhab.binding.linky.internal.dto.CustomerReponse; @@ -41,10 +45,8 @@ import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.binding.linky.internal.dto.UsagePoint; -import org.openhab.binding.linky.internal.dto.UsagePointDetails; import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler; -import org.openhab.binding.linky.internal.handler.MyElectricalDataBridgeHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,6 +69,11 @@ public class EnedisHttpApi { private final HttpClient httpClient; private ApiBridgeHandler apiBridgeHandler; + public static final String ENEDIS_DOMAIN = ".enedis.fr"; + public static final String URL_MON_COMPTE = "https://mon-compte" + EnedisHttpApi.ENEDIS_DOMAIN; + public static final String URL_COMPTE_PART = URL_MON_COMPTE.replace("compte", "compte-particulier"); + public static final URI COOKIE_URI = URI.create(URL_COMPTE_PART); + private boolean connected = false; public EnedisHttpApi(ApiBridgeHandler apiBridgeHandler, Gson gson, HttpClient httpClient) { @@ -76,13 +83,16 @@ public class EnedisHttpApi { } public void initialize() throws LinkyException { + connected = true; } - private void disconnect() throws LinkyException { - if (connected) { - logger.debug("Logout process"); - connected = false; - } + public void disconnect() throws LinkyException { + + // if (connected) { + logger.debug("Logout process"); + connected = false; + httpClient.getCookieStore().removeAll(); + // } } public boolean isConnected() { @@ -93,6 +103,23 @@ public class EnedisHttpApi { disconnect(); } + public FormContentProvider getFormContent(String fieldName, String fieldValue) { + Fields fields = new Fields(); + fields.put(fieldName, fieldValue); + return new FormContentProvider(fields); + } + + public void addCookie(String key, String value) { + HttpCookie cookie = new HttpCookie(key, value); + cookie.setDomain(ENEDIS_DOMAIN); + cookie.setPath("/"); + httpClient.getCookieStore().add(COOKIE_URI, cookie); + } + + public String getLocation(ContentResponse response) { + return response.getHeaders().get(HttpHeader.LOCATION); + } + public String getData(LinkyHandler handler, String url) throws LinkyException { return getData(apiBridgeHandler, url, httpClient, apiBridgeHandler.getToken(handler)); } @@ -136,57 +163,34 @@ public class EnedisHttpApi { } } + /* + * private String getData(String url) throws LinkyException { + * try { + * ContentResponse result = httpClient.GET(url); + * if (result.getStatus() != 200) { + * throw new LinkyException("Error requesting '%s' : %s", url, result.getContentAsString()); + * } + * return result.getContentAsString(); + * } catch (InterruptedException | ExecutionException | TimeoutException e) { + * throw new LinkyException(e, "Error getting url : '%s'", url); + * } + * } + */ + public PrmInfo getPrmInfo(LinkyHandler handler, String prmId) throws LinkyException { PrmInfo result = new PrmInfo(); - if (apiBridgeHandler instanceof MyElectricalDataBridgeHandler) { - result.contractInfo = new Contracts(); - result.addressInfo = new AddressInfo(); - result.contactInfo = new ContactInfo(); - result.identityInfo = new IdentityInfo(); - result.usagePointInfo = new UsagePointDetails(); + Customer customer = getCustomer(handler, prmId); + UsagePoint usagePoint = customer.usagePoints[0]; - result.contractInfo.subscribedPower = "12Kva"; - result.contactInfo.email = "lxxyyy@domain.net"; - result.contactInfo.phone = "--.--.--.--.--"; - result.contractInfo.contractStatus = "unknow"; - result.contractInfo.contractType = "unknow"; - result.contractInfo.distributionTariff = "unknow"; - result.contractInfo.lastActivationDate = "unknow"; - result.contractInfo.lastDistributionTariffChangeDate = "unknow"; - result.contractInfo.segment = "unknow"; - result.contractInfo.offpeakHours = "unknow"; + result.contractInfo = usagePoint.contracts; + result.usagePointInfo = usagePoint.usagePoint; + result.identityInfo = getIdentity(handler, prmId); + result.addressInfo = getAddress(handler, prmId); + result.contactInfo = getContact(handler, prmId); - result.addressInfo.city = "Ville"; - result.addressInfo.country = "France"; - result.addressInfo.postalCode = "xxxxx"; - result.addressInfo.inseeCode = "0"; - result.addressInfo.street = "xx Rue de yyyyyy"; - - result.identityInfo.firstname = "Laurent"; - result.identityInfo.lastname = "ARNAL"; - result.identityInfo.title = "M."; - - result.usagePointInfo.meterType = "unknow"; - result.usagePointInfo.usagePointId = "unknow"; - result.usagePointInfo.usagePointStatus = "unknow"; - - result.prmId = prmId; - result.customerId = "xxxxxxxxxx"; - - } else { - Customer customer = getCustomer(handler, prmId); - UsagePoint usagePoint = customer.usagePoints[0]; - - result.contractInfo = usagePoint.contracts; - result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(handler, prmId); - result.addressInfo = getAddress(handler, prmId); - result.contactInfo = getContact(handler, prmId); - - result.prmId = result.usagePointInfo.usagePointId; - result.customerId = customer.customerId; - } + result.prmId = result.usagePointInfo.usagePointId; + result.customerId = customer.customerId; return result; } @@ -317,7 +321,7 @@ public class EnedisHttpApi { } public TempoResponse getTempoData(LinkyHandler handler) throws LinkyException { - String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-06-30"); + String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-08-30"); if (!connected) { initialize(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java new file mode 100644 index 00000000000..27eddb18695 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import java.util.List; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; + +/** + * The {@link AuthData} holds authentication information + * + * @author Gaël L'hopital - Initial contribution + */ +@NonNullByDefault +public class AuthData { + public class AuthDataCallBack { + public class NameValuePair { + public @Nullable String name; + public @Nullable Object value; + + public @Nullable String valueAsString() { + return (value instanceof String stringValue) ? stringValue : null; + } + } + + public @Nullable String type; + + public List output = List.of(); + public List input = List.of(); + } + + public @Nullable String authId; + public @Nullable String template; + public @Nullable String stage; + public @Nullable String header; + public List callbacks = List.of(); +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java new file mode 100644 index 00000000000..8339f1436ae --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +/** + * The {@link AuthResult} holds informations about the ongoing authentication process + * + * @author Gaël L'hopital - Initial contribution + */ + +public class AuthResult { + public String successUrl; + public String tokenId; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index e2dd36cdf7a..744619d5703 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -78,8 +78,8 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { private HttpService httpService; private BundleContext bundleContext; - private final HttpClient httpClient; - private EnedisHttpApi enedisApi; + protected final HttpClient httpClient; + protected EnedisHttpApi enedisApi; private OAuthClientService oAuthService; protected final ThingRegistry thingRegistry; @@ -89,6 +89,8 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { private static final String TEMPLATE_PATH = "templates/"; private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; + protected final Gson gson; + public ApiBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -107,15 +109,14 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); } + this.gson = gson; this.httpService = httpService; this.thingRegistry = thingRegistry; this.bundleContext = componentContext.getBundleContext(); this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); - httpClient.setFollowRedirects(false); - httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); - - this.enedisApi = new EnedisHttpApi(this, gson, this.httpClient); + this.httpClient.setFollowRedirects(false); + this.httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); try { httpClient.start(); @@ -123,6 +124,8 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { logger.warn("Unable to start Jetty HttpClient {}", e.getMessage()); } + this.enedisApi = new EnedisHttpApi(this, gson, this.httpClient); + config = getConfigAs(LinkyConfiguration.class); String tokenUrl = ""; From 598efa7102b3b81c1681ad0f3484dd170c5d1ea9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 14 Aug 2024 11:00:32 +0200 Subject: [PATCH 035/135] add support for PrmInfo and UserInfo from old API Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 160 ++++++++++++------ .../linky/internal/dto/WebPrmInfo.java | 47 +++++ .../linky/internal/dto/WebUserInfo.java | 40 +++++ .../internal/handler/ApiBridgeHandler.java | 40 +++-- .../internal/handler/EnedisBridgeHandler.java | 5 + .../handler/EnedisWebBridgeHandler.java | 41 +---- .../linky/internal/handler/LinkyHandler.java | 57 ++++--- .../MyElectricalDataBridgeHandler.java | 5 + 8 files changed, 271 insertions(+), 124 deletions(-) create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index b413beb1e18..68b3eb91e59 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -16,10 +16,7 @@ import java.net.HttpCookie; import java.net.URI; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.Arrays; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; @@ -36,6 +33,7 @@ import org.eclipse.jetty.util.Fields; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ContactInfo; +import org.openhab.binding.linky.internal.dto.Contracts; import org.openhab.binding.linky.internal.dto.Customer; import org.openhab.binding.linky.internal.dto.CustomerIdResponse; import org.openhab.binding.linky.internal.dto.CustomerReponse; @@ -45,6 +43,9 @@ import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.binding.linky.internal.dto.UsagePoint; +import org.openhab.binding.linky.internal.dto.UsagePointDetails; +import org.openhab.binding.linky.internal.dto.WebPrmInfo; +import org.openhab.binding.linky.internal.dto.WebUserInfo; import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler; import org.slf4j.Logger; @@ -74,7 +75,12 @@ public class EnedisHttpApi { public static final String URL_COMPTE_PART = URL_MON_COMPTE.replace("compte", "compte-particulier"); public static final URI COOKIE_URI = URI.create(URL_COMPTE_PART); - private boolean connected = false; + private static final String URL_APPS_LINCS = "https://alex.microapplications" + EnedisHttpApi.ENEDIS_DOMAIN; + private static final String USER_INFO_URL = URL_APPS_LINCS + "/userinfos"; + private static final String PRM_INFO_BASE_URL = URL_APPS_LINCS + "/mes-mesures/api/private/v1/personnes/"; + private static final String PRM_INFO_URL = PRM_INFO_BASE_URL + "null/prms"; + private static final String MEASURE_URL = PRM_INFO_BASE_URL + + "%s/prms/%s/donnees-%s?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; public EnedisHttpApi(ApiBridgeHandler apiBridgeHandler, Gson gson, HttpClient httpClient) { this.gson = gson; @@ -82,27 +88,6 @@ public class EnedisHttpApi { this.apiBridgeHandler = apiBridgeHandler; } - public void initialize() throws LinkyException { - connected = true; - } - - public void disconnect() throws LinkyException { - - // if (connected) { - logger.debug("Logout process"); - connected = false; - httpClient.getCookieStore().removeAll(); - // } - } - - public boolean isConnected() { - return connected; - } - - public void dispose() throws LinkyException { - disconnect(); - } - public FormContentProvider getFormContent(String fieldName, String fieldValue) { Fields fields = new Fields(); fields.put(fieldName, fieldValue); @@ -178,21 +163,92 @@ public class EnedisHttpApi { */ public PrmInfo getPrmInfo(LinkyHandler handler, String prmId) throws LinkyException { + if (!apiBridgeHandler.isConnected()) { + apiBridgeHandler.initialize(); + } + PrmInfo result = new PrmInfo(); + if (false) { + Customer customer = getCustomer(handler, prmId); + UsagePoint usagePoint = customer.usagePoints[0]; - Customer customer = getCustomer(handler, prmId); - UsagePoint usagePoint = customer.usagePoints[0]; + result.contractInfo = usagePoint.contracts; + result.usagePointInfo = usagePoint.usagePoint; + result.identityInfo = getIdentity(handler, prmId); + result.addressInfo = getAddress(handler, prmId); + result.contactInfo = getContact(handler, prmId); - result.contractInfo = usagePoint.contracts; - result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(handler, prmId); - result.addressInfo = getAddress(handler, prmId); - result.contactInfo = getContact(handler, prmId); + result.prmId = result.usagePointInfo.usagePointId; + result.customerId = customer.customerId; - result.prmId = result.usagePointInfo.usagePointId; - result.customerId = customer.customerId; + return result; + } else { + WebPrmInfo[] webPrmsInfo; + WebUserInfo webUserInfo; - return result; + String data = getData(PRM_INFO_URL); + if (data.isEmpty()) { + throw new LinkyException("Requesting '%s' returned an empty response", PRM_INFO_URL); + } + try { + webPrmsInfo = gson.fromJson(data, WebPrmInfo[].class); + if (webPrmsInfo == null || webPrmsInfo.length < 1) { + throw new LinkyException("Invalid prms data received"); + } + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", PRM_INFO_URL); + } + + data = getData(USER_INFO_URL); + if (data.isEmpty()) { + throw new LinkyException("Requesting '%s' returned an empty response", USER_INFO_URL); + } + try { + webUserInfo = gson.fromJson(data, WebUserInfo.class); + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching UserInfo.class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", USER_INFO_URL); + } + + WebPrmInfo webPrmInfo = Arrays.stream(webPrmsInfo).filter(x -> x.prmId.equals(prmId)).findAny() + .orElseThrow(); + + result.addressInfo = new AddressInfo(); + result.addressInfo.street = webPrmInfo.adresse.adresseLigneQuatre; + result.addressInfo.city = webPrmInfo.adresse.adresseLigneSix; + result.addressInfo.postalCode = webPrmInfo.adresse.adresseLigneSix; + result.addressInfo.country = webPrmInfo.adresse.adresseLigneSept; + + result.contactInfo = new ContactInfo(); + result.identityInfo = new IdentityInfo(); + result.contractInfo = new Contracts(); + result.usagePointInfo = new UsagePointDetails(); + + result.contactInfo.email = webUserInfo.userProperties.mail; + result.contactInfo.phone = ""; + + result.identityInfo.firstname = webUserInfo.userProperties.firstName; + result.identityInfo.lastname = webUserInfo.userProperties.name; + result.identityInfo.title = ""; + // webUserInfo.userProperties.internId; + // webUserInfo.userProperties.personalInfo; + + result.contractInfo.contractStatus = ""; + result.contractInfo.contractType = ""; + result.contractInfo.distributionTariff = ""; + result.contractInfo.lastActivationDate = ""; + result.contractInfo.lastDistributionTariffChangeDate = ""; + result.contractInfo.offpeakHours = ""; + result.contractInfo.segment = webPrmInfo.segment; + result.contractInfo.subscribedPower = "" + webPrmInfo.puissanceSouscrite; + + result.prmId = prmId; + result.customerId = ""; + + return result; + + } } public String formatUrl(String apiUrl, String prmId) { @@ -200,9 +256,10 @@ public class EnedisHttpApi { } public Customer getCustomer(LinkyHandler handler, String prmId) throws LinkyException { - if (!connected) { - initialize(); + if (!apiBridgeHandler.isConnected()) { + apiBridgeHandler.initialize(); } + String contractUrl = apiBridgeHandler.getContractUrl(); String data = getData(handler, formatUrl(contractUrl, prmId)); if (data.isEmpty()) { @@ -221,8 +278,8 @@ public class EnedisHttpApi { } public AddressInfo getAddress(LinkyHandler handler, String prmId) throws LinkyException { - if (!connected) { - initialize(); + if (!apiBridgeHandler.isConnected()) { + apiBridgeHandler.initialize(); } String addressUrl = apiBridgeHandler.getAddressUrl(); String data = getData(handler, formatUrl(addressUrl, prmId)); @@ -242,8 +299,8 @@ public class EnedisHttpApi { } public IdentityInfo getIdentity(LinkyHandler handler, String prmId) throws LinkyException { - if (!connected) { - initialize(); + if (!apiBridgeHandler.isConnected()) { + apiBridgeHandler.initialize(); } String identityUrl = apiBridgeHandler.getIdentityUrl(); String data = getData(handler, formatUrl(identityUrl, prmId)); @@ -263,8 +320,8 @@ public class EnedisHttpApi { } public ContactInfo getContact(LinkyHandler handler, String prmId) throws LinkyException { - if (!connected) { - initialize(); + if (!apiBridgeHandler.isConnected()) { + apiBridgeHandler.initialize(); } String contactUrl = apiBridgeHandler.getContactUrl(); String data = getData(handler, formatUrl(contactUrl, prmId)); @@ -290,9 +347,10 @@ public class EnedisHttpApi { String dtEnd = to.format(API_DATE_FORMAT); String url = String.format(apiUrl, prmId, dtStart, dtEnd); - if (!connected) { - initialize(); + if (!apiBridgeHandler.isConnected()) { + apiBridgeHandler.initialize(); } + String data = getData(handler, url); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", url); @@ -322,9 +380,15 @@ public class EnedisHttpApi { public TempoResponse getTempoData(LinkyHandler handler) throws LinkyException { String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-08-30"); - if (!connected) { - initialize(); + + if (url.isEmpty()) { + return new TempoResponse(); } + + if (!apiBridgeHandler.isConnected()) { + apiBridgeHandler.initialize(); + } + String data = getData(handler, url); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", url); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java new file mode 100644 index 00000000000..aa0ce6684e9 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Gaël L'hopital - Initial contribution + */ + +public class WebPrmInfo { + public class Adresse { + public Object adresseLigneUn; + public String adresseLigneDeux; + public Object adresseLigneTrois; + public String adresseLigneQuatre; + public Object adresseLigneCinq; + public String adresseLigneSix; + public String adresseLigneSept; + } + + public String prmId; + public String dateFinRole; + public String segment; + public Adresse adresse; + public String typeCompteur; + public String niveauOuvertureServices; + public String communiquant; + public long dateSoutirage; + public String dateInjection; + public int departement; + public int puissanceSouscrite; + public String codeCalendrier; + public String codeTitulaire; + public boolean collecteActivee; + public boolean multiTitulaire; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java new file mode 100644 index 00000000000..f79c33dcc4a --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about the user account + * + * @author Gaël L'hopital - Initial contribution + */ + +public class WebUserInfo { + public class UserProperties { + @SerializedName("av2_interne_id") + public String internId; + @SerializedName("av2_prenom") + public String firstName; + @SerializedName("av2_mail") + public String mail; + @SerializedName("av2_nom") + public String name; + @SerializedName("av2_infos_personnalisees") + public String personalInfo; + } + + public String username; + public boolean connected; + public UserProperties userProperties; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 744619d5703..2600ed0ec7d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -91,6 +91,8 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { protected final Gson gson; + protected boolean connected = false; + public ApiBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -163,7 +165,7 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { scheduler.submit(() -> { try { - enedisApi.initialize(); + connectionInit(); updateStatus(ThingStatus.ONLINE); } catch (LinkyException e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); @@ -171,6 +173,32 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { }); } + protected abstract void connectionInit() throws LinkyException; + + public boolean isConnected() { + return connected; + } + + public void disconnect() { + if (connected) { + logger.debug("Logout process"); + connected = false; + httpClient.getCookieStore().removeAll(); + } + + } + + @Override + public void dispose() { + logger.debug("Shutting down Netatmo API bridge handler."); + disconnect(); + + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); + + super.dispose(); + } + /* * @Override * protected void deactivate(ComponentContext componentContext) { @@ -188,16 +216,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { // TODO Auto-generated method stub } - @Override - public void dispose() { - logger.debug("Shutting down Netatmo API bridge handler."); - - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); - - super.dispose(); - } - private void registerServlet() { try { if (servlet == null) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index de49cb2a96c..07fdecdd2bc 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -75,6 +75,11 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { super.dispose(); } + @Override + public void connectionInit() { + + } + @Override public String getToken(LinkyHandler handler) throws LinkyException { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index b72838c90e4..f67666cd37e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -31,7 +31,6 @@ import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.binding.linky.internal.dto.AuthData; import org.openhab.binding.linky.internal.dto.AuthResult; -import org.openhab.core.auth.client.oauth2.AccessTokenResponse; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; @@ -71,14 +70,8 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { private static final String URL_APPS_LINCS = "https://alex.microapplications" + EnedisHttpApi.ENEDIS_DOMAIN; private static final String URL_ENEDIS_AUTHENTICATE = URL_APPS_LINCS + "/authenticate?target=" + EnedisHttpApi.URL_COMPTE_PART; - private static final String USER_INFO_URL = URL_APPS_LINCS + "/userinfos"; - private static final String PRM_INFO_BASE_URL = URL_APPS_LINCS + "/mes-mesures/api/private/v1/personnes/"; - private static final String PRM_INFO_URL = PRM_INFO_BASE_URL + "null/prms"; - private static final String MEASURE_URL = PRM_INFO_BASE_URL - + "%s/prms/%s/donnees-%s?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; - private static final Pattern REQ_PATTERN = Pattern.compile("ReqID%(.*?)%26"); - private boolean connected = false; + private static final Pattern REQ_PATTERN = Pattern.compile("ReqID%(.*?)%26"); public EnedisWebBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, @@ -89,12 +82,6 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { @Override public void initialize() { super.initialize(); - - try { - doAuth(); - } catch (LinkyException ex) { - logger.debug("Exception: {}", ex.getMessage()); - } } @Override @@ -107,30 +94,9 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { return config.clientSecret; } - @Override - public void dispose() { - logger.debug("Shutting down Netatmo API bridge handler."); - try { - enedisApi.disconnect(); - } catch (LinkyException ex) { - logger.debug("Exception: {}", ex.getMessage()); - } - super.dispose(); - } - @Override public String getToken(LinkyHandler handler) throws LinkyException { - - AccessTokenResponse accesToken = getAccessTokenResponse(); - if (accesToken == null) { - accesToken = getAccessTokenByClientCredentials(); - } - - if (accesToken == null) { - throw new LinkyException("no token"); - } - - return "Bearer " + accesToken.getAccessToken(); + return ""; } @Override @@ -173,7 +139,8 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { return ""; } - public void doAuth() throws LinkyException { + @Override + protected void connectionInit() throws LinkyException { logger.debug("Starting login process for user : {}", config.username); try { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 49c17c01d5a..625d2c8f7b8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -506,15 +506,17 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("getConsumptionData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), to.format(DateTimeFormatter.ISO_LOCAL_DATE)); - EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - MeterReading meterReading = api.getEnergyData(this, config.prmId, from, to); - updateStatus(ThingStatus.ONLINE); - return meterReading; - } catch (LinkyException e) { - logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + if (false) { + EnedisHttpApi api = this.enedisApi; + if (api != null) { + try { + MeterReading meterReading = api.getEnergyData(this, config.prmId, from, to); + updateStatus(ThingStatus.ONLINE); + return meterReading; + } catch (LinkyException e) { + logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + } } } return null; @@ -524,15 +526,17 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("getPowerData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), to.format(DateTimeFormatter.ISO_LOCAL_DATE)); - EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - MeterReading meterReading = api.getPowerData(this, config.prmId, from, to); - updateStatus(ThingStatus.ONLINE); - return meterReading; - } catch (LinkyException e) { - logger.debug("Exception when getting power data: {}", e.getMessage(), e); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + if (false) { + EnedisHttpApi api = this.enedisApi; + if (api != null) { + try { + MeterReading meterReading = api.getPowerData(this, config.prmId, from, to); + updateStatus(ThingStatus.ONLINE); + return meterReading; + } catch (LinkyException e) { + logger.debug("Exception when getting power data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + } } } return null; @@ -556,19 +560,16 @@ public class LinkyHandler extends BaseThingHandler { } private boolean isConnected() { - EnedisHttpApi api = this.enedisApi; - return api == null ? false : api.isConnected(); + Bridge bridge = getBridge(); + ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) bridge.getHandler(); + if (bridgeHandler == null) { + return false; + } + + return bridgeHandler.isConnected(); } private void disconnect() { - EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - api.dispose(); - } catch (LinkyException e) { - logger.debug("disconnect: {}", e.getMessage()); - } - } } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 4762ac9ffd6..12f84e13578 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -63,6 +63,11 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); } + @Override + public void connectionInit() { + + } + @Override public void initialize() { super.initialize(); From 4e26f72a156bee5cdbceca48710e7b911f4704c1 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 14 Aug 2024 11:54:37 +0200 Subject: [PATCH 036/135] start some code cleanup Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 40 +++++--------- .../internal/handler/ApiBridgeHandler.java | 3 + .../internal/handler/EnedisBridgeHandler.java | 9 +++ .../handler/EnedisWebBridgeHandler.java | 54 +++++++++++------- .../linky/internal/handler/LinkyHandler.java | 55 ++++++++++--------- .../MyElectricalDataBridgeHandler.java | 8 +++ 6 files changed, 96 insertions(+), 73 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 68b3eb91e59..e7e5cb6d4a2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -13,9 +13,7 @@ package org.openhab.binding.linky.internal.api; import java.net.HttpCookie; -import java.net.URI; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; @@ -47,6 +45,7 @@ import org.openhab.binding.linky.internal.dto.UsagePointDetails; import org.openhab.binding.linky.internal.dto.WebPrmInfo; import org.openhab.binding.linky.internal.dto.WebUserInfo; import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; +import org.openhab.binding.linky.internal.handler.EnedisWebBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,25 +62,11 @@ import com.google.gson.JsonSyntaxException; @NonNullByDefault public class EnedisHttpApi { - private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; private ApiBridgeHandler apiBridgeHandler; - public static final String ENEDIS_DOMAIN = ".enedis.fr"; - public static final String URL_MON_COMPTE = "https://mon-compte" + EnedisHttpApi.ENEDIS_DOMAIN; - public static final String URL_COMPTE_PART = URL_MON_COMPTE.replace("compte", "compte-particulier"); - public static final URI COOKIE_URI = URI.create(URL_COMPTE_PART); - - private static final String URL_APPS_LINCS = "https://alex.microapplications" + EnedisHttpApi.ENEDIS_DOMAIN; - private static final String USER_INFO_URL = URL_APPS_LINCS + "/userinfos"; - private static final String PRM_INFO_BASE_URL = URL_APPS_LINCS + "/mes-mesures/api/private/v1/personnes/"; - private static final String PRM_INFO_URL = PRM_INFO_BASE_URL + "null/prms"; - private static final String MEASURE_URL = PRM_INFO_BASE_URL - + "%s/prms/%s/donnees-%s?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; - public EnedisHttpApi(ApiBridgeHandler apiBridgeHandler, Gson gson, HttpClient httpClient) { this.gson = gson; this.httpClient = httpClient; @@ -96,9 +81,9 @@ public class EnedisHttpApi { public void addCookie(String key, String value) { HttpCookie cookie = new HttpCookie(key, value); - cookie.setDomain(ENEDIS_DOMAIN); + cookie.setDomain(EnedisWebBridgeHandler.ENEDIS_DOMAIN); cookie.setPath("/"); - httpClient.getCookieStore().add(COOKIE_URI, cookie); + httpClient.getCookieStore().add(EnedisWebBridgeHandler.COOKIE_URI, cookie); } public String getLocation(ContentResponse response) { @@ -186,9 +171,12 @@ public class EnedisHttpApi { WebPrmInfo[] webPrmsInfo; WebUserInfo webUserInfo; - String data = getData(PRM_INFO_URL); + String prm_info_url = apiBridgeHandler.getContractUrl(); + String user_info_url = apiBridgeHandler.getContactUrl(); + + String data = getData(prm_info_url); if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", PRM_INFO_URL); + throw new LinkyException("Requesting '%s' returned an empty response", prm_info_url); } try { webPrmsInfo = gson.fromJson(data, WebPrmInfo[].class); @@ -197,18 +185,18 @@ public class EnedisHttpApi { } } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", PRM_INFO_URL); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", prm_info_url); } - data = getData(USER_INFO_URL); + data = getData(user_info_url); if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", USER_INFO_URL); + throw new LinkyException("Requesting '%s' returned an empty response", user_info_url); } try { webUserInfo = gson.fromJson(data, WebUserInfo.class); } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching UserInfo.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", USER_INFO_URL); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", user_info_url); } WebPrmInfo webPrmInfo = Arrays.stream(webPrmsInfo).filter(x -> x.prmId.equals(prmId)).findAny() @@ -343,8 +331,8 @@ public class EnedisHttpApi { private MeterReading getMeasures(LinkyHandler handler, String apiUrl, String prmId, LocalDate from, LocalDate to) throws LinkyException { - String dtStart = from.format(API_DATE_FORMAT); - String dtEnd = to.format(API_DATE_FORMAT); + String dtStart = from.format(apiBridgeHandler.getApiDateFormat()); + String dtEnd = to.format(apiBridgeHandler.getApiDateFormat()); String url = String.format(apiUrl, prmId, dtStart, dtEnd); if (!apiBridgeHandler.isConnected()) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 2600ed0ec7d..2b5c7506e6a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -19,6 +19,7 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; @@ -354,4 +355,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { public abstract String getMaxPowerUrl(); public abstract String getTempoUrl(); + + public abstract DateTimeFormatter getApiDateFormat(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 07fdecdd2bc..abce1aa8fee 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.linky.internal.handler; +import java.time.format.DateTimeFormatter; + import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.core.auth.client.oauth2.AccessTokenResponse; @@ -47,6 +49,8 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { private static final String MEASURE_MAX_POWER_URL = BASE_URL + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + public EnedisBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -134,4 +138,9 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { public String getTempoUrl() { return ""; } + + @Override + public DateTimeFormatter getApiDateFormat() { + return API_DATE_FORMAT; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index f67666cd37e..b0c486fbe06 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -12,6 +12,7 @@ */ package org.openhab.binding.linky.internal.handler; +import java.net.URI; import java.time.format.DateTimeFormatter; import java.util.Objects; import java.util.concurrent.ExecutionException; @@ -28,7 +29,6 @@ import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; -import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.binding.linky.internal.dto.AuthData; import org.openhab.binding.linky.internal.dto.AuthResult; import org.openhab.core.auth.client.oauth2.OAuthFactory; @@ -54,25 +54,33 @@ import com.google.gson.JsonSyntaxException; public class EnedisWebBridgeHandler extends ApiBridgeHandler { private final Logger logger = LoggerFactory.getLogger(EnedisWebBridgeHandler.class); - private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + public static final String ENEDIS_DOMAIN = ".enedis.fr"; + + private static final String BASE_URL = "https://alex.microapplications" + ENEDIS_DOMAIN; + + public static final String URL_MON_COMPTE = "https://mon-compte" + ENEDIS_DOMAIN; + public static final String URL_COMPTE_PART = URL_MON_COMPTE.replace("compte", "compte-particulier"); + public static final URI COOKIE_URI = URI.create(URL_COMPTE_PART); + + private static final String USER_INFO_URL = BASE_URL + "/userinfos"; + private static final String PRM_INFO_BASE_URL = BASE_URL + "/mes-mesures/api/private/v1/personnes/"; + private static final String PRM_INFO_URL = PRM_INFO_BASE_URL + "null/prms"; + + private static final String MEASURE_DAILY_CONSUMPTION_URL = PRM_INFO_BASE_URL + + "undefined/prms/%s/donnees-energie?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; - private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; - private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity?usage_point_id=%s"; - private static final String CONTACT_URL = BASE_URL + "customers_cd/v5/contact_data?usage_point_id=%s"; - private static final String ADDRESS_URL = BASE_URL + "customers_upa/v5/usage_points/addresses?usage_point_id=%s"; - private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL - + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; private static final String MEASURE_MAX_POWER_URL = BASE_URL - + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; + + "undefined/prms/%s/donnees-pmax?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); - private static final String URL_APPS_LINCS = "https://alex.microapplications" + EnedisHttpApi.ENEDIS_DOMAIN; - private static final String URL_ENEDIS_AUTHENTICATE = URL_APPS_LINCS + "/authenticate?target=" - + EnedisHttpApi.URL_COMPTE_PART; + private static final String URL_ENEDIS_AUTHENTICATE = BASE_URL + "/authenticate?target=" + URL_COMPTE_PART; private static final Pattern REQ_PATTERN = Pattern.compile("ReqID%(.*?)%26"); + private static final String BASE_MYELECT_URL = "https://www.myelectricaldata.fr/"; + private static final String TEMPO_URL = BASE_MYELECT_URL + "rte/tempo/%s/%s"; + public EnedisWebBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -106,22 +114,22 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { @Override public String getContactUrl() { - return CONTACT_URL; + return USER_INFO_URL; } @Override public String getContractUrl() { - return CONTRACT_URL; + return PRM_INFO_URL; } @Override public String getIdentityUrl() { - return IDENTITY_URL; + return USER_INFO_URL; } @Override public String getAddressUrl() { - return ADDRESS_URL; + return PRM_INFO_URL; } @Override @@ -136,7 +144,12 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { @Override public String getTempoUrl() { - return ""; + return TEMPO_URL; + } + + @Override + public DateTimeFormatter getApiDateFormat() { + return API_DATE_FORMAT; } @Override @@ -167,9 +180,9 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { } String reqId = m.group(1); - String authenticateUrl = EnedisHttpApi.URL_MON_COMPTE + String authenticateUrl = URL_MON_COMPTE + "/auth/json/authenticate?realm=/enedis&forward=true&spEntityID=SP-ODW-PROD&goto=/auth/SSOPOST/metaAlias/enedis/providerIDP?ReqID%" - + reqId + "%26index%3Dnull%26acsURL%3D" + URL_APPS_LINCS + + reqId + "%26index%3Dnull%26acsURL%3D" + BASE_URL + "/saml/SSO%26spEntityID%3DSP-ODW-PROD%26binding%3Durn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST&AMAuthCookie="; logger.debug("Step 3 : auth1 - retrieve the template, thanks to cookie internalAuthId user is already set"); @@ -206,7 +219,7 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { enedisApi.addCookie("enedisExt", authResult.tokenId); logger.debug("Step 5 : retrieve the SAMLresponse"); - data = enedisApi.getData(EnedisHttpApi.URL_MON_COMPTE + "/" + authResult.successUrl); + data = enedisApi.getData(URL_MON_COMPTE + "/" + authResult.successUrl); htmlDocument = Jsoup.parse(data); el = htmlDocument.select("form").first(); samlInput = el.select("input[name=SAMLResponse]").first(); @@ -222,4 +235,5 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { throw new LinkyException(e, "Error opening connection with Enedis webservice"); } } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 625d2c8f7b8..bdf00fa30b3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -506,19 +506,18 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("getConsumptionData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), to.format(DateTimeFormatter.ISO_LOCAL_DATE)); - if (false) { - EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - MeterReading meterReading = api.getEnergyData(this, config.prmId, from, to); - updateStatus(ThingStatus.ONLINE); - return meterReading; - } catch (LinkyException e) { - logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); - } + EnedisHttpApi api = this.enedisApi; + if (api != null) { + try { + MeterReading meterReading = api.getEnergyData(this, config.prmId, from, to); + updateStatus(ThingStatus.ONLINE); + return meterReading; + } catch (LinkyException e) { + logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } + return null; } @@ -526,19 +525,18 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("getPowerData from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), to.format(DateTimeFormatter.ISO_LOCAL_DATE)); - if (false) { - EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - MeterReading meterReading = api.getPowerData(this, config.prmId, from, to); - updateStatus(ThingStatus.ONLINE); - return meterReading; - } catch (LinkyException e) { - logger.debug("Exception when getting power data: {}", e.getMessage(), e); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); - } + EnedisHttpApi api = this.enedisApi; + if (api != null) { + try { + MeterReading meterReading = api.getPowerData(this, config.prmId, from, to); + updateStatus(ThingStatus.ONLINE); + return meterReading; + } catch (LinkyException e) { + logger.debug("Exception when getting power data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } + return null; } @@ -561,12 +559,15 @@ public class LinkyHandler extends BaseThingHandler { private boolean isConnected() { Bridge bridge = getBridge(); - ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) bridge.getHandler(); - if (bridgeHandler == null) { - return false; - } + if (bridge != null) { + ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) bridge.getHandler(); + if (bridgeHandler == null) { + return false; + } - return bridgeHandler.isConnected(); + return bridgeHandler.isConnected(); + } + return false; } private void disconnect() { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 12f84e13578..302dcfa1e0d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -12,6 +12,7 @@ */ package org.openhab.binding.linky.internal.handler; +import java.time.format.DateTimeFormatter; import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -55,6 +56,8 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // https://www.myelectricaldata.fr/v1/oauth2/authorize?response_type=code&client_id=&state=linky&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fconnectlinky&scope=am_application_scope+default&user_type=aa&person_id=-1&usage_points_id=aa public MyElectricalDataBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, @@ -176,4 +179,9 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { public String getTempoUrl() { return TEMPO_URL; } + + @Override + public DateTimeFormatter getApiDateFormat() { + return API_DATE_FORMAT; + } } From 3669afa1d2f1dbd44fd7cf994a76030e736345b9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 14 Aug 2024 12:37:13 +0200 Subject: [PATCH 037/135] first working version with old web apis Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 14 +++++++ .../linky/internal/dto/MeterReading.java | 31 +++++++++++++++- .../linky/internal/handler/LinkyHandler.java | 37 ++++++++++++------- 3 files changed, 67 insertions(+), 15 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index e7e5cb6d4a2..2cabaae7493 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -30,6 +30,7 @@ import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.util.Fields; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; +import org.openhab.binding.linky.internal.dto.ConsumptionReport; import org.openhab.binding.linky.internal.dto.ContactInfo; import org.openhab.binding.linky.internal.dto.Contracts; import org.openhab.binding.linky.internal.dto.Customer; @@ -345,10 +346,23 @@ public class EnedisHttpApi { } logger.trace("getData returned {}", data); try { + // See if with have response header from old Web API + if (data.startsWith("{\"1\":{\"CONS\"")) { + // If so, decode to ConsumptionReport, and convert to new Format + ConsumptionReport consomptionReport = gson.fromJson(data, ConsumptionReport.class); + if (consomptionReport == null) { + throw new LinkyException("No report data received"); + } + + return MeterReading.fromComsumptionReport(consomptionReport); + } + + // Else decode directly to new API format MeterResponse meterResponse = gson.fromJson(data, MeterResponse.class); if (meterResponse == null) { throw new LinkyException("No report data received"); } + return meterResponse.meterReading; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching ConsumptionReport.class: {}", data); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index e7155eb238c..842e2f60696 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -38,8 +38,37 @@ public class MeterReading { @SerializedName("interval_reading") public IntervalReading[] dayValue; - public IntervalReading[] weekValue; public IntervalReading[] monthValue; public IntervalReading[] yearValue; + + public static MeterReading fromComsumptionReport(ConsumptionReport comsumptionReport) { + MeterReading result = new MeterReading(); + result.readingType = new ReadingType(); + + result.dayValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.days); + result.weekValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.weeks); + result.monthValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.months); + result.yearValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.years); + + return result; + } + + public static IntervalReading[] fromAgregat(ConsumptionReport.Aggregate agregat) { + + int size = agregat.datas.size(); + IntervalReading[] result = new IntervalReading[size]; + + for (int i = 0; i < size; i++) { + Double data = agregat.datas.get(i); + ConsumptionReport.Period period = agregat.periodes.get(i); + String label = agregat.labels.get(i); + + result[i] = new IntervalReading(); + result[i].value = data; + result[i].date = period.dateDebut.toLocalDateTime(); + } + + return result; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index bdf00fa30b3..8b319692fff 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -252,8 +252,8 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateData() { boolean connectedBefore = isConnected(); - // updateEnergyData(); - // updatePowerData(); + updateEnergyData(); + updatePowerData(); TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); TempoResponse tempoData = getTempoData(); @@ -344,11 +344,14 @@ public class LinkyHandler extends BaseThingHandler { * Request new dayly/weekly data and updates channels */ - private synchronized void updateDailyWeeklyData() { - if (isLinked(YESTERDAY) || isLinked(LAST_WEEK) || isLinked(THIS_WEEK)) { - dailyConsumption.getValue().ifPresentOrElse(values -> { - int dSize = values.intervalReading.length; - updateKwhChannel(YESTERDAY, values.intervalReading[dSize - 1].value / 1000.00); + private synchronized void updateEnergyData() { + dailyConsumption.getValue().ifPresentOrElse(values -> { + int dSize = values.dayValue.length; + double divider = 1000.00; + divider = 1.00; + updateKwhChannel(DAY_MINUS_1, values.dayValue[dSize - 1].value / divider); + updateKwhChannel(DAY_MINUS_2, values.dayValue[dSize - 2].value / divider); + updateKwhChannel(DAY_MINUS_3, values.dayValue[dSize - 3].value / divider); LocalDate currentDt = LocalDate.now(); int idxCurrentYear = currentDt.getYear() - 2021; @@ -359,15 +362,21 @@ public class LinkyHandler extends BaseThingHandler { int idxCurrentWeek = (52 * idxCurrentYear) + currentWeek; int idxCurrentMonth = (12 * idxCurrentYear) + currentMonth; - int idxPreviousWeek = idxCurrentWeek - 1; - int idxPreviousMonth = idxCurrentMonth - 1; - int idxPreviousYear = idxCurrentYear - 1; + updateKwhChannel(WEEK_MINUS_0, values.weekValue[idxCurrentWeek].value / divider); + updateKwhChannel(WEEK_MINUS_1, values.weekValue[idxCurrentWeek - 1].value / divider); + updateKwhChannel(WEEK_MINUS_2, values.weekValue[idxCurrentWeek - 2].value / divider); - updateKwhChannel(THIS_WEEK, values.WeekValue[idxCurrentWeek].value / 1000.00); - updateKwhChannel(LAST_WEEK, values.WeekValue[idxPreviousWeek].value / 1000.00); + updateKwhChannel(MONTH_MINUS_0, values.monthValue[idxCurrentMonth].value / divider); + updateKwhChannel(MONTH_MINUS_1, values.monthValue[idxCurrentMonth - 1].value / divider); + updateKwhChannel(MONTH_MINUS_2, values.monthValue[idxCurrentMonth - 2].value / divider); - updateKwhChannel(THIS_MONTH, values.MonthValue[idxCurrentMonth].value / 1000.00); - updateKwhChannel(LAST_MONTH, values.WeekValue[idxPreviousMonth].value / 1000.00); + updateKwhChannel(YEAR_MINUS_0, values.yearValue[idxCurrentYear].value / divider); + updateKwhChannel(YEAR_MINUS_1, values.yearValue[idxCurrentYear - 1].value / divider); + updateKwhChannel(YEAR_MINUS_2, values.yearValue[idxCurrentYear - 2].value / divider); + }, () -> { + updateKwhChannel(DAY_MINUS_1, Double.NaN); + updateKwhChannel(DAY_MINUS_2, Double.NaN); + updateKwhChannel(DAY_MINUS_3, Double.NaN); updateKwhChannel(THIS_YEAR, values.YearValue[idxCurrentYear].value / 1000.00); updateKwhChannel(LAST_YEAR, values.YearValue[idxPreviousYear].value / 1000.00); From dee0612adb4e04e08737fadef3a157e9cb836dc2 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 14 Aug 2024 12:39:37 +0200 Subject: [PATCH 038/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/handler/ApiBridgeHandler.java | 1 - .../binding/linky/internal/handler/EnedisBridgeHandler.java | 1 - .../binding/linky/internal/handler/EnedisWebBridgeHandler.java | 1 - .../linky/internal/handler/MyElectricalDataBridgeHandler.java | 1 - 4 files changed, 4 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 2b5c7506e6a..23c449cd671 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -186,7 +186,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { connected = false; httpClient.getCookieStore().removeAll(); } - } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index abce1aa8fee..d865cfafe14 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -81,7 +81,6 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public void connectionInit() { - } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index b0c486fbe06..095066519a8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -235,5 +235,4 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { throw new LinkyException(e, "Error opening connection with Enedis webservice"); } } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 302dcfa1e0d..59aa454ac26 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -68,7 +68,6 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { @Override public void connectionInit() { - } @Override From f3d492fc1d1e7c320f6924f96d515a8ac27a8d92 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 14 Aug 2024 12:49:52 +0200 Subject: [PATCH 039/135] fix maxpower web api url Signed-off-by: Laurent ARNAL --- .../handler/EnedisWebBridgeHandler.java | 2 +- .../linky/internal/handler/LinkyHandler.java | 52 ++++++++++--------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 095066519a8..73ad851a3cd 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -69,7 +69,7 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { private static final String MEASURE_DAILY_CONSUMPTION_URL = PRM_INFO_BASE_URL + "undefined/prms/%s/donnees-energie?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; - private static final String MEASURE_MAX_POWER_URL = BASE_URL + private static final String MEASURE_MAX_POWER_URL = PRM_INFO_BASE_URL + "undefined/prms/%s/donnees-pmax?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 8b319692fff..e0c48a29b9c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -312,32 +312,34 @@ public class LinkyHandler extends BaseThingHandler { } } - /* - * private synchronized void updatePowerData() { - * if (isLinked(PEAK_POWER) || isLinked(PEAK_TIMESTAMP)) { - * cachedPowerData.getValue().ifPresentOrElse(values -> { - * Aggregate days = values.aggregats.days; - * updateVAChannel(PEAK_POWER, days.datas.get(days.datas.size() - 1)); - * updateState(PEAK_TIMESTAMP, new DateTimeType(days.periodes.get(days.datas.size() - 1).dateDebut)); - * }, () -> { - * updateKwhChannel(PEAK_POWER, Double.NaN); - * updateState(PEAK_TIMESTAMP, UnDefType.UNDEF); - * }); - * } - * } - */ + private synchronized void updatePowerData() { + dailyConsumptionMaxPower.getValue().ifPresentOrElse(values -> { + int dSize = values.dayValue.length; + double divider = 1000.00; + divider = 1.00; - private void setCurrentAndPrevious(Aggregate periods, String currentChannel, String previousChannel) { - double currentValue = 0.0; - double previousValue = 0.0; - if (!periods.datas.isEmpty()) { - currentValue = periods.datas.get(periods.datas.size() - 1); - if (periods.datas.size() > 1) { - previousValue = periods.datas.get(periods.datas.size() - 2); - } - } - updateKwhChannel(currentChannel, currentValue); - updateKwhChannel(previousChannel, previousValue); + updateVAChannel(PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value / divider); + updateState(PEAK_POWER_TS_DAY_MINUS_1, + new DateTimeType(values.dayValue[dSize - 1].date.atZone(ZoneId.systemDefault()))); + + updateVAChannel(PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value / divider); + updateState(PEAK_POWER_TS_DAY_MINUS_2, + new DateTimeType(values.dayValue[dSize - 2].date.atZone(ZoneId.systemDefault()))); + + updateVAChannel(PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value / divider); + updateState(PEAK_POWER_TS_DAY_MINUS_3, + new DateTimeType(values.dayValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); + + }, () -> { + updateKwhChannel(PEAK_POWER_DAY_MINUS_1, Double.NaN); + updateState(PEAK_POWER_TS_DAY_MINUS_1, UnDefType.UNDEF); + + updateKwhChannel(PEAK_POWER_DAY_MINUS_2, Double.NaN); + updateState(PEAK_POWER_TS_DAY_MINUS_2, UnDefType.UNDEF); + + updateKwhChannel(PEAK_POWER_DAY_MINUS_3, Double.NaN); + updateState(PEAK_POWER_TS_DAY_MINUS_3, UnDefType.UNDEF); + }); } /** From 9120ccfcd96c846b4c673d52ec7c035679db1de3 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 14 Aug 2024 14:28:52 +0200 Subject: [PATCH 040/135] progress on code refactoring Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 164 ++++++++---------- .../linky/internal/dto/ContactInfo.java | 8 + .../binding/linky/internal/dto/Customer.java | 36 ++++ .../linky/internal/dto/IdentityInfo.java | 10 ++ .../handler/EnedisWebBridgeHandler.java | 2 +- 5 files changed, 124 insertions(+), 96 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 2cabaae7493..46adbdedbcc 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -14,13 +14,13 @@ package org.openhab.binding.linky.internal.api; import java.net.HttpCookie; import java.time.LocalDate; -import java.util.Arrays; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import javax.ws.rs.core.MediaType; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; @@ -32,7 +32,6 @@ import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ConsumptionReport; import org.openhab.binding.linky.internal.dto.ContactInfo; -import org.openhab.binding.linky.internal.dto.Contracts; import org.openhab.binding.linky.internal.dto.Customer; import org.openhab.binding.linky.internal.dto.CustomerIdResponse; import org.openhab.binding.linky.internal.dto.CustomerReponse; @@ -42,7 +41,6 @@ import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.binding.linky.internal.dto.UsagePoint; -import org.openhab.binding.linky.internal.dto.UsagePointDetails; import org.openhab.binding.linky.internal.dto.WebPrmInfo; import org.openhab.binding.linky.internal.dto.WebUserInfo; import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; @@ -154,97 +152,27 @@ public class EnedisHttpApi { } PrmInfo result = new PrmInfo(); - if (false) { - Customer customer = getCustomer(handler, prmId); - UsagePoint usagePoint = customer.usagePoints[0]; + Customer customer = getContract(handler, prmId); + UsagePoint usagePoint = customer.usagePoints[0]; - result.contractInfo = usagePoint.contracts; - result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(handler, prmId); - result.addressInfo = getAddress(handler, prmId); - result.contactInfo = getContact(handler, prmId); + result.contractInfo = usagePoint.contracts; + result.usagePointInfo = usagePoint.usagePoint; - result.prmId = result.usagePointInfo.usagePointId; - result.customerId = customer.customerId; + result.identityInfo = getIdentity(handler, prmId); + result.contactInfo = getContact(handler, prmId); - return result; - } else { - WebPrmInfo[] webPrmsInfo; - WebUserInfo webUserInfo; + result.prmId = result.usagePointInfo.usagePointId; + result.customerId = customer.customerId; - String prm_info_url = apiBridgeHandler.getContractUrl(); - String user_info_url = apiBridgeHandler.getContactUrl(); + return result; - String data = getData(prm_info_url); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", prm_info_url); - } - try { - webPrmsInfo = gson.fromJson(data, WebPrmInfo[].class); - if (webPrmsInfo == null || webPrmsInfo.length < 1) { - throw new LinkyException("Invalid prms data received"); - } - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", prm_info_url); - } - - data = getData(user_info_url); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", user_info_url); - } - try { - webUserInfo = gson.fromJson(data, WebUserInfo.class); - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching UserInfo.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", user_info_url); - } - - WebPrmInfo webPrmInfo = Arrays.stream(webPrmsInfo).filter(x -> x.prmId.equals(prmId)).findAny() - .orElseThrow(); - - result.addressInfo = new AddressInfo(); - result.addressInfo.street = webPrmInfo.adresse.adresseLigneQuatre; - result.addressInfo.city = webPrmInfo.adresse.adresseLigneSix; - result.addressInfo.postalCode = webPrmInfo.adresse.adresseLigneSix; - result.addressInfo.country = webPrmInfo.adresse.adresseLigneSept; - - result.contactInfo = new ContactInfo(); - result.identityInfo = new IdentityInfo(); - result.contractInfo = new Contracts(); - result.usagePointInfo = new UsagePointDetails(); - - result.contactInfo.email = webUserInfo.userProperties.mail; - result.contactInfo.phone = ""; - - result.identityInfo.firstname = webUserInfo.userProperties.firstName; - result.identityInfo.lastname = webUserInfo.userProperties.name; - result.identityInfo.title = ""; - // webUserInfo.userProperties.internId; - // webUserInfo.userProperties.personalInfo; - - result.contractInfo.contractStatus = ""; - result.contractInfo.contractType = ""; - result.contractInfo.distributionTariff = ""; - result.contractInfo.lastActivationDate = ""; - result.contractInfo.lastDistributionTariffChangeDate = ""; - result.contractInfo.offpeakHours = ""; - result.contractInfo.segment = webPrmInfo.segment; - result.contractInfo.subscribedPower = "" + webPrmInfo.puissanceSouscrite; - - result.prmId = prmId; - result.customerId = ""; - - return result; - - } } public String formatUrl(String apiUrl, String prmId) { return apiUrl.formatted(prmId); } - public Customer getCustomer(LinkyHandler handler, String prmId) throws LinkyException { + public Customer getContract(LinkyHandler handler, String prmId) throws LinkyException { if (!apiBridgeHandler.isConnected()) { apiBridgeHandler.initialize(); } @@ -255,22 +183,48 @@ public class EnedisHttpApi { throw new LinkyException("Requesting '%s' returned an empty response", contractUrl); } try { - CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); - if (cResponse == null) { - throw new LinkyException("Invalid customer data received"); + if (data.startsWith("[{\"adresse\"")) { + try { + WebPrmInfo[] webPrmsInfo = gson.fromJson(data, WebPrmInfo[].class); + if (webPrmsInfo == null || webPrmsInfo.length < 1) { + throw new LinkyException("Invalid prms data received"); + } + return Customer.fromWebPrmInfos(webPrmsInfo, prmId); + + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contractUrl); + } + } else { + CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); + if (cResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + + AddressInfo addressInfo = getAddress(handler, prmId); + if (addressInfo != null) { + cResponse.customer.usagePoints[0].usagePoint.usagePointAddresses = addressInfo; + } + + return cResponse.customer; } - return cResponse.customer; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contractUrl); } } + @Nullable public AddressInfo getAddress(LinkyHandler handler, String prmId) throws LinkyException { if (!apiBridgeHandler.isConnected()) { apiBridgeHandler.initialize(); } String addressUrl = apiBridgeHandler.getAddressUrl(); + + if (addressUrl.isEmpty()) { + return null; + } + String data = getData(handler, formatUrl(addressUrl, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", addressUrl); @@ -297,11 +251,21 @@ public class EnedisHttpApi { throw new LinkyException("Requesting '%s' returned an empty response", identityUrl); } try { - CustomerIdResponse iResponse = gson.fromJson(data, CustomerIdResponse.class); - if (iResponse == null) { - throw new LinkyException("Invalid customer data received"); + if (data.contains("av2_interne_id")) { + try { + WebUserInfo webUserInfo = gson.fromJson(data, WebUserInfo.class); + return IdentityInfo.fromWebUserInfo(webUserInfo); + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching UserInfo.class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", identityUrl); + } + } else { + CustomerIdResponse iResponse = gson.fromJson(data, CustomerIdResponse.class); + if (iResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return iResponse.identity.naturalPerson; } - return iResponse.identity.naturalPerson; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", identityUrl); @@ -319,11 +283,21 @@ public class EnedisHttpApi { throw new LinkyException("Requesting '%s' returned an empty response", contactUrl); } try { - CustomerIdResponse cResponse = gson.fromJson(data, CustomerIdResponse.class); - if (cResponse == null) { - throw new LinkyException("Invalid customer data received"); + if (data.contains("av2_interne_id")) { + try { + WebUserInfo webUserInfo = gson.fromJson(data, WebUserInfo.class); + return ContactInfo.fromWebUserInfo(webUserInfo); + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching UserInfo.class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contactUrl); + } + } else { + CustomerIdResponse cResponse = gson.fromJson(data, CustomerIdResponse.class); + if (cResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return cResponse.contactData; } - return cResponse.contactData; } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contactUrl); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java index 83cf9f89c86..72c1654f047 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java @@ -23,4 +23,12 @@ import org.eclipse.jetty.jaas.spi.UserInfo; public class ContactInfo { public String phone; public String email; + + public static ContactInfo fromWebUserInfo(WebUserInfo webUserInfo) { + ContactInfo result = new ContactInfo(); + + result.email = webUserInfo.userProperties.mail; + + return result; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java index a41a555643b..bbda35b2618 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.linky.internal.dto; +import java.util.Arrays; + import org.eclipse.jetty.jaas.spi.UserInfo; /** @@ -25,4 +27,38 @@ public class Customer { public String customerId; public UsagePoint[] usagePoints; + + public static Customer fromWebPrmInfos(WebPrmInfo[] webPrmsInfo, String prmId) { + Customer result = new Customer(); + + WebPrmInfo webPrmInfo = Arrays.stream(webPrmsInfo).filter(x -> x.prmId.equals(prmId)).findAny().orElseThrow(); + + result.usagePoints = new UsagePoint[1]; + result.usagePoints[0] = new UsagePoint(); + + result.usagePoints[0].usagePoint = new UsagePointDetails(); + result.usagePoints[0].usagePoint.meterType = ""; + result.usagePoints[0].usagePoint.usagePointId = ""; + result.usagePoints[0].usagePoint.usagePointStatus = ""; + + result.usagePoints[0].usagePoint.usagePointAddresses = new AddressInfo(); + result.usagePoints[0].usagePoint.usagePointAddresses.city = webPrmInfo.adresse.adresseLigneSix; + result.usagePoints[0].usagePoint.usagePointAddresses.country = webPrmInfo.adresse.adresseLigneSept; + result.usagePoints[0].usagePoint.usagePointAddresses.inseeCode = ""; + result.usagePoints[0].usagePoint.usagePointAddresses.locality = ""; + result.usagePoints[0].usagePoint.usagePointAddresses.postalCode = webPrmInfo.adresse.adresseLigneSix; + result.usagePoints[0].usagePoint.usagePointAddresses.street = webPrmInfo.adresse.adresseLigneQuatre; + + result.usagePoints[0].contracts = new Contracts(); + result.usagePoints[0].contracts.contractStatus = ""; + result.usagePoints[0].contracts.contractType = ""; + result.usagePoints[0].contracts.distributionTariff = ""; + result.usagePoints[0].contracts.lastActivationDate = ""; + result.usagePoints[0].contracts.lastDistributionTariffChangeDate = ""; + result.usagePoints[0].contracts.offpeakHours = ""; + result.usagePoints[0].contracts.segment = webPrmInfo.segment; + result.usagePoints[0].contracts.subscribedPower = "" + webPrmInfo.puissanceSouscrite; + + return result; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java index 8923636061c..86c33a4b80c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java @@ -25,4 +25,14 @@ public class IdentityInfo { public String title; public String firstname; public String lastname; + + public static IdentityInfo fromWebUserInfo(WebUserInfo webUserInfo) { + IdentityInfo result = new IdentityInfo(); + + result.firstname = webUserInfo.userProperties.firstName; + result.lastname = webUserInfo.userProperties.name; + result.title = ""; + + return result; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 73ad851a3cd..59a8dca6bd3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -129,7 +129,7 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { @Override public String getAddressUrl() { - return PRM_INFO_URL; + return ""; } @Override From 7855ca89ebc87483e49c33c115558c2cd7c27dfd Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 12:34:23 +0200 Subject: [PATCH 041/135] review channel definitions review tempo information readings Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 8 +- .../linky/internal/handler/LinkyHandler.java | 273 +++++++++--------- .../resources/OH-INF/thing/thing-types.xml | 59 ++-- 3 files changed, 174 insertions(+), 166 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 449f5ebde7a..26cd64fc872 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -49,7 +49,10 @@ public class LinkyBindingConstants { // List of all Channel id's - public static final String CONSUMPTION = "timeseries#consumption"; + public static final String DAYLY_CONSUMPTION = "daily#consumption"; + public static final String WEEKLY_CONSUMPTION = "weekly#consumption"; + public static final String MONTHLY_CONSUMPTION = "monthly#consumption"; + public static final String YEARLY_CONSUMPTION = "yearly#consumption"; public static final String DAY_MINUS_1 = "daily#yesterday"; public static final String DAY_MINUS_2 = "daily#day-2"; @@ -78,7 +81,8 @@ public class LinkyBindingConstants { public static final String MAIN_IDENTITY = "main#identity"; - public static final String TEMPO_TEMPO_INFO = "tempo#tempoInfo"; + public static final String TEMPO_TODAY_INFO = "tempo#tempoInfoToday"; + public static final String TEMPO_TOMORROW_INFO = "tempo#tempoInfoTomorrow"; public static final String TEMPO_TEMPO_INFO_TIME_SERIES = "tempo#tempoInfoTimeSeries"; public static final String MAIN_CONTRACT_SUBSCRIBED_POWER = "main#contractSubscribedPower"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index e0c48a29b9c..501c92c365f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -77,6 +77,8 @@ public class LinkyHandler extends BaseThingHandler { private final Logger logger = LoggerFactory.getLogger(LinkyHandler.class); private final ExpiringDayCache dailyConsumption; + private final ExpiringDayCache dailyConsumptionMaxPower; + private final ExpiringDayCache tempoInformation; private @Nullable ScheduledFuture refreshJob; private LinkyConfiguration config; @@ -107,6 +109,7 @@ public class LinkyHandler extends BaseThingHandler { return meterReading; }); +<<<<<<< HEAD /* * this.cachedPowerData = new ExpiringDayCache<>("power cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { * // We request data for yesterday and the day before yesterday, even if the data for the day before yesterday @@ -146,6 +149,32 @@ public class LinkyHandler extends BaseThingHandler { * return consumption; * }); */ +======= + // We request data for yesterday and the day before yesterday, even if the data for the day before yesterday + // is not needed by the binding. This is only a workaround to an API bug that will return + // INTERNAL_SERVER_ERROR rather than the expected data with a NaN value when the data for yesterday is not yet + // available. + // By requesting two days, the API is not failing and you get the expected NaN value for yesterday when the data + // is not yet available. + this.dailyConsumptionMaxPower = new ExpiringDayCache<>("dailyConsumptionMaxPower", REFRESH_FIRST_HOUR_OF_DAY, + () -> { + LocalDate today = LocalDate.now(); + MeterReading meterReading = getPowerData(today.minusDays(1095), today); + meterReading = getMeterReadingAfterChecks(meterReading); + if (meterReading != null) { + logData(meterReading.dayValue, "Day (peak)", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); + } + return meterReading; + }); + + // Read Tempo Information + this.tempoInformation = new ExpiringDayCache<>("tempoInformation", REFRESH_FIRST_HOUR_OF_DAY, () -> { + LocalDate today = LocalDate.now(); + + TempoResponse tempoData = getTempoData(today.minusDays(1095), today.plusDays(1)); + return tempoData; + }); +>>>>>>> 7a863e3128 (review channel definitions) } @Override @@ -254,64 +283,61 @@ public class LinkyHandler extends BaseThingHandler { updateEnergyData(); updatePowerData(); - - TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); - TempoResponse tempoData = getTempoData(); - - tempoData.forEach((k, v) -> { - try { - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - Date date = df.parse(k); - long epoch = date.getTime(); - Instant timestamp = Instant.ofEpochMilli(epoch); - - int val = 0; - if (v.equals("WHITE")) { - val = 0; - } - if (v.equals("BLUE")) { - val = 1; - } - if (v.equals("RED")) { - val = 2; - } - timeSeries.add(timestamp, new DecimalType(val)); - } catch (ParseException ex) { - - } - - }); - - sendTimeSeries(TEMPO_TEMPO_INFO_TIME_SERIES, timeSeries); - updateState(TEMPO_TEMPO_INFO_TIME_SERIES, new DecimalType(1)); - - TimeSeries timeSeries2 = new TimeSeries(Policy.REPLACE); - - LocalDate today = LocalDate.now(); - MeterReading meterReading = getConsumptionData(today.minusDays(1095), today); - meterReading = getMeterReadingAfterChecks(meterReading); - if (meterReading != null) { - - IntervalReading[] iv = meterReading.dayValue; - - for (int i = 0; i < iv.length; i++) { - - // iv[i].value - - Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); - timeSeries2.add(timestamp, new DecimalType(iv[i].value)); - - } - } - - sendTimeSeries(CONSUMPTION, timeSeries2); - updateState(CONSUMPTION, new DecimalType(0)); + updateTempoTimeSeries(); if (!connectedBefore && isConnected()) { disconnect(); } } + private synchronized void updateTempoTimeSeries() { + tempoInformation.getValue().ifPresentOrElse(values -> { + LocalDate today = LocalDate.now(); + TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); + + values.forEach((k, v) -> { + try { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date date = df.parse(k); + long epoch = date.getTime(); + Instant timestamp = Instant.ofEpochMilli(epoch); + + timeSeries.add(timestamp, new DecimalType(getTempoIdx(v))); + } catch (ParseException ex) { + + } + }); + + int tomorrowDayIdx = values.size(); + Object[] tempoValues = values.values().toArray(); + + updateTempoChannel(TEMPO_TODAY_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 2])); + updateTempoChannel(TEMPO_TOMORROW_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 1])); + + sendTimeSeries(TEMPO_TEMPO_INFO_TIME_SERIES, timeSeries); + updateState(TEMPO_TEMPO_INFO_TIME_SERIES, + new DecimalType(getTempoIdx((String) tempoValues[tomorrowDayIdx - 2]))); + }, () -> { + updateTempoChannel(TEMPO_TODAY_INFO, -1); + updateTempoChannel(TEMPO_TOMORROW_INFO, -1); + }); + } + + private int getTempoIdx(String color) { + int val = 0; + if (color.equals("BLUE")) { + val = 0; + } + if (color.equals("WHITE")) { + val = 1; + } + if (color.equals("RED")) { + val = 2; + } + + return val; + } + private synchronized void updatePowerData() { dailyConsumptionMaxPower.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; @@ -355,14 +381,10 @@ public class LinkyHandler extends BaseThingHandler { updateKwhChannel(DAY_MINUS_2, values.dayValue[dSize - 2].value / divider); updateKwhChannel(DAY_MINUS_3, values.dayValue[dSize - 3].value / divider); - LocalDate currentDt = LocalDate.now(); - int idxCurrentYear = currentDt.getYear() - 2021; - - int currentWeek = (currentDt.getDayOfYear() / 7) + 1; - int currentMonth = currentDt.getMonthValue(); - - int idxCurrentWeek = (52 * idxCurrentYear) + currentWeek; - int idxCurrentMonth = (12 * idxCurrentYear) + currentMonth; + LocalDate currentDt = LocalDate.now(); + int idxCurrentYear = values.yearValue.length - 1; + int idxCurrentWeek = values.weekValue.length - 1; + int idxCurrentMonth = values.monthValue.length - 1; updateKwhChannel(WEEK_MINUS_0, values.weekValue[idxCurrentWeek].value / divider); updateKwhChannel(WEEK_MINUS_1, values.weekValue[idxCurrentWeek - 1].value / divider); @@ -375,6 +397,11 @@ public class LinkyHandler extends BaseThingHandler { updateKwhChannel(YEAR_MINUS_0, values.yearValue[idxCurrentYear].value / divider); updateKwhChannel(YEAR_MINUS_1, values.yearValue[idxCurrentYear - 1].value / divider); updateKwhChannel(YEAR_MINUS_2, values.yearValue[idxCurrentYear - 2].value / divider); + + updateConsumptionTimeSeries(DAYLY_CONSUMPTION, values.dayValue); + updateConsumptionTimeSeries(WEEKLY_CONSUMPTION, values.weekValue); + updateConsumptionTimeSeries(MONTHLY_CONSUMPTION, values.monthValue); + updateConsumptionTimeSeries(YEARLY_CONSUMPTION, values.yearValue); }, () -> { updateKwhChannel(DAY_MINUS_1, Double.NaN); updateKwhChannel(DAY_MINUS_2, Double.NaN); @@ -390,60 +417,19 @@ public class LinkyHandler extends BaseThingHandler { } } - /** - * Request new monthly data and updates channels - */ + private synchronized void updateConsumptionTimeSeries(String channel, IntervalReading[] iv) { + TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); + LocalDate today = LocalDate.now(); - /* - * private synchronized void updateMonthlyData() { - * if (isLinked(LAST_MONTH) || isLinked(THIS_MONTH)) { - * cachedMonthlyData.getValue().ifPresentOrElse(values -> { - * Aggregate months = values.aggregats.months; - * updateKwhChannel(LAST_MONTH, months.datas.get(0)); - * if (months.datas.size() > 1) { - * updateKwhChannel(THIS_MONTH, months.datas.get(1)); - * } else { - * updateKwhChannel(THIS_MONTH, 0.0); - * } - * }, () -> { - * if (ZonedDateTime.now().getDayOfMonth() == 1) { - * updateKwhChannel(THIS_MONTH, 0.0); - * updateKwhChannel(LAST_MONTH, Double.NaN); - * } else { - * updateKwhChannel(THIS_MONTH, Double.NaN); - * } - * }); - * } - * } - */ + for (int i = 0; i < iv.length; i++) { + Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); + timeSeries.add(timestamp, new DecimalType(iv[i].value)); + } + sendTimeSeries(channel, timeSeries); + updateState(channel, new DecimalType(iv[iv.length - 1].value)); - /** - * Request new yearly data and updates channels - */ - - /* - * private synchronized void updateYearlyData() { - * if (isLinked(LAST_YEAR) || isLinked(THIS_YEAR)) { - * cachedYearlyData.getValue().ifPresentOrElse(values -> { - * Aggregate years = values.aggregats.years; - * updateKwhChannel(LAST_YEAR, years.datas.get(0)); - * if (years.datas.size() > 1) { - * updateKwhChannel(THIS_YEAR, years.datas.get(1)); - * } else { - * updateKwhChannel(THIS_YEAR, 0.0); - * } - * }, () -> { - * if (ZonedDateTime.now().getDayOfYear() == 1) { - * updateKwhChannel(THIS_YEAR, 0.0); - * updateKwhChannel(LAST_YEAR, Double.NaN); - * } else { - * updateKwhChannel(THIS_YEAR, Double.NaN); - * } - * }); - * } - * } - */ + } private void updateKwhChannel(String channelId, double consumption) { logger.debug("Update channel {} with {}", channelId, consumption); @@ -457,6 +443,11 @@ public class LinkyHandler extends BaseThingHandler { : new QuantityType<>(power, MetricPrefix.KILO(Units.VOLT_AMPERE))); } + private void updateTempoChannel(String channelId, int tempoValue) { + logger.debug("Update channel {} with {}", channelId, tempoValue); + updateState(channelId, new DecimalType(tempoValue)); + } + /** * Produce a report of all daily values between two dates * @@ -551,13 +542,13 @@ public class LinkyHandler extends BaseThingHandler { return null; } - private @Nullable TempoResponse getTempoData() { + private @Nullable TempoResponse getTempoData(LocalDate from, LocalDate to) { logger.debug("getTempoData from"); EnedisHttpApi api = this.enedisApi; if (api != null) { try { - TempoResponse result = api.getTempoData(this); + TempoResponse result = api.getTempoData(this, from, to); updateStatus(ThingStatus.ONLINE); return result; } catch (LinkyException e) { @@ -639,40 +630,42 @@ public class LinkyHandler extends BaseThingHandler { } if (meterReading != null) { - meterReading.weekValue = new IntervalReading[208]; - meterReading.monthValue = new IntervalReading[48]; - meterReading.yearValue = new IntervalReading[4]; + if (meterReading.weekValue == null) { + meterReading.weekValue = new IntervalReading[208]; + meterReading.monthValue = new IntervalReading[48]; + meterReading.yearValue = new IntervalReading[4]; - for (int idx = 0; idx < 208; idx++) { - meterReading.weekValue[idx] = new IntervalReading(); - } - for (int idx = 0; idx < 48; idx++) { - meterReading.monthValue[idx] = new IntervalReading(); - } - for (int idx = 0; idx < 4; idx++) { - meterReading.yearValue[idx] = new IntervalReading(); - } + for (int idx = 0; idx < 208; idx++) { + meterReading.weekValue[idx] = new IntervalReading(); + } + for (int idx = 0; idx < 48; idx++) { + meterReading.monthValue[idx] = new IntervalReading(); + } + for (int idx = 0; idx < 4; idx++) { + meterReading.yearValue[idx] = new IntervalReading(); + } - int size = meterReading.dayValue.length; - int baseYear = meterReading.dayValue[0].date.getYear(); + int size = meterReading.dayValue.length; + int baseYear = meterReading.dayValue[0].date.getYear(); - for (int idx = 0; idx < size; idx++) { - IntervalReading ir = meterReading.dayValue[idx]; - LocalDateTime dt = ir.date; - double value = ir.value; + for (int idx = 0; idx < size; idx++) { + IntervalReading ir = meterReading.dayValue[idx]; + LocalDateTime dt = ir.date; + double value = ir.value; - int idxYear = dt.getYear() - baseYear; + int idxYear = dt.getYear() - baseYear; - int dayOfYear = dt.getDayOfYear(); - int week = ((dayOfYear - 1) / 7) + 1; - int month = dt.getMonthValue(); + int dayOfYear = dt.getDayOfYear(); + int week = ((dayOfYear - 1) / 7) + 1; + int month = dt.getMonthValue(); - int idxMonth = (idxYear * 12) + month; - int idxWeek = (idxYear * 52) + week; + int idxMonth = (idxYear * 12) + month; + int idxWeek = (idxYear * 52) + week; - meterReading.weekValue[idxWeek].value += value; - meterReading.monthValue[idxMonth].value += value; - meterReading.yearValue[idxYear].value += value; + meterReading.weekValue[idxWeek].value += value; + meterReading.monthValue[idxMonth].value += value; + meterReading.yearValue[idxYear].value += value; + } } } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 9ab4b67965b..cfbbd08dd9c 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -88,8 +88,6 @@ - - @@ -110,14 +108,6 @@ - - - - - - - - @@ -131,6 +121,11 @@ + + + + + @@ -164,6 +159,9 @@ + + + @@ -179,6 +177,9 @@ + + + @@ -194,16 +195,22 @@ + + + - - + + - + + + + @@ -242,7 +249,6 @@ - @@ -269,22 +275,27 @@ - - - - - - - - + + + Number + + This status describes the tempo color of a day. + + + + + + + + String @@ -294,8 +305,6 @@ - - Number:Energy @@ -317,4 +326,6 @@ time + + From 8283ea8273802c2640d0e93267563894fa331dbe Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 12:35:23 +0200 Subject: [PATCH 042/135] fix tempo period reading Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 46adbdedbcc..a022604c2f7 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -132,20 +132,6 @@ public class EnedisHttpApi { } } - /* - * private String getData(String url) throws LinkyException { - * try { - * ContentResponse result = httpClient.GET(url); - * if (result.getStatus() != 200) { - * throw new LinkyException("Error requesting '%s' : %s", url, result.getContentAsString()); - * } - * return result.getContentAsString(); - * } catch (InterruptedException | ExecutionException | TimeoutException e) { - * throw new LinkyException(e, "Error getting url : '%s'", url); - * } - * } - */ - public PrmInfo getPrmInfo(LinkyHandler handler, String prmId) throws LinkyException { if (!apiBridgeHandler.isConnected()) { apiBridgeHandler.initialize(); @@ -161,11 +147,13 @@ public class EnedisHttpApi { result.identityInfo = getIdentity(handler, prmId); result.contactInfo = getContact(handler, prmId); + result.addressInfo = result.usagePointInfo.usagePointAddresses; + result.prmId = result.usagePointInfo.usagePointId; - result.customerId = customer.customerId; + result.customerId = ""; + // customer.customerId; return result; - } public String formatUrl(String apiUrl, String prmId) { @@ -354,8 +342,11 @@ public class EnedisHttpApi { return getMeasures(handler, apiBridgeHandler.getMaxPowerUrl(), prmId, from, to); } - public TempoResponse getTempoData(LinkyHandler handler) throws LinkyException { - String url = String.format(apiBridgeHandler.getTempoUrl(), "2024-01-01", "2024-08-30"); + public TempoResponse getTempoData(LinkyHandler handler, LocalDate from, LocalDate to) throws LinkyException { + String dtStart = from.format(apiBridgeHandler.getApiDateFormatYearsFirst()); + String dtEnd = to.format(apiBridgeHandler.getApiDateFormatYearsFirst()); + + String url = String.format(apiBridgeHandler.getTempoUrl(), dtStart, dtEnd); if (url.isEmpty()) { return new TempoResponse(); From d227dd44cf03d9d38231716c463ea700596170e9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 12:35:38 +0200 Subject: [PATCH 043/135] order tempo information Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/dto/TempoResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java index bbc3b4d39ac..3994c836ed6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java @@ -12,7 +12,7 @@ */ package org.openhab.binding.linky.internal.dto; -import java.util.HashMap; +import java.util.LinkedHashMap; /** * The {@link UserInfo} holds informations about energy delivery point @@ -21,7 +21,7 @@ import java.util.HashMap; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class TempoResponse extends HashMap { +public class TempoResponse extends LinkedHashMap { @java.io.Serial private static final long serialVersionUID = 362498820763181264L; } From 983fbb3ae09f18c54c197d26f158d79d06e7d9f3 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 12:36:19 +0200 Subject: [PATCH 044/135] datetimeformatter for tempo Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/handler/ApiBridgeHandler.java | 2 ++ .../linky/internal/handler/EnedisBridgeHandler.java | 7 +++++++ .../linky/internal/handler/EnedisWebBridgeHandler.java | 6 ++++++ .../internal/handler/MyElectricalDataBridgeHandler.java | 7 +++++++ 4 files changed, 22 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 23c449cd671..e1d130ec507 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -356,4 +356,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { public abstract String getTempoUrl(); public abstract DateTimeFormatter getApiDateFormat(); + + public abstract DateTimeFormatter getApiDateFormatYearsFirst(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index d865cfafe14..6ef79aa81fd 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -50,6 +50,7 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); public EnedisBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, @@ -142,4 +143,10 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormat() { return API_DATE_FORMAT; } + + @Override + public DateTimeFormatter getApiDateFormatYearsFirst() { + return API_DATE_FORMAT_YEAR_FIRST; + } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 59a8dca6bd3..373cf189153 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -73,6 +73,7 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { + "undefined/prms/%s/donnees-pmax?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final String URL_ENEDIS_AUTHENTICATE = BASE_URL + "/authenticate?target=" + URL_COMPTE_PART; @@ -152,6 +153,11 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { return API_DATE_FORMAT; } + @Override + public DateTimeFormatter getApiDateFormatYearsFirst() { + return API_DATE_FORMAT_YEAR_FIRST; + } + @Override protected void connectionInit() throws LinkyException { logger.debug("Starting login process for user : {}", config.username); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 59aa454ac26..ea6f1b11ca7 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -57,6 +57,7 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // https://www.myelectricaldata.fr/v1/oauth2/authorize?response_type=code&client_id=&state=linky&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fconnectlinky&scope=am_application_scope+default&user_type=aa&person_id=-1&usage_points_id=aa @@ -183,4 +184,10 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormat() { return API_DATE_FORMAT; } + + @Override + public DateTimeFormatter getApiDateFormatYearsFirst() { + return API_DATE_FORMAT_YEAR_FIRST; + } + } From e51d6c89710515173cb7e37aa6d70bc4d6010795 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 15:50:27 +0200 Subject: [PATCH 045/135] fix refresh Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyHandler.java | 50 +++---------------- 1 file changed, 8 insertions(+), 42 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 501c92c365f..83807f82851 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -109,47 +109,6 @@ public class LinkyHandler extends BaseThingHandler { return meterReading; }); -<<<<<<< HEAD - /* - * this.cachedPowerData = new ExpiringDayCache<>("power cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { - * // We request data for yesterday and the day before yesterday, even if the data for the day before yesterday - * // is not needed by the binding. This is only a workaround to an API bug that will return - * // INTERNAL_SERVER_ERROR rather than the expected data with a NaN value when the data for yesterday is not - * // yet available. - * // By requesting two days, the API is not failing and you get the expected NaN value for yesterday when the - * // data is not yet available. - * LocalDate today = LocalDate.now(); - * Consumption consumption = getPowerData(today.minusDays(2), today); - * if (consumption != null) { - * logData(consumption.aggregats.days, "Day (peak)", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, - * Target.ALL); - * consumption = getConsumptionAfterChecks(consumption, Target.LAST); - * } - * return consumption; - * }); - * - * - * this.cachedMonthlyData = new ExpiringDayCache<>("monthly cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { - * LocalDate today = LocalDate.now(); - * Consumption consumption = getConsumptionData(today.withDayOfMonth(1).minusMonths(1), today); - * if (consumption != null) { - * logData(consumption.aggregats.months, "Month", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); - * consumption = getConsumptionAfterChecks(consumption, Target.LAST); - * } - * return consumption; - * }); - * - * this.cachedYearlyData = new ExpiringDayCache<>("yearly cache", REFRESH_FIRST_HOUR_OF_DAY, () -> { - * LocalDate today = LocalDate.now(); - * Consumption consumption = getConsumptionData(LocalDate.of(today.getYear() - 1, 1, 1), today); - * if (consumption != null) { - * logData(consumption.aggregats.years, "Year", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); - * consumption = getConsumptionAfterChecks(consumption, Target.LAST); - * } - * return consumption; - * }); - */ -======= // We request data for yesterday and the day before yesterday, even if the data for the day before yesterday // is not needed by the binding. This is only a workaround to an API bug that will return // INTERNAL_SERVER_ERROR rather than the expected data with a NaN value when the data for yesterday is not yet @@ -174,7 +133,6 @@ public class LinkyHandler extends BaseThingHandler { TempoResponse tempoData = getTempoData(today.minusDays(1095), today.plusDays(1)); return tempoData; }); ->>>>>>> 7a863e3128 (review channel definitions) } @Override @@ -592,6 +550,7 @@ public class LinkyHandler extends BaseThingHandler { if (command instanceof RefreshType) { logger.debug("Refreshing channel {}", channelUID.getId()); boolean connectedBefore = isConnected(); +<<<<<<< HEAD switch (channelUID.getId()) { case YESTERDAY: case LAST_WEEK: @@ -613,6 +572,13 @@ public class LinkyHandler extends BaseThingHandler { default: break; } +======= + + updateEnergyData(); + updatePowerData(); + updateTempoTimeSeries(); + +>>>>>>> d96bda22d5 (fix refresh) if (!connectedBefore && isConnected()) { disconnect(); } From a18a159e5b7ee0a0a7d9b977a810c953ff16e205 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 15:59:41 +0200 Subject: [PATCH 046/135] fix channel definition for max power Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 2 -- .../resources/OH-INF/thing/thing-types.xml | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index a022604c2f7..819744b1d88 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -373,7 +373,5 @@ public class EnedisHttpApi { logger.debug("invalid JSON response not matching ConsumptionReport.class: {}", data); throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); } - - // return data; } } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index cfbbd08dd9c..4c8ebd0e7e3 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -127,22 +127,31 @@ - + + + Maximum power usage value for Yesterday + - - Maximum power usage timestamp + + Maximum power usage timestamp for Yesterday - + + + Maximum power usage value for Day-2 + - - Maximum power usage timestamp + + Maximum power usage timestamp for Day-2 - + + + Maximum power usage value for Day-3 + - - Maximum power usage timestamp + + Maximum power usage timestamp for Day-3 From 5ef473d297c9e31afb1bc22b7780d10b44dd878f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 16:30:53 +0200 Subject: [PATCH 047/135] add timeseries for maxPower Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 5 ++ .../linky/internal/handler/LinkyHandler.java | 52 +++++++++---------- .../resources/OH-INF/thing/thing-types.xml | 17 ++++++ 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 26cd64fc872..20422b8f88d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -58,6 +58,11 @@ public class LinkyBindingConstants { public static final String DAY_MINUS_2 = "daily#day-2"; public static final String DAY_MINUS_3 = "daily#day-3"; + public static final String PEAK_POWER_DAILY = "daily#maxPower"; + public static final String PEAK_POWER_WEEKLY = "weekly#maxPower"; + public static final String PEAK_POWER_MONTHLY = "monthly#maxPower"; + public static final String PEAK_POWER_YEARLY = "yearly#maxPower"; + public static final String PEAK_POWER_DAY_MINUS_1 = "daily#power"; public static final String PEAK_POWER_TS_DAY_MINUS_1 = "daily#timestamp"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 83807f82851..790197ccca4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -314,6 +314,11 @@ public class LinkyHandler extends BaseThingHandler { updateState(PEAK_POWER_TS_DAY_MINUS_3, new DateTimeType(values.dayValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); + updateMaxPowerTimeSeries(PEAK_POWER_DAILY, values.dayValue); + updateMaxPowerTimeSeries(PEAK_POWER_WEEKLY, values.weekValue); + updateMaxPowerTimeSeries(PEAK_POWER_MONTHLY, values.monthValue); + updateMaxPowerTimeSeries(PEAK_POWER_YEARLY, values.yearValue); + }, () -> { updateKwhChannel(PEAK_POWER_DAY_MINUS_1, Double.NaN); updateState(PEAK_POWER_TS_DAY_MINUS_1, UnDefType.UNDEF); @@ -375,7 +380,27 @@ public class LinkyHandler extends BaseThingHandler { } } - private synchronized void updateConsumptionTimeSeries(String channel, IntervalReading[] iv) { + private synchronized void updateMaxPowerTimeSeries(String channel, IntervalReading[] iv) { + TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); + LocalDate today = LocalDate.now(); + + for (int i = 0; i < iv.length; i++) { + try { + if (Double.isNaN(iv[i].value)) { + continue; + } + Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); + timeSeries.add(timestamp, new DecimalType(iv[i].value)); + } catch (Exception ex) { + logger.debug("aa"); + } + } + + sendTimeSeries(channel, timeSeries); + updateState(channel, new DecimalType(iv[iv.length - 1].value)); + } + + private synchronized void updateConsumptionTimeSeries(String channel, IntervalReading[] iv) { TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); LocalDate today = LocalDate.now(); @@ -386,7 +411,6 @@ public class LinkyHandler extends BaseThingHandler { sendTimeSeries(channel, timeSeries); updateState(channel, new DecimalType(iv[iv.length - 1].value)); - } private void updateKwhChannel(String channelId, double consumption) { @@ -550,35 +574,11 @@ public class LinkyHandler extends BaseThingHandler { if (command instanceof RefreshType) { logger.debug("Refreshing channel {}", channelUID.getId()); boolean connectedBefore = isConnected(); -<<<<<<< HEAD - switch (channelUID.getId()) { - case YESTERDAY: - case LAST_WEEK: - case THIS_WEEK: - updateDailyWeeklyData(); - break; - case LAST_MONTH: - case THIS_MONTH: - // updateMonthlyData(); - break; - case LAST_YEAR: - case THIS_YEAR: - // updateYearlyData(); - break; - case PEAK_POWER: - case PEAK_TIMESTAMP: - // updatePowerData(); - break; - default: - break; - } -======= updateEnergyData(); updatePowerData(); updateTempoTimeSeries(); ->>>>>>> d96bda22d5 (fix refresh) if (!connectedBefore && isConnected()) { disconnect(); } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 4c8ebd0e7e3..34c2e366862 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -126,6 +126,11 @@ + + + Maximum power usage value + + @@ -170,6 +175,10 @@ + + + + Maximum power usage value @@ -188,6 +197,10 @@ + + + + Maximum power usage value @@ -206,6 +219,10 @@ + + + + Maximum power usage value From 59809ecbbefe1d7992db193edef9cd30f7464e58 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 16:32:47 +0200 Subject: [PATCH 048/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../internal/handler/EnedisBridgeHandler.java | 1 - .../MyElectricalDataBridgeHandler.java | 1 - .../resources/OH-INF/thing/thing-types.xml | 110 +++++++++--------- 3 files changed, 55 insertions(+), 57 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 6ef79aa81fd..fcb7d236435 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -148,5 +148,4 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index ea6f1b11ca7..dde9c24f165 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -189,5 +189,4 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 34c2e366862..46a0f95c07e 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -121,39 +121,39 @@ - - - - - - - - Maximum power usage value - + + + + + + + + Maximum power usage value + - - Maximum power usage value for Yesterday - + + Maximum power usage value for Yesterday + Maximum power usage timestamp for Yesterday - - Maximum power usage value for Day-2 - + + Maximum power usage value for Day-2 + Maximum power usage timestamp for Day-2 - - Maximum power usage value for Day-3 - + + Maximum power usage value for Day-3 + Maximum power usage timestamp for Day-3 @@ -173,13 +173,13 @@ - - - - - - Maximum power usage value - + + + + + + Maximum power usage value + @@ -195,13 +195,13 @@ - - - - - - Maximum power usage value - + + + + + + Maximum power usage value + @@ -217,13 +217,13 @@ - - - - - - Maximum power usage value - + + + + + + Maximum power usage value + @@ -233,9 +233,9 @@ - - - + + + @@ -309,18 +309,18 @@ - + - Number - - This status describes the tempo color of a day. - - - - - - - + Number + + This status describes the tempo color of a day. + + + + + + + @@ -352,6 +352,6 @@ time - - + + From d6ad4a25a2b0cc137a1cbe235cab959957c0bc5d Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 17:51:03 +0200 Subject: [PATCH 049/135] put back SerializedName because conflict with gson decoding for old api Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/dto/AddressInfo.java | 6 ++++++ .../binding/linky/internal/dto/Contracts.java | 16 ++++++++++++++++ .../binding/linky/internal/dto/Customer.java | 4 ++++ .../linky/internal/dto/CustomerIdResponse.java | 4 ++++ .../linky/internal/dto/IdentityDetails.java | 3 +++ .../binding/linky/internal/dto/MeterReading.java | 2 ++ .../linky/internal/dto/MeterResponse.java | 3 +++ .../binding/linky/internal/dto/ReadingType.java | 9 +++++++++ .../binding/linky/internal/dto/UsagePoint.java | 3 +++ 9 files changed, 50 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java index d7deef5c98a..80293849024 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java @@ -14,6 +14,8 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -23,7 +25,11 @@ import org.eclipse.jetty.jaas.spi.UserInfo; public class AddressInfo { public String street; public String locality; + + @SerializedName("postal_code") public String postalCode; + + @SerializedName("insee_code") public String inseeCode; public String city; public String country; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java index aa7a505c504..2a04cbe0618 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java @@ -14,6 +14,8 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -22,11 +24,25 @@ import org.eclipse.jetty.jaas.spi.UserInfo; public class Contracts { public String segment; + + @SerializedName("subscribed_power") public String subscribedPower; + + @SerializedName("last_activation_date") public String lastActivationDate; + + @SerializedName("distribution_tariff") public String distributionTariff; + + @SerializedName("offpeak_hours") public String offpeakHours; + + @SerializedName("contract_status") public String contractStatus; + + @SerializedName("contract_type") public String contractType; + + @SerializedName("last_distribution_tariff_change_date") public String lastDistributionTariffChangeDate; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java index bbda35b2618..b79a551d877 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java @@ -16,6 +16,8 @@ import java.util.Arrays; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -24,8 +26,10 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class Customer { + @SerializedName("customer_id") public String customerId; + @SerializedName("usage_points") public UsagePoint[] usagePoints; public static Customer fromWebPrmInfos(WebPrmInfo[] webPrmsInfo, String prmId) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java index 62bb3d7cff4..3975fb4641a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java @@ -14,6 +14,8 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -22,7 +24,9 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class CustomerIdResponse { + @SerializedName("customer_id") public String customerId; public IdentityDetails identity; + @SerializedName("contact_data") public ContactInfo contactData; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java index 45d99606ee1..15a07b6a275 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java @@ -14,6 +14,8 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -22,5 +24,6 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class IdentityDetails { + @SerializedName("natural_person") public IdentityInfo naturalPerson; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 842e2f60696..4b5435ea052 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -24,6 +24,7 @@ import com.google.gson.annotations.SerializedName; */ public class MeterReading { + @SerializedName("usage_point_id") public String usagePointId; @SerializedName("start") @@ -34,6 +35,7 @@ public class MeterReading { public String quality; + @SerializedName("reading_type") public ReadingType readingType; @SerializedName("interval_reading") diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java index 726987e602f..f5d1f85ad73 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java @@ -14,6 +14,8 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -22,5 +24,6 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class MeterResponse { + @SerializedName("meter_reading") public MeterReading meterReading; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java index 4642ea53edc..454f04fe295 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java @@ -14,6 +14,8 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -22,8 +24,15 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class ReadingType { + @SerializedName("measurement_kind") public String measurementKind; + + @SerializedName("measuring_period") public String measuringPeriod; + + @SerializedName("unit") public String unit; + + @SerializedName("aggregate") public String aggregate; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index f0cd3cd421e..235b6cd965e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -14,6 +14,8 @@ package org.openhab.binding.linky.internal.dto; import org.eclipse.jetty.jaas.spi.UserInfo; +import com.google.gson.annotations.SerializedName; + /** * The {@link UserInfo} holds informations about energy delivery point * @@ -22,6 +24,7 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class UsagePoint { + @SerializedName("usage_point") public UsagePointDetails usagePoint; public Contracts contracts; } From 03089291cea0f85c285459e3b2d9a019137390ed Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 17:51:25 +0200 Subject: [PATCH 050/135] add constructor to PrmInfo Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/dto/PrmInfo.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java index 9318ac3f322..aec269a4137 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java @@ -22,6 +22,16 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class PrmInfo { + + public PrmInfo() { + customerId = ""; + contractInfo = new Contracts(); + identityInfo = new IdentityInfo(); + addressInfo = new AddressInfo(); + contactInfo = new ContactInfo(); + usagePointInfo = new UsagePointDetails(); + } + public String prmId; public String customerId; From 58f9f38b0f146d2f8f0b9105fc7fed47beda2df9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 21:13:06 +0200 Subject: [PATCH 051/135] prevent failure if we can't read contract info from API Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 819744b1d88..edbe18ff5a5 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -138,20 +138,24 @@ public class EnedisHttpApi { } PrmInfo result = new PrmInfo(); - Customer customer = getContract(handler, prmId); - UsagePoint usagePoint = customer.usagePoints[0]; + result.prmId = prmId; - result.contractInfo = usagePoint.contracts; - result.usagePointInfo = usagePoint.usagePoint; + result.contractInfo.subscribedPower = "Na"; - result.identityInfo = getIdentity(handler, prmId); - result.contactInfo = getContact(handler, prmId); + try { + Customer customer = getContract(handler, prmId); + UsagePoint usagePoint = customer.usagePoints[0]; - result.addressInfo = result.usagePointInfo.usagePointAddresses; + result.contractInfo = usagePoint.contracts; + result.usagePointInfo = usagePoint.usagePoint; - result.prmId = result.usagePointInfo.usagePointId; - result.customerId = ""; - // customer.customerId; + result.identityInfo = getIdentity(handler, prmId); + result.contactInfo = getContact(handler, prmId); + + result.addressInfo = result.usagePointInfo.usagePointAddresses; + } catch (Exception ex) { + logger.debug("Warning, unable to read contract info"); + } return result; } From 909d075e04788784fd4e3522adb13abd58863cb1 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 21:13:55 +0200 Subject: [PATCH 052/135] add divider support to handle difference of return value between old web api and new api Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/handler/ApiBridgeHandler.java | 2 ++ .../binding/linky/internal/handler/EnedisBridgeHandler.java | 5 +++++ .../linky/internal/handler/EnedisWebBridgeHandler.java | 5 +++++ .../internal/handler/MyElectricalDataBridgeHandler.java | 5 +++++ 4 files changed, 17 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index e1d130ec507..48eb9087695 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -339,6 +339,8 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { return result; } + public abstract double getDivider(); + public abstract String getBaseUrl(); public abstract String getContactUrl(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index fcb7d236435..bffcbfd6224 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -99,6 +99,11 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { return "Bearer " + accesToken.getAccessToken(); } + @Override + public double getDivider() { + return 1000.00; + } + @Override public String getBaseUrl() { return BASE_URL; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 373cf189153..c7906213b74 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -108,6 +108,11 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { return ""; } + @Override + public double getDivider() { + return 1.00; + } + @Override public String getBaseUrl() { return BASE_URL; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index dde9c24f165..6bdc4d9b551 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -140,6 +140,11 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { return config.token; } + @Override + public double getDivider() { + return 1000.00; + } + @Override public String getBaseUrl() { return BASE_URL; From 187a37c151e66e399b43427e65c7c31b8893f872 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 16 Aug 2024 21:14:38 +0200 Subject: [PATCH 053/135] review calculation of agregats for new API to align to old Web API (WIP) Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyHandler.java | 60 +++++++++++++++---- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 790197ccca4..4cc3d7635bb 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -60,6 +60,9 @@ import org.openhab.core.types.TimeSeries.Policy; import org.openhab.core.types.UnDefType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.threeten.extra.Months; +import org.threeten.extra.Weeks; +import org.threeten.extra.Years; /** * The {@link LinkyHandler} is responsible for handling commands, which are @@ -83,6 +86,7 @@ public class LinkyHandler extends BaseThingHandler { private @Nullable ScheduledFuture refreshJob; private LinkyConfiguration config; private @Nullable EnedisHttpApi enedisApi; + private double divider = 1.00; private enum Target { FIRST, @@ -149,6 +153,7 @@ public class LinkyHandler extends BaseThingHandler { return; } enedisApi = bridgeHandler.getEnedisApi(); + divider = bridgeHandler.getDivider(); updateStatus(ThingStatus.UNKNOWN); @@ -299,8 +304,6 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updatePowerData() { dailyConsumptionMaxPower.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - double divider = 1000.00; - divider = 1.00; updateVAChannel(PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value / divider); updateState(PEAK_POWER_TS_DAY_MINUS_1, @@ -338,8 +341,7 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateEnergyData() { dailyConsumption.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - double divider = 1000.00; - divider = 1.00; + updateKwhChannel(DAY_MINUS_1, values.dayValue[dSize - 1].value / divider); updateKwhChannel(DAY_MINUS_2, values.dayValue[dSize - 2].value / divider); updateKwhChannel(DAY_MINUS_3, values.dayValue[dSize - 3].value / divider); @@ -597,40 +599,74 @@ public class LinkyHandler extends BaseThingHandler { if (meterReading != null) { if (meterReading.weekValue == null) { - meterReading.weekValue = new IntervalReading[208]; - meterReading.monthValue = new IntervalReading[48]; - meterReading.yearValue = new IntervalReading[4]; - for (int idx = 0; idx < 208; idx++) { + LocalDate startDate = meterReading.dayValue[0].date.toLocalDate(); + LocalDate endDate = meterReading.dayValue[meterReading.dayValue.length - 1].date.toLocalDate(); + + int weeksNum = Weeks.between(startDate, endDate).getAmount() + 1; + int monthsNum = Months.between(startDate, endDate).getAmount() + 1; + int yearsNum = Years.between(startDate, endDate).getAmount() + 2; + + meterReading.weekValue = new IntervalReading[weeksNum]; + meterReading.monthValue = new IntervalReading[monthsNum]; + meterReading.yearValue = new IntervalReading[yearsNum]; + + for (int idx = 0; idx < weeksNum; idx++) { meterReading.weekValue[idx] = new IntervalReading(); } - for (int idx = 0; idx < 48; idx++) { + for (int idx = 0; idx < monthsNum; idx++) { meterReading.monthValue[idx] = new IntervalReading(); } - for (int idx = 0; idx < 4; idx++) { + for (int idx = 0; idx < yearsNum; idx++) { meterReading.yearValue[idx] = new IntervalReading(); } int size = meterReading.dayValue.length; int baseYear = meterReading.dayValue[0].date.getYear(); + int baseMonth = meterReading.dayValue[0].date.getMonthValue(); + int baseDayOfYear = meterReading.dayValue[0].date.getDayOfYear(); + int baseWeek = ((baseDayOfYear - 1) / 7) + 1; for (int idx = 0; idx < size; idx++) { IntervalReading ir = meterReading.dayValue[idx]; LocalDateTime dt = ir.date; double value = ir.value; + /* + * int idxWeek = Weeks.between(startDate, dt).getAmount(); + * int idxMonth = Months.between(startDate, dt).getAmount(); + * int idxYear = dt.getYear() - baseYear; + */ + int idxYear = dt.getYear() - baseYear; int dayOfYear = dt.getDayOfYear(); int week = ((dayOfYear - 1) / 7) + 1; int month = dt.getMonthValue(); - int idxMonth = (idxYear * 12) + month; - int idxWeek = (idxYear * 52) + week; + int idxMonth = (idxYear * 12) + month - baseMonth; + int idxWeek = (idxYear * 52) + week - baseWeek; + + if (idxWeek >= weeksNum) { + continue; + } + if (idxMonth >= monthsNum) { + continue; + } meterReading.weekValue[idxWeek].value += value; meterReading.monthValue[idxMonth].value += value; meterReading.yearValue[idxYear].value += value; + + if (meterReading.weekValue[idxWeek].date == null) { + meterReading.weekValue[idxWeek].date = dt; + } + if (meterReading.monthValue[idxMonth].date == null) { + meterReading.monthValue[idxMonth].date = LocalDateTime.of(dt.getYear(), month, 1, 0, 0); + } + if (meterReading.yearValue[idxYear].date == null) { + meterReading.yearValue[idxYear].date = dt; + } } } } From aecf0c1ed1e52c716a761c6f876be027afc98c2d Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 17 Aug 2024 17:58:02 +0200 Subject: [PATCH 054/135] fix aggregate calculation for new API Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyHandler.java | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 4cc3d7635bb..b018c9384e2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -23,9 +23,11 @@ import java.time.ZoneId; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; +import java.time.temporal.WeekFields; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -407,6 +409,10 @@ public class LinkyHandler extends BaseThingHandler { LocalDate today = LocalDate.now(); for (int i = 0; i < iv.length; i++) { + if (iv[i].date == null) { + continue; + } + Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); timeSeries.add(timestamp, new DecimalType(iv[i].value)); } @@ -603,8 +609,8 @@ public class LinkyHandler extends BaseThingHandler { LocalDate startDate = meterReading.dayValue[0].date.toLocalDate(); LocalDate endDate = meterReading.dayValue[meterReading.dayValue.length - 1].date.toLocalDate(); - int weeksNum = Weeks.between(startDate, endDate).getAmount() + 1; - int monthsNum = Months.between(startDate, endDate).getAmount() + 1; + int weeksNum = Weeks.between(startDate, endDate).getAmount() + 2; + int monthsNum = Months.between(startDate, endDate).getAmount() + 2; int yearsNum = Years.between(startDate, endDate).getAmount() + 2; meterReading.weekValue = new IntervalReading[weeksNum]; @@ -632,40 +638,32 @@ public class LinkyHandler extends BaseThingHandler { LocalDateTime dt = ir.date; double value = ir.value; - /* - * int idxWeek = Weeks.between(startDate, dt).getAmount(); - * int idxMonth = Months.between(startDate, dt).getAmount(); - * int idxYear = dt.getYear() - baseYear; - */ - int idxYear = dt.getYear() - baseYear; - - int dayOfYear = dt.getDayOfYear(); - int week = ((dayOfYear - 1) / 7) + 1; int month = dt.getMonthValue(); + int weekOfYear = dt.get(WeekFields.of(Locale.FRANCE).weekOfYear()); int idxMonth = (idxYear * 12) + month - baseMonth; - int idxWeek = (idxYear * 52) + week - baseWeek; + int idxWeek = (idxYear * 52) + weekOfYear - baseWeek; - if (idxWeek >= weeksNum) { - continue; + if (idxWeek < weeksNum) { + meterReading.weekValue[idxWeek].value += value; + if (meterReading.weekValue[idxWeek].date == null) { + meterReading.weekValue[idxWeek].date = dt; + } } - if (idxMonth >= monthsNum) { - continue; + if (idxMonth < monthsNum) { + meterReading.monthValue[idxMonth].value += value; + if (meterReading.monthValue[idxMonth].date == null) { + meterReading.monthValue[idxMonth].date = LocalDateTime.of(dt.getYear(), month, 1, 0, 0); + } } - meterReading.weekValue[idxWeek].value += value; - meterReading.monthValue[idxMonth].value += value; - meterReading.yearValue[idxYear].value += value; + if (idxYear < yearsNum) { + meterReading.yearValue[idxYear].value += value; - if (meterReading.weekValue[idxWeek].date == null) { - meterReading.weekValue[idxWeek].date = dt; - } - if (meterReading.monthValue[idxMonth].date == null) { - meterReading.monthValue[idxMonth].date = LocalDateTime.of(dt.getYear(), month, 1, 0, 0); - } - if (meterReading.yearValue[idxYear].date == null) { - meterReading.yearValue[idxYear].date = dt; + if (meterReading.yearValue[idxYear].date == null) { + meterReading.yearValue[idxYear].date = LocalDateTime.of(dt.getYear(), 1, 1, 0, 0); + } } } } From fb66f387b2f296c45d8bd5ab79d86dd85e7241fb Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 17 Aug 2024 18:02:10 +0200 Subject: [PATCH 055/135] fix divider for timeseries Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyHandler.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index b018c9384e2..403acfb6151 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -307,15 +307,15 @@ public class LinkyHandler extends BaseThingHandler { dailyConsumptionMaxPower.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - updateVAChannel(PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value / divider); + updateVAChannel(PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value); updateState(PEAK_POWER_TS_DAY_MINUS_1, new DateTimeType(values.dayValue[dSize - 1].date.atZone(ZoneId.systemDefault()))); - updateVAChannel(PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value / divider); + updateVAChannel(PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value); updateState(PEAK_POWER_TS_DAY_MINUS_2, new DateTimeType(values.dayValue[dSize - 2].date.atZone(ZoneId.systemDefault()))); - updateVAChannel(PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value / divider); + updateVAChannel(PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value); updateState(PEAK_POWER_TS_DAY_MINUS_3, new DateTimeType(values.dayValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); @@ -344,26 +344,26 @@ public class LinkyHandler extends BaseThingHandler { dailyConsumption.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - updateKwhChannel(DAY_MINUS_1, values.dayValue[dSize - 1].value / divider); - updateKwhChannel(DAY_MINUS_2, values.dayValue[dSize - 2].value / divider); - updateKwhChannel(DAY_MINUS_3, values.dayValue[dSize - 3].value / divider); + updateKwhChannel(DAY_MINUS_1, values.dayValue[dSize - 1].value); + updateKwhChannel(DAY_MINUS_2, values.dayValue[dSize - 2].value); + updateKwhChannel(DAY_MINUS_3, values.dayValue[dSize - 3].value); LocalDate currentDt = LocalDate.now(); int idxCurrentYear = values.yearValue.length - 1; int idxCurrentWeek = values.weekValue.length - 1; int idxCurrentMonth = values.monthValue.length - 1; - updateKwhChannel(WEEK_MINUS_0, values.weekValue[idxCurrentWeek].value / divider); - updateKwhChannel(WEEK_MINUS_1, values.weekValue[idxCurrentWeek - 1].value / divider); - updateKwhChannel(WEEK_MINUS_2, values.weekValue[idxCurrentWeek - 2].value / divider); + updateKwhChannel(WEEK_MINUS_0, values.weekValue[idxCurrentWeek].value); + updateKwhChannel(WEEK_MINUS_1, values.weekValue[idxCurrentWeek - 1].value); + updateKwhChannel(WEEK_MINUS_2, values.weekValue[idxCurrentWeek - 2].value); - updateKwhChannel(MONTH_MINUS_0, values.monthValue[idxCurrentMonth].value / divider); - updateKwhChannel(MONTH_MINUS_1, values.monthValue[idxCurrentMonth - 1].value / divider); - updateKwhChannel(MONTH_MINUS_2, values.monthValue[idxCurrentMonth - 2].value / divider); + updateKwhChannel(MONTH_MINUS_0, values.monthValue[idxCurrentMonth].value); + updateKwhChannel(MONTH_MINUS_1, values.monthValue[idxCurrentMonth - 1].value); + updateKwhChannel(MONTH_MINUS_2, values.monthValue[idxCurrentMonth - 2].value); - updateKwhChannel(YEAR_MINUS_0, values.yearValue[idxCurrentYear].value / divider); - updateKwhChannel(YEAR_MINUS_1, values.yearValue[idxCurrentYear - 1].value / divider); - updateKwhChannel(YEAR_MINUS_2, values.yearValue[idxCurrentYear - 2].value / divider); + updateKwhChannel(YEAR_MINUS_0, values.yearValue[idxCurrentYear].value); + updateKwhChannel(YEAR_MINUS_1, values.yearValue[idxCurrentYear - 1].value); + updateKwhChannel(YEAR_MINUS_2, values.yearValue[idxCurrentYear - 2].value); updateConsumptionTimeSeries(DAYLY_CONSUMPTION, values.dayValue); updateConsumptionTimeSeries(WEEKLY_CONSUMPTION, values.weekValue); @@ -605,7 +605,6 @@ public class LinkyHandler extends BaseThingHandler { if (meterReading != null) { if (meterReading.weekValue == null) { - LocalDate startDate = meterReading.dayValue[0].date.toLocalDate(); LocalDate endDate = meterReading.dayValue[meterReading.dayValue.length - 1].date.toLocalDate(); @@ -637,6 +636,8 @@ public class LinkyHandler extends BaseThingHandler { IntervalReading ir = meterReading.dayValue[idx]; LocalDateTime dt = ir.date; double value = ir.value; + value = value / divider; + ir.value = value; int idxYear = dt.getYear() - baseYear; int month = dt.getMonthValue(); From a8fe3becf675a5c03c39a71097b9e1f7e6a88bcb Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 17 Aug 2024 18:44:01 +0200 Subject: [PATCH 056/135] start load curve implementations Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 5 ++ .../internal/handler/ApiBridgeHandler.java | 2 + .../internal/handler/EnedisBridgeHandler.java | 6 +++ .../handler/EnedisWebBridgeHandler.java | 7 +++ .../linky/internal/handler/LinkyHandler.java | 49 +++++++++++++++++-- .../MyElectricalDataBridgeHandler.java | 7 +++ 6 files changed, 72 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index edbe18ff5a5..b3c434abaf1 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -341,6 +341,11 @@ public class EnedisHttpApi { return getMeasures(handler, apiBridgeHandler.getDailyConsumptionUrl(), prmId, from, to); } + public MeterReading getLoadCurveData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) + throws LinkyException { + return getMeasures(handler, apiBridgeHandler.getLoadCurveUrl(), prmId, from, to); + } + public MeterReading getPowerData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) throws LinkyException { return getMeasures(handler, apiBridgeHandler.getMaxPowerUrl(), prmId, from, to); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 48eb9087695..9257e84d282 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -355,6 +355,8 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { public abstract String getMaxPowerUrl(); + public abstract String getLoadCurveUrl(); + public abstract String getTempoUrl(); public abstract DateTimeFormatter getApiDateFormat(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index bffcbfd6224..6c487cdcb45 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -48,6 +48,7 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; private static final String MEASURE_MAX_POWER_URL = BASE_URL + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; + private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + "??"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -139,6 +140,11 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { return MEASURE_MAX_POWER_URL; } + @Override + public String getLoadCurveUrl() { + return LOAD_CURVE_CONSUMPTION_URL; + } + @Override public String getTempoUrl() { return ""; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index c7906213b74..bdb642b6f04 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -72,6 +72,8 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { private static final String MEASURE_MAX_POWER_URL = PRM_INFO_BASE_URL + "undefined/prms/%s/donnees-pmax?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; + private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + "??"; + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -148,6 +150,11 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { return MEASURE_MAX_POWER_URL; } + @Override + public String getLoadCurveUrl() { + return LOAD_CURVE_CONSUMPTION_URL; + } + @Override public String getTempoUrl() { return TEMPO_URL; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 403acfb6151..f48e6e14fbe 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -83,6 +83,7 @@ public class LinkyHandler extends BaseThingHandler { private final ExpiringDayCache dailyConsumption; private final ExpiringDayCache dailyConsumptionMaxPower; + private final ExpiringDayCache loadCurveConsumption; private final ExpiringDayCache tempoInformation; private @Nullable ScheduledFuture refreshJob; @@ -139,6 +140,17 @@ public class LinkyHandler extends BaseThingHandler { TempoResponse tempoData = getTempoData(today.minusDays(1095), today.plusDays(1)); return tempoData; }); + + // Comsuption Load Curve + this.loadCurveConsumption = new ExpiringDayCache<>("loadCurveConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { + LocalDate today = LocalDate.now(); + MeterReading meterReading = getLoadCurveConsumption(today.minusDays(7), today); + meterReading = getMeterReadingAfterChecks(meterReading); + if (meterReading != null) { + logData(meterReading.dayValue, "Day (peak)", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); + } + return meterReading; + }); } @Override @@ -179,6 +191,8 @@ public class LinkyHandler extends BaseThingHandler { final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) .truncatedTo(ChronoUnit.HOURS); + updateStatus(ThingStatus.ONLINE); + refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); @@ -249,6 +263,7 @@ public class LinkyHandler extends BaseThingHandler { updateEnergyData(); updatePowerData(); updateTempoTimeSeries(); + updateLoadCurveData(); if (!connectedBefore && isConnected()) { disconnect(); @@ -339,7 +354,6 @@ public class LinkyHandler extends BaseThingHandler { /** * Request new dayly/weekly data and updates channels */ - private synchronized void updateEnergyData() { dailyConsumption.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; @@ -384,6 +398,17 @@ public class LinkyHandler extends BaseThingHandler { } } + /** + * Request new dayly/weekly data and updates channels + */ + private synchronized void updateLoadCurveData() { + loadCurveConsumption.getValue().ifPresentOrElse(values -> { + int dSize = values.dayValue.length; + logger.debug("load curve"); + }, () -> { + }); + } + private synchronized void updateMaxPowerTimeSeries(String channel, IntervalReading[] iv) { TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); LocalDate today = LocalDate.now(); @@ -502,7 +527,24 @@ public class LinkyHandler extends BaseThingHandler { if (api != null) { try { MeterReading meterReading = api.getEnergyData(this, config.prmId, from, to); - updateStatus(ThingStatus.ONLINE); + return meterReading; + } catch (LinkyException e) { + logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); + } + } + + return null; + } + + private @Nullable MeterReading getLoadCurveConsumption(LocalDate from, LocalDate to) { + logger.debug("getLoadCurveConsumption from {} to {}", from.format(DateTimeFormatter.ISO_LOCAL_DATE), + to.format(DateTimeFormatter.ISO_LOCAL_DATE)); + + EnedisHttpApi api = this.enedisApi; + if (api != null) { + try { + MeterReading meterReading = api.getLoadCurveData(this, config.prmId, from, to); return meterReading; } catch (LinkyException e) { logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); @@ -521,7 +563,6 @@ public class LinkyHandler extends BaseThingHandler { if (api != null) { try { MeterReading meterReading = api.getPowerData(this, config.prmId, from, to); - updateStatus(ThingStatus.ONLINE); return meterReading; } catch (LinkyException e) { logger.debug("Exception when getting power data: {}", e.getMessage(), e); @@ -539,7 +580,6 @@ public class LinkyHandler extends BaseThingHandler { if (api != null) { try { TempoResponse result = api.getTempoData(this, from, to); - updateStatus(ThingStatus.ONLINE); return result; } catch (LinkyException e) { logger.debug("Exception when getting power data: {}", e.getMessage(), e); @@ -586,6 +626,7 @@ public class LinkyHandler extends BaseThingHandler { updateEnergyData(); updatePowerData(); updateTempoTimeSeries(); + updateLoadCurveData(); if (!connectedBefore && isConnected()) { disconnect(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 6bdc4d9b551..0b54d74d775 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -53,6 +53,8 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { + "daily_consumption/%s/start/%s/end/%s/cache/"; private static final String MEASURE_MAX_POWER_URL = BASE_URL + "daily_consumption_max_power/%s/start/%s/end/%s/cache/"; + private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + + "consumption_load_curve/%s/start/%s/end/%s/cache/"; private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; @@ -180,6 +182,11 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { return MEASURE_MAX_POWER_URL; } + @Override + public String getLoadCurveUrl() { + return LOAD_CURVE_CONSUMPTION_URL; + } + @Override public String getTempoUrl() { return TEMPO_URL; From 54560e1c60ad00c01485307ee605f55a447aad84 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 17 Aug 2024 18:49:54 +0200 Subject: [PATCH 057/135] add loadcurve url for other bridge Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/handler/EnedisBridgeHandler.java | 3 ++- .../binding/linky/internal/handler/EnedisWebBridgeHandler.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 6c487cdcb45..0d3eb7a1ff3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -48,7 +48,8 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; private static final String MEASURE_MAX_POWER_URL = BASE_URL + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; - private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + "??"; + private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + + "metering_data_clc/v5/consumption_load_curve?usage_point_id=%s&start=%s&end=%s"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index bdb642b6f04..93f8c430525 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -72,7 +72,8 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { private static final String MEASURE_MAX_POWER_URL = PRM_INFO_BASE_URL + "undefined/prms/%s/donnees-pmax?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; - private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + "??"; + private static final String LOAD_CURVE_CONSUMPTION_URL = PRM_INFO_BASE_URL + + "undefined/prms/%s/courbe-de-charge?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); From ea69cd7a347fb46ab2563d89936d5503f51f0792 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 10:05:43 +0200 Subject: [PATCH 058/135] adapt code to support LoadCurve for old Web API Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/dto/AuthData.java | 5 +++ .../linky/internal/dto/ConsumptionReport.java | 3 ++ .../linky/internal/dto/MeterReading.java | 38 ++++++++++++++++--- .../handler/EnedisWebBridgeHandler.java | 2 +- .../linky/internal/handler/LinkyHandler.java | 5 +-- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java index 27eddb18695..8d92ddd2c02 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java @@ -29,6 +29,11 @@ public class AuthData { public @Nullable String name; public @Nullable Object value; + public NameValuePair(String name, Object value) { + this.name = name; + this.value = value; + } + public @Nullable String valueAsString() { return (value instanceof String stringValue) ? stringValue : null; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java index e2d57620d2b..e96b7af797f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java @@ -52,6 +52,9 @@ public class ConsumptionReport { public String grandeurMetier; public String grandeurPhysique; public String unite; + public String mesuresPasEnum; + public List labels; + public List data; } public class FirstLevel { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 4b5435ea052..e978ef63cff 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -12,6 +12,10 @@ */ package org.openhab.binding.linky.internal.dto; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + import org.eclipse.jetty.jaas.spi.UserInfo; import com.google.gson.annotations.SerializedName; @@ -48,10 +52,15 @@ public class MeterReading { MeterReading result = new MeterReading(); result.readingType = new ReadingType(); - result.dayValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.days); - result.weekValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.weeks); - result.monthValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.months); - result.yearValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.years); + if (comsumptionReport.firstLevel.consumptions.aggregats != null) { + result.dayValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.days); + result.weekValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.weeks); + result.monthValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.months); + result.yearValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.years); + } else { + result.dayValue = fromLabelsAndDatas(comsumptionReport.firstLevel.consumptions.labels, + comsumptionReport.firstLevel.consumptions.data); + } return result; } @@ -64,7 +73,6 @@ public class MeterReading { for (int i = 0; i < size; i++) { Double data = agregat.datas.get(i); ConsumptionReport.Period period = agregat.periodes.get(i); - String label = agregat.labels.get(i); result[i] = new IntervalReading(); result[i].value = data; @@ -73,4 +81,24 @@ public class MeterReading { return result; } + + public static IntervalReading[] fromLabelsAndDatas(List labels, List datas) { + + int size = datas.size(); + IntervalReading[] result = new IntervalReading[size]; + + for (int i = 0; i < size; i++) { + Double data = datas.get(i); + String label = labels.get(i); + // 2024-08-11T00:00:00.000+0200 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[X]"); + ZonedDateTime dt = ZonedDateTime.parse(label, formatter); + + result[i] = new IntervalReading(); + result[i].value = data; + result[i].date = dt.toLocalDateTime(); + } + + return result; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 93f8c430525..e44d24a6f25 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -172,7 +172,7 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { } @Override - protected void connectionInit() throws LinkyException { + protected synchronized void connectionInit() throws LinkyException { logger.debug("Starting login process for user : {}", config.username); try { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index f48e6e14fbe..cd6983c4505 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -272,7 +272,6 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateTempoTimeSeries() { tempoInformation.getValue().ifPresentOrElse(values -> { - LocalDate today = LocalDate.now(); TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); values.forEach((k, v) -> { @@ -362,7 +361,6 @@ public class LinkyHandler extends BaseThingHandler { updateKwhChannel(DAY_MINUS_2, values.dayValue[dSize - 2].value); updateKwhChannel(DAY_MINUS_3, values.dayValue[dSize - 3].value); - LocalDate currentDt = LocalDate.now(); int idxCurrentYear = values.yearValue.length - 1; int idxCurrentWeek = values.weekValue.length - 1; int idxCurrentMonth = values.monthValue.length - 1; @@ -407,11 +405,11 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("load curve"); }, () -> { }); + } private synchronized void updateMaxPowerTimeSeries(String channel, IntervalReading[] iv) { TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); - LocalDate today = LocalDate.now(); for (int i = 0; i < iv.length; i++) { try { @@ -431,7 +429,6 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateConsumptionTimeSeries(String channel, IntervalReading[] iv) { TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); - LocalDate today = LocalDate.now(); for (int i = 0; i < iv.length; i++) { if (iv[i].date == null) { From ac782362724fe393aed03ad8ff5b22dfb3fb8add Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 10:10:58 +0200 Subject: [PATCH 059/135] add new channel for LoadCurve Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/LinkyBindingConstants.java | 2 ++ .../src/main/resources/OH-INF/thing/thing-types.xml | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 20422b8f88d..675da484aa8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -49,6 +49,8 @@ public class LinkyBindingConstants { // List of all Channel id's + public static final String LOAD_CURVE = "loadCurve#power"; + public static final String DAYLY_CONSUMPTION = "daily#consumption"; public static final String WEEKLY_CONSUMPTION = "weekly#consumption"; public static final String MONTHLY_CONSUMPTION = "monthly#consumption"; diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 46a0f95c07e..fe99a5eaceb 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -84,6 +84,7 @@ + @@ -109,6 +110,15 @@ + + + + + + + + + From 33bdf0c972572184402987708966350cbb508ce5 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 10:26:12 +0200 Subject: [PATCH 060/135] add update for load Curve channel Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/handler/LinkyHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index cd6983c4505..55520f979fb 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -402,7 +402,7 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateLoadCurveData() { loadCurveConsumption.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - logger.debug("load curve"); + updateMaxPowerTimeSeries(LOAD_CURVE, values.dayValue); }, () -> { }); From bf13ac3e840911a6bc19a4333e0312cce4e646fd Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 10:36:38 +0200 Subject: [PATCH 061/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyHandler.java | 1 - .../resources/OH-INF/thing/thing-types.xml | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 55520f979fb..2dd90dfe589 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -405,7 +405,6 @@ public class LinkyHandler extends BaseThingHandler { updateMaxPowerTimeSeries(LOAD_CURVE, values.dayValue); }, () -> { }); - } private synchronized void updateMaxPowerTimeSeries(String channel, IntervalReading[] iv) { diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index fe99a5eaceb..44edf5dbe12 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -110,15 +110,15 @@ - - - - - - - - - + + + + + + + + + From 51a0dc5b8fef37bae735e25e0f3c6fe15c1b1da6 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 10:55:28 +0200 Subject: [PATCH 062/135] fix some typo Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/dto/MeterReading.java | 1 - .../linky/internal/handler/LinkyHandler.java | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index e978ef63cff..c24e128ce96 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -90,7 +90,6 @@ public class MeterReading { for (int i = 0; i < size; i++) { Double data = datas.get(i); String label = labels.get(i); - // 2024-08-11T00:00:00.000+0200 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[X]"); ZonedDateTime dt = ZonedDateTime.parse(label, formatter); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 2dd90dfe589..a655d4559e3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -333,10 +333,10 @@ public class LinkyHandler extends BaseThingHandler { updateState(PEAK_POWER_TS_DAY_MINUS_3, new DateTimeType(values.dayValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); - updateMaxPowerTimeSeries(PEAK_POWER_DAILY, values.dayValue); - updateMaxPowerTimeSeries(PEAK_POWER_WEEKLY, values.weekValue); - updateMaxPowerTimeSeries(PEAK_POWER_MONTHLY, values.monthValue); - updateMaxPowerTimeSeries(PEAK_POWER_YEARLY, values.yearValue); + updatePowerTimeSeries(PEAK_POWER_DAILY, values.dayValue); + updatePowerTimeSeries(PEAK_POWER_WEEKLY, values.weekValue); + updatePowerTimeSeries(PEAK_POWER_MONTHLY, values.monthValue); + updatePowerTimeSeries(PEAK_POWER_YEARLY, values.yearValue); }, () -> { updateKwhChannel(PEAK_POWER_DAY_MINUS_1, Double.NaN); @@ -397,17 +397,17 @@ public class LinkyHandler extends BaseThingHandler { } /** - * Request new dayly/weekly data and updates channels + * Request new loadCurve data and updates channels */ private synchronized void updateLoadCurveData() { loadCurveConsumption.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - updateMaxPowerTimeSeries(LOAD_CURVE, values.dayValue); + updatePowerTimeSeries(LOAD_CURVE, values.dayValue); }, () -> { }); } - private synchronized void updateMaxPowerTimeSeries(String channel, IntervalReading[] iv) { + private synchronized void updatePowerTimeSeries(String channel, IntervalReading[] iv) { TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); for (int i = 0; i < iv.length; i++) { From f05d7cf3af2e31fce2a8beede03aac47ecf15f72 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 11:50:32 +0200 Subject: [PATCH 063/135] reformat contract reading and BridgeHandler hierarchy Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 137 +++++-------- .../linky/internal/dto/ContractDetails.java | 48 +++++ .../binding/linky/internal/dto/Contracts.java | 52 +++-- .../binding/linky/internal/dto/Customer.java | 68 ------- .../linky/internal/dto/CustomerReponse.java | 2 +- .../binding/linky/internal/dto/PrmInfo.java | 4 +- .../linky/internal/dto/UsagePoint.java | 2 +- .../internal/handler/ApiBridgeHandler.java | 180 ++++------------- .../internal/handler/EnedisBridgeHandler.java | 1 + .../handler/EnedisWebBridgeHandler.java | 42 ++-- .../internal/handler/LinkyBridgeHandler.java | 186 ++++++++++++++++++ .../linky/internal/handler/LinkyHandler.java | 4 +- .../MyElectricalDataBridgeHandler.java | 1 + 13 files changed, 389 insertions(+), 338 deletions(-) create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContractDetails.java delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java create mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index b3c434abaf1..8264bbdd813 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -32,7 +32,7 @@ import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ConsumptionReport; import org.openhab.binding.linky.internal.dto.ContactInfo; -import org.openhab.binding.linky.internal.dto.Customer; +import org.openhab.binding.linky.internal.dto.Contracts; import org.openhab.binding.linky.internal.dto.CustomerIdResponse; import org.openhab.binding.linky.internal.dto.CustomerReponse; import org.openhab.binding.linky.internal.dto.IdentityInfo; @@ -41,10 +41,9 @@ import org.openhab.binding.linky.internal.dto.MeterResponse; import org.openhab.binding.linky.internal.dto.PrmInfo; import org.openhab.binding.linky.internal.dto.TempoResponse; import org.openhab.binding.linky.internal.dto.UsagePoint; -import org.openhab.binding.linky.internal.dto.WebPrmInfo; import org.openhab.binding.linky.internal.dto.WebUserInfo; -import org.openhab.binding.linky.internal.handler.ApiBridgeHandler; import org.openhab.binding.linky.internal.handler.EnedisWebBridgeHandler; +import org.openhab.binding.linky.internal.handler.LinkyBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,12 +63,12 @@ public class EnedisHttpApi { private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; - private ApiBridgeHandler apiBridgeHandler; + private LinkyBridgeHandler linkyBridgeHandler; - public EnedisHttpApi(ApiBridgeHandler apiBridgeHandler, Gson gson, HttpClient httpClient) { + public EnedisHttpApi(LinkyBridgeHandler linkyBridgeHandler, Gson gson, HttpClient httpClient) { this.gson = gson; this.httpClient = httpClient; - this.apiBridgeHandler = apiBridgeHandler; + this.linkyBridgeHandler = linkyBridgeHandler; } public FormContentProvider getFormContent(String fieldName, String fieldValue) { @@ -90,15 +89,15 @@ public class EnedisHttpApi { } public String getData(LinkyHandler handler, String url) throws LinkyException { - return getData(apiBridgeHandler, url, httpClient, apiBridgeHandler.getToken(handler)); + return getData(linkyBridgeHandler, url, httpClient, linkyBridgeHandler.getToken(handler)); } public String getData(String url) throws LinkyException { - return getData(apiBridgeHandler, url, httpClient, ""); + return getData(linkyBridgeHandler, url, httpClient, ""); } - private static String getData(ApiBridgeHandler apiBridgeHandler, String url, HttpClient httpClient, String token) - throws LinkyException { + private static String getData(LinkyBridgeHandler linkyBridgeHandler, String url, HttpClient httpClient, + String token) throws LinkyException { try { Request request = httpClient.newRequest(url); request = request.method(HttpMethod.GET); @@ -110,7 +109,7 @@ public class EnedisHttpApi { ContentResponse result = request.send(); if (result.getStatus() == 307) { String loc = result.getHeaders().get("Location"); - String newUrl = apiBridgeHandler.getBaseUrl() + loc.substring(1); + String newUrl = linkyBridgeHandler.getBaseUrl() + loc.substring(1); request = httpClient.newRequest(newUrl); request = request.method(HttpMethod.GET); result = request.send(); @@ -133,8 +132,8 @@ public class EnedisHttpApi { } public PrmInfo getPrmInfo(LinkyHandler handler, String prmId) throws LinkyException { - if (!apiBridgeHandler.isConnected()) { - apiBridgeHandler.initialize(); + if (!linkyBridgeHandler.isConnected()) { + linkyBridgeHandler.initialize(); } PrmInfo result = new PrmInfo(); @@ -143,12 +142,16 @@ public class EnedisHttpApi { result.contractInfo.subscribedPower = "Na"; try { - Customer customer = getContract(handler, prmId); - UsagePoint usagePoint = customer.usagePoints[0]; + Contracts contract = getContract(handler, prmId); + UsagePoint usagePoint = contract.usagePoints[0]; + + AddressInfo addressInfo = getAddress(handler, prmId); + if (addressInfo != null) { + usagePoint.usagePoint.usagePointAddresses = addressInfo; + } result.contractInfo = usagePoint.contracts; result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(handler, prmId); result.contactInfo = getContact(handler, prmId); @@ -164,54 +167,26 @@ public class EnedisHttpApi { return apiUrl.formatted(prmId); } - public Customer getContract(LinkyHandler handler, String prmId) throws LinkyException { - if (!apiBridgeHandler.isConnected()) { - apiBridgeHandler.initialize(); + public Contracts getContract(LinkyHandler handler, String prmId) throws LinkyException { + if (!linkyBridgeHandler.isConnected()) { + linkyBridgeHandler.initialize(); } - String contractUrl = apiBridgeHandler.getContractUrl(); + String contractUrl = linkyBridgeHandler.getContractUrl(); String data = getData(handler, formatUrl(contractUrl, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", contractUrl); } - try { - if (data.startsWith("[{\"adresse\"")) { - try { - WebPrmInfo[] webPrmsInfo = gson.fromJson(data, WebPrmInfo[].class); - if (webPrmsInfo == null || webPrmsInfo.length < 1) { - throw new LinkyException("Invalid prms data received"); - } - return Customer.fromWebPrmInfos(webPrmsInfo, prmId); - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contractUrl); - } - } else { - CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); - if (cResponse == null) { - throw new LinkyException("Invalid customer data received"); - } - - AddressInfo addressInfo = getAddress(handler, prmId); - if (addressInfo != null) { - cResponse.customer.usagePoints[0].usagePoint.usagePointAddresses = addressInfo; - } - - return cResponse.customer; - } - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contractUrl); - } + return linkyBridgeHandler.decodeCustomerResponse(data, prmId); } @Nullable public AddressInfo getAddress(LinkyHandler handler, String prmId) throws LinkyException { - if (!apiBridgeHandler.isConnected()) { - apiBridgeHandler.initialize(); + if (!linkyBridgeHandler.isConnected()) { + linkyBridgeHandler.initialize(); } - String addressUrl = apiBridgeHandler.getAddressUrl(); + String addressUrl = linkyBridgeHandler.getAddressUrl(); if (addressUrl.isEmpty()) { return null; @@ -234,41 +209,23 @@ public class EnedisHttpApi { } public IdentityInfo getIdentity(LinkyHandler handler, String prmId) throws LinkyException { - if (!apiBridgeHandler.isConnected()) { - apiBridgeHandler.initialize(); + if (!linkyBridgeHandler.isConnected()) { + linkyBridgeHandler.initialize(); } - String identityUrl = apiBridgeHandler.getIdentityUrl(); + String identityUrl = linkyBridgeHandler.getIdentityUrl(); String data = getData(handler, formatUrl(identityUrl, prmId)); if (data.isEmpty()) { throw new LinkyException("Requesting '%s' returned an empty response", identityUrl); } - try { - if (data.contains("av2_interne_id")) { - try { - WebUserInfo webUserInfo = gson.fromJson(data, WebUserInfo.class); - return IdentityInfo.fromWebUserInfo(webUserInfo); - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching UserInfo.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", identityUrl); - } - } else { - CustomerIdResponse iResponse = gson.fromJson(data, CustomerIdResponse.class); - if (iResponse == null) { - throw new LinkyException("Invalid customer data received"); - } - return iResponse.identity.naturalPerson; - } - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", identityUrl); - } + + return linkyBridgeHandler.decodeIdentityResponse(data, prmId); } public ContactInfo getContact(LinkyHandler handler, String prmId) throws LinkyException { - if (!apiBridgeHandler.isConnected()) { - apiBridgeHandler.initialize(); + if (!linkyBridgeHandler.isConnected()) { + linkyBridgeHandler.initialize(); } - String contactUrl = apiBridgeHandler.getContactUrl(); + String contactUrl = linkyBridgeHandler.getContactUrl(); String data = getData(handler, formatUrl(contactUrl, prmId)); if (data.isEmpty()) { @@ -298,12 +255,12 @@ public class EnedisHttpApi { private MeterReading getMeasures(LinkyHandler handler, String apiUrl, String prmId, LocalDate from, LocalDate to) throws LinkyException { - String dtStart = from.format(apiBridgeHandler.getApiDateFormat()); - String dtEnd = to.format(apiBridgeHandler.getApiDateFormat()); + String dtStart = from.format(linkyBridgeHandler.getApiDateFormat()); + String dtEnd = to.format(linkyBridgeHandler.getApiDateFormat()); String url = String.format(apiUrl, prmId, dtStart, dtEnd); - if (!apiBridgeHandler.isConnected()) { - apiBridgeHandler.initialize(); + if (!linkyBridgeHandler.isConnected()) { + linkyBridgeHandler.initialize(); } String data = getData(handler, url); @@ -338,31 +295,31 @@ public class EnedisHttpApi { public MeterReading getEnergyData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(handler, apiBridgeHandler.getDailyConsumptionUrl(), prmId, from, to); + return getMeasures(handler, linkyBridgeHandler.getDailyConsumptionUrl(), prmId, from, to); } public MeterReading getLoadCurveData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(handler, apiBridgeHandler.getLoadCurveUrl(), prmId, from, to); + return getMeasures(handler, linkyBridgeHandler.getLoadCurveUrl(), prmId, from, to); } public MeterReading getPowerData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(handler, apiBridgeHandler.getMaxPowerUrl(), prmId, from, to); + return getMeasures(handler, linkyBridgeHandler.getMaxPowerUrl(), prmId, from, to); } public TempoResponse getTempoData(LinkyHandler handler, LocalDate from, LocalDate to) throws LinkyException { - String dtStart = from.format(apiBridgeHandler.getApiDateFormatYearsFirst()); - String dtEnd = to.format(apiBridgeHandler.getApiDateFormatYearsFirst()); + String dtStart = from.format(linkyBridgeHandler.getApiDateFormatYearsFirst()); + String dtEnd = to.format(linkyBridgeHandler.getApiDateFormatYearsFirst()); - String url = String.format(apiBridgeHandler.getTempoUrl(), dtStart, dtEnd); + String url = String.format(linkyBridgeHandler.getTempoUrl(), dtStart, dtEnd); if (url.isEmpty()) { return new TempoResponse(); } - if (!apiBridgeHandler.isConnected()) { - apiBridgeHandler.initialize(); + if (!linkyBridgeHandler.isConnected()) { + linkyBridgeHandler.initialize(); } String data = getData(handler, url); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContractDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContractDetails.java new file mode 100644 index 00000000000..91cd6840748 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContractDetails.java @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.linky.internal.dto; + +import org.eclipse.jetty.jaas.spi.UserInfo; + +import com.google.gson.annotations.SerializedName; + +/** + * The {@link UserInfo} holds informations about energy delivery point + * + * @author Laurent Arnal - Initial contribution + */ + +public class ContractDetails { + public String segment; + + @SerializedName("subscribed_power") + public String subscribedPower; + + @SerializedName("last_activation_date") + public String lastActivationDate; + + @SerializedName("distribution_tariff") + public String distributionTariff; + + @SerializedName("offpeak_hours") + public String offpeakHours; + + @SerializedName("contract_status") + public String contractStatus; + + @SerializedName("contract_type") + public String contractType; + + @SerializedName("last_distribution_tariff_change_date") + public String lastDistributionTariffChangeDate; +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java index 2a04cbe0618..47aa9d13890 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.linky.internal.dto; +import java.util.Arrays; + import org.eclipse.jetty.jaas.spi.UserInfo; import com.google.gson.annotations.SerializedName; @@ -19,30 +21,48 @@ import com.google.gson.annotations.SerializedName; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Laurent Arnal - Initial contribution + * @author Gaël L'hopital - Initial contribution + * @author Laurent Arnal - Rewrite addon to use official dataconect API */ public class Contracts { - public String segment; + @SerializedName("customer_id") + public String customerId; - @SerializedName("subscribed_power") - public String subscribedPower; + @SerializedName("usage_points") + public UsagePoint[] usagePoints; - @SerializedName("last_activation_date") - public String lastActivationDate; + public static Contracts fromWebPrmInfos(WebPrmInfo[] webPrmsInfo, String prmId) { + Contracts result = new Contracts(); - @SerializedName("distribution_tariff") - public String distributionTariff; + WebPrmInfo webPrmInfo = Arrays.stream(webPrmsInfo).filter(x -> x.prmId.equals(prmId)).findAny().orElseThrow(); - @SerializedName("offpeak_hours") - public String offpeakHours; + result.usagePoints = new UsagePoint[1]; + result.usagePoints[0] = new UsagePoint(); - @SerializedName("contract_status") - public String contractStatus; + result.usagePoints[0].usagePoint = new UsagePointDetails(); + result.usagePoints[0].usagePoint.meterType = ""; + result.usagePoints[0].usagePoint.usagePointId = ""; + result.usagePoints[0].usagePoint.usagePointStatus = ""; - @SerializedName("contract_type") - public String contractType; + result.usagePoints[0].usagePoint.usagePointAddresses = new AddressInfo(); + result.usagePoints[0].usagePoint.usagePointAddresses.city = webPrmInfo.adresse.adresseLigneSix; + result.usagePoints[0].usagePoint.usagePointAddresses.country = webPrmInfo.adresse.adresseLigneSept; + result.usagePoints[0].usagePoint.usagePointAddresses.inseeCode = ""; + result.usagePoints[0].usagePoint.usagePointAddresses.locality = ""; + result.usagePoints[0].usagePoint.usagePointAddresses.postalCode = webPrmInfo.adresse.adresseLigneSix; + result.usagePoints[0].usagePoint.usagePointAddresses.street = webPrmInfo.adresse.adresseLigneQuatre; - @SerializedName("last_distribution_tariff_change_date") - public String lastDistributionTariffChangeDate; + result.usagePoints[0].contracts = new ContractDetails(); + result.usagePoints[0].contracts.contractStatus = ""; + result.usagePoints[0].contracts.contractType = ""; + result.usagePoints[0].contracts.distributionTariff = ""; + result.usagePoints[0].contracts.lastActivationDate = ""; + result.usagePoints[0].contracts.lastDistributionTariffChangeDate = ""; + result.usagePoints[0].contracts.offpeakHours = ""; + result.usagePoints[0].contracts.segment = webPrmInfo.segment; + result.usagePoints[0].contracts.subscribedPower = "" + webPrmInfo.puissanceSouscrite; + + return result; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java deleted file mode 100644 index b79a551d877..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Customer.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -import java.util.Arrays; - -import org.eclipse.jetty.jaas.spi.UserInfo; - -import com.google.gson.annotations.SerializedName; - -/** - * The {@link UserInfo} holds informations about energy delivery point - * - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API - */ - -public class Customer { - @SerializedName("customer_id") - public String customerId; - - @SerializedName("usage_points") - public UsagePoint[] usagePoints; - - public static Customer fromWebPrmInfos(WebPrmInfo[] webPrmsInfo, String prmId) { - Customer result = new Customer(); - - WebPrmInfo webPrmInfo = Arrays.stream(webPrmsInfo).filter(x -> x.prmId.equals(prmId)).findAny().orElseThrow(); - - result.usagePoints = new UsagePoint[1]; - result.usagePoints[0] = new UsagePoint(); - - result.usagePoints[0].usagePoint = new UsagePointDetails(); - result.usagePoints[0].usagePoint.meterType = ""; - result.usagePoints[0].usagePoint.usagePointId = ""; - result.usagePoints[0].usagePoint.usagePointStatus = ""; - - result.usagePoints[0].usagePoint.usagePointAddresses = new AddressInfo(); - result.usagePoints[0].usagePoint.usagePointAddresses.city = webPrmInfo.adresse.adresseLigneSix; - result.usagePoints[0].usagePoint.usagePointAddresses.country = webPrmInfo.adresse.adresseLigneSept; - result.usagePoints[0].usagePoint.usagePointAddresses.inseeCode = ""; - result.usagePoints[0].usagePoint.usagePointAddresses.locality = ""; - result.usagePoints[0].usagePoint.usagePointAddresses.postalCode = webPrmInfo.adresse.adresseLigneSix; - result.usagePoints[0].usagePoint.usagePointAddresses.street = webPrmInfo.adresse.adresseLigneQuatre; - - result.usagePoints[0].contracts = new Contracts(); - result.usagePoints[0].contracts.contractStatus = ""; - result.usagePoints[0].contracts.contractType = ""; - result.usagePoints[0].contracts.distributionTariff = ""; - result.usagePoints[0].contracts.lastActivationDate = ""; - result.usagePoints[0].contracts.lastDistributionTariffChangeDate = ""; - result.usagePoints[0].contracts.offpeakHours = ""; - result.usagePoints[0].contracts.segment = webPrmInfo.segment; - result.usagePoints[0].contracts.subscribedPower = "" + webPrmInfo.puissanceSouscrite; - - return result; - } -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java index 1215134483b..e940fff4660 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java @@ -22,5 +22,5 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class CustomerReponse { - public Customer customer; + public Contracts customer; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java index aec269a4137..d2413001cf3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java @@ -25,7 +25,7 @@ public class PrmInfo { public PrmInfo() { customerId = ""; - contractInfo = new Contracts(); + contractInfo = new ContractDetails(); identityInfo = new IdentityInfo(); addressInfo = new AddressInfo(); contactInfo = new ContactInfo(); @@ -35,7 +35,7 @@ public class PrmInfo { public String prmId; public String customerId; - public Contracts contractInfo; + public ContractDetails contractInfo; public UsagePointDetails usagePointInfo; public ContactInfo contactInfo; public AddressInfo addressInfo; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index 235b6cd965e..6cafa867629 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -26,5 +26,5 @@ import com.google.gson.annotations.SerializedName; public class UsagePoint { @SerializedName("usage_point") public UsagePointDetails usagePoint; - public Contracts contracts; + public ContractDetails contracts; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 9257e84d282..b64c2a39386 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -17,28 +17,23 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; import java.util.List; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.util.ssl.SslContextFactory; import org.openhab.binding.linky.internal.LinkyAuthServlet; import org.openhab.binding.linky.internal.LinkyBindingConstants; -import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; -import org.openhab.binding.linky.internal.api.EnedisHttpApi; +import org.openhab.binding.linky.internal.dto.Contracts; +import org.openhab.binding.linky.internal.dto.CustomerIdResponse; +import org.openhab.binding.linky.internal.dto.CustomerReponse; +import org.openhab.binding.linky.internal.dto.IdentityInfo; import org.openhab.core.auth.client.oauth2.AccessTokenResponse; import org.openhab.core.auth.client.oauth2.OAuthClientService; import org.openhab.core.auth.client.oauth2.OAuthException; @@ -46,16 +41,10 @@ import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.auth.client.oauth2.OAuthResponseException; import org.openhab.core.config.core.Configuration; import org.openhab.core.io.net.http.HttpClientFactory; -import org.openhab.core.io.net.http.TrustAllTrustManager; import org.openhab.core.thing.Bridge; -import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingRegistry; import org.openhab.core.thing.ThingStatus; -import org.openhab.core.thing.ThingStatusDetail; -import org.openhab.core.thing.binding.BaseBridgeHandler; -import org.openhab.core.types.Command; -import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Reference; import org.osgi.service.http.HttpService; @@ -64,6 +53,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; /** * {@link ApiBridgeHandler} is the base handler to access enedis data. @@ -71,65 +61,21 @@ import com.google.gson.Gson; * @author Laurent Arnal - Initial contribution */ @NonNullByDefault -public abstract class ApiBridgeHandler extends BaseBridgeHandler { +public abstract class ApiBridgeHandler extends LinkyBridgeHandler { private final Logger logger = LoggerFactory.getLogger(ApiBridgeHandler.class); - private static final int REQUEST_BUFFER_SIZE = 8000; - - private HttpService httpService; - private BundleContext bundleContext; - - protected final HttpClient httpClient; - protected EnedisHttpApi enedisApi; private OAuthClientService oAuthService; - protected final ThingRegistry thingRegistry; private static @Nullable HttpServlet servlet; - protected LinkyConfiguration config; private static final String TEMPLATE_PATH = "templates/"; private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; - protected final Gson gson; - - protected boolean connected = false; - public ApiBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { - super(bridge); - SslContextFactory sslContextFactory = new SslContextFactory.Client(); - try { - SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[] { TrustAllTrustManager.getInstance() }, null); - sslContextFactory.setSslContext(sslContext); - - } catch (NoSuchAlgorithmException e) { - logger.warn("An exception occurred while requesting the SSL encryption algorithm : '{}'", e.getMessage(), - e); - } catch (KeyManagementException e) { - logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); - } - - this.gson = gson; - this.httpService = httpService; - this.thingRegistry = thingRegistry; - this.bundleContext = componentContext.getBundleContext(); - - this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); - this.httpClient.setFollowRedirects(false); - this.httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); - - try { - httpClient.start(); - } catch (Exception e) { - logger.warn("Unable to start Jetty HttpClient {}", e.getMessage()); - } - - this.enedisApi = new EnedisHttpApi(this, gson, this.httpClient); - - config = getConfigAs(LinkyConfiguration.class); + super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); String tokenUrl = ""; String authorizeUrl = ""; @@ -139,7 +85,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { } else if (this instanceof EnedisBridgeHandler) { tokenUrl = LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD; authorizeUrl = LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD; - } this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, tokenUrl, @@ -150,72 +95,10 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { updateStatus(ThingStatus.UNKNOWN); } - public @Nullable EnedisHttpApi getEnedisApi() { - return enedisApi; - } - public abstract String getClientId(); public abstract String getClientSecret(); - @Override - public void initialize() { - logger.debug("Initializing Linky API bridge handler."); - - updateStatus(ThingStatus.UNKNOWN); - - scheduler.submit(() -> { - try { - connectionInit(); - updateStatus(ThingStatus.ONLINE); - } catch (LinkyException e) { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); - } - }); - } - - protected abstract void connectionInit() throws LinkyException; - - public boolean isConnected() { - return connected; - } - - public void disconnect() { - if (connected) { - logger.debug("Logout process"); - connected = false; - httpClient.getCookieStore().removeAll(); - } - } - - @Override - public void dispose() { - logger.debug("Shutting down Netatmo API bridge handler."); - disconnect(); - - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); - - super.dispose(); - } - - /* - * @Override - * protected void deactivate(ComponentContext componentContext) { - * super.deactivate(componentContext); - * try { - * httpClient.stop(); - * } catch (Exception e) { - * logger.warn("Unable to stop Jetty HttpClient {}", e.getMessage()); - * } - * } - */ - - @Override - public void handleCommand(ChannelUID channelUID, Command command) { - // TODO Auto-generated method stub - } - private void registerServlet() { try { if (servlet == null) { @@ -291,8 +174,6 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { && accessTokenResponse.getRefreshToken() != null; } - public abstract String getToken(LinkyHandler handler) throws LinkyException; - protected @Nullable AccessTokenResponse getAccessTokenByClientCredentials() { try { return oAuthService.getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); @@ -339,27 +220,32 @@ public abstract class ApiBridgeHandler extends BaseBridgeHandler { return result; } - public abstract double getDivider(); + @Override + public Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException { + try { + CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); + if (cResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return cResponse.customer; + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching CustomerReponse.class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); + } + } - public abstract String getBaseUrl(); + @Override + public IdentityInfo decodeIdentityResponse(String data, String prmId) throws LinkyException { + try { + CustomerIdResponse iResponse = gson.fromJson(data, CustomerIdResponse.class); + if (iResponse == null) { + throw new LinkyException("Invalid customer data received"); + } + return iResponse.identity.naturalPerson; + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching CustomerIdResponse.class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); + } + } - public abstract String getContactUrl(); - - public abstract String getContractUrl(); - - public abstract String getIdentityUrl(); - - public abstract String getAddressUrl(); - - public abstract String getDailyConsumptionUrl(); - - public abstract String getMaxPowerUrl(); - - public abstract String getLoadCurveUrl(); - - public abstract String getTempoUrl(); - - public abstract DateTimeFormatter getApiDateFormat(); - - public abstract DateTimeFormatter getApiDateFormatYearsFirst(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 0d3eb7a1ff3..6ac0afd3f6d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -160,4 +160,5 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index e44d24a6f25..289868fa687 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -31,6 +31,10 @@ import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AuthData; import org.openhab.binding.linky.internal.dto.AuthResult; +import org.openhab.binding.linky.internal.dto.Contracts; +import org.openhab.binding.linky.internal.dto.IdentityInfo; +import org.openhab.binding.linky.internal.dto.WebPrmInfo; +import org.openhab.binding.linky.internal.dto.WebUserInfo; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; @@ -51,7 +55,7 @@ import com.google.gson.JsonSyntaxException; * */ @NonNullByDefault -public class EnedisWebBridgeHandler extends ApiBridgeHandler { +public class EnedisWebBridgeHandler extends LinkyBridgeHandler { private final Logger logger = LoggerFactory.getLogger(EnedisWebBridgeHandler.class); public static final String ENEDIS_DOMAIN = ".enedis.fr"; @@ -96,16 +100,6 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { super.initialize(); } - @Override - public String getClientId() { - return config.clientId; - } - - @Override - public String getClientSecret() { - return config.clientSecret; - } - @Override public String getToken(LinkyHandler handler) throws LinkyException { return ""; @@ -254,4 +248,30 @@ public class EnedisWebBridgeHandler extends ApiBridgeHandler { throw new LinkyException(e, "Error opening connection with Enedis webservice"); } } + + @Override + public Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException { + try { + WebPrmInfo[] webPrmsInfo = gson.fromJson(data, WebPrmInfo[].class); + if (webPrmsInfo == null || webPrmsInfo.length < 1) { + throw new LinkyException("Invalid prms data received"); + } + return Contracts.fromWebPrmInfos(webPrmsInfo, prmId); + + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); + } + } + + @Override + public IdentityInfo decodeIdentityResponse(String data, String prmId) throws LinkyException { + try { + WebUserInfo webUserInfo = gson.fromJson(data, WebUserInfo.class); + return IdentityInfo.fromWebUserInfo(webUserInfo); + } catch (JsonSyntaxException e) { + logger.debug("invalid JSON response not matching UserInfo.class: {}", data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); + } + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java new file mode 100644 index 00000000000..3e250f53dfd --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -0,0 +1,186 @@ +package org.openhab.binding.linky.internal.handler; + +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.time.format.DateTimeFormatter; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.openhab.binding.linky.internal.LinkyBindingConstants; +import org.openhab.binding.linky.internal.LinkyConfiguration; +import org.openhab.binding.linky.internal.LinkyException; +import org.openhab.binding.linky.internal.api.EnedisHttpApi; +import org.openhab.binding.linky.internal.dto.Contracts; +import org.openhab.binding.linky.internal.dto.IdentityInfo; +import org.openhab.core.auth.client.oauth2.OAuthFactory; +import org.openhab.core.io.net.http.HttpClientFactory; +import org.openhab.core.io.net.http.TrustAllTrustManager; +import org.openhab.core.thing.Bridge; +import org.openhab.core.thing.ChannelUID; +import org.openhab.core.thing.ThingRegistry; +import org.openhab.core.thing.ThingStatus; +import org.openhab.core.thing.ThingStatusDetail; +import org.openhab.core.thing.binding.BaseBridgeHandler; +import org.openhab.core.types.Command; +import org.osgi.framework.BundleContext; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.http.HttpService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; + +@NonNullByDefault +public abstract class LinkyBridgeHandler extends BaseBridgeHandler { + private final Logger logger = LoggerFactory.getLogger(LinkyBridgeHandler.class); + + protected HttpService httpService; + protected BundleContext bundleContext; + protected final HttpClient httpClient; + protected EnedisHttpApi enedisApi; + protected final ThingRegistry thingRegistry; + + protected LinkyConfiguration config; + protected final Gson gson; + protected boolean connected = false; + + private static final int REQUEST_BUFFER_SIZE = 8000; + + public LinkyBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, + final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, + final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { + super(bridge); + + SslContextFactory sslContextFactory = new SslContextFactory.Client(); + try { + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, new TrustManager[] { TrustAllTrustManager.getInstance() }, null); + sslContextFactory.setSslContext(sslContext); + + } catch (NoSuchAlgorithmException e) { + logger.warn("An exception occurred while requesting the SSL encryption algorithm : '{}'", e.getMessage(), + e); + } catch (KeyManagementException e) { + logger.warn("An exception occurred while initialising the SSL context : '{}'", e.getMessage(), e); + } + + this.gson = gson; + this.httpService = httpService; + this.thingRegistry = thingRegistry; + this.bundleContext = componentContext.getBundleContext(); + + this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); + this.httpClient.setFollowRedirects(false); + this.httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); + + try { + httpClient.start(); + } catch (Exception e) { + logger.warn("Unable to start Jetty HttpClient {}", e.getMessage()); + } + + this.enedisApi = new EnedisHttpApi(this, gson, this.httpClient); + + config = getConfigAs(LinkyConfiguration.class); + + String tokenUrl = ""; + String authorizeUrl = ""; + if (this instanceof MyElectricalDataBridgeHandler) { + tokenUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_API_TOKEN_URL; + authorizeUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_AUTHORIZE_URL; + } else if (this instanceof EnedisBridgeHandler) { + tokenUrl = LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD; + authorizeUrl = LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD; + + } + + updateStatus(ThingStatus.UNKNOWN); + } + + @Override + public void initialize() { + logger.debug("Initializing Linky API bridge handler."); + + updateStatus(ThingStatus.UNKNOWN); + + scheduler.submit(() -> { + try { + connectionInit(); + updateStatus(ThingStatus.ONLINE); + } catch (LinkyException e) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); + } + }); + } + + protected abstract void connectionInit() throws LinkyException; + + public boolean isConnected() { + return connected; + } + + public void disconnect() { + if (connected) { + logger.debug("Logout process"); + connected = false; + httpClient.getCookieStore().removeAll(); + } + } + + public @Nullable EnedisHttpApi getEnedisApi() { + return enedisApi; + } + + @Override + public void dispose() { + logger.debug("Shutting down Linky API bridge handler."); + disconnect(); + + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); + + super.dispose(); + } + + public abstract String getToken(LinkyHandler handler) throws LinkyException; + + @Override + public void handleCommand(ChannelUID channelUID, Command command) { + // TODO Auto-generated method stub + } + + public abstract double getDivider(); + + public abstract String getBaseUrl(); + + public abstract String getContactUrl(); + + public abstract String getContractUrl(); + + public abstract String getIdentityUrl(); + + public abstract String getAddressUrl(); + + public abstract String getDailyConsumptionUrl(); + + public abstract String getMaxPowerUrl(); + + public abstract String getLoadCurveUrl(); + + public abstract String getTempoUrl(); + + public abstract DateTimeFormatter getApiDateFormat(); + + public abstract DateTimeFormatter getApiDateFormatYearsFirst(); + + public abstract Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException; + + public abstract IdentityInfo decodeIdentityResponse(String data, String prmId) throws LinkyException; + +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index a655d4559e3..28d8e53bd00 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -162,7 +162,7 @@ public class LinkyHandler extends BaseThingHandler { return; } - ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) bridge.getHandler(); + LinkyBridgeHandler bridgeHandler = (LinkyBridgeHandler) bridge.getHandler(); if (bridgeHandler == null) { return; } @@ -588,7 +588,7 @@ public class LinkyHandler extends BaseThingHandler { private boolean isConnected() { Bridge bridge = getBridge(); if (bridge != null) { - ApiBridgeHandler bridgeHandler = (ApiBridgeHandler) bridge.getHandler(); + LinkyBridgeHandler bridgeHandler = (LinkyBridgeHandler) bridge.getHandler(); if (bridgeHandler == null) { return false; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 0b54d74d775..d912d26ab4b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -201,4 +201,5 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } + } From 6cff83e42e4747bd52e4f944a81362687c2046f9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 11:55:51 +0200 Subject: [PATCH 064/135] mvn spotless:apply Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/handler/ApiBridgeHandler.java | 1 - .../binding/linky/internal/handler/EnedisBridgeHandler.java | 1 - .../binding/linky/internal/handler/LinkyBridgeHandler.java | 1 - .../linky/internal/handler/MyElectricalDataBridgeHandler.java | 1 - 4 files changed, 4 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index b64c2a39386..d0f86a80c4d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -247,5 +247,4 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); } } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 6ac0afd3f6d..0d3eb7a1ff3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -160,5 +160,4 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 3e250f53dfd..62de854d9d5 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -182,5 +182,4 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { public abstract Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException; public abstract IdentityInfo decodeIdentityResponse(String data, String prmId) throws LinkyException; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index d912d26ab4b..0b54d74d775 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -201,5 +201,4 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } - } From bda53f3dcf4e766f1a76c86161ac82e3ffa27270 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 11:57:28 +0200 Subject: [PATCH 065/135] code cleanup Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyBridgeHandler.java | 11 ----------- .../binding/linky/internal/handler/LinkyHandler.java | 1 - 2 files changed, 12 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 62de854d9d5..d1938129595 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -89,17 +89,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { config = getConfigAs(LinkyConfiguration.class); - String tokenUrl = ""; - String authorizeUrl = ""; - if (this instanceof MyElectricalDataBridgeHandler) { - tokenUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_API_TOKEN_URL; - authorizeUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_AUTHORIZE_URL; - } else if (this instanceof EnedisBridgeHandler) { - tokenUrl = LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD; - authorizeUrl = LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD; - - } - updateStatus(ThingStatus.UNKNOWN); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 28d8e53bd00..084e75ea77e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -401,7 +401,6 @@ public class LinkyHandler extends BaseThingHandler { */ private synchronized void updateLoadCurveData() { loadCurveConsumption.getValue().ifPresentOrElse(values -> { - int dSize = values.dayValue.length; updatePowerTimeSeries(LOAD_CURVE, values.dayValue); }, () -> { }); From 4acbd828ce923c46a3b4adc80c22b1fd4c7392bb Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 12:06:10 +0200 Subject: [PATCH 066/135] fix missing headers Signed-off-by: Laurent ARNAL --- .../internal/handler/LinkyBridgeHandler.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index d1938129595..9f2fce1e1eb 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -1,3 +1,15 @@ +/** + * Copyright (c) 2010-2024 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ package org.openhab.binding.linky.internal.handler; import java.security.KeyManagementException; @@ -36,6 +48,11 @@ import org.slf4j.LoggerFactory; import com.google.gson.Gson; +/** + * {@link LinkyBridgeHandler} is the base handler to access enedis data. + * + * @author Laurent Arnal - Initial contribution + */ @NonNullByDefault public abstract class LinkyBridgeHandler extends BaseBridgeHandler { private final Logger logger = LoggerFactory.getLogger(LinkyBridgeHandler.class); From 087c4a8bc8564f9416f58cb1485a2d053ba33a53 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 14:48:26 +0200 Subject: [PATCH 067/135] start reviewing the documentation Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 243 ++++++++++++++++-- .../doc/GraphConso.png | Bin 0 -> 39058 bytes .../doc/TempoGraph.png | Bin 0 -> 60646 bytes .../MyElectricalDataBridgeHandler.java | 1 + 4 files changed, 226 insertions(+), 18 deletions(-) create mode 100644 bundles/org.openhab.binding.linky/doc/GraphConso.png create mode 100644 bundles/org.openhab.binding.linky/doc/TempoGraph.png diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 1f7aa92d1ee..441b2cab81b 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -1,27 +1,42 @@ # Linky Binding This binding uses the API provided by Enedis to retrieve your energy consumption data. -You need to create an Enedis account [here](https://espace-client-connexion.enedis.fr/auth/UI/Login?realm=particuliers) if you don't have one already. +You need to create an Enedis account [here](https://mon-compte-client.enedis.fr/) if you don't have one already. Please ensure that you have accepted their conditions, and check that you can see graphs on the website. Especially, check hourly view/graph. Enedis may ask for permission the first time to start collecting hourly data. + The binding will not provide these informations unless this step is ok. +This new binding version is able to use multiple bridge to access the consumption data. +You can use : + +- The EnedisWebBridge : this one will use the old Enedis API, base on the enedis web site to gather the data. +- The MyElectricalDataBridge : this one will use the new Rest Enedis API. We will use the MyElectricalData proxy site to access the data. +- The EnedisBridge : this one will also use the new Rest Enedis API, and will directly gather data from Enedis Site. + +There is advantage and disadvantage for each method. + +- EnedisWebBridge is the old way to go. + ## Supported Things There is one supported thing : the `linky` thing is retrieving the consumption of your home from the [Linky electric meter](https://www.enedis.fr/linky-compteur-communicant). +You can have multiple linky thing in your setup if you have different house / linky linked to your account. + + ## Discovery This binding does not provide discovery service. ## Binding Configuration -The binding has no configuration options, all configuration is done at Thing level. +To retrieve data, Linky thing will be need to be linked to a LinkyBridge. LinkyBridge can be today select between EnedisWebBridge, MyElectricalDataBridge and EnedisBridge. -## Thing Configuration - -The thing has the following configuration parameters: +If you select EnedisWebBridge, you will need : +- To create an Enedis account : https://mon-compte-client.enedis.fr/ +- To fill the bridge with you information : username, Password, and also InternalAuthId. | Parameter | Description | |----------------|--------------------------------| @@ -29,7 +44,7 @@ The thing has the following configuration parameters: | password | Your Enedis platform password. | | internalAuthId | The internal authID | -This version is now compatible with the new API of Enedis (deployed from june 2020). +This version is now compatible with the new version of Enedis WEB API (deployed from june 2020). To avoid the captcha login, it is necessary to log before on a classical browser (e.g Chrome, Firefox) and to retrieve the user cookies (internalAuthId). Instructions given for Firefox : @@ -43,21 +58,213 @@ Instructions given for Firefox : 1. Disconnect from your Enedis account 1. Repeat steps 1, 2. You should arrive directly on step 5, then open the developer tool window (F12) and select "Stockage" tab. In the "Cookies" entry, select "https://mon-compte-enedis.fr". You'll find an entry named "internalAuthId", copy this value in your openHAB configuration. + +If you select MyElectricalDataBridge, you will need : +- To create an Enedis account : https://mon-compte-client.enedis.fr/ +- To do a consent request on the MyElectricalData site : https://www.myelectricaldata.fr/ +- To fill the token provided by MyElectricalData into your Linky things config. + +These steps can also be done using the connectlinky page available from your openhab: http://localhost:8080/connectlinky. +You're wil have: +- to select your PrmId from the combobox. +- to click the "Authorized Bridge". +- to follow the authorized process on the enedis page : please select only one prmId there as the token is specific to each Linky. +- then go back to the /connectlinky page, and click on the "Retrieve token" link to fill the Linky things with the token. + + +## Thing Configuration + +The thing has the following configuration parameters: + +| Parameter | Description | +|----------------|---------------------------------------------------------------------------------------------| +| PrmId | The PrmId link to the linky Handler. | +| token | Optional : need if a token necessary to access this Linky thing (use for MyElectricaldata) | + + ## Channels -The information that is retrieved is available as these channels: +The information that is retrieved is available as many different groups. + +- The Main group will give information about the contract linked to this linky. +You will find the following channel: + +| Channel ID | Item Type | Description | +|---------------------------------------------------|----------------|-----------------------------------------------| +| main#identitiy | String | The full name of the contract older | +| main#contractSubscribedPower | String | The subscribed max Power | +| main#contractLastActivationDate | String | | +| main#contractDistributionTariff | String | | +| main#contractOffpeakHours | String | The OffPeakHour link to your contract | +| main#contractLastDistributionTariffChangeDate | String | | +| main#contractSegment | String | | +| main#usagePointId | String | | +| main#usagePointStatus | String | | +| main#usagePointMeterType | String | | +| main#usagePointAddressCity | String | | +| main#usagePointAddressCountry | String | | +| main#usagePointAddressInseeCode | String | | +| main#usagePointAddressPostalCode | String | | +| main#usagePointAddressStreet | String | | +| main#contactMail | String | | +| main#contactPhone | String | | + + +- The tempo group will give information about the tempo day color link to a tempo contract + +| Channel ID | Item Type | Description | +|---------------------------------------------------|----------------|----------------------------------------------------------------------------| +| tempo#tempoInfoToday | String | The tempo color for the current day | +| tempo#tempoInfoTomorrow | String | The tempo color for the tomorrow | +| tempo#tempoInfoTimeSeries | String | A timeseries channel that will expose full tempo information for one year | + + +Using the timeseries channel, you will be able to esealy create a calendar graph to show the tempo calendar. +You will need for this to enable a timeseries persistence framework. +Graph definitions will look like this + +```java +config: + chartType: month + future: false + label: Tempo + period: M + sidebar: true +slots: + calendar: + - component: oh-calendar-axis + config: + cellSize: 10 + dayLabel: + firstDay: 1 + fontSize: 16 + margin: 20 + left: center + monthLabel: + color: "#c0c0ff" + fontSize: 30 + margin: 20 + orient: vertical + top: middle + yearLabel: + color: "#c0c0ff" + fontSize: 30 + margin: 50 + dataZoom: + - component: oh-chart-datazoom + config: + orient: horizontal + show: true + type: slider + grid: [] + legend: + - component: oh-chart-legend + config: + show: false + series: + - component: oh-calendar-series + config: + aggregationFunction: average + calendarIndex: 0 + coordinateSystem: calendar + item: Linky_Melody_Tempo + label: + formatter: =v=> JSON.stringify(v.data[0]).substring(1,11) + show: true + smartFormatter: false + name: Series 1 + service: inmemory + type: heatmap + title: + - component: oh-chart-title + config: + show: true + text: Calendrier Tempo + toolbox: + - component: oh-chart-toolbox + config: + presetFeatures: + - saveAsImage + - restore + - dataView + - dataZoom + - magicType + show: true + tooltip: + - component: oh-chart-tooltip + config: + formatter: "{c}" + show: true + visualMap: + - component: oh-chart-visualmap + config: + bottom: 0 + calculable: true + inRange: + color: + - "#0000ff" + - "#ffffff" + - "#ff0000" + left: center + max: 2 + min: 0 + orient: horizontal + presetPalette: "" + show: false + type: continuous + xAxis: [] + yAxis: [] + +``` + +The resulting graph will look like this: + +![TempoGraph](doc/TempoGraph.png) + + +| Channel ID | Item Type | Description | +|-----------------------|---------------|---------------------------------------| +| daily#yesterday | Number:Energy | Yesterday energy usage | +| daily#day-2 | Number:Energy | Day-2 energy usage | +| daily#day-3 | Number:Energy | Day-3 energy usage | +| daily#consumption | Number:Energy | timeseries for consumption | +| daily#power | Number:Power | Yesterday's peak power usage | +| daily#timestamp | DateTime | Timestamp of the power peak | +| daily#power-2 | Number:Power | Day-2's peak power usage | +| daily#timestamp-2 | DateTime | Timestamp Day-2's of the power peak | +| daily#power-3 | Number:Power | Day-3's peak power usage | +| daily#timestamp-3 | DateTime | Timestamp Day-3's of the power peak | +| daily#mawPower | Number:Power | timeseries for maxPower | + + +| Channel ID | Item Type | Description | +|-----------------------|---------------|------------------------------| +| weekly#thisWeek | Number:Energy | Current week energy usage | +| weekly#lastWeek | Number:Energy | Last week energy usage | +| weekly#week-2 | Number:Energy | Last week energy usage | +| weekly#consumption | Number:Energy | Last week energy usage | +| weekly#maxPower | Number:Energy | Last week energy usage | + + +| Channel ID | Item Type | Description | +|-----------------------|---------------|------------------------------| +| monthly#thisMonth | Number:Energy | Current month energy usage | +| monthly#lastMonth | Number:Energy | Last month energy usage | +| monthly#month-2 | Number:Energy | Last month energy usage | +| monthly#consumption | Number:Energy | Last month energy usage | +| monthly#maxPower | Number:Energy | Last month energy usage | + +| Channel ID | Item Type | Description | +|-----------------------|---------------|------------------------------| +| yearly#thisYear | Number:Energy | Current year energy usage | +| yearly#lastYear | Number:Energy | Last year energy usage | +| yearly#year-2 | Number:Energy | year-2 energy usage | +| yearly#consumption | Number:Energy | Last year energy usage | +| yearly#maxPower | Number:Energy | Last year energy usage | + +![TempoGraph](doc/GraphConso.png) + -| Channel ID | Item Type | Description | -|-------------------|---------------|------------------------------| -| daily#yesterday | Number:Energy | Yesterday energy usage | -| daily#power | Number:Power | Yesterday's peak power usage | -| daily#timestamp | DateTime | Timestamp of the power peak | -| weekly#thisWeek | Number:Energy | Current week energy usage | -| weekly#lastWeek | Number:Energy | Last week energy usage | -| monthly#thisMonth | Number:Energy | Current month energy usage | -| monthly#lastMonth | Number:Energy | Last month energy usage | -| yearly#thisYear | Number:Energy | Current year energy usage | -| yearly#lastYear | Number:Energy | Last year energy usage | ## Console Commands diff --git a/bundles/org.openhab.binding.linky/doc/GraphConso.png b/bundles/org.openhab.binding.linky/doc/GraphConso.png new file mode 100644 index 0000000000000000000000000000000000000000..686adaae6ee222fcad6f36b3ae8cba4fb59bf916 GIT binary patch literal 39058 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%0DxzkfFIgyF%EMO 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 Lk5(T!`^*0W;-o~g literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.linky/doc/TempoGraph.png b/bundles/org.openhab.binding.linky/doc/TempoGraph.png new file mode 100644 index 0000000000000000000000000000000000000000..f84f624cb699abd5929a555d343922e04d2d266a GIT binary patch literal 60646 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

`}eYSM0Gfc` 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 WPIufJY9^yKKT+3JD}D4l Date: Sun, 18 Aug 2024 16:00:34 +0200 Subject: [PATCH 068/135] review Handler initializisation to prevent concurrency and errors Signed-off-by: Laurent ARNAL --- .../internal/handler/ApiBridgeHandler.java | 8 ++ .../internal/handler/LinkyBridgeHandler.java | 6 +- .../linky/internal/handler/LinkyHandler.java | 77 +++++++++++-------- 3 files changed, 56 insertions(+), 35 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index d0f86a80c4d..1ffea039422 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -115,6 +115,14 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { } } + @Override + public void dispose() { + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); + httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); + + super.dispose(); + } + /** * Creates a new {@link LinkyAuthServlet}. * diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 9f2fce1e1eb..2c2d26bde76 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -110,7 +110,7 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { } @Override - public void initialize() { + public synchronized void initialize() { logger.debug("Initializing Linky API bridge handler."); updateStatus(ThingStatus.UNKNOWN); @@ -147,10 +147,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { public void dispose() { logger.debug("Shutting down Linky API bridge handler."); disconnect(); - - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS); - httpService.unregister(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS); - super.dispose(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 084e75ea77e..6b9fdc9b02f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -91,6 +91,8 @@ public class LinkyHandler extends BaseThingHandler { private @Nullable EnedisHttpApi enedisApi; private double divider = 1.00; + private @Nullable ScheduledFuture pollingJob = null; + private enum Target { FIRST, LAST, @@ -154,7 +156,7 @@ public class LinkyHandler extends BaseThingHandler { } @Override - public void initialize() { + public synchronized void initialize() { logger.debug("Initializing Linky handler."); Bridge bridge = getBridge(); @@ -172,41 +174,50 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.UNKNOWN); if (config.seemsValid()) { - scheduler.submit(() -> { - try { - - EnedisHttpApi api = this.enedisApi; - - if (api != null) { - PrmInfo prmInfo = api.getPrmInfo(this, config.prmId); - updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, - prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); - - updateMetaData(); - updateData(); - - disconnect(); - - final LocalDateTime now = LocalDateTime.now(); - final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) - .truncatedTo(ChronoUnit.HOURS); - - updateStatus(ThingStatus.ONLINE); - - refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, - ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, - REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); - } - } catch (LinkyException e) { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); - } - }); + pollingJob = scheduler.scheduleWithFixedDelay(this::pollingCode, 0, 5, TimeUnit.SECONDS); } else { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, "@text/offline.config-error-mandatory-settings"); } } + private void pollingCode() { + try { + + EnedisHttpApi api = this.enedisApi; + + if (api != null) { + + Bridge lcBridge = getBridge(); + + if (lcBridge == null || lcBridge.getStatus() != ThingStatus.ONLINE) { + return; + } + + PrmInfo prmInfo = api.getPrmInfo(this, config.prmId); + updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, + PRM_ID, prmInfo.prmId)); + + updateMetaData(); + updateData(); + + disconnect(); + + final LocalDateTime now = LocalDateTime.now(); + final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) + .truncatedTo(ChronoUnit.HOURS); + + updateStatus(ThingStatus.ONLINE); + + refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, + ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, + REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); + } + } catch (LinkyException e) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage()); + } + } + public @Nullable LinkyConfiguration getLinkyConfig() { return config; } @@ -608,6 +619,12 @@ public class LinkyHandler extends BaseThingHandler { job.cancel(true); refreshJob = null; } + + ScheduledFuture lcPollingJob = pollingJob; + if (lcPollingJob != null) { + lcPollingJob.cancel(true); + pollingJob = null; + } disconnect(); enedisApi = null; } From 28808d993096e24d22acddf120404bc56ae0ec53 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 16:45:42 +0200 Subject: [PATCH 069/135] fix status in case of error Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/handler/LinkyHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 6b9fdc9b02f..7d6a369bcce 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -207,7 +207,9 @@ public class LinkyHandler extends BaseThingHandler { final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) .truncatedTo(ChronoUnit.HOURS); - updateStatus(ThingStatus.ONLINE); + if (this.getThing().getStatusInfo().getStatusDetail() != ThingStatusDetail.COMMUNICATION_ERROR) { + updateStatus(ThingStatus.ONLINE); + } refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, From 62df7aca75a5bfe40dd8222ab8a1b386643e9e3f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 16:46:09 +0200 Subject: [PATCH 070/135] fix url for MyElectricalDataBridgeHandler Signed-off-by: Laurent ARNAL --- .../internal/handler/MyElectricalDataBridgeHandler.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 61e6a4cf29c..f35c0c8d624 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -49,12 +49,11 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { private static final String IDENTITY_URL = BASE_URL + "identity/%s/cache/"; private static final String CONTACT_URL = BASE_URL + "contact/%s/cache/"; private static final String ADDRESS_URL = BASE_URL + "addresses/%s/cache/"; - private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL - + "daily_consumption/%s/start/%s/end/%s/cache/"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + "daily_consumption/%s/start/%s/end/%s/cache"; private static final String MEASURE_MAX_POWER_URL = BASE_URL - + "daily_consumption_max_power/%s/start/%s/end/%s/cache/"; + + "daily_consumption_max_power/%s/start/%s/end/%s/cache"; private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL - + "consumption_load_curve/%s/start/%s/end/%s/cache/"; + + "consumption_load_curve/%s/start/%s/end/%s/cache"; private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; From aa958b1e5d9cb37cce36be625cf2fd370f2d6d7c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 17:00:41 +0200 Subject: [PATCH 071/135] review checkstyle reports Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 4 ++++ .../linky/internal/dto/MeterReading.java | 2 -- .../internal/handler/ApiBridgeHandler.java | 3 --- .../handler/EnedisWebBridgeHandler.java | 1 - .../internal/handler/LinkyBridgeHandler.java | 2 -- .../linky/internal/handler/LinkyHandler.java | 21 +++++++++---------- .../MyElectricalDataBridgeHandler.java | 1 - 7 files changed, 14 insertions(+), 20 deletions(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 441b2cab81b..877554139bb 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -35,6 +35,7 @@ This binding does not provide discovery service. To retrieve data, Linky thing will be need to be linked to a LinkyBridge. LinkyBridge can be today select between EnedisWebBridge, MyElectricalDataBridge and EnedisBridge. If you select EnedisWebBridge, you will need : + - To create an Enedis account : https://mon-compte-client.enedis.fr/ - To fill the bridge with you information : username, Password, and also InternalAuthId. @@ -60,12 +61,14 @@ Instructions given for Firefox : If you select MyElectricalDataBridge, you will need : + - To create an Enedis account : https://mon-compte-client.enedis.fr/ - To do a consent request on the MyElectricalData site : https://www.myelectricaldata.fr/ - To fill the token provided by MyElectricalData into your Linky things config. These steps can also be done using the connectlinky page available from your openhab: http://localhost:8080/connectlinky. You're wil have: + - to select your PrmId from the combobox. - to click the "Authorized Bridge". - to follow the authorized process on the enedis page : please select only one prmId there as the token is specific to each Linky. @@ -87,6 +90,7 @@ The thing has the following configuration parameters: The information that is retrieved is available as many different groups. - The Main group will give information about the contract linked to this linky. + You will find the following channel: | Channel ID | Item Type | Description | diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index c24e128ce96..5700ce10a79 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -66,7 +66,6 @@ public class MeterReading { } public static IntervalReading[] fromAgregat(ConsumptionReport.Aggregate agregat) { - int size = agregat.datas.size(); IntervalReading[] result = new IntervalReading[size]; @@ -83,7 +82,6 @@ public class MeterReading { } public static IntervalReading[] fromLabelsAndDatas(List labels, List datas) { - int size = datas.size(); IntervalReading[] result = new IntervalReading[size]; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 1ffea039422..a1a54d369b9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -74,7 +74,6 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { public ApiBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { - super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); String tokenUrl = ""; @@ -109,7 +108,6 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { httpService.registerResources(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS, "web", null); } - } catch (NamespaceException | ServletException | IOException e) { logger.warn("Error during linky servlet startup", e); } @@ -158,7 +156,6 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { // this is not the case in v1 as we go trough MyElectricalData try { - logger.debug("Make call to Enedis to get access token."); final AccessTokenResponse credentials = oAuthService .getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 289868fa687..8ef80f640c6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -257,7 +257,6 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { throw new LinkyException("Invalid prms data received"); } return Contracts.fromWebPrmInfos(webPrmsInfo, prmId); - } catch (JsonSyntaxException e) { logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 2c2d26bde76..abe2b76026c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -79,7 +79,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[] { TrustAllTrustManager.getInstance() }, null); sslContextFactory.setSslContext(sslContext); - } catch (NoSuchAlgorithmException e) { logger.warn("An exception occurred while requesting the SSL encryption algorithm : '{}'", e.getMessage(), e); @@ -154,7 +153,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { @Override public void handleCommand(ChannelUID channelUID, Command command) { - // TODO Auto-generated method stub } public abstract double getDivider(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 7d6a369bcce..f6b6d752b41 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -183,12 +183,11 @@ public class LinkyHandler extends BaseThingHandler { private void pollingCode() { try { - EnedisHttpApi api = this.enedisApi; if (api != null) { - Bridge lcBridge = getBridge(); + ScheduledFuture lcPollingJob = pollingJob; if (lcBridge == null || lcBridge.getStatus() != ThingStatus.ONLINE) { return; @@ -211,6 +210,10 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.ONLINE); } + if (lcPollingJob != null) { + lcPollingJob.cancel(false); + } + refreshJob = scheduler.scheduleWithFixedDelay(this::updateData, ChronoUnit.MINUTES.between(now, nextDayFirstTimeUpdate) % REFRESH_INTERVAL_IN_MIN + 1, REFRESH_INTERVAL_IN_MIN, TimeUnit.MINUTES); @@ -259,7 +262,6 @@ public class LinkyHandler extends BaseThingHandler { updateState(MAIN_CONTACT_MAIL, new StringType(info.contactInfo.email)); updateState(MAIN_CONTACT_PHONE, new StringType(info.contactInfo.phone)); - } catch (LinkyException e) { logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); @@ -296,7 +298,6 @@ public class LinkyHandler extends BaseThingHandler { timeSeries.add(timestamp, new DecimalType(getTempoIdx(v))); } catch (ParseException ex) { - } }); @@ -317,13 +318,13 @@ public class LinkyHandler extends BaseThingHandler { private int getTempoIdx(String color) { int val = 0; - if (color.equals("BLUE")) { + if ("BLUE".equals(color)) { val = 0; } - if (color.equals("WHITE")) { + if ("WHITE".equals(color)) { val = 1; } - if (color.equals("RED")) { + if ("RED".equals(color)) { val = 2; } @@ -601,11 +602,9 @@ public class LinkyHandler extends BaseThingHandler { Bridge bridge = getBridge(); if (bridge != null) { LinkyBridgeHandler bridgeHandler = (LinkyBridgeHandler) bridge.getHandler(); - if (bridgeHandler == null) { - return false; + if (bridgeHandler != null) { + return bridgeHandler.isConnected(); } - - return bridgeHandler.isConnected(); } return false; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index f35c0c8d624..e2f6ec8530e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -120,7 +120,6 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { if (handler != null) { handler.saveConfiguration(config); } - } } return token; From 66bb7151851ad8b510625440cd9df9fded2735c2 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 17:07:27 +0200 Subject: [PATCH 072/135] review checkstyle report Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/handler/EnedisBridgeHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 0d3eb7a1ff3..ec395b4ae8d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -88,7 +88,6 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public String getToken(LinkyHandler handler) throws LinkyException { - AccessTokenResponse accesToken = getAccessTokenResponse(); if (accesToken == null) { accesToken = getAccessTokenByClientCredentials(); From 2a1da3d0f78539d1263ec18d85a745e8360231f4 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 17:10:49 +0200 Subject: [PATCH 073/135] div fixes Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 877554139bb..6611ed1c805 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -268,8 +268,6 @@ The resulting graph will look like this: ![TempoGraph](doc/GraphConso.png) - - ## Console Commands The binding provides one specific command you can use in the console. From e046137f6f54dbbd4b81d412b1abc422449883a1 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 18 Aug 2024 17:48:44 +0200 Subject: [PATCH 074/135] fix authorized for myelectricaldata Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/LinkyBindingConstants.java | 2 +- .../binding/linky/internal/handler/ApiBridgeHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 675da484aa8..204d2fac39c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -141,5 +141,5 @@ public class LinkyBindingConstants { public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; - public static final String LINKY_MYELECTRICALDATA_CLIENT_ID = "e551937c-5250-48bc-b4a6-2323af68db92"; + public static final String LINKY_MYELECTRICALDATA_CLIENT_ID = "_h7zLaRr2INxqBI8jhDUQXsa_G4a"; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index a1a54d369b9..6597b07449a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -87,7 +87,7 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { } this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, tokenUrl, - authorizeUrl, config.clientId, config.clientSecret, LinkyBindingConstants.LINKY_SCOPES, true); + authorizeUrl, getClientId(), getClientSecret(), LinkyBindingConstants.LINKY_SCOPES, true); registerServlet(); From 5e2ebecd3cf6c3cbe9467661e4ef8c716613a4b9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 19 Aug 2024 11:00:42 +0200 Subject: [PATCH 075/135] fixes in regarde to clinique review on 18/08/2024 Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthServlet.java | 4 +- .../linky/internal/LinkyBindingConstants.java | 117 ++++++----- .../linky/internal/LinkyHandlerFactory.java | 10 +- .../linky/internal/api/EnedisHttpApi.java | 11 +- .../internal/handler/ApiBridgeHandler.java | 4 +- .../internal/handler/LinkyBridgeHandler.java | 9 +- .../linky/internal/handler/LinkyHandler.java | 188 ++++++++++-------- .../resources/OH-INF/i18n/linky.properties | 2 +- .../resources/OH-INF/i18n/linky_fr.properties | 2 +- .../resources/OH-INF/thing/thing-types.xml | 28 ++- .../src/main/resources/templates/index.html | 2 +- 11 files changed, 203 insertions(+), 174 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 2feb6f85275..2847f87520d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -35,7 +35,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * The xxx manages the authorization with the Linky Web API. The servlet implements the + * The LinkyAuthServlet manages the authorization with the Linky Web API. The servlet implements the * Authorization Code flow and saves the resulting refreshToken with the bridge. * * @author Gaël L'hopital - Initial contribution @@ -65,7 +65,7 @@ public class LinkyAuthServlet extends HttpServlet { private final Logger logger = LoggerFactory.getLogger(LinkyAuthServlet.class); private final String indexTemplate; - private @NonNullByDefault({}) ApiBridgeHandler apiBridgeHandler; + private ApiBridgeHandler apiBridgeHandler; public LinkyAuthServlet(ApiBridgeHandler apiBridgeHandler, String indexTemplate) { this.indexTemplate = indexTemplate; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 204d2fac39c..bc11ef50f41 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -13,8 +13,6 @@ package org.openhab.binding.linky.internal; import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.ThingTypeUID; @@ -32,87 +30,89 @@ public class LinkyBindingConstants { public static final String BINDING_ID = "linky"; // List of all Thing Type UIDs - public static final ThingTypeUID THING_TYPE_API_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "EnedisBridge"); - public static final ThingTypeUID THING_TYPE_API_WEB_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "EnedisWebBridge"); + public static final ThingTypeUID THING_TYPE_API_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "enedis"); + public static final ThingTypeUID THING_TYPE_API_WEB_ENEDIS_BRIDGE = new ThingTypeUID(BINDING_ID, "enedis-web"); public static final ThingTypeUID THING_TYPE_API_MYELECTRICALDATA_BRIDGE = new ThingTypeUID(BINDING_ID, - "MyElectricalDataBridge"); + "my-electrical-data"); public static final ThingTypeUID THING_TYPE_LINKY = new ThingTypeUID(BINDING_ID, "linky"); public static final Set SUPPORTED_DEVICE_THING_TYPES_UIDS = Set.of(THING_TYPE_API_ENEDIS_BRIDGE, THING_TYPE_API_WEB_ENEDIS_BRIDGE, THING_TYPE_API_MYELECTRICALDATA_BRIDGE, THING_TYPE_LINKY); // Thing properties + // List of all Channel groups id's public static final String PUISSANCE = "puissance"; public static final String PRM_ID = "prmId"; public static final String USER_ID = "customerId"; public static final String AV2_ID = "av2_interne_id"; + public static final String DAILY_GROUP = "daily"; + public static final String WEEKLY_GROUP = "weekly"; + public static final String MONTHLY_GROUP = "monthly"; + public static final String YEARLY_GROUP = "yearly"; + + public static final String MAIN_GROUP = "main"; + public static final String TEMPO_GROUP = "tempo"; + public static final String LOAD_CURVE_GROUP = "loadCurve"; + // List of all Channel id's + public static final String CONSUMPTION_CHANNEL = "consumption"; + public static final String MAX_POWER_CHANNEL = "maxPower"; + public static final String POWER_CHANNEL = "power"; + public static final String TIMESTAMP_CHANNEL = "power"; - public static final String LOAD_CURVE = "loadCurve#power"; + public static final String DAY_MINUS_1 = "yesterday"; + public static final String DAY_MINUS_2 = "day-2"; + public static final String DAY_MINUS_3 = "day-3"; - public static final String DAYLY_CONSUMPTION = "daily#consumption"; - public static final String WEEKLY_CONSUMPTION = "weekly#consumption"; - public static final String MONTHLY_CONSUMPTION = "monthly#consumption"; - public static final String YEARLY_CONSUMPTION = "yearly#consumption"; + public static final String PEAK_POWER_DAY_MINUS_1 = "power"; + public static final String PEAK_POWER_TS_DAY_MINUS_1 = "timestamp"; - public static final String DAY_MINUS_1 = "daily#yesterday"; - public static final String DAY_MINUS_2 = "daily#day-2"; - public static final String DAY_MINUS_3 = "daily#day-3"; + public static final String PEAK_POWER_DAY_MINUS_2 = "power-2"; + public static final String PEAK_POWER_TS_DAY_MINUS_2 = "timestamp-2"; - public static final String PEAK_POWER_DAILY = "daily#maxPower"; - public static final String PEAK_POWER_WEEKLY = "weekly#maxPower"; - public static final String PEAK_POWER_MONTHLY = "monthly#maxPower"; - public static final String PEAK_POWER_YEARLY = "yearly#maxPower"; + public static final String PEAK_POWER_DAY_MINUS_3 = "power-3"; + public static final String PEAK_POWER_TS_DAY_MINUS_3 = "timestamp-3"; - public static final String PEAK_POWER_DAY_MINUS_1 = "daily#power"; - public static final String PEAK_POWER_TS_DAY_MINUS_1 = "daily#timestamp"; + public static final String WEEK_MINUS_0 = "thisWeek"; + public static final String WEEK_MINUS_1 = "lastWeek"; + public static final String WEEK_MINUS_2 = "week-2"; - public static final String PEAK_POWER_DAY_MINUS_2 = "daily#power-2"; - public static final String PEAK_POWER_TS_DAY_MINUS_2 = "daily#timestamp-2"; + public static final String MONTH_MINUS_0 = "thisMonth"; + public static final String MONTH_MINUS_1 = "lastMonth"; + public static final String MONTH_MINUS_2 = "month-2"; - public static final String PEAK_POWER_DAY_MINUS_3 = "daily#power-3"; - public static final String PEAK_POWER_TS_DAY_MINUS_3 = "daily#timestamp-3"; + public static final String YEAR_MINUS_0 = "thisYear"; + public static final String YEAR_MINUS_1 = "lastYear"; + public static final String YEAR_MINUS_2 = "year-2"; - public static final String WEEK_MINUS_0 = "weekly#thisWeek"; - public static final String WEEK_MINUS_1 = "weekly#lastWeek"; - public static final String WEEK_MINUS_2 = "weekly#week-2"; + public static final String TEMPO_TODAY_INFO = "tempoInfoToday"; + public static final String TEMPO_TOMORROW_INFO = "tempoInfoTomorrow"; + public static final String TEMPO_TEMPO_INFO_TIME_SERIES = "tempoInfoTimeSeries"; - public static final String MONTH_MINUS_0 = "monthly#thisMonth"; - public static final String MONTH_MINUS_1 = "monthly#lastMonth"; - public static final String MONTH_MINUS_2 = "monthly#month-2"; + public static final String MAIN_IDENTITY = "identity"; - public static final String YEAR_MINUS_0 = "yearly#thisYear"; - public static final String YEAR_MINUS_1 = "yearly#lastYear"; - public static final String YEAR_MINUS_2 = "yearly#year-2"; + public static final String MAIN_CONTRACT_SUBSCRIBED_POWER = "contractSubscribedPower"; + public static final String MAIN_CONTRACT_LAST_ACTIVATION_DATE = "contractLastActivationDate"; + public static final String MAIN_CONTRACT_DISTRIBUTION_TARIFF = "contractDistributionTariff"; + public static final String MAIN_CONTRACT_OFF_PEAK_HOURS = "contractOffpeakHours"; + public static final String MAIN_CONTRACT_CONTRACT_STATUS = "contractStatus"; + public static final String MAIN_CONTRACT_CONTRACT_TYPE = "contractType"; + public static final String MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE = "contractLastDistributionTariffChangeDate"; + public static final String MAIN_CONTRACT_SEGMENT = "contractSegment"; - public static final String MAIN_IDENTITY = "main#identity"; + public static final String MAIN_USAGEPOINT_ID = "usagePointId"; + public static final String MAIN_USAGEPOINT_STATUS = "usagePointStatus"; + public static final String MAIN_USAGEPOINT_METER_TYPE = "usagePointMeterType"; - public static final String TEMPO_TODAY_INFO = "tempo#tempoInfoToday"; - public static final String TEMPO_TOMORROW_INFO = "tempo#tempoInfoTomorrow"; - public static final String TEMPO_TEMPO_INFO_TIME_SERIES = "tempo#tempoInfoTimeSeries"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_CITY = "usagePointAddressCity"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY = "usagePointAddressCountry"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE = "usagePointAddressInseeCode"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE = "usagePointAddressPostalCode"; + public static final String MAIN_USAGEPOINT_METER_ADDRESS_STREET = "usagePointAddressStreet"; - public static final String MAIN_CONTRACT_SUBSCRIBED_POWER = "main#contractSubscribedPower"; - public static final String MAIN_CONTRACT_LAST_ACTIVATION_DATE = "main#contractLastActivationDate"; - public static final String MAIN_CONTRACT_DISTRIBUTION_TARIFF = "main#contractDistributionTariff"; - public static final String MAIN_CONTRACT_OFF_PEAK_HOURS = "main#contractOffpeakHours"; - public static final String MAIN_CONTRACT_CONTRACT_STATUS = "main#contractStatus"; - public static final String MAIN_CONTRACT_CONTRACT_TYPE = "main#contractType"; - public static final String MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE = "main#contractLastDistributionTariffChangeDate"; - public static final String MAIN_CONTRACT_SEGMENT = "main#contractSegment"; - - public static final String MAIN_USAGEPOINT_ID = "main#usagePointId"; - public static final String MAIN_USAGEPOINT_STATUS = "main#usagePointStatus"; - public static final String MAIN_USAGEPOINT_METER_TYPE = "main#usagePointMeterType"; - - public static final String MAIN_USAGEPOINT_METER_ADDRESS_CITY = "main#usagePointAddressCity"; - public static final String MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY = "main#usagePointAddressCountry"; - public static final String MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE = "main#usagePointAddressInseeCode"; - public static final String MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE = "main#usagePointAddressPostalCode"; - public static final String MAIN_USAGEPOINT_METER_ADDRESS_STREET = "main#usagePointAddressStreet"; - - public static final String MAIN_CONTACT_MAIL = "main#contactMail"; - public static final String MAIN_CONTACT_PHONE = "main#contactPhone"; + public static final String MAIN_CONTACT_MAIL = "contactMail"; + public static final String MAIN_CONTACT_PHONE = "contactPhone"; // Authorization related Servlet and resources aliases. public static final String LINKY_ALIAS = "/connectlinky"; @@ -121,8 +121,7 @@ public class LinkyBindingConstants { /** * Smartthings scopes needed by this binding to work. */ - public static final String LINKY_SCOPES = Stream.of("am_application_scope", "default") - .collect(Collectors.joining(" ")); + public static final String LINKY_SCOPES = "am_application_scope default"; public static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; public static final String ENEDIS_AUTHORIZE_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "dataconnect/v1/oauth2/authorize"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 3e77a025297..d5ec63f2be9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -82,8 +82,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { }) .create(); - // .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) - private final LocaleProvider localeProvider; @Activate @@ -107,19 +105,19 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { @Override protected @Nullable ThingHandler createHandler(Thing thing) { - if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_API_ENEDIS_BRIDGE)) { + if (LinkyBindingConstants.THING_TYPE_API_ENEDIS_BRIDGE.equals(thing.getThingTypeUID())) { EnedisBridgeHandler handler = new EnedisBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; - } else if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_API_WEB_ENEDIS_BRIDGE)) { + } else if (LinkyBindingConstants.THING_TYPE_API_WEB_ENEDIS_BRIDGE.equals(thing.getThingTypeUID())) { EnedisWebBridgeHandler handler = new EnedisWebBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; - } else if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_API_MYELECTRICALDATA_BRIDGE)) { + } else if (LinkyBindingConstants.THING_TYPE_API_MYELECTRICALDATA_BRIDGE.equals(thing.getThingTypeUID())) { MyElectricalDataBridgeHandler handler = new MyElectricalDataBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; - } else if (thing.getThingTypeUID().equals(LinkyBindingConstants.THING_TYPE_LINKY)) { + } else if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { LinkyHandler handler = new LinkyHandler(thing, localeProvider); return handler; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 8264bbdd813..982b8efc29a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -63,7 +63,7 @@ public class EnedisHttpApi { private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; - private LinkyBridgeHandler linkyBridgeHandler; + private final LinkyBridgeHandler linkyBridgeHandler; public EnedisHttpApi(LinkyBridgeHandler linkyBridgeHandler, Gson gson, HttpClient httpClient) { this.gson = gson; @@ -101,7 +101,7 @@ public class EnedisHttpApi { try { Request request = httpClient.newRequest(url); request = request.method(HttpMethod.GET); - if (!("".equals(token))) { + if (!token.isEmpty()) { request = request.header("Authorization", "" + token); request = request.header("Accept", "application/json"); } @@ -116,8 +116,11 @@ public class EnedisHttpApi { if (result.getStatus() == 307) { loc = result.getHeaders().get("Location"); - String res = loc.split("/")[3]; - return res; + String[] urlParts = loc.split("/"); + if (urlParts.length < 4) { + throw new LinkyException("malformed url : %s", loc); + } + return urlParts[3]; } } if (result.getStatus() != 200) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 6597b07449a..59b109dcf00 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -64,7 +64,7 @@ import com.google.gson.JsonSyntaxException; public abstract class ApiBridgeHandler extends LinkyBridgeHandler { private final Logger logger = LoggerFactory.getLogger(ApiBridgeHandler.class); - private OAuthClientService oAuthService; + private final OAuthClientService oAuthService; private static @Nullable HttpServlet servlet; @@ -209,7 +209,7 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { } public List getAllPrmId() { - List result = new ArrayList(); + List result = new ArrayList<>(); Collection col = this.thingRegistry.getAll(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index abe2b76026c..f19c3257ec1 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -57,14 +57,15 @@ import com.google.gson.Gson; public abstract class LinkyBridgeHandler extends BaseBridgeHandler { private final Logger logger = LoggerFactory.getLogger(LinkyBridgeHandler.class); - protected HttpService httpService; - protected BundleContext bundleContext; + protected final HttpService httpService; + protected final BundleContext bundleContext; protected final HttpClient httpClient; - protected EnedisHttpApi enedisApi; + protected final EnedisHttpApi enedisApi; protected final ThingRegistry thingRegistry; - protected LinkyConfiguration config; + protected final LinkyConfiguration config; protected final Gson gson; + protected boolean connected = false; private static final int REQUEST_BUFFER_SIZE = 8000; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index f6b6d752b41..9d81341f305 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -57,6 +57,7 @@ import org.openhab.core.thing.ThingStatusDetail; import org.openhab.core.thing.binding.BaseThingHandler; import org.openhab.core.types.Command; import org.openhab.core.types.RefreshType; +import org.openhab.core.types.State; import org.openhab.core.types.TimeSeries; import org.openhab.core.types.TimeSeries.Policy; import org.openhab.core.types.UnDefType; @@ -146,7 +147,7 @@ public class LinkyHandler extends BaseThingHandler { // Comsuption Load Curve this.loadCurveConsumption = new ExpiringDayCache<>("loadCurveConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); - MeterReading meterReading = getLoadCurveConsumption(today.minusDays(7), today); + MeterReading meterReading = getLoadCurveConsumption(today.minusDays(6), today); meterReading = getMeterReadingAfterChecks(meterReading); if (meterReading != null) { logData(meterReading.dayValue, "Day (peak)", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); @@ -237,31 +238,38 @@ public class LinkyHandler extends BaseThingHandler { String firstName = info.identityInfo.firstname; String lastName = info.identityInfo.lastname; - updateState(MAIN_IDENTITY, new StringType(title + " " + firstName + " " + lastName)); + updateState(MAIN_GROUP, MAIN_IDENTITY, new StringType(title + " " + firstName + " " + lastName)); - updateState(MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); - updateState(MAIN_CONTRACT_CONTRACT_STATUS, new StringType(info.contractInfo.contractStatus)); - updateState(MAIN_CONTRACT_CONTRACT_TYPE, new StringType(info.contractInfo.contractType)); - updateState(MAIN_CONTRACT_DISTRIBUTION_TARIFF, new StringType(info.contractInfo.distributionTariff)); - updateState(MAIN_CONTRACT_LAST_ACTIVATION_DATE, new StringType(info.contractInfo.lastActivationDate)); - updateState(MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE, + updateState(MAIN_GROUP, MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); + updateState(MAIN_GROUP, MAIN_CONTRACT_CONTRACT_STATUS, + new StringType(info.contractInfo.contractStatus)); + updateState(MAIN_GROUP, MAIN_CONTRACT_CONTRACT_TYPE, new StringType(info.contractInfo.contractType)); + updateState(MAIN_GROUP, MAIN_CONTRACT_DISTRIBUTION_TARIFF, + new StringType(info.contractInfo.distributionTariff)); + updateState(MAIN_GROUP, MAIN_CONTRACT_LAST_ACTIVATION_DATE, + new StringType(info.contractInfo.lastActivationDate)); + updateState(MAIN_GROUP, MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE, new StringType(info.contractInfo.lastDistributionTariffChangeDate)); - updateState(MAIN_CONTRACT_OFF_PEAK_HOURS, new StringType(info.contractInfo.offpeakHours)); - updateState(MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); - updateState(MAIN_CONTRACT_SUBSCRIBED_POWER, new StringType(info.contractInfo.subscribedPower)); + updateState(MAIN_GROUP, MAIN_CONTRACT_OFF_PEAK_HOURS, new StringType(info.contractInfo.offpeakHours)); + updateState(MAIN_GROUP, MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); + updateState(MAIN_GROUP, MAIN_CONTRACT_SUBSCRIBED_POWER, + new StringType(info.contractInfo.subscribedPower)); - updateState(MAIN_USAGEPOINT_ID, new StringType(info.usagePointInfo.usagePointId)); - updateState(MAIN_USAGEPOINT_STATUS, new StringType(info.usagePointInfo.usagePointStatus)); - updateState(MAIN_USAGEPOINT_METER_TYPE, new StringType(info.usagePointInfo.meterType)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_ID, new StringType(info.usagePointInfo.usagePointId)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_STATUS, new StringType(info.usagePointInfo.usagePointStatus)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_TYPE, new StringType(info.usagePointInfo.meterType)); - updateState(MAIN_USAGEPOINT_METER_ADDRESS_CITY, new StringType(info.addressInfo.city)); - updateState(MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY, new StringType(info.addressInfo.country)); - updateState(MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE, new StringType(info.addressInfo.postalCode)); - updateState(MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE, new StringType(info.addressInfo.inseeCode)); - updateState(MAIN_USAGEPOINT_METER_ADDRESS_STREET, new StringType(info.addressInfo.street)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_CITY, new StringType(info.addressInfo.city)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY, + new StringType(info.addressInfo.country)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE, + new StringType(info.addressInfo.postalCode)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE, + new StringType(info.addressInfo.inseeCode)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_STREET, new StringType(info.addressInfo.street)); - updateState(MAIN_CONTACT_MAIL, new StringType(info.contactInfo.email)); - updateState(MAIN_CONTACT_PHONE, new StringType(info.contactInfo.phone)); + updateState(MAIN_GROUP, MAIN_CONTACT_MAIL, new StringType(info.contactInfo.email)); + updateState(MAIN_GROUP, MAIN_CONTACT_PHONE, new StringType(info.contactInfo.phone)); } catch (LinkyException e) { logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); @@ -304,15 +312,15 @@ public class LinkyHandler extends BaseThingHandler { int tomorrowDayIdx = values.size(); Object[] tempoValues = values.values().toArray(); - updateTempoChannel(TEMPO_TODAY_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 2])); - updateTempoChannel(TEMPO_TOMORROW_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 1])); + updateTempoChannel(TEMPO_GROUP, TEMPO_TODAY_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 2])); + updateTempoChannel(TEMPO_GROUP, TEMPO_TOMORROW_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 1])); - sendTimeSeries(TEMPO_TEMPO_INFO_TIME_SERIES, timeSeries); - updateState(TEMPO_TEMPO_INFO_TIME_SERIES, + sendTimeSeries(TEMPO_GROUP, TEMPO_TEMPO_INFO_TIME_SERIES, timeSeries); + updateState(TEMPO_GROUP, TEMPO_TEMPO_INFO_TIME_SERIES, new DecimalType(getTempoIdx((String) tempoValues[tomorrowDayIdx - 2]))); }, () -> { - updateTempoChannel(TEMPO_TODAY_INFO, -1); - updateTempoChannel(TEMPO_TOMORROW_INFO, -1); + updateTempoChannel(TEMPO_GROUP, TEMPO_TODAY_INFO, -1); + updateTempoChannel(TEMPO_GROUP, TEMPO_TOMORROW_INFO, -1); }); } @@ -335,79 +343,83 @@ public class LinkyHandler extends BaseThingHandler { dailyConsumptionMaxPower.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - updateVAChannel(PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value); - updateState(PEAK_POWER_TS_DAY_MINUS_1, + updateVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value); + updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_1, new DateTimeType(values.dayValue[dSize - 1].date.atZone(ZoneId.systemDefault()))); - updateVAChannel(PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value); - updateState(PEAK_POWER_TS_DAY_MINUS_2, + updateVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value); + updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_2, new DateTimeType(values.dayValue[dSize - 2].date.atZone(ZoneId.systemDefault()))); - updateVAChannel(PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value); - updateState(PEAK_POWER_TS_DAY_MINUS_3, + updateVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value); + updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_3, new DateTimeType(values.dayValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); - updatePowerTimeSeries(PEAK_POWER_DAILY, values.dayValue); - updatePowerTimeSeries(PEAK_POWER_WEEKLY, values.weekValue); - updatePowerTimeSeries(PEAK_POWER_MONTHLY, values.monthValue); - updatePowerTimeSeries(PEAK_POWER_YEARLY, values.yearValue); + updatePowerTimeSeries(DAILY_GROUP, MAX_POWER_CHANNEL, values.dayValue); + updatePowerTimeSeries(WEEKLY_GROUP, MAX_POWER_CHANNEL, values.weekValue); + updatePowerTimeSeries(MONTHLY_GROUP, MAX_POWER_CHANNEL, values.monthValue); + updatePowerTimeSeries(YEARLY_GROUP, MAX_POWER_CHANNEL, values.yearValue); }, () -> { - updateKwhChannel(PEAK_POWER_DAY_MINUS_1, Double.NaN); - updateState(PEAK_POWER_TS_DAY_MINUS_1, UnDefType.UNDEF); + updateKwhChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_1, Double.NaN); + updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_1, UnDefType.UNDEF); - updateKwhChannel(PEAK_POWER_DAY_MINUS_2, Double.NaN); - updateState(PEAK_POWER_TS_DAY_MINUS_2, UnDefType.UNDEF); + updateKwhChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_2, Double.NaN); + updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_2, UnDefType.UNDEF); - updateKwhChannel(PEAK_POWER_DAY_MINUS_3, Double.NaN); - updateState(PEAK_POWER_TS_DAY_MINUS_3, UnDefType.UNDEF); + updateKwhChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_3, Double.NaN); + updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_3, UnDefType.UNDEF); }); } /** - * Request new dayly/weekly data and updates channels + * Request new daily/weekly data and updates channels */ private synchronized void updateEnergyData() { dailyConsumption.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - updateKwhChannel(DAY_MINUS_1, values.dayValue[dSize - 1].value); - updateKwhChannel(DAY_MINUS_2, values.dayValue[dSize - 2].value); - updateKwhChannel(DAY_MINUS_3, values.dayValue[dSize - 3].value); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_1, values.dayValue[dSize - 1].value); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_2, values.dayValue[dSize - 2].value); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_3, values.dayValue[dSize - 3].value); int idxCurrentYear = values.yearValue.length - 1; int idxCurrentWeek = values.weekValue.length - 1; int idxCurrentMonth = values.monthValue.length - 1; - updateKwhChannel(WEEK_MINUS_0, values.weekValue[idxCurrentWeek].value); - updateKwhChannel(WEEK_MINUS_1, values.weekValue[idxCurrentWeek - 1].value); - updateKwhChannel(WEEK_MINUS_2, values.weekValue[idxCurrentWeek - 2].value); + updateKwhChannel(WEEKLY_GROUP, WEEK_MINUS_0, values.weekValue[idxCurrentWeek].value); + updateKwhChannel(WEEKLY_GROUP, WEEK_MINUS_1, values.weekValue[idxCurrentWeek - 1].value); + updateKwhChannel(WEEKLY_GROUP, WEEK_MINUS_2, values.weekValue[idxCurrentWeek - 2].value); - updateKwhChannel(MONTH_MINUS_0, values.monthValue[idxCurrentMonth].value); - updateKwhChannel(MONTH_MINUS_1, values.monthValue[idxCurrentMonth - 1].value); - updateKwhChannel(MONTH_MINUS_2, values.monthValue[idxCurrentMonth - 2].value); + updateKwhChannel(MONTHLY_GROUP, MONTH_MINUS_0, values.monthValue[idxCurrentMonth].value); + updateKwhChannel(MONTHLY_GROUP, MONTH_MINUS_1, values.monthValue[idxCurrentMonth - 1].value); + updateKwhChannel(MONTHLY_GROUP, MONTH_MINUS_2, values.monthValue[idxCurrentMonth - 2].value); - updateKwhChannel(YEAR_MINUS_0, values.yearValue[idxCurrentYear].value); - updateKwhChannel(YEAR_MINUS_1, values.yearValue[idxCurrentYear - 1].value); - updateKwhChannel(YEAR_MINUS_2, values.yearValue[idxCurrentYear - 2].value); + updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_0, values.yearValue[idxCurrentYear].value); + updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_1, values.yearValue[idxCurrentYear - 1].value); + updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_2, values.yearValue[idxCurrentYear - 2].value); - updateConsumptionTimeSeries(DAYLY_CONSUMPTION, values.dayValue); - updateConsumptionTimeSeries(WEEKLY_CONSUMPTION, values.weekValue); - updateConsumptionTimeSeries(MONTHLY_CONSUMPTION, values.monthValue); - updateConsumptionTimeSeries(YEARLY_CONSUMPTION, values.yearValue); + updateConsumptionTimeSeries(DAILY_GROUP, CONSUMPTION_CHANNEL, values.dayValue); + updateConsumptionTimeSeries(WEEKLY_GROUP, CONSUMPTION_CHANNEL, values.weekValue); + updateConsumptionTimeSeries(MONTHLY_GROUP, CONSUMPTION_CHANNEL, values.monthValue); + updateConsumptionTimeSeries(YEARLY_GROUP, CONSUMPTION_CHANNEL, values.yearValue); }, () -> { - updateKwhChannel(DAY_MINUS_1, Double.NaN); - updateKwhChannel(DAY_MINUS_2, Double.NaN); - updateKwhChannel(DAY_MINUS_3, Double.NaN); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_1, Double.NaN); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_2, Double.NaN); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_3, Double.NaN); - updateKwhChannel(THIS_YEAR, values.YearValue[idxCurrentYear].value / 1000.00); - updateKwhChannel(LAST_YEAR, values.YearValue[idxPreviousYear].value / 1000.00); - }, () -> { - updateKwhChannel(YESTERDAY, Double.NaN); - updateKwhChannel(THIS_WEEK, Double.NaN); - updateKwhChannel(LAST_WEEK, Double.NaN); - }); - } + updateKwhChannel(WEEKLY_GROUP, WEEK_MINUS_0, Double.NaN); + updateKwhChannel(WEEKLY_GROUP, WEEK_MINUS_1, Double.NaN); + updateKwhChannel(WEEKLY_GROUP, WEEK_MINUS_2, Double.NaN); + + updateKwhChannel(MONTHLY_GROUP, MONTH_MINUS_0, Double.NaN); + updateKwhChannel(MONTHLY_GROUP, MONTH_MINUS_1, Double.NaN); + updateKwhChannel(MONTHLY_GROUP, MONTH_MINUS_2, Double.NaN); + + updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_0, Double.NaN); + updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_1, Double.NaN); + updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_2, Double.NaN); + }); } /** @@ -415,12 +427,12 @@ public class LinkyHandler extends BaseThingHandler { */ private synchronized void updateLoadCurveData() { loadCurveConsumption.getValue().ifPresentOrElse(values -> { - updatePowerTimeSeries(LOAD_CURVE, values.dayValue); + updatePowerTimeSeries(LOAD_CURVE_GROUP, POWER_CHANNEL, values.dayValue); }, () -> { }); } - private synchronized void updatePowerTimeSeries(String channel, IntervalReading[] iv) { + private synchronized void updatePowerTimeSeries(String groupId, String channelId, IntervalReading[] iv) { TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); for (int i = 0; i < iv.length; i++) { @@ -435,11 +447,11 @@ public class LinkyHandler extends BaseThingHandler { } } - sendTimeSeries(channel, timeSeries); - updateState(channel, new DecimalType(iv[iv.length - 1].value)); + sendTimeSeries(groupId, channelId, timeSeries); + updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); } - private synchronized void updateConsumptionTimeSeries(String channel, IntervalReading[] iv) { + private synchronized void updateConsumptionTimeSeries(String groupId, String channelId, IntervalReading[] iv) { TimeSeries timeSeries = new TimeSeries(Policy.REPLACE); for (int i = 0; i < iv.length; i++) { @@ -451,27 +463,35 @@ public class LinkyHandler extends BaseThingHandler { timeSeries.add(timestamp, new DecimalType(iv[i].value)); } - sendTimeSeries(channel, timeSeries); - updateState(channel, new DecimalType(iv[iv.length - 1].value)); + sendTimeSeries(groupId, channelId, timeSeries); + updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); } - private void updateKwhChannel(String channelId, double consumption) { + private void updateKwhChannel(String groupId, String channelId, double consumption) { logger.debug("Update channel {} with {}", channelId, consumption); - updateState(channelId, + updateState(groupId, channelId, Double.isNaN(consumption) ? UnDefType.UNDEF : new QuantityType<>(consumption, Units.KILOWATT_HOUR)); } - private void updatekVAChannel(String channelId, double power) { + private void updateVAChannel(String groupId, String channelId, double power) { logger.debug("Update channel {} with {}", channelId, power); - updateState(channelId, Double.isNaN(power) ? UnDefType.UNDEF - : new QuantityType<>(power, MetricPrefix.KILO(Units.VOLT_AMPERE))); + updateState(groupId, channelId, + Double.isNaN(power) ? UnDefType.UNDEF : new QuantityType<>(power, Units.VOLT_AMPERE)); } - private void updateTempoChannel(String channelId, int tempoValue) { + private void updateTempoChannel(String groupId, String channelId, int tempoValue) { logger.debug("Update channel {} with {}", channelId, tempoValue); updateState(channelId, new DecimalType(tempoValue)); } + protected void updateState(String groupId, String channelID, State state) { + super.updateState(groupId + "#" + channelID, state); + } + + protected void sendTimeSeries(String groupId, String channelID, TimeSeries timeSeries) { + super.sendTimeSeries(groupId + "#" + channelID, timeSeries); + } + /** * Produce a report of all daily values between two dates * diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties index 4c38a8b0de1..18b0ce8af4a 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky.properties @@ -43,4 +43,4 @@ channel-type.linky.timestamp.label = Timestamp # Thing status descriptions -offline.config-error-mandatory-settings = The PrmId is mandatory. +offline.config-error-mandatory-settings = The prmId is mandatory. diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties index 9dc8f36289e..7733ef8ac1d 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties @@ -43,5 +43,5 @@ channel-type.linky.timestamp.label = Horodatage # Thing status descriptions -offline.config-error-mandatory-settings = Le PrmId est obligatoire. +offline.config-error-mandatory-settings = Le prmId est obligatoire. diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 44edf5dbe12..6f0cddea660 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -4,7 +4,7 @@ xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0" xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd"> - + Provides your energy consumption data. @@ -25,7 +25,7 @@ - + Provides your energy consumption data. @@ -53,7 +53,7 @@ - + Provides your energy consumption data. @@ -68,9 +68,9 @@ - - - + + + @@ -96,8 +96,8 @@ - - Your PrmId + + Your prmId @@ -263,7 +263,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -341,6 +341,14 @@ + + DateTime + + an information of type date + + + + Number:Energy diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html index 199cfc7a496..f337875428a 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html @@ -179,7 +179,7 @@ function retrieveToken()

  • Second, come back to the /connectlinky page.
    - If you have multiple prm, select the PrmId in the combobox you want to authorize.v + If you have multiple prm, select the prmId in the combobox you want to authorize.v Then click the Retrieve token button.
    It will fill you linky thing configuration with the token.
    From 693dde97bb737a61bc94b9551706d887458cbec4 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 19 Aug 2024 21:13:51 +0200 Subject: [PATCH 076/135] start review connect flow to thirdparties service : enedis, myelectricaldata Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 6 +- .../linky/internal/LinkyAuthServlet.java | 100 ++- .../internal/handler/ApiBridgeHandler.java | 33 +- .../internal/handler/LinkyBridgeHandler.java | 4 + .../resources/templates/enedis-step1.html | 181 +++++ .../resources/templates/enedis-step2.html | 168 ++++ .../resources/templates/enedis-step3-cb.html | 166 ++++ .../templates/myelectricaldata-step1.html | 181 +++++ .../templates/myelectricaldata-step2.html | 168 ++++ .../templates/myelectricaldata-step3.html | 188 +++++ .../main/resources/web/MyElectricalData.png | Bin 0 -> 6307 bytes .../src/main/resources/web/boutonEnedis.png | Bin 0 -> 6217 bytes .../resources/{templates => web}/enedis.png | Bin .../{templates => web}/enedisSmall.png | Bin .../src/main/resources/web/linky.png | Bin 0 -> 13231 bytes .../src/main/resources/web/openhab_logo.svg | 733 ++++++++++++++++++ 16 files changed, 1885 insertions(+), 43 deletions(-) create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step1.html create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/web/MyElectricalData.png create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/web/boutonEnedis.png rename bundles/org.openhab.binding.linky/src/main/resources/{templates => web}/enedis.png (100%) rename bundles/org.openhab.binding.linky/src/main/resources/{templates => web}/enedisSmall.png (100%) create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/web/linky.png create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/web/openhab_logo.svg diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 6611ed1c805..e0ae9e01251 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -37,7 +37,7 @@ To retrieve data, Linky thing will be need to be linked to a LinkyBridge. LinkyB If you select EnedisWebBridge, you will need : - To create an Enedis account : https://mon-compte-client.enedis.fr/ -- To fill the bridge with you information : username, Password, and also InternalAuthId. +- To fill the bridge with you information : username, password, and also InternalAuthId. | Parameter | Description | |----------------|--------------------------------| @@ -69,7 +69,7 @@ If you select MyElectricalDataBridge, you will need : These steps can also be done using the connectlinky page available from your openhab: http://localhost:8080/connectlinky. You're wil have: -- to select your PrmId from the combobox. +- to select your prmId from the combobox. - to click the "Authorized Bridge". - to follow the authorized process on the enedis page : please select only one prmId there as the token is specific to each Linky. - then go back to the /connectlinky page, and click on the "Retrieve token" link to fill the Linky things with the token. @@ -81,7 +81,7 @@ The thing has the following configuration parameters: | Parameter | Description | |----------------|---------------------------------------------------------------------------------------------| -| PrmId | The PrmId link to the linky Handler. | +| prmId | The prmId link to the linky Handler. | | token | Optional : need if a token necessary to access this Linky thing (use for MyElectricaldata) | diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 2847f87520d..3450236755c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -12,7 +12,10 @@ */ package org.openhab.binding.linky.internal; +import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; @@ -57,19 +60,61 @@ public class LinkyAuthServlet extends HttpServlet { private static final String KEY_AUTHORIZE_URI = "authorize.uri"; private static final String KEY_RETRIEVE_TOKEN_URI = "retrieveToken.uri"; private static final String KEY_REDIRECT_URI = "redirectUri"; + private static final String KEY_CODE = "code.Value"; + private static final String KEY_PRMID = "prmId.Value"; private static final String KEY_PRMID_OPTION = "prmId.Option"; private static final String KEY_AUTHORIZED_USER = "authorizedUser"; private static final String KEY_ERROR = "error"; private static final String KEY_PAGE_REFRESH = "pageRefresh"; private final Logger logger = LoggerFactory.getLogger(LinkyAuthServlet.class); - private final String indexTemplate; + private final String index; + private final String enedisStep1; + private final String enedisStep2; + private final String enedisStep3; + private final String myelectricaldataStep1; + private final String myelectricaldataStep2; + private final String myelectricaldataStep3; + + private static final String TEMPLATE_PATH = "templates/"; private ApiBridgeHandler apiBridgeHandler; - public LinkyAuthServlet(ApiBridgeHandler apiBridgeHandler, String indexTemplate) { - this.indexTemplate = indexTemplate; + public LinkyAuthServlet(ApiBridgeHandler apiBridgeHandler) throws LinkyException { this.apiBridgeHandler = apiBridgeHandler; + + try { + this.index = readTemplate("index.html"); + this.enedisStep1 = readTemplate("enedis-step1.html"); + this.enedisStep2 = readTemplate("enedis-step2.html"); + this.enedisStep3 = readTemplate("enedis-step3-cb.html"); + this.myelectricaldataStep1 = readTemplate("myelectricaldata-step1.html"); + this.myelectricaldataStep2 = readTemplate("myelectricaldata-step2.html"); + this.myelectricaldataStep3 = readTemplate("myelectricaldata-step3.html"); + + } catch (IOException e) { + throw new LinkyException("unable to initialize auth servlet", e); + } + } + + /** + * Reads a template from file and returns the content as String. + * + * @param templateName name of the template file to read + * @return The content of the template file + * @throws IOException thrown when an HTML template could not be read + */ + private String readTemplate(String templateName) throws IOException { + final URL url = apiBridgeHandler.getBundleContext().getBundle().getEntry(TEMPLATE_PATH + templateName); + + if (url == null) { + throw new FileNotFoundException( + String.format("Cannot find '{}' - failed to initialize Linky servlet", templateName)); + } else { + try (InputStream inputStream = url.openStream()) { + return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + } + } } @Override @@ -80,10 +125,35 @@ public class LinkyAuthServlet extends HttpServlet { StringBuffer requestUrl = req.getRequestURL(); String servletBaseUrl = requestUrl != null ? requestUrl.toString() : ""; - String servletBaseURLSecure = servletBaseUrl; + String template = ""; + if (servletBaseUrl.contains("enedis-step1")) { + template = enedisStep1; + } else if (servletBaseUrl.contains("enedis-step2")) { + template = enedisStep2; + } else if (servletBaseUrl.contains("enedis-step3-cb")) { + template = enedisStep3; + } else if (servletBaseUrl.contains("myelectricaldata-step1")) { + template = myelectricaldataStep1; + } else if (servletBaseUrl.contains("myelectricaldata-step2")) { + template = myelectricaldataStep2; + } else if (servletBaseUrl.contains("myelectricaldata-step3")) { + template = myelectricaldataStep3; + } else if (servletBaseUrl.contains("enedis")) { + template = enedisStep1; + } else if (servletBaseUrl.contains("myelectricaldata")) { + template = myelectricaldataStep1; + } else { + template = enedisStep1; + } + + // for some unknown reason, getRequestURL return a malformed URL mixing http:// and port 443 + if (servletBaseUrl.contains(":443")) { + servletBaseUrl = servletBaseUrl.replace("http://", "https://"); + servletBaseUrl = servletBaseUrl.replace(":443", ""); + } try { - handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); + handleLinkyRedirect(replaceMap, servletBaseUrl, req.getQueryString()); resp.setContentType(CONTENT_TYPE); @@ -94,16 +164,26 @@ public class LinkyAuthServlet extends HttpServlet { optionBuffer.append(""); } + final MultiMap params = new MultiMap<>(); + UrlEncoded.decodeTo(req.getQueryString(), params, StandardCharsets.UTF_8.name()); + final String usagePointId = params.getString("usage_point_id"); + final String code = params.getString("code"); + + replaceMap.put(KEY_PRMID, usagePointId); + replaceMap.put(KEY_CODE, code); + replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString()); - replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); - replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK"); - replaceMap.put(KEY_AUTHORIZE_URI, apiBridgeHandler.formatAuthorizationUrl(servletBaseURLSecure)); - resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); + replaceMap.put(KEY_REDIRECT_URI, servletBaseUrl); + replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseUrl + "?state=OK"); + + String authorizeUri = apiBridgeHandler.formatAuthorizationUrl(servletBaseUrl); + replaceMap.put(KEY_AUTHORIZE_URI, authorizeUri); + resp.getWriter().append(replaceKeysFromMap(template, replaceMap)); resp.getWriter().close(); } catch (LinkyException ex) { resp.setContentType(CONTENT_TYPE); replaceMap.put(KEY_ERROR, "Error during request handling : " + ex.getMessage()); - resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); + resp.getWriter().append(replaceKeysFromMap(template, replaceMap)); resp.getWriter().close(); } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 59b109dcf00..fc6182b4c8d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -12,11 +12,7 @@ */ package org.openhab.binding.linky.internal.handler; -import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; @@ -68,9 +64,6 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { private static @Nullable HttpServlet servlet; - private static final String TEMPLATE_PATH = "templates/"; - private static final String TEMPLATE_INDEX = TEMPLATE_PATH + "index.html"; - public ApiBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -108,7 +101,7 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { httpService.registerResources(LinkyBindingConstants.LINKY_ALIAS + LinkyBindingConstants.LINKY_IMG_ALIAS, "web", null); } - } catch (NamespaceException | ServletException | IOException e) { + } catch (NamespaceException | ServletException | LinkyException e) { logger.warn("Error during linky servlet startup", e); } } @@ -127,28 +120,8 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { * @return the newly created servlet * @throws IOException thrown when an HTML template could not be read */ - private HttpServlet createServlet() throws IOException { - return new LinkyAuthServlet(this, readTemplate(TEMPLATE_INDEX)); - } - - /** - * Reads a template from file and returns the content as String. - * - * @param templateName name of the template file to read - * @return The content of the template file - * @throws IOException thrown when an HTML template could not be read - */ - private String readTemplate(String templateName) throws IOException { - final URL index = bundleContext.getBundle().getEntry(templateName); - - if (index == null) { - throw new FileNotFoundException( - String.format("Cannot find '{}' - failed to initialize Linky servlet", templateName)); - } else { - try (InputStream inputStream = index.openStream()) { - return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - } - } + private HttpServlet createServlet() throws LinkyException { + return new LinkyAuthServlet(this); } public String authorize(String redirectUri, String reqState, String reqCode) throws LinkyException { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index f19c3257ec1..de07af29e08 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -109,6 +109,10 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { updateStatus(ThingStatus.UNKNOWN); } + public BundleContext getBundleContext() { + return bundleContext; + } + @Override public synchronized void initialize() { logger.debug("Initializing Linky API bridge handler."); diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html new file mode 100644 index 00000000000..4425a5fe8e5 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html @@ -0,0 +1,181 @@ + + + + + +${pageRefresh} +OpenHAB Linky binding for Enedis + + + + + + + +
    + + +


    +
    +
    + + + + + + + 1 + + + + 2 + + + + 3 + +
    +
    +

    Plugin Linky / Enedis pour Openhab

    +
    + +

    Ce plugin permet d'exploiter vos données de consommation éléctrique fournis par Enedis au sein d'OpenHab.

    + +

    Enedis gère le réseau d’électricité jusqu’au compteur d’électricité
    + Enedis est le gestionnaire du réseau public de distribution d’électricité sur 95% du territoire français continental.

    + +

    Grace à ce plugin, vous serez en mesure de :

    + +
      +
    • Consulter les informations contractuelles liés à votre compte.
    • +
    • Créer des graphes de consommation par jour / semaine / mois / annéee.
    • +
    • Consulter la puissance maximum utilisé sur une période donnée.
    • +
    • Load curve
    • +
    + +

    +
    + + + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html new file mode 100644 index 00000000000..89386df6389 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html @@ -0,0 +1,168 @@ + + + + + +${pageRefresh} +OpenHAB Linky binding for Enedis + + + + + + + +
    + + +


    +
    +
    + + + + + + + 1 + + + + 2 + + + + 3 + +
    +
    +

    Plugin Linky / Enedis pour Openhab

    +
    + +
    + +
    + +

    Pour utiliser ce plugin, vous devez donner votre accord pour qu'Enedis transmette vos données.

    + +

    Pour donner votre autorisation, vous devez avoir un compte personnel Enedis.
    + Ce compte vous permet également de suivre et gérer vos données de consommation [ou production en fonction de votre service] d’électricité.

    + +

    Si vous n'avez pas de compte, vous pouvez le créer depuis cette page.
    + Munissez-vous pour celà de votre facture d’électricité pour créer votre espace.

    + +

    En cliquant sur le bouton ci-dessous, vous allez accéder à votre compte personnel Enedis où vous pourrez donner votre accord pour qu’Enedis nous transmette vos données.

    +

    Une fois cette opération effectué, vous serez rediriger vers une page de confirmation.

    + +
    + + + +
    + +
    +
    + + + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html new file mode 100644 index 00000000000..eebd025d2ba --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html @@ -0,0 +1,166 @@ + + + + + +${pageRefresh} +OpenHAB Linky binding for Enedis + + + + + + + +
    + + +


    +
    +
    + + + + + + + 1 + + + + 2 + + + + 3 + +
    +
    +

    Plugin Linky / Enedis pour Openhab

    +
    +

    + Vous avez autorisé l'accès pour le compteur Linky : ${prmId.Value} +

    +

    + Vous pouvez maintenant utilisé le plugin dans Openhab. +

    +
    + + + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step1.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step1.html new file mode 100644 index 00000000000..73ccb9f95b8 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step1.html @@ -0,0 +1,181 @@ + + + + + +${pageRefresh} +OpenHAB Linky binding for Enedis + + + + + + + +
    + + +


    +
    +
    + + + + + + + 1 + + + + 2 + + + + 3 + +
    +
    +

    Plugin Linky / MyElectricalData pour Openhab

    +
    + +

    Ce plugin permet d'exploiter vos données de consommation éléctrique fournis par Enedis au sein d'OpenHab.

    + +

    Enedis gère le réseau d’électricité jusqu’au compteur d’électricité
    + Enedis est le gestionnaire du réseau public de distribution d’électricité sur 95% du territoire français continental.

    + +

    Grace à ce plugin, vous serez en mesure de :

    + +
      +
    • Consulter les informations contractuelles liés à votre compte.
    • +
    • Créer des graphes de consommation par jour / semaine / mois / annéee.
    • +
    • Consulter la puissance maximum utilisé sur une période donnée.
    • +
    • Load curve
    • +
    + +

    +
    + +
    + + + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html new file mode 100644 index 00000000000..79d69a194e6 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html @@ -0,0 +1,168 @@ + + + + + +${pageRefresh} +OpenHAB Linky binding for Enedis + + + + + + + +
    + + +


    +
    +
    + + + + + + + 1 + + + + 2 + + + + 3 + +
    +
    +

    Plugin Linky / MyElectricalData pour Openhab

    +
    + +
    + +
    + +

    Pour utiliser ce plugin, vous devez donner votre accord pour qu'Enedis transmette vos données.

    + +

    Pour donner votre autorisation, vous devez avoir un compte personnel Enedis.
    + Ce compte vous permet également de suivre et gérer vos données de consommation [ou production en fonction de votre service] d’électricité.

    + +

    Si vous n'avez pas de compte, vous pouvez le créer depuis cette page.
    + Munissez-vous pour celà de votre facture d’électricité pour créer votre espace.

    + +

    En cliquant sur le bouton ci-dessous, vous allez accéder à votre compte personnel Enedis où vous pourrez donner votre accord pour qu’Enedis nous transmette vos données.

    +

    Une fois cette opération effectué, vous serez rediriger vers une page de confirmation.

    + +
    + + + +
    + +
    +
    + + + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html new file mode 100644 index 00000000000..fce68f98eb2 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html @@ -0,0 +1,188 @@ + + + + + +${pageRefresh} +OpenHAB Linky binding for Enedis + + + + + + + +
    + + +


    +
    +
    + + + + + + + 1 + + + + 2 + + + + 3 + +
    +
    +

    Plugin Linky / MyElectricalData pour Openhab

    +
    +

    + Vous devez maintenant récupérer le token depuis MyElectricalData. +

    + +

    + Pour ce faire : +

      +
    • Sélectionner le numéro de prmId dans la combobox ci-dessous.
    • +
    • Cliquer sur le bouton "Retrive token".
    • +
    +

    +
    + +


    +
    +
    +
    +
    + Please select your prmId : + +
    + +
    +
    + + + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/web/MyElectricalData.png b/bundles/org.openhab.binding.linky/src/main/resources/web/MyElectricalData.png new file mode 100644 index 0000000000000000000000000000000000000000..42a96f45a42d72f250d94115316ce3d35d60dece GIT binary patch literal 6307 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 literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis.png b/bundles/org.openhab.binding.linky/src/main/resources/web/enedis.png similarity index 100% rename from bundles/org.openhab.binding.linky/src/main/resources/templates/enedis.png rename to bundles/org.openhab.binding.linky/src/main/resources/web/enedis.png diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedisSmall.png b/bundles/org.openhab.binding.linky/src/main/resources/web/enedisSmall.png similarity index 100% rename from bundles/org.openhab.binding.linky/src/main/resources/templates/enedisSmall.png rename to bundles/org.openhab.binding.linky/src/main/resources/web/enedisSmall.png diff --git a/bundles/org.openhab.binding.linky/src/main/resources/web/linky.png b/bundles/org.openhab.binding.linky/src/main/resources/web/linky.png new file mode 100644 index 0000000000000000000000000000000000000000..fd718ea417e54406e894e39c02db6624c1239d74 GIT binary patch literal 13231 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 literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.linky/src/main/resources/web/openhab_logo.svg b/bundles/org.openhab.binding.linky/src/main/resources/web/openhab_logo.svg new file mode 100644 index 00000000000..0401d16f698 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/web/openhab_logo.svg @@ -0,0 +1,733 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d8a6ebc6e1fc2038b65b6fe72b04957da139b42b Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 10:16:48 +0200 Subject: [PATCH 077/135] add documentation for connectlinky step (WIP) Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 63 +++++++++++++++--- .../doc/connectlinky-enedis-step1.png | Bin 0 -> 68495 bytes .../doc/connectlinky-enedis-step2.png | Bin 0 -> 96614 bytes .../doc/connectlinky-enedis-step2b.png | Bin 0 -> 62620 bytes .../doc/connectlinky-enedis-step2c.png | Bin 0 -> 113779 bytes .../doc/connectlinky-enedis-step3.png | Bin 0 -> 75828 bytes .../doc/connectlinky-index.png | Bin 0 -> 63491 bytes .../connectlinky-myelectricaldata-step1.png | Bin 0 -> 80294 bytes .../connectlinky-myelectricaldata-step2.png | Bin 0 -> 108978 bytes .../connectlinky-myelectricaldata-step2b.png | Bin 0 -> 62620 bytes .../connectlinky-myelectricaldata-step2c.png | Bin 0 -> 113779 bytes .../connectlinky-myelectricaldata-step2d.png | Bin 0 -> 65112 bytes .../connectlinky-myelectricaldata-step3.png | Bin 0 -> 78312 bytes .../connectlinky-myelectricaldata-step3b.png | Bin 0 -> 62695 bytes 14 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step1.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2b.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2c.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step3.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-index.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step1.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2b.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2c.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2d.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step3.png create mode 100644 bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step3b.png diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index e0ae9e01251..83a8ff1d638 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -32,9 +32,9 @@ This binding does not provide discovery service. ## Binding Configuration -To retrieve data, Linky thing will be need to be linked to a LinkyBridge. LinkyBridge can be today select between EnedisWebBridge, MyElectricalDataBridge and EnedisBridge. +To retrieve data, Linky thing will be need to be linked to a LinkyBridge. LinkyBridge can be today select between enedis-web, myelectricaldata and enedis. -If you select EnedisWebBridge, you will need : +If you select enedis-web bridge, you will need : - To create an Enedis account : https://mon-compte-client.enedis.fr/ - To fill the bridge with you information : username, password, and also InternalAuthId. @@ -60,19 +60,60 @@ Instructions given for Firefox : 1. Repeat steps 1, 2. You should arrive directly on step 5, then open the developer tool window (F12) and select "Stockage" tab. In the "Cookies" entry, select "https://mon-compte-enedis.fr". You'll find an entry named "internalAuthId", copy this value in your openHAB configuration. -If you select MyElectricalDataBridge, you will need : +If you select MyElectricalData bridge, you will need : - To create an Enedis account : https://mon-compte-client.enedis.fr/ -- To do a consent request on the MyElectricalData site : https://www.myelectricaldata.fr/ -- To fill the token provided by MyElectricalData into your Linky things config. -These steps can also be done using the connectlinky page available from your openhab: http://localhost:8080/connectlinky. -You're wil have: +Follow these steps to initialize the token. you can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index. + +- to select your provider +![TempoGraph](doc/connectlinky-index.png)
    + +- To follow the two first step wizard, and click on the "access Enedis" button +![TempoGraph](doc/connectlinky-myelectricaldata-step1.png)
    +![TempoGraph](doc/connectlinky-myelectricaldata-step2.png)
    + +- To login to your Enedis Account +![TempoGraph](doc/connectlinky-myelectricaldata-step2b.png)
    + +- To authorize data collection for your prmId.
    +If you have multiple linky on your account like me, you will have to repeat the procedure for each linky. +Don't select the two linky in the same procedure, it will not work ! +![TempoGraph](doc/connectlinky-myelectricaldata-step2c.png)
    + +- You will then be redirect to a confirmation page on MyElectricalData web site +![TempoGraph](doc/connectlinky-myelectricaldata-step2d.png)
    + +- Go back to your openhab with step3 : "connectlinky/myelectricaldata-step3", then select your prmId in combobox, and click "Retrieve Token" +![TempoGraph](doc/connectlinky-myelectricaldata-step3.png)
    + +- Last, you will see this confirmation page if everything is everything is ok +![TempoGraph](doc/connectlinky-myelectricaldata-step3b.png)
    + + +If you select enedis bridge, you will need : +- To create an Enedis account : https://mon-compte-client.enedis.fr/ + +Follow these steps to initialize the token. you can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index. + +- to select your provider +![TempoGraph](doc/enedis-index.png)
    + +- To follow the two first step wizard, and click on the "access Enedis" button +![TempoGraph](doc/connectlinky-enedis-step1.png)
    +![TempoGraph](doc/connectlinky-enedis-step2.png)
    + +- To login to your Enedis Account +![TempoGraph](doc/connectlinky-enedis-step2b.png)
    + +- To authorize data collection for your prmId.
    +If you have multiple linky on your account like me, you will have to repeat the procedure for each linky. +Don't select the two linky in the same procedure, it will not work ! +![TempoGraph](doc/connectlinky-enedis-step2c.png)
    + +- Last, you will see this confirmation page if everything is everything is ok +![TempoGraph](doc/connectlinky-enedis-step3.png)
    -- to select your prmId from the combobox. -- to click the "Authorized Bridge". -- to follow the authorized process on the enedis page : please select only one prmId there as the token is specific to each Linky. -- then go back to the /connectlinky page, and click on the "Retrieve token" link to fill the Linky things with the token. ## Thing Configuration diff --git a/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step1.png b/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed80d443fc168cadbf119d6d4aadab6ff8e7280 GIT binary patch literal 68495 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

    G5lJg=B}kWP`bQI{K57M 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 literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2.png b/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2.png new file mode 100644 index 0000000000000000000000000000000000000000..6bae2af138d2db63b69cd6396b198bf0bc60faf4 GIT binary patch literal 96614 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 z zBr^0C>k_58dZeXN0z4ykn_PNA!uYS5D{Qd3zHXnn?T;!A(gCSTqfd@h1qVGO9W;DE zN`nHkBvDBK7S33)?ZbDG3oPwG7f7v9RvP0mB&{Lg?fvNp+EJb*1=670dku3#D1klH zjrW^VzJBi=`qs zvy}M(GUJCpAagQ|&6JP__hg20V*_}StmM#t+1qoqD=k35N0O1~A!h#v)9(^ZlIckW zrw6qNI8jaZ<=+%R?ZFL{mB378v0TnbGCh)r<1rs`fWB#fKDM1gV%z*6Dp?~HFnVsk z5_UG=v#-l-S$)`?5}`q=J+MNcWD9lU(QWX-4$FW;L1gZ_N6_^MU@jpc|6s z>Tej=*U70_@|MgQ6S`Txq4_!{S?GsAAodD#awm7VT{ipR3JCDD0QsP-kJW3jMoT+c zpTk>lD?sJg-z$icbLRqR7*yaZ%C_ zHPseW>{Ua3_l@OhYbdI+?`sY!u35mB`-0*bgGd9IToYM~A~l&2^9^dM1>MvP51VTq zeA%M;|4#gWCjJ*};;0*eKrT>{GjFw}JBQe8DjdtpFHrgZeM>CQmp=BX^29EAkIKrT zjeV*d-|gSs*3(mnSCn%u&GqJOJw27@-{-x!U^f&c?=&~VtxYPZJ>?iib0)m7prAPu zPFkiQ-yRb)G&)*TTugr+I8cofa3|ReatNDVP*4y{K2@VKu5&kbW9)m#u literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2b.png b/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2b.png new file mode 100644 index 0000000000000000000000000000000000000000..4569154a3e886f24766e9f3c54579548d1d3c7f0 GIT binary patch literal 62620 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 o){cO2Jis-QIIc2@uZ!1cE;EPMa}`u4vsif+%6 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 WCELD2Iw1r3d{ji-#_I6h`TqeI!_kcZ literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.linky/doc/connectlinky-index.png b/bundles/org.openhab.binding.linky/doc/connectlinky-index.png new file mode 100644 index 0000000000000000000000000000000000000000..982108bbcbea8b037aa13049bf64dd3244154952 GIT binary patch literal 63491 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 literal 0 HcmV?d00001 diff --git a/bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2.png b/bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2.png new file mode 100644 index 0000000000000000000000000000000000000000..57b205d008941d168e151e637bb42d2979729eaa GIT binary patch literal 108978 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 o){cO2Jis-QIIc2@uZ!1cE;EPMa}`u4vsif+%6 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

    diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html index eebd025d2ba..5efc6abb2a5 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step3-cb.html @@ -154,12 +154,20 @@ function retrieveToken()

    Plugin Linky / Enedis pour Openhab


    + +
    + Vous avez autorisé l'accès pour le compteur Linky : ${prmId.Value}
    + Vous pouvez maintenant utiliser le plugin Linky avec Enedis.
    + ${authorizedUser} +
    + +
    + Une erreur c'est produite: + ${error} +
    + +

    - Vous avez autorisé l'accès pour le compteur Linky : ${prmId.Value} -

    -

    - Vous pouvez maintenant utilisé le plugin dans Openhab. -


    diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html index f337875428a..931dda58164 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/index.html @@ -119,96 +119,34 @@ function retrieveToken() - +
    + +


    + +
    +
    +

    + Merci de sélectionner votre provider +

    + +
    +
    + +
    +
    + +
    +
    +
    -


    - -

    Authorize openHAB Linky binding for Enedis

    -

    On this page you can authorize the openHAB Linky binding to access your Enedis account.

    -

    - The redirect URI to use with Enedis for this openHAB installation is - ${redirectUri} -

    - ${error} ${authorizedUser} - -
    -

    This process need to be done for each electrical meter you have (each prmId).
    - This is a two step process:
    -

      -
    1. First you will need to do a consent on the enedis Site.
      - For this, click on the Authorize button.
      - You will be redirect to the enedis site. Login as usual with your userName / Password.
      - You will then be redirect to a consentment page.
      - You will have to select which prmId you would like to give the consent, click the checkbox, and then click on the validate button.
      - After this, you will be redirect to myelectricaldata information page.
      -
    2. - -
    3. Second, come back to the /connectlinky page.
      - If you have multiple prm, select the prmId in the combobox you want to authorize.v - Then click the Retrieve token button.
      - It will fill you linky thing configuration with the token.
      -
    - - -

    - -


    -
    -

    Connect to Enedis:

    -
    -
    -
    -
    - Please select your prmId : - -
    - - -
    -
    - +
    + + diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html index 79d69a194e6..b5c7b1529d5 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html @@ -153,7 +153,8 @@ function retrieveToken() Munissez-vous pour celà de votre facture d’électricité pour créer votre espace.

    En cliquant sur le bouton ci-dessous, vous allez accéder à votre compte personnel Enedis où vous pourrez donner votre accord pour qu’Enedis nous transmette vos données.

    -

    Une fois cette opération effectué, vous serez rediriger vers une page de confirmation.

    +

    Une fois cette opération effectué, vous devez vous rendre manuellement sur cette page pour terminer la procédure.

    +
    diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html index fce68f98eb2..73e8d8692c4 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step3.html @@ -154,35 +154,48 @@ function retrieveToken()

    Plugin Linky / MyElectricalData pour Openhab


    -

    - Vous devez maintenant récupérer le token depuis MyElectricalData. -

    + +
    + Vous pouvez maintenant utiliser le plugin Linky avec MyElectricalData. + ${authorizedUser} +
    -

    - Pour ce faire : -

      -
    • Sélectionner le numéro de prmId dans la combobox ci-dessous.
    • -
    • Cliquer sur le bouton "Retrive token".
    • -
    -

    -
    +
    + Une erreur c'est produite: + ${error} +
    -


    -
    -
    -
    -
    - Please select your prmId : - -
    - -
    -
    +
    +

    + Vous devez maintenant récupérer le token depuis MyElectricalData. +

    + +

    + Pour ce faire : +

      +
    • Sélectionner le numéro de prmId dans la combobox ci-dessous.
    • +
    • Cliquer sur le bouton "Retrive token".
    • +
    +

    +
    + +


    +
    +
    +
    +
    + Please select your prmId : + +
    + +
    +
    +
    From 5302062b4bb080b4e379e9b90654c27f78d1e19c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 11:21:04 +0200 Subject: [PATCH 079/135] some typo on doc Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 80 +++++++++++++-------- 1 file changed, 49 insertions(+), 31 deletions(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 83a8ff1d638..e34b8557262 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -34,61 +34,73 @@ This binding does not provide discovery service. To retrieve data, Linky thing will be need to be linked to a LinkyBridge. LinkyBridge can be today select between enedis-web, myelectricaldata and enedis. +### enedis-web bridge If you select enedis-web bridge, you will need : - To create an Enedis account : https://mon-compte-client.enedis.fr/ - To fill the bridge with you information : username, password, and also InternalAuthId. -| Parameter | Description | -|----------------|--------------------------------| -| username | Your Enedis platform username. | -| password | Your Enedis platform password. | -| internalAuthId | The internal authID | + | Parameter | Description | + |----------------|--------------------------------| + | username | Your Enedis platform username. | + | password | Your Enedis platform password. | + | internalAuthId | The internal authID | -This version is now compatible with the new version of Enedis WEB API (deployed from june 2020). -To avoid the captcha login, it is necessary to log before on a classical browser (e.g Chrome, Firefox) and to retrieve the user cookies (internalAuthId). + This version is now compatible with the new version of Enedis WEB API (deployed from june 2020). + To avoid the captcha login, it is necessary to log before on a classical browser (e.g Chrome, Firefox) and to retrieve the user cookies (internalAuthId). -Instructions given for Firefox : + Instructions given for Firefox : -1. Go to . -1. Select "Particulier" in the drop down list and click on the "Connexion" button. -1. You'll be redirected to a page where you'll have to enter you Enedis account email address and check the "Je ne suis pas un robot" checkbox. -1. Clic on "Suivant". -1. In the login page, prefilled with your mail address, enter your Enedis account password and click on "Connexion à Espace Client Enedis". -1. You will be directed to your Enedis account environment. Get back to previous page in you browser. -1. Disconnect from your Enedis account -1. Repeat steps 1, 2. You should arrive directly on step 5, then open the developer tool window (F12) and select "Stockage" tab. In the "Cookies" entry, select "https://mon-compte-enedis.fr". You'll find an entry named "internalAuthId", copy this value in your openHAB configuration. + 1. Go to . + 1. Select "Particulier" in the drop down list and click on the "Connexion" button. + 1. You'll be redirected to a page where you'll have to enter you Enedis account email address and check the "Je ne suis pas un robot" checkbox. + 1. Clic on "Suivant". + 1. In the login page, prefilled with your mail address, enter your Enedis account password and click on "Connexion à Espace Client Enedis". + 1. You will be directed to your Enedis account environment. Get back to previous page in you browser. + 1. Disconnect from your Enedis account + 1. Repeat steps 1, 2. You should arrive directly on step 5, then open the developer tool window (F12) and select "Stockage" tab. In the "Cookies" entry, select "https://mon-compte-enedis.fr". You'll find an entry named "internalAuthId", copy this value in your openHAB configuration. +### myelectricaldata bridge + If you select MyElectricalData bridge, you will need : - To create an Enedis account : https://mon-compte-client.enedis.fr/ -Follow these steps to initialize the token. you can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index. +Follow these steps to initialize the token. You can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index. - to select your provider -![TempoGraph](doc/connectlinky-index.png)
    + + ![connectlinky-index](doc/connectlinky-index.png) +
    - To follow the two first step wizard, and click on the "access Enedis" button -![TempoGraph](doc/connectlinky-myelectricaldata-step1.png)
    -![TempoGraph](doc/connectlinky-myelectricaldata-step2.png)
    + + ![connectlinky-myelectricaldata-step1](doc/connectlinky-myelectricaldata-step1.png)
    + ![connectlinky-myelectricaldata-step2](doc/connectlinky-myelectricaldata-step2.png)
    - To login to your Enedis Account -![TempoGraph](doc/connectlinky-myelectricaldata-step2b.png)
    + + ![connectlinky-myelectricaldata-step2b](doc/connectlinky-myelectricaldata-step2b.png)
    - To authorize data collection for your prmId.
    + If you have multiple linky on your account like me, you will have to repeat the procedure for each linky. Don't select the two linky in the same procedure, it will not work ! -![TempoGraph](doc/connectlinky-myelectricaldata-step2c.png)
    + + ![connectlinky-myelectricaldata-step2c](doc/connectlinky-myelectricaldata-step2c.png)
    - You will then be redirect to a confirmation page on MyElectricalData web site -![TempoGraph](doc/connectlinky-myelectricaldata-step2d.png)
    + + ![connectlinky-myelectricaldata-step2d](doc/connectlinky-myelectricaldata-step2d.png)
    - Go back to your openhab with step3 : "connectlinky/myelectricaldata-step3", then select your prmId in combobox, and click "Retrieve Token" -![TempoGraph](doc/connectlinky-myelectricaldata-step3.png)
    + + ![connectlinky-myelectricaldata-step3](doc/connectlinky-myelectricaldata-step3.png)
    - Last, you will see this confirmation page if everything is everything is ok -![TempoGraph](doc/connectlinky-myelectricaldata-step3b.png)
    + + ![connectlinky-myelectricaldata-step3b](doc/connectlinky-myelectricaldata-step3b.png)
    If you select enedis bridge, you will need : @@ -97,22 +109,28 @@ If you select enedis bridge, you will need : Follow these steps to initialize the token. you can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index. - to select your provider -![TempoGraph](doc/enedis-index.png)
    + + ![enedis-index](doc/enedis-index.png)
    - To follow the two first step wizard, and click on the "access Enedis" button -![TempoGraph](doc/connectlinky-enedis-step1.png)
    -![TempoGraph](doc/connectlinky-enedis-step2.png)
    + + ![connectlinky-enedis-step1](doc/connectlinky-enedis-step1.png)
    + ![connectlinky-enedis-step2](doc/connectlinky-enedis-step2.png)
    - To login to your Enedis Account -![TempoGraph](doc/connectlinky-enedis-step2b.png)
    + + ![connectlinky-enedis-step2b](doc/connectlinky-enedis-step2b.png)
    - To authorize data collection for your prmId.
    + If you have multiple linky on your account like me, you will have to repeat the procedure for each linky. Don't select the two linky in the same procedure, it will not work ! -![TempoGraph](doc/connectlinky-enedis-step2c.png)
    + + ![connectlinky-enedis-step2c](doc/connectlinky-enedis-step2c.png)
    - Last, you will see this confirmation page if everything is everything is ok -![TempoGraph](doc/connectlinky-enedis-step3.png)
    + + ![connectlinky-enedis-step3](doc/connectlinky-enedis-step3.png)
    From e8bfb1a4730c9daffc2fd8fba031c5eb175a1e0f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 11:21:33 +0200 Subject: [PATCH 080/135] some fixes on oauth flow Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/LinkyAuthServlet.java | 7 +++++-- .../binding/linky/internal/LinkyBindingConstants.java | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index ed27cdc271b..4b13006bc33 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -170,7 +170,10 @@ public class LinkyAuthServlet extends HttpServlet { } final MultiMap params = new MultiMap<>(); - UrlEncoded.decodeTo(req.getQueryString(), params, StandardCharsets.UTF_8.name()); + String queryString = req.getQueryString(); + if (queryString != null) { + UrlEncoded.decodeTo(queryString, params, StandardCharsets.UTF_8.name()); + } final String usagePointId = params.getString("usage_point_id"); final String code = params.getString("code"); @@ -181,7 +184,7 @@ public class LinkyAuthServlet extends HttpServlet { replaceMap.put(KEY_REDIRECT_URI, servletBaseUrl); replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseUrl + "?state=OK"); - String authorizeUri = apiBridgeHandler.formatAuthorizationUrl(servletBaseUrl); + String authorizeUri = apiBridgeHandler.formatAuthorizationUrl(""); replaceMap.put(KEY_AUTHORIZE_URI, authorizeUri); resp.getWriter().append(replaceKeysFromMap(template, replaceMap)); resp.getWriter().close(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index bc11ef50f41..9f9fef6cde8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -129,7 +129,7 @@ public class LinkyBindingConstants { public static final String ENEDIS_ACCOUNT_URL_PREPROD = "https://ext.prod-sandbox.api.enedis.fr/"; public static final String ENEDIS_AUTHORIZE_URL_PREPROD = ENEDIS_ACCOUNT_URL_PROD - + "dataconnect/v1/oauth2/authorize"; + + "dataconnect/v1/oauth2/authorize?duration=P36M"; public static final String ENEDIS_API_TOKEN_URL_PREPROD = ENEDIS_ACCOUNT_URL_PREPROD + "oauth2/v3/token"; // List of Linky services related urls, information From 6624d2d5dcc860607668392259baaf36b4e49c7e Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 11:28:18 +0200 Subject: [PATCH 081/135] anonymize screenshoot Signed-off-by: Laurent ARNAL --- .../doc/connectlinky-enedis-step2b.png | Bin 62620 -> 104522 bytes .../doc/connectlinky-enedis-step2c.png | Bin 113779 -> 181104 bytes .../doc/connectlinky-enedis-step3.png | Bin 75828 -> 108455 bytes .../connectlinky-myelectricaldata-step2b.png | Bin 62620 -> 104790 bytes .../connectlinky-myelectricaldata-step2c.png | Bin 113779 -> 172675 bytes .../connectlinky-myelectricaldata-step2d.png | Bin 65112 -> 100987 bytes .../connectlinky-myelectricaldata-step3.png | Bin 78312 -> 124292 bytes .../connectlinky-myelectricaldata-step3b.png | Bin 62695 -> 100862 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2b.png b/bundles/org.openhab.binding.linky/doc/connectlinky-enedis-step2b.png index 4569154a3e886f24766e9f3c54579548d1d3c7f0..bc48ef7f46d8f44803c9b91811474fdda623a6b6 100644 GIT binary patch literal 104522 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
    s;%VVo_g9@`GI(7;Q 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%0Dabjgt8ZI!%nhGwu7(z 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 o){c|AQECRwuC@83t^1(AG zC@4fnX&o0RD3m|{T+l-fWu{P2q);;ABI=%oC)x0UUnK6{H_vPpi`L;%>PW+WPzJH( zA$1btBvYMM#BZ+e>mh>{A*V+eh^u35uUBgb~Sq?A0+?EeB6@zTa1r zT6mj#dwZLEb6zqMxqFm!{4TBVsd&~q?{0I;M6yOigcXMR_eS0{W|+f`fH3^OI{^yz z3p7G+8UiU4%)d3J#1Vv{?8!fb+Xq4+{CflT`#3Zj)W0_@$ze&MxZ;Dvx&B=PNXhhJ zt!PJ*vXXjh#bp)cNmIvk#cFD5@~=ke=xWRMw6KU6=uul`XJ3xXN0Rz)D_bb3Lu^AS zk_*t#xWy4H53AiLH7_20^5)X7HHUC;q}27s0!GGODVP+W3tKp29so1%@%I{rl>dea zL2`I=5t_^xeGdBMpT2< z6wI}0OS0sOpR0g`Ft)2KrMKO-&p~LQ*D$p@JUcG&^d6c=63i8|-5x zmuM7I+T_B^&2uE*>`sOrwF)>WOGvb1MA%qYK2X8LQ=`vc1zb8YIS?z4j6i{Rs zh`z3@VL;CEebFovVE4L`Tv{21y(&FAQWygOjb1+)g9a+NLkQF}_ImTx{u-$YIl{`& zZA|?}*)?-m>QE?Tq5+++Ou7ayghUMJ+pRw;tjB0M@{^Ual+l0C+n}oI+#1S8$rUz? z`rW8aysC@Mv*%5mD)`4ui=c(U1({+8i6QpZqX(>a2R#r(8cU@Abpg>?!j8~s1KAz2 zBQheHA|v5_LWy^b%xQ`m^Gq!#)p=jES}Nh!8jTqvx2RhVXGz;>bq-=$9&d53Atx`=s^$lj=7$!L?!$kAX0Z&{1CXh z;H9jD1k>f`415*;r4bi94rIs`jGL90`P2)eTBk|@edIw+cLK)OpVssB(xgx@@n~pV zQ+=w8^u113O1Q`Q&*ukh=|}Hp9n4XMzbh%Ce#B$_EjaUnFqXQ!*!-SvwbV8Cky$b` zG9;IIcwB#n({QwD0`DjFTzB&N<~kGzW?QgMmPFnS8p0&AJ%T9gVo^0C#;|TEr06)Y z6Skb;7-z8@)?*&pJS(c0ip^=WzXBhX-9H$}0MGq%H*}qNyIaAZ{j(JvYWWkZ0}d}O z=I5ICrAMVF3o9~MBO*}^YwJZ)4czhEz;h$lx{c=1yPr)owq}aujt6jzqBJhiQ|avz zS_XJ!1nQ68a|C>(4}vKlUpIWtk&hyL?N18F^Pdz!0{4XL9!7b+bmt=$+mw~pn!m3X zbSlO=z*TBx2!C@0DQ*x75${y{VQk4Xj=_mnG{40cvm%Qbt#^a9t={Z!N0hn^me8jR zUlA-byY4p!kgTR;#0YI#n*+=U=DY4UeC9em9C%+Y{`fh+->o_{S?t-dneai*Gb8bU4-lp;}R+z4pxyR@Dy zVa(?CL|`<0pvq?7`!Z^`uG{Q16mxnrzaznJc`=f6pJnN*4s)^5?Q`6+YF{`$E{{R> zQ1=H#%}%$~o+z4FAVXGG*79PjPnJ7cqoTT8Jzi3du4QJ(hRM{4E8RWGSLt}9oZ%x) znRf3;jjnaP_b&{;-6U;>@PL)Y0D%b{5r>nddRYW_(X~h{oTN(hu;vGPx0feKE%Z)R zSTnMd|C-|;{f!TgP6kizzuw}K91dxpOZ z@;P+N5M5oDH#Ieh{Jz2ove9mRIWGtn{86Wd96JhfiNt2K98IF7#E!txcZ3cH+IfXP z=;`arGk0Bx$`2R?eY+ZtJ$@;~o+=~GRRgx{mMLY99amA9&v*&+RH8yFb9S`9P&3b`z@zxpT^nyF_=-E6rW-Kc2 z98<{Zxl5!Rkh zo~dJs{*OSChD1*AC!LS1e`R*;o-mp#(i+LN8jfNoQDMCwmWghDFdx#UPMKg;>3!f^ z-Y8=TEG8?>a{knPGb86ZfTcARjAJ<5mr|MZ?dy5A@70K6%Y0K+*Z8j8qKbY`I<|eA z%D}rqm|SD2>SHn!d1087$-M7=vQ|YZrNPZSqoRcR?7Dca&sjS(Q(iPvk%VW`ZqZ3C z@NLBu7!*o|Gp9kD3Q@va!cYDP%@`4RaF z{n(5Uhf#MAoxM0mio{QSo(c###qMh|0{Vj;Xgvm_@SyEjIOSLJ591%nhDJ9NqH;$z zXPC<6ENES1YPGbZ@i|6k50dG%DnLa7r~)@})<3c6%jG-{s}~v1V)wOopWhNkf$x1g zpH_{lT9t5C4nes}LhmnZZf9%h_T9Id-Y4}#Uj+o#XMb(~34Lx0#D;FGs*0MK@kEh| zx7I1X)$Ny3QT`SB)?@D08;^*nVw6B`i~KjP795l5oxuhUu(Q+;hyX zmyIc7B)?J26*OpOJtG+iEHz3YByh{kF$ig zS9W48!g*SOQjPqrM!>@qvFct?fbv!mac6@mP6Fo2dX|IMKiVW?Qp8^3?Mk50QB}=0 za{tjZf`QHNnCw(kR3?{q;WRnQ3&2IAfNp2#YLFgHb)Z1b0^?-ep`rKu;cVy`Ff$_J zZW_6D!}z&N9dFx;m)~$0`G5R(ISyl5j{dec`M}AUmkS&>CwW7=q7#VyE8P8=<;fRGBc|rvA}X!9v#&XGVIr> zSH;R#?boiPJjJ@y;11ibY3tyu6#KR3n4rxfl{l_Fk`_MDq5bkiv!0>H5cPAv9-jc< z<&K-#tb_wDJoYF9xLw|ZD{JrC{IDZ;w8MJySAKy0&arx}V1`imr;o{rXqEbn-qV0P zFy5EHnTcXQ5Ndq>{=R{N$NFneBb7E7ZZoPVg#qTg6#4mp)@E~eWmBfq!zZqznK!ZH za2Ub>?yIe-p3Fm;2vIr2rYKXpewR9JEU>9W2=;Ek2$bOd(mFkul$cof#y(h$rJ~JX zbbGVmbMEDjL$7D>y>*9Pw6dOY5YRt5uWerE{1KH{{`z1-4f~I`t={|70I#-3aCIu1 z@o!kOGMmt*UQF) zRenUguFAUIi>tKP$@pko8^L7N7leM<|za@&6ZLn3M zG9CIEhep$S_`0l^0mac6nA$i&9@t;F7f$l9d*|mlY!x77f`m=es#-hhQ-O;x5a30tg46`2k>KqH3Rw#rq+eknp#X|}s= zuhY(z=W>Ht4r?@1@qk~0b{P0}q|clwRpM7N|BkA5LK0d1Ppa_bN(4ViuBk!oe(zO@ z8!RU+k3NQTx!2&}V8L6+5dOMOWTg2zV`F@9lg4=?!l9(0NxaQTYSXe%ixW46*?{aC zfWSal&L=qCaoRvy?)6P`P7?sI%_JK1e*V>X2J@7xWtbmB#Fr3Of4}Aud+1j`hvflE z=y?LugJ(-osU)^B-*VqyN@-=w7e^?s9M(q~+-N!ZWDw2%N}7I&ZME%wocV_<%+G5G zhRVpV@5Ty|Wfg$g&$UkOyr#AiXc!8wEIF_wD*8LCv^U?<%UQWFWl<{ zye!e&+)QU!0k%|N9JoGrLcCNTssG8Ah`+%E)&0kWg?^!qT$wybSd8*w2;0sjNGIVM zdB#?ZkfZ6Za!wvCCW1AzzM+nW1x(!>mRE(jQ)`OE2Ayn}QvT=)xo+1nr>wJ?aziBG zrD3Tu$>=pyHOPjRgDu9J3mE;h_eOtJ0r1@uLlxKq1QYCnmH834WubOz3%ONr|E}3A zk)x?Y)r83=HEXoesIj|I(Xd+-Za6c^t!XrNjIji=J>27C|FQ`SHbeJ)q-c4ZX9(0u zmQ|E3u}@Fsff?d{Dkayx z%H)5yZjJ+*C6hyeeE4jwaWkY1(<@PIe%l$&&TubzM;Z+ZdI*7XiB}4+{h1frj5h@C z@2ovgxEsArU3-AnLuooFjYDy?#rd7k2C|#x_8IPHFPUiX8BfJXbCBlSHsHs;!^5~E z?B5pIn=ejU6mF+7BC^ulng#&#l5JR8+E`nc$5lrb+g2uJWVwEghI{%16CEQg>s(OH zY12@RsoAL-;<8At7cE8oca_Cb9M%@@VLc!(2_;2KSus*RLNkeR-?_ip)y+*oTE3hX zEl^BU^dnlC6pU4u44`%5$!*nuYBK~d44FhaUZl1({i|-oU4*!V5g4qjp}}Ftye1Wn z$Ruk#O_R*{-v7khx8DG(tzn>Gwx6s%TFZ(ZK;KTtM;kq0RE~rQE1b8DAuTUYx?HBB zt7%*r-*IYB_)J_@?IzdpQZnPY+oZJbXGVX*iMw$1`)m>WyD7}yBrNVd#3k%NH&ya2 zP0eIg7CpEjx`BZK6;3?@iXbQic3+s~2{x;1luq|v-2nF3D|?=_U_%9n+dJftc17g; z8kvMz7vX}xObjNPoF9)x{J*1Tf^&s` zVg~AQfbwqU_MT{dVh2JYEK$eBr-)W(m@Q4lM*UTHA%%jeCqrvNI$C1?`BhLbrWzqL zzW+@E1{%%M7dFGJM8%{a(*0~hiQ{5*?cpOD#v7Z%91a< zPG2#l>Qa$MqQx%;Q#iGG9wr_duT!u94SOXHugR&r4gC%q=YQ#@{ziy>P@S_ z6_H*Z7(^zV<`H|v;(aW2O+%S|tYmc^1F?CH`MS^UC~UHS1sMuj4F(#<@l#|228fN8 zMWo%uZGa1b!uT@@LZC1O1t|evU3+0XGJXcq-=Lh@LR4RzQ#Lc>&`{S@8R=uC0|58| zSLlIyoN}cH>Bq=DYL=vbi{XFe`h*d%{eg?ggth#P7G^~=8?W$la!SP48}99lq;JF# zY_NWRMc_Y_bIT@JUDM)3%WgrKx-QyF&wpz_{l}ie$AO;qmbgy-;_y=FklMXl_s>HR6}KW+N!4ZAap&T)BC+%VlY3i^{_s~|)Azh87mRM%Qm)@P*YgeN6I=uZ&FQX2kQjOGs*!8QB& zFZ}*bTiKal$e~J$sg-{qi8}7$^E6@q<7RLy6ztX$AT|RTmX6M*>_HeV?f;zmU!SC* z4a+O3*W~}p8KnP|Ve%2SuhTHU($|)JC{AXng~$4@Gyebg!T{>HoD6B&5wswJYutj< ze+*Z~fyDq9V9Y_o^dbDh2-tn-Euu_aSw3(cQ1R{R5>r=GlOycOprflSFDS?$yah~Z z%sD@P!I5&RFs)YnABbyEiD+I*?#t!1P`tqldR zpCkAOlocbBv%B?8e|G!ozrqmI`;Oewt{?{R74`USY%F+F>6G`}SR^lJAmMGxmGP+X? zx#-sC?xdjAyhoIP%U*q3oNCWP$BWh{S0VpbKP9i{7O9V_bRJ4J@2t^KRI%nV4|37| zB>M-LIyOQTSzOqP3Y)Sr?x|ZB)}iWQX}QmZMO!*@D4MD~LmyiblOTs7z;ckHRvi3) zFW{2O!i?(W{nYG*EYzqlf`4OMD3+S1k0fn5PgZZAEgI$ju*fOO_zC~V+S*qaznR!W zp!o?xWlUs2<03O6(y>1oYBey*@r4A0y+Syo6p%$Pkg7cic=tw$?)FT&y22eo_1)J< zwSwGbyT1OSDYH4eyE%XFEMcm&k8_)!n=7kNXmUMP)opVmvslcW zDDs`MTTd5A$gdh{YfC356LRtWNJ>kS=HYRpK!_n0$hbRQE!9oW&Q_=ezInqkwge16 ziB53Wx+u=NQM|vt_mpsLW=U$8!4D^ADH3pDO&v_=Sp}$|Q&CeZuXgG4Hmn*aB_vGl zIKoj;QBCt4W=Rd9655iOegNTRmz#Y!C(OXf5SEaDQ^;VKG3$DJg3MFKy0JD+Ca+s7 zh688(Y30`B<+8Sw5qBKEiarqj7Z>M|VT4(D1jrByQuPhQe1Z($=2m6z=j(FRHV+iW z+Me}$caTk@{O>%06dy)00yq-`5_%TrILxqdh$_)38A?gfsBrXFEdEhSqhe=ewKOo_ z@Lm7n29pIn5cqDz)7d#$6tL-&h+%IkP$A0MIGmZ2BFpD-njdQsa7^(67Ij=ALc9)i zBWRhDa!FMVb+5L%Zh@iOYVmy<(7JhkVr1Xh+dT?ndNfYKHE{PL>}kmR;ZI*x)Lp#N zczHm3=_;;BPBhOOk3qD?fL2x9@$kIr0Gw_F3Cj80pJ`xMA7*>xU{?X0x zSxjIJoWrj(Ki;%FMgj{0DC-6+bae0_@c1P49SX*g$|LmNGIfAL0=)C-M)Qe+U~;m-TY_3HCn|z3HSGuZZl~U7?T2L= zm6|aN1enm;?li;UC#+(SrXq1XuHjx>YY{_PPj&F1_b!r-X9d0Nak8XHw9--lDc zZBfy{{YqU^b9%?Yzrfwj#d3LcQ=>D4a8W5d^YL`$t1$~3MYd*@p_Ifk>J+${;Ao9a zDZgp%3*UfLmW7@Z@`Ry*WafQjr5-lty5tle%G}iGZ|5g-7pm-Kf#4O3cJdmExghc` zq)<2{?5TfB2U_}0!5C~3t{f#UAOWpoj97s?+}E2~rJJL|SUO~y6q)`_^N9=3GU|`MD+u8>n*^W894@C_tK4SpH<$yR3rcV`wbtE3iOiZ zfU)@%PW1%J;w|%gmm=7t)8o7#R?s_AESh>YWMcKGvHgADrpOjsMs0Bf|Bf{7cdmw+ z=}hb9Yt@0c!h}f6XQslNq=Or#)P%d`Y^I7L8zky;}NP_9%V1-6yQm+n)jJvJA&uO!4pTl}bGk$;22Y6Kxk)SJx z|86vw_xLlU!jHB7?J_nXuIcn2eV_T!U?UM^l1#S@>Ig_kRAj(;Nj!OZ+)GrNgL~+J z)D$in`Y=|R%cQqp3wm;5VK0WHcsJAU zd3<8jnrAAs@{2990{&VKF)C3G5Uc@~5=QPK36&yx_$vmN=x9#OO}EbYUZei8RmTMN zfW7dqXFjcFGh}(tE2OouS-xp7XDg^_Ei+BFN6p0MU5ivK%UqxHXAVZW0~xLcD^Pzk z5iYoIN$V9dsx`|U{&Q{^C{oZEkWqZ|ap}^Ln4- zu(2s-z*UT@xoCJz{b+Enz7A3wmTQVi&(9XLQ@a+Sr%2}F2K^wWapS)L)!HqM2RcY5KzG6VERLfLJiXH(-7FWg^GeQrbkxvu0$nh${_+>UO zj=N}d)rwmnaM_Q^uuwYt2UUo$lGN@%o zH14CNiagbp4%32kJldjE{FBdjXKDl}5vUg-;f#9a3WkEk7R}^ZlB}m2t)c%EvvMIh zYNyxC7E^g5vhNsLM>IK}1-tXy*3b+)wI_z$yHRXOTg%F-K>t^DHPg~xMfU4ivCU{z zwaz9RZi@!sA6MrA?|M2f__H3Hep2_F0l)_5>PX6zWhJ3k_K8d`B^^?^Rq>>hxkd}6 z`4o5(-?+DX;CnfX>k5^tm&8`8oU_T+B=Pp`Zmba9w3Z?a51tuLnEn?&H}IE0a7m^; zYqpE3yH1&QuNwhM0aM6wJg>NRc24UrVgeN|CzKP;6`(;klb(XmlE9LA&j~tc2DQhK z)0TKSuHm-0e(ZO5O`WCh2v&K~rp-lN*lhMLQ1 zauZl!#dVs&`_E~VSPby3`0i#9OTaJIqYBlHt=3z=&#ys>RJtbnhRs0KVSJ8z_|GOJ z_a*Cz|J&~%7y62j`PIINK1uT(Aue#W#H|hsXx9cT}WfV>5>8< zYVaWnd*iRScZLbYkdd42pVB;3EC3CAVCHF;Xll%>dP$IUyj1JBraN8de#@RtpNz;a z%**$1$qupE?C0Z~Ey_FO4q#^32YF@9X%+C-b*GRlWcW%&z&ZX=aH2%jy1Kr8q+%*; zPSGrRPbc=hzsWP!Es~OvIq_#)9{AzRpY6G8`*cE`dS0T~+9~9vM)57s{;dkAn(r6x zT6CTJHh%u9YwdNGc=PBrm~|zr=0ftdeBMiG+TxHd^hby{-wYhcR}rTlwry@RXmxb| znLTn7^$3$IZ&}*=rEs>qj4s|2#0!G-BDeHRxNh+l9Bg}cd_NExo-D_BhO{*FDvxUOzANWpG%)uJf^Ra#6b1uE)#YOV{4t4)P=@5?>8*yS%~a z)0l7{qCS!(Mz<*`miQXRuGt)t6Qk691Csov?V#Pqiibpc<<3sOz7_qdeRL5jjJL>z zv=tZPuBYKGiT|D%a%*rB*fC`GN?|wyayX@JYV>&m09J+KVkiO_sbvFqSRzidg9=R) z$I@WIC;o_C>)n079-26}tG?>W5fP&X?4-;&G4{JA z#NxSch7tsk*2kcA{iIBErF~zcn{9`A_DCbGyGR<$Oa{GM9kT=;=7O3w`h{jR0c^** zUGc&Ph|#;OQNU}nGZxWUQSI}-zr^MeDSp^ljE)Bq(HN)naxuE@%20>FbQ1H50=EoK z-ya@o^^J*4&boz`1jY+CtJ8CvGLBWE12>*1R*x@JD@1xa(iX9Zgp<-P6d=$i&z>5i z#)y>``I3T$PrS+vu^FwFas;goMYoW}8RJkQ;)>BSL6DgP+{iv0S%oKEp}Xf`vVm`$rzBCcl8TR(3Pd>TYecqEGrNLc4;ST&!_;sML~EjO4^ z@`+N0bJPX!9;5-}S7}k>L_hV$+@S>r2~$wl+0Y9ufW56L2w#9MnWIV|E&IV0OsEIJo4QU;8Gv}CA15*|e2?}X*6KHhw`6_|RremYuG2f~vy`)>A{ zPzimn`0k`YOiJW;IXhP?;UkL#L6m{Vzg>b?PmJ54eeWj_%GcTFNQz4kzg$B@FWvvx zltr=>{%lI#L#=O&=Jycv0QZM_R&UJxNuRz5p2fQbI}ua%ev|?bmy}jy-$GBPr`l;a zq;}5~KF1#kz#aP|@!kiJ3l20Tj{u`OynH!o$YheF6h{i^HProO(^|amiU`tF>r^H?An&r zwg|%|O~pS=>JXi2>~vS7d3O%TId>1Vz_q}dA{ck6E?`+0M7gx*nxln5#~j7=%uf38;*aF z>+N0o_fc`b^&S?e;iUAs98PLr51I36Q64xL(4YrMMdKGUm6^-H8b8W2Iqqm}98;ox zeMuanv`;_j_1cS z>Zrqa`$mMc7oBg5^;p$Mr^+Y!%y8l2M8@yCn#`Wf&Hb#V8$*V=Twiiaf4?_mIf-cz zcjQztzB+IRD&luq<*O!AAbF!TsJLod?Tp?8?m3-8&6oD9oS(h84B8iOKON?DMA_kr zzdCT;7{tt8!+%4>T|v9Ge0+W8IGdkm*9;ay!x>~&-4OFTidk((eb10bWdg2DtgY6( zZQ4``_yLytEo|3bSBSq)pD=A&=&$=tJ+>`3K1MsFe@t1?&YiUD3|~DEQW}5qq+o8V zA#ctm`@Z%vC({KHVaDDLl>s1p$0yj3bUJ9 z*w`7(l}i4v4(&WWAc*LQjlsSLA#&*@u?<#rbS9H`;E`bWi9P!QKx4lJxBK~vu5)gu zg5Z$ce$T!~_u3+iCIcO{_nBMUSt;MFUdih$Z$bZLA6Mg4Y3qayRY|*i%H62XM)qB0 z%2Oc6OJ7P+WY|Xo3$*=L?&&&sU*fN2+4syoe<(b;GfwvI&SpRyQMVfG2WDJi9&)~; zH7UhzK$}%aEdo5FS z!kn+Lm@)C%+iquinjP6UNyJ3}(*MMNeq;0Vo$w}iV&iU82B4l>syu}E$ zhW*z8`wFLJCV{^C<5;60gnSdCjJt@w+Ywb>c20C<_=h^?pgHyJb>E|V8uGa-24X`% zQ!~)B`C$cr($J-M z!Vm!v9f1? z^XTP?=#;X&U*#n+wRpVI98V`$@%({;0O;IqIp);l0*C0_Go1hAvFEvS?&C(1UtQ?@ z8FCZY9ITVg2~JCTukbi^;FnsnQH0#8$6YJA{r1r3KShS{q91h+Sw~|HE1Zdl`Oq|U z$8c`I>u#tWpSI{)thS>faK!u8=8HZ0uX4eaQw+ay!gZpm-*@_NwBI~#1COVA2M(Xf z)U`4m4lzpas=15+m#xyb>>L~l;az^Q#KPU)HlV#H;`Lm2+f7M5P6u{@f$1_j$PQh(WNdPEM{F{j$*SUrx`S7r+|o5h5~E%)J&cSQ(4RD zgu9-5&PeL=FS%I-3=orSS7;S~&HDQZ*$rttn&0G$jOQay9Y4C27fSkT7z1qAD*BCN z$VqRH7IeB>8urh_5@SpG-9Ioo{qXp5rUF`)@MTyr!eCSXyHso9NUhn^aY0YOUZg<&5`j%NXxYJ~E+BZ( z_j82@?21v?X*F9i9fikcIUGkeR}YZV(~#yjo3=Nxqq3`Hp-%6Ab@3~uiae;7g4!_c z4qz_6Xun?#ndtK3jP5XPEjVlEnPa65ZtyI0A~ss(JX@C==?W_HGXJP|o~q2MhiqZq znpcqUv&*3hVFoy5!SDJ^+FU-E>t#Xo zTa$EbCVk6F&t)%i98$yC&$dL0B&HTJWu`PrWvt_ZT#f1oOULJe z$|h8(1e{Tv_G@K>v`Li+jZZ(4?NaX3<$3_diff2A1-kF0;^Vu(TvCkIKdJsrQ6cou z^Nb(wOju43f9CPpe%e3&ouhs+XZe&fFit|rUyY%7p3n0kio79!zRCFz#pw6G^=8kQ zP;RxqHMtdu{bpl^W7!IKSjqme2`#XBiyAxdQG2rR3Y9P63=Lgr4T}EqTq5JzLhLmw zpzWsblv?|V+t-?pst6^(gk%2^siXq62-mBBEWEKCC`F0PO2Gg|PZ6r~1761F-g53DgI?8gG1?C!0tBoX4jyjf0oXpU zHh^rusIUIY&gg@a9*&0+m7T+0#hf+1(2)K}l{q5VETT-)T9@)wSc zJuPwvSZYJS& z6!&dv8J{rAqs|V+i=`H}FbrAg3&UD!eR`M(|BWXDki0(s;hxJ;LMn%dzQEF4En-7> z!7OPlF5%6}(b&=<^E&_rjOwqz-i@NIzW+E}lr1RFuiu@i#y|8i>^UQ~UAx3_Az`{n zY@uD}*medl4x?PhkmkIzhJp1BPa#_*)=iIkY?i`_fJT#eP$5ea5}7s^EBc3=)J2^$ z)T@RKOz0DQLnU^&2;mICnG%7px5tF)iY<3yhxVGdAQvpy zP^xr&-lp?p zWDm$m5$b~cav&mG)J_mM>JXIn`B|fL`>X}@;Q_5Rbd)B@YeG&g7XJiQ-y4Cf&HVew zn^UU5-#SV5U(na#pPCtl@5R_tlS&+IQ)||b-oj&NfFxPMogP>-LbcsNPxTNBK*xSd z=UlE(1J#9^62E+V_3Bi0>$<`+&or%*xg=LSYxVX++VKaaJjFyKa}};|&UJsbX6jKwpBK@9cEFO$Bs&AM@Xj8?cV5CHa z3FfX4r(Lm5?lqIIVrDCrr@v9RI|Wh{6Yox)Z$|5b-qX!k@y((NMcE;`f#uj;w(Hh+ z+Tzl5JJINxV!a5uW8wCN&2!GhnMDGdqd6wTq{*DP6x*tTNN=hc8=(434{O1fdgr~M zHGRs$W8bdT-@iq9@0I`>di{`cPonwvh3;V;8hHyq<7{F}lT4V|*?{MJQWpv#PHP zv_PdQEmiim=ftYnl%}=C+vwPY8XX-gF$2CyV+m>X7laF%F&TEH<@lWO+~#C`_yCXM z+N5~-6I)|OVYiU3Cgmwvf*KL20q862F$K5@2ubVgmJGXPjx2KN zA$52zit2G)5EDC2KbOdJp=oiQkDVZPnxn5hBp+I4KLn6Wu+yB; zX~0-->6cCHlT4Ce(9bnb&|;a}Id(r7ej;O0Pqm5RK1PcgL3wxPDKn&H#92zKafUUfQ;q&xyRxC)6u4XQxY zNM)BldoC0K`z>>}S>2+Q0WaU*1<_KS(k=L1lBIjx3kSODXH8q&FUALm3oUIIIhtfX zE(yd&1Ej&%JU7vTUsZdI$A4&+3hB=riuLjoL=WIFJV44FHws59zLJ)(vfWPd)W;d_ zvQ6@^4k2HMdvbKJmvJ{WFq%vnoi!bV!N@3y;Hos6^c^PTUW7HiBh z8Y4#FKTPG1F1vjmff%7hwcbNkroC=+S{A(>vd&eHKFOA)9R)_~QF{X=gKM|QfJmD{xIN`t zJwwdX&p9$V%JO@0S!yJlM2TGToMq~l_V3yPOW}2q(NEv@Gtzf|*y+EpcE4X6^7d+u zz<<)3f>*>v)D6WA7T<`jJSBp9~% zeZ!{V6%w}Ke*P3yyN`{8SIPU~E4LFPO7OxUzBnuu)th$>)rzkDO6b#l{V(og$)8Uh zwbj;*N&SNE0ZL)5;nRePdIrB*rz8WEs0D3cA?LPyi@yVz2*z4pVxmv@$iA4&f*2Pi zGPZ2*h#-v{h>0#+gl;=;y<4Mt)y9jKHomW&8+C(s20qIW!0`1zogkKtWj#!fu+fM6 z3xU#~(TUl-U2CuBNNwtsw@LH5J7SlHfUd)%V?-Ua1_hBZoS5hHfn`$KBC@56tz{Sm@fn zjNZ!6P#^AfYsV~C2Uff)q0iWz%&E3U%qMw?$rHN+g%k8YGZtZm>b!0ePT`O6wH9JE! z-|Kbu*GGT2G9(;HkeA3loiu{ftMpja{;E2j9@+SC@xZm88Kb@=VYbb`(hP%oSak?6Ap1G>lQha6Oie%L_Q}vQT zfAx4H)NOpiu};Yl8KIL`vrSYfj2g&_e2PkdPRvH%VbXS&2!nIAzTG zFv{qHTFIvyI>^Dy9Q*dL8yi>rPfc;IKmzI3Oh@bZFgJkHt&;TZ0g$|hq}me|Ez?u9 z|LT~a4Hp^U`$)SmiYoN-?e!59fbx}m2L6ZLbx1?p!ep1sYRk;;#MSBdN8b!FFI#Lr ztsMV*lx~2M&X-ODG00iQv%_=xPjDX``s=V%@N;}{9Qe|#93X;X+Al}r_9YcI~zToW-m zZNMp^|HTk0Pm~odbJ}WpJ6lUgW&dPQ#z28A*m!oCf%8gijd*)dd*O=YumvMIRAZGB zZ6Ea}a++ZQ%RWeX`@+NGU|E8=ufNVEY!xoOt!}=mEP4cpx?<5|-~5QY?mVODx4p-b zJ=8urV;^p-d1TDB!6DSIqKRg2qiyvwNx_93LI&7@9}4!}pD!)Z8b?}iOn+UWLTv7_OE{45ISU)Oo$X&BIT_3zyY9efT|A%q zLzyYL&<4m$aCQ^C<3(Cb;5l7}6UeRg-u#i>>g!jRIQ}>sf3R4X<(?gmJu(=te|ltlg(_;?Wf18e#+}46y@rJ73a|}>dhbd8&qeeAgD*|vs)*HvC1g^s$$4CvHY=} za~Us;)QfUKM@NT4NL>aYiiAL-JrtbpOhR*+z=ztN@PLsoAT56?QRvIB&{Dc98LRoD zw&jNs6-wzZ^&!|j9dWFon3^rznYS~od5^#jgb)`ZbTXSy=z7WJHVGQI@E*&OT3tE3 z3fyH7%cRAfvdadyUGY0&mW@*?F=i#ZUY~TXtxL%Q;&1uPXNS2c}doA8#I=mUJo9b9bT(1gB>;F_g_?hqw5$dll=EQlWFNamoXsmGd|kU|@T z^XZ}R{&-v{cXzf?>7iROyK{=jW8*N56!)xAgMRLE?M>C4sC64Ww$7A?qpF}o`|9*a z<+{|Ub`)T%{!gDz2q9yA&dX`*=8@3*BkH>E^@Qs<%g`@=>a5QV*wxrLJtolOLc5PN zke-uIx}w;N6`sBI(&Q-St+t8*;7Wld?YbLy(790UQ?~a#w|;wI&oP+Ab*A3$c*%do z&E_rP{Gmr;r-M7U!<1$=BYR(c(B6hwpoL1~!lXX0Ey9@%!}7e3u6e|TKo8M~KaWc9 z(|JL(58V=#z3mG5S&GNWQa-QOyoOeJJr2D-q5|!Y+Wti>0ht@T%db99$E9kW?x*VG zCm8O3Ag&mfI#u2S9jf5uI~juh{YLFKSqwjsU)+zhntkMwkH(TZ?0&5@A|42ARS!jJam8C1Cj9E4?)R(~` zTy1ShS%<5`3efbX%Vyj2l(k>T+IWkPHj|Z0s!9KSUEq7j6ahLH_Iu&y?k~9f36HAj zqQEJX<+&3cqqRL;-641^4x550Wzw`zia;2Z5C$aRv{lAQ)sDy-d>RO@59{3Yf36;y z4+?lT2jx^VMOb7xh3tN?EfrqJYR)EIcOPvW#iS9f&4pq}A&{YlsXKXlJjitLjYy1K zb6Yehg*951p*$Nh+ZY-AuwB|2KZTlLU=&l@ zJ>TeTwZ|*{|HIyUhBdXVYoJsC5fG3fNKr(TDoT-#AR-{Wccnw9(u5EKq9P!mAfU8R zq?gcp0O`_uXdx772}x)nKq&WF`<%Vc+NDH9~PyzsuyIhxJ1@=<;oOw7h4%eSf4{A%1+^tNt52m=T>Vpv>{&XZ)xhQ)7 zy7gt{uD@j|J)VtaO`$S+iN}J1)@xA1`hZyyoys-pSosPwoJe>p z2r0WE5jYweMMU$JzPCe#@&d!vE2il6c1ODCB#wK{>O?EN7fbq6XMpCFS4HuWoWa5Z zp-Wji4Xfwx-GaLyz?I9K+}}Aa({4xHId4tE1%L&#jdt<3Jj3zfPWv;UC!umcm23xF ze8T$s(+8{Rh75Z%vWN~?otgY1XBFVVMYkqGWhNwaCGDy{Pf*ls!lxLWJO35H(B>{vy7 z?DBs6@kUWc7iCR|N&j>~k}!pUkNi^f8=kF{s?M#M&Z^0?4?>x%VL!nuwDk9c$+GL5 z-=D~r_NTh6Th9~pJp%4XKHP%HfBG0Bl!LeR`aYQpG~`tM!hP(1aRPPmog+bgYx>rD z=3gM-l)8PH4NVgiw&y$W`C$BFeluXC6x`;v%UPCi?EfTg=l#P^xFvD1N;#tm|M-TG zDPjBC-ppx#Ss#(O;OHH^YBx3aS&Kj`RPbQ|4;@O@+@qcEVkpQdX^*gdq~j?)9*Ta1 z+@40xmK>en+I|cY&tBx#CnGE6xaLV*bNN}#JG@CTwwijwPQH`JL~=>i<2jj^u*0gc z-Y`k;OG{p&v~DaVK+j7;d#dlUZfIsDbkp9817GZPGIW+}#Q9i| zBqKg_m}Fj5Eow=g#=rPv*1kfP%D+@G?@9=>H#@bi_GI>VN503&tRyuw`wY;Z92O)Q zH2`^PM+S^de#{4K8<2TRBB8(Py#Vz`75iMsdl{_d3Rzg-14FACPg6>N_s_~mFVVb_ zP?79aIp+$>?@wcr%gZ%lM-v=^H?&+JlJ&(lRbBhL}f#DcEGuD-6gI9~t?@rj28?(+RQ@0>;K^BZ2lev>&z^T$s# zkY)?(i3E@MgSLIl%ep`C=f*gO)-wL^x>9g# zeh+wg?bz-sv_nOUN&4tn)6e@GDpdqu%hJ6P#Io-rsS>#VpkM&ydgD#HiUejY-ICPP zz!1)TfM-}+11>1O#DRs}th>;j;Np(h{g}M+>ICZ0gh@OezYavLX??`;S~9^X1V!pH4e)saR)DZ50rQ+Dg2a~UvA!@yLdInCN zO_SV%91cfIychQucTMbFp5I6tTwO7skdl#JDF2nC5coBb(DI2Y;8On06Axh4LiuON zvP`;{cV}VT#{Rke$j|l6jgwbuAh;>PEEwxsyP0B*Kt`vE=^fpEO8nb`@+hsBf zsI?U%k8nv21_{$)RZp3meZoikXgk(sUam~ufo*(ZZ)dvIyE1pJDn1)-b~EPwz>8WZ zx>sUss7%e09=i;WRYhJ0+sUWKZFuaJ2rW`+nk{z?CfIBW~{p&HatU&ulJzjiy2+OJ;f4GQ-Uoo$K3m zQsGWzce6V!_$R`nElz@fGPMrkfWu-Yjs?lY)>$*nc>?_I;|6ETPWmTQoOhl&-8%F@ zwpyFdEAI92-L^51tZcQ2D&1?QuDm$vRoZOXA2v+8>5$l-^*G{&dz6=c6VTd6LxkIo z;C*V!2+ZT!t8e*L-J}UV9DOgyLa{rN`e6Q%6(GXks z+nU>M$?!LYjt{0@g<5keB#CdSBw!y)iY%wbmT>yathp4zi=$mA6w; z%w;h(6D})VQT?EZZQg{X8Kyyml5y8Bn#>;=>ZyCa9Z{$L*HFNbe_rG z#?WihE9S}Y^6X_${J}Lv?9_|t1}U_2$#e^Dmg#^gFtliZ9sJdvjJelr8!Ts8G3-n` zy=Xd?9vL#P%!HKw;8HlKZ-4lQ(Y?ZTg0ylri zM0~wTi%9Q*$tL!U#YnyQ`FiBLM~{zw@BAuc$X*&W|2Z?*_+5bYeM|9;*FWNSI}6g@ z@3I%G1f|=ovA5q)mAPNZzxRq;3)EWdlc>~zl;&EhGc&$J)=%#4vEpwpd*B&II>>On z=6knk^CE`Z#Lj{a@3RUxTJS(PCfO>q@YPWmdwTLml~`8FUvZC&c65B{?`luRUgdqP zYg@Lk5VzY>(mX5K@SPKLu7^^bf?gCWoPBvAw<-Iu#K6ZNSilMy9xv`16=q4C?Ydtvzw~|uHvdmu3KIK2-9l`ksi$-+H&?n7LRhSKVFN{ZBLR&^vYr^}# zHea6!YdmyhHm&bBm@H+OBRALOe4QRizu%+7BK>i7*0Bz2(uiJT@NQX@OVU~m3);w} zn%0)Mu9{i0I-5G3e2!-P2|sF}fq!FIt!=;4DU&m7vDIAG0TW3%Rtn|oeJ9y;E3kQM zaJi3i;>xPX8pFPO=#o#rZ3i|R=f~#c7jb>9v6CTBies2|%6UrcB}Zsmtnb7?-xZx7 z90u2xhK~1Cmunxd3*rc5U@+IGS>ZG6jSJjY zcFM(T&<)IRJ5FH_hp{&GJh4n1d+nGrJ#eRCwin|$inH<=f|hdDN@joYP1ZmpBWKUy z?uoS~oBmomxS1ui2bbO9qffyH$xdY1F3 z0lE^OnlXh-o}ktlK|Z59a{gE3-fe1RR%7WB7xAgh-UIkAYUIzcGQZNPr@Z#@nf00N z;<4_S?TJ?dk|pz$trsw>4?w}PkP`m@cJ#}lf$hcir6!AJhP4yyI(s|8^`>rzwXY?T z%5C>uN+D7HUK;#ci0x7LM_ymvCE^e4oprs$CfAU2ba7HK-~M`NzllTHX1-HH4Px_hUqeh(mT|w3PdzPH%3vE`n)q5D9>h?-nsO)>$$A^QjrmNiY83=(Yxe}!QIg6 z2Ss5BMTp$`rQr2r;$5L3HAGWj9&;S$ir+q2KXb-TDxh5d`ENfT*NPW@c42oj2=A3Z zCw~4a@mwXh7^Z*;F_AR|cDP=~pq5?mmJAIg)leI^M3dJ>0o6-i@!mpJX=7q|3|K3HNxn-6E#=VxuS~ z5eB&JxK*B_8dX0QP*9GFs>^t^$W0p0DVFx;E6jiaX4Nzx68Y8@pWx(t8BCYsNa+!U$b+=Z0ZtK^W__Bx%s6Ti8{m*BOF#b}DZglAKb;_ec$% zP#ic%F>(!3{oLJaho-|%rcS$bS6a4iK^tmfejNr3aoTSw?f1{DSrM=9PVjk1#sOw1 zQhNvvolXmSmK$^m%-H;v_j7#J0pH5AKVGlQjJA8^bM}GECQ-=`rIqNqnFVl5aGDeNL5$9I+4OTMsgu{4RX5yb7i0j#EHK!myXWLn`zcd?=f@kw zma>?(TP_~6RozA;$>fWnM9hcYGqe{tCsUp4w^NCk52nkI&+9=}sx%^d_u{OZqn`-_ z0@>HyJC)7b+NeTGWtD|!2O&{`BicC+n+pv0CwDSCBOiL71fTx4Q}>cr zAQB|aF92Mn6QcF)Je$l>i}{kYb4Ebws`G&S9vRQ}3;Ddq-^MV8YfIhk>#-FVO}s4| z%gtj(A(P81JUyTz;6o~s`raC*>6boLVmi^w11SHM@l2@Br5qYu7mu*=&dK=vrP6W# zX|T%*R|uE4zN3eX$6QNzG;K_gEPq^_4E9PtVB*_@@rOmp?=H3%+yzBN*JVaO(%&e} z;MLPl&ftz~(*HSjOF_&8GDeoFGgPnpVL`DgTLU%;GGY=T|QGCumRn{D5w zt{-~k!`MdHE5_ZW!^<^P7%qEC)-uiCY&Lvd^NTnF0gPc)+7SkOYG{{SB8lw=Qri5XmSF zqe_qK&9A3QU)U$@$(%#K(>~4Acup7A1$)NNcd_hDe zr8!rU3=It#o3t~ry+$;G;o1Y5)?Z6$3{{3g6 zL+23o*vHc|%%f$XA-AfN!Jo-_1$SP_ODS$$(XeyWC@uLY;YoyE>F9`o&kZ zh06L}*BJS+HOdVx2o?jdn>Wp}C=a2yd@J$wU>h4bj(t<-7U%rkY7+rNGyq!g8!>`K zU4r}FA}}&{Gxi(L7#A~lU^C;im0|UQmSb9L-XpeN!mo>!*|X}8R?VzYey5K0(;EAh zQX>YQS@mq&IrKqg_u4>~bthbUP@4!@2`%2BDQBi^8x=cI>!vTi?e$ER@<^?!Ng{Nw z7zlet(s4f3RXVG={Q0`jt|^Ln*;Ka&i6=avW@VgF>K1fxzS~*X#9n`}OISZwS$(+eVI}Z?_EWRGC^e|n#&7@mYw6)D48}Z7r-pFK$hDM`5qMfJZ-pg&| z`BOyv2iO{P(R}vW?ywy0(OjVYOK~4kuIlNWr8}xwN6LBel3|OLHD4$+*GwgfYD%N& z_k>Ds3pM4RJr@qBZ=;fHs;l>FsYCgt{@#(98G_7Ek``wElg8Pigb-xj}w{9*DZ6=xEKY z0!O9s)*Pm}CP!w=EQku1oL`pHP}N<5X5+*s)T9j>^ngy>7c&Kisy@qK8<#CCL>YPx zS&|H8W4bh??9KYbnbgg!M$}Rr#%}v`XOXIFUhVx`{yb$qe%^A(EW!6$JR7=Z)%?1< zvLQpAu&b+U|G0Ge?OxvBaw>xuU3xtU^FGfGxe?9Nrp%~38|rra8?L0w;S>R2fm=}O z`g4u9R+Z~XGp?!4@*F+WR+qebo=@hjzOyZH#j+zIlTt!;U;!Ve+Fx@h(8 z{xu)UKP*ZY8Rmo&iuOvUI9r=E>#_~X7tB^e@znz0aiJGyfskU;QnSaVwjlq}^*-_c zrdRRTQqIZY3s;6QK3jgoQuTr+`N>Su*H)sIpbPT+)m%07IqX+pkZ$A00OeDBk*#ZM z)5FaZ^Ji1@VOe(n!*%p8(xd-!Ji1NoGIFuf^-=0o!5e=aO%?Rdhf^n-eClymno-Z< zXquV+8v;wJyyeNvU&E9^%!Lk&^hi);6DTUxqIiw%BK|)X zrX3yT(&BR({{f~EC5mUNANeOk&Q%&x>h{lio#KDA)gMgvFYhP`%_O+%=n^%h_V2kb zes6$3y2E>(k&t=Y-;k`i{yQ#~|Hw)BoLZTrr{<3Z{T+W+_#G7zGH>SV&-}>$uNCl; z*wg=!*y-=Mr<9p*l8`n;UAf&v`uEuSmx2D_xEdz@f4&JME9z<($-1V98Ac?A;)dXE>77{ zl3OyG{llITAT`y$<(2vel5+Sea-YeyYFBUe{}|Iw49j)X*B=W_U^Dng^MU<)Oj{21 zb=wo?9>RB-6QWa&&&RZw6?-k^C+%OpT#G*fTw_=xsEUKCi9!jc_L@Ro=WLh^yiV59 zKt`dc{ce3vF8RKkO}JUyXZwGWZv72>>AA?7wcK1x#g!gCB_m}fi?bjRvub%_EWTIz zkVGz-;$u!GQ}8iG3S?IlS(#+s56Y78w?meyrtJ<#_0H#X4lSdrXo^9nMMGD;!o*QsVlf zgTLm*7*hhWQ*@lTvn)_crZ*nd0Edn`$_xmS8X`3=Ou*# z%bD`q(g%B29`q~*O;pTt1c|NnNdl(zMluy#`@h^%WV1u8n2K4~pOopMk+KRrrxn<; z1uZ}{*ih^kR(U%asIUTMdVPH1rsz=}d_zrv2OKSH6LQ^n-<5|A+8A*d-7d_!Uzwd4 z5K9NjIJwwH(1aLGAue{k4lDTGU#fp0xg{7~I91G|*8OHW&!W;yzs5rUo?CY<7WCas zD0=(^zH+Hd(V|xL+IPXiyJaTajEvz~VPrRjZz}WN9Jn~eIwWX3&~SQ?=#UWNnZ|b0 z7uUGag3E{+3=G|Pd(`9#WllsI7}?;H6;U=s&Xro(uFA>SUT$jMFcPvqKa^vxRSdpd zY7eh!hhO+_SN6IcZqEjvA8+t+`>t(|KsKJ6sH(YX@x&UG8)qg-b^+m}rHes1;J89# z67b0^(;9Y1`;jN|VyTc1?PGXlx^_fo;wv_R^4Y3&s&t^iY;Zl^rL3FV?y+Z7$%(eB z5SQPVgKXMh-}+~q)mF#&CtF?n-ve!TF!q2B>=412YTiVhvS>pQ*2eu+&NTEm&#Up1 z^Co-afI-_(M+PMy3M7L0+4Q2z%D9b1cr^7E+8q!+v+%A2vWzfpNvmz18Npd_AUN$nSibDli@V^)Oj$ZK&OCB|YqWRBi8xq7{J<&(rx*UedpK0_>*$co<&hH~daOogqE-*09e>01oYp!|rL#L89flqg8 z=@@POUApG{hy7%u-S@{@(JgK^Y&)#mpBG;noS>8p(hkS-2+tsGVhRDUFDSAVP`ShX zvP7JC$zZu8iA^yZY^VO!BMHCfr8-*~Wu+{+k~yb8;nwzcyz*{^&EI`DhEIsdi*kST z^wwu}?lBzr0*C2>PpCj@;t=fV-_-O zdcim$p@Jo6(L(sPWP@F&rn2{XQ`~-}8v6eb89yU{i`@yq%y}cv-!6~`JoyXb|Ko)e zUacT|D5Qc$wzUnA242cDZ}KZjF`r~1S)G$0TNbD;hX7iSP2v>~H};~D#nvMh`?1)T z4RAkrL0rK)vHUpcgr@@BmwS+ar|}hfLn0K;tz<3KZ^4c+AnZkt&T$JVYqiZ{WO!znKj;Je7?8a|X`vLAdwD~SFq<1FX8t+_J5{e(zZ$x~$`3B3bhj9iF>wKr;GOWC`tlEjYY2zc-#@ip` zL%<`)Ho*gwT}aWC1Oqo)s@Gd&8xK|D3VMcmFg!ZO1w_fm1;Y@7*-^!@Wv=_`1tYu0 zuX&DLy$$7DUl1cQ&~Hn3Tla@#tbNJKW1tbLl6D8zw7;dBhr$F!1CxqZ!*r8p@I{lR zxD%oZZjQTTuC0ByncR`Gt>6$+zUBLLGyMncK`}yVRTu7u%Z!ot*r#eDV(KC1JCRDS zmvIxiN*ItASaG+DxoIU@sGmlqgrsgm&1HlV+A()=qq5qF!*q6kK#u5Q4fI&EEJXRo zK26#v_7JLlKmfpCzU6h-JVljWhU&L^DsAfEa0HNleGkYWh-;~<;r3bSh*|8`ZXyTP z7oxFV3;3k~^TI;649T&}kvdbSNC#JySp|Fhv~S1m2ZE*|qqQM$K~UoNQ?IHoqjhBg z!qzLsCq1)NZqWT z)mp-FVPWDk=xE$IZKzTTvgEO?FY490&tEqa%2|%oW}lL5F=DNS7cT%I zw)LnhCE;L(y-c67T`f8yRV&U~1bDfxcpJ2`XEo;d(J>bf8%f7hz5UiNoHjedeL3B_ z>QEkIByG9jXFJbUO4!S@6izA4wOxJz7b2V2S*coXjCmM(UWDCX zqK0#4{wWm6B7Wg=-!vE~KOeeb*(6!Y4>ELvLH zr1bP{G9@Gx$@a)=Ax4q;QzQ|7UfYWS%8BxKzq^q1%$8>h8HqVAP%LR|704#2NF9p+ zKl?(&y$yY!K4PzZVVsCe2-dMenBuT)>DVenY|@MC`tjrpxg3K5ZcXBNDHRtaw*gOfBZt9JkT6xJZG#1jhJBW|#JF;ydhU5x-s1Eb=@h)Y6^hHU=q@=y3hw-EIp2n)5)@DM8V zlf`jfR?lM*kp2X**>%PvGMi5#xSveKU(9>);jB${OaF!I8qXVc+^r=>$N0vPA*1Is zI2fx^aqGD`*@A-71eV5E5a?c{U~(A#!Lr|m2Ueu;MrR9$jr<1iLy0IlOYcTtFC>~< z62M!zNjMoV0ZYF}JB=puI4bCDG;u!A>jbAHZ65|kFI`v zKKK?sRXCmeZcg8(WtQm{EoqEZJ75{=K~A4Ye*?Q7gIIeovGM(#n8yCX%7X5~b_u-> zdWCE`$D$xiDzbgoxV2)|qAkB;kQ=S&^ycY^&trqxxQGF$ejwYgE7PfX7L%m;%T8`A z(bxyJS3~nk*~XiJ>!fVm=6%=tO~&AJJ&Z?Yh}C)qk;zA>i5_&C+zbHvsDuIikA~b=Er-lB1VN>)GUyvbo4~)sG&pKx6G^f)@vd z(u>MvG&WLuMuT4lmQ>khhZX4etuoZvTbf>>^Z#*;9GBZ;J^TYib%HSZ-=nm2)pG?h!2psJ<9&;lZ3?{v zmXuN+PX7esWj91%nT&PU2>>;sUfW4d0yP*r99eo7r$exEfX1~UTt!W z+_d76_(^!QD-yO*dx0_z8dTVlyt!o7yfJ`_YVTb@?_Fjaj}rr84xC8M>)0cng=_7}+=!!#?-zk3lV$NWfXEvEL>#-AV=*R*S?{`8 z+whc+k#_#!6F=j~Wt*I^YPyVru&2$mMmDoEyk}lbPknuT{ilpgf4hp#s5t=B;tz)U zPv8U4(?cZ(bXNP)6_*=+0Jjx0Rvs)`)S)IWsaNaL(9ob3OPcGvX3JwarHgeTif$A6 zv4PQI`>mr9LOA%>Or}(DlaV2^$l5O*VVa-Z8qYk z%8i9;HmYkimE0TV=x!7uN=)2F%K}}-`c{p;RwL2`o7RWk7_oKC8?ht>>}iu{WUO5p zlfFz|IQN8_<+x6?67>2<$&wiI5-~qKxfy!Nxp-ZM=GJyKEOVYJpuhMFOcPI?_RITk zdTWyKOV_;LJ)2m#($acA;GK|XvBjx5CKk2FuPmg%6D>8|GVp;<->Qn1sCcLq-OIAs&ilvY>0;9j)A z^h0*4zsC(YD5n9|{(4wyTE;dfKt>k4PHE`~@>Z%7Y?`b4QLvcfT324t_Np;tBRf@s zU~Z};gG5mH$F*R&g!wi7qIAnG36s;O3KzkyxiL%UGKNj4$6KatDT^WfNzvsAq3hh1 z+v^33%N=%d`O_pbrU+@rJxkK0VC>V-$#c)}6rgZchZM2w+hXdEmy`#RsVBuuSmId<)G>EyfLo#WEcACxk2Vm$) z;#ie#sgXQ8il%dJxt6A8O^HjvNi70NoYl{Wi?cgIr%5eLpVe*+bv8Q# zxRb#qfwbU6**w4!9=^G0x^Wk`&wujEnGIDk?>W_55I>&U%ROcjC{_wW(Xe1%@sRi! zK88010f6(97{_X%*We}wt-)_wuzY$haSLB36Zs9;hN^jlluJ<^Bl4X!dybJtkU z1kyy}+o29ctzPe^=eYL?gVVtw zCZ4;R8H&g<5qXiWSJGaZhNg`G^tU+~b)vx2vUh%kWkKjP6TbuU5kcR4Z4uNw((;<@ zo6B%b=h~XS=~Ix$dx^fXz+iaHxM96k{1=h*1w`yvXx%Pn{m5!72tW%S;DFZTmqX!; z{yVRZG(@|kIwuAK4h2(H8(J4rb3KFCWm@ap9&lOYfsnW6JS}Y5^t62psYi-T9%J%- zhYmpfxz8KM6%6NVITw@$w8cZ4TKGyn=H~YnA3{++Nw~{tmn=EF2=3HLpK2HM*BI#h zk|4IB$Buda;4}2;oKE>JzWDWUDImB|NfWWH>`^sucvpAev3nq&&tE^PceUq>1>5;oePHdZ0@B zN#pxO%EeA;0^HAQ$O>p;l?6cfF4VKWa?tg}StNfE95WVUXjyiWUh{n)9k9L?^Aj$J zgyrAy|6uB>5> zOy6W3?p;2wjX<^*Xj|I}L%pK6E+TXwc41|V_3P3!5#LW~O&X}5Jt=D4)F+Y}vdw;P z1Bje`5ZsJKo7b22pQTA1YQTS!}T_w~%}G!gSug@_t{t zYo>j+Qsp?6uX(joY(heUk)B>wO^w7Eh;ZQ+dT53BN-3fPw!!z+VeC_aOD^$eB5XU! z*R*zv?#XVJ6DQZh&TVSFhUaOMzB-Ng1J9ePdzx{G*Q*PVylyOs<^Js1>%rkFe0wfJ zd`|W67A-!=ggYXS7nv2m>pCQ!W%~47m)*>YkeC#?&OTh{w`JfJ)h508nlHU`rv5X< ztzr^UK|uq^B1~c{)%ISQYUG}1y!_S^F8^PQ!D~}+N8;@}PyJG#=D0j9*d1X(Cy_M0 zkXF(SK9%;oyy^TsBJPmxSINaQKyqWF1EOXmeA&w(2>ejREyy}{rP39k8@LO4#?LCvwk5a-GfLhT88r=D zM3F60uy`VKyAI1AytdUa&w~zx#$bSihqPdX_+i@z#ct*p_5+$fFP#0?C@V{!LbQ4N zfx`aa!;_U5u?|^VH@D(#v$~mUAMSpueL+Zw>80fQM%f{$z?yb#sL-@k#uhZy!b&F4 z@Cn}9dS+lz+eI)-pnY$Ms2Qm{76PC3O5|pbPhBRxxHi%)dQ@F8kqI8N-l#uzn?D#~ zJvrPQQ>CF{iCN)JR(w7|544&vz0l|JG-sb6^~OPLvdY9Rv?*!InHt(fC`wgqk1V%y zUIP2)ClHq}U`k?%>zMfQpgzfk-r%$l2UZA?%c|`YebddJ1kQrR+r3w zb@$q+NKEdxk3IQeb!9C~4Zk~)m<&i6mb^{1S?QWVr-_N%g^w11BK zgIc_Hq-0AUXk7mg{1;xA*WtUXz3?C=vL)H58Pfk%3Kt7f@R6k{^>dPi8hBLo-!9Dj z3x~Crjp#rC+Hjh%#&3U8>5l@1v$GW5+b-MM@X7Ox8LJ!>`Hz~0b5K0Eg{et6&(KWU%+1^eIl$(azp$k-CxE1 zdsyX7Ws)15@Nk=d5B@`{e|Q;buac-ge@6aSasL*k>`r}^q_@XEi|yZn|4M4*E;5RC zM&|Lqiu?DltDIyM?Ug=Uo0R`v*}tdyhxckF3F-fD(!VgwAB^??p-F4Z!lSC`^@dU8 z2mN^>0Uxeh3IEE-OA_}@>#_QO`tHKl`Il$|9+rSaQs-KF#*AS2WBgQ2K8j?+<1<-Q zrBw0ukeWqZjvfGxF?{^k0fw%(O$ZIqwCwIao;#kdl_6w=BqhIvd%C%$2m9%chLI;s zd9^*^7f6z1w|OWiDl(aT3aym{*B&Nqn^+a@0$tzC-SIbpOHm0bP9Bb78XZpQ7_)(5z*=J#*N1-~wS&y#6j&$G9$h3__{ zw8$_nY{|%bNtmK{nRqITE0w7AGHnCsLla+J{ST0)V7xoIO^TMBz37{4?UxZVEFrp2 zg~hyrL53SPIfvTmNhvtgc%8_WrT~XqKh*2DcrF&oR#r~lz4_6V44TwMSXa2tYX^Fa zHRCqaDbmIyA2W+;!YMauOp%KkH*1YiOdH1Y8z>|v_e6Qe_NTZa*8)!r{d6S^T$YK6 zyr+}I{0k?|x&@c^npR|^P_OdGBxC_XXZ1HA2pdGxbZCrKARsOPQ=VSP!2P9^u(+Aq z^|pVx6hl~`mBUAF&3~yE8oZ|17bcr8u(>Uc;kz!_d+QH4{GC_1hSJjpI@|d`(({?6 zwvp%$uNsgmL%1x3O4(x%y*@TuL=jJ%MS?2DPFv}b zBa9pT!1VaIw%**R%5=ZAQ6CpVod3{i%Q>=+utnjGO;Odc4~;D>8u#jM?=1(xX9Yjt zQk#r>GwW=8*DZN%_tzK#bV@2j%Mu=2rfrJGM$G5hf|TUzkMBxu*f@k-xbtCKT7z^WGSt#$AN7ZUG$ zWu};6Z$a_go3IYE*piiZF?*4fmYqvBg3(sbU>|*&Y2uWBufVN6tzJDa8PB&G2(0PE zR0o^%-j`9~GW?+hT}6Uf+Z^@!vKfXnR*br8+-AFznU(nICi_ z_2BnBy?J$hhpc~V4kbRd&(#9(%aJ^88^am;3Z0n>z#4zF31+TVC?|lHmKGKeusySU z8HN&NkKS~+aif!rb>WiHSZ0c_<608*g0pm$*|`?Z%YquJl6>O<`6<@0Wc*Xs%}rZ% zXsXeRP1E(B?3%&6fI7sXQR#u9g5)pmHS)wK>knS2c|@e0A=KZB1cal9>EsJ#5$9CFWs?#vbjTDu9>w# zi}^?1$_b%?mO~q}wFOVWAlHKPGb9FH3MI>HN{xQ9Dj;1Kn3}Fv;R%gH+r9pb_-$X>F9yEBVHrI6<#A8fx1!Ilsw!s=_I|l)c6f z%GsBGfV~72Qx7Xv4y3R)=lZKFrb9$A+7L01l5AJ(h=l1bx;U0IAZGC^M;)YQk%J=j zfaR#HK9EYXbv09UdP|z|m>7q~Xr9 zaZp&TR$FUTBK>uPvEg#i58E92A@-70;v)O_(Fuy3E5Rq+#_Zg14Qp+R`MQ1T=zpnw z%ax`|e6lW9rVK{dna8c6*-SlOq0uJi-;+V!=#`Qx{IU{J@Fs5wqRlp8yCi=oA8eDv z(xQ1h?z44rW?f6Qbn|8<^WVIlt9)carsb31^L-vXYD$ZiO?2`DBi{nBIEnT}LPA2z z{dy1(Nvw)(gyE+xZL&_swZyi*C+Zl4hPH+h=aH!QoSvi1y7JjN8M0He8PL`f%@mv9 zA|OxWlZVd3lj6NMau*h?eq;CiZJ&jM@xZi=>ic%q4{d}+VDQm$-@$;B#W zQ`(GcwXAj;GDs1PO|hJ;Z>#i8FPY3(G%4`{Hu!AdZu7=H%jM^adoxZhqWc z&p27C5taRsAKogV;oPtVF>SSK9OCj!-6ADT>bY5CabexTH8F%vT7CnNqR6?Y7Z~I& zF=CQe1_MUuQu*{fE~0xqeIlKaeyt#WaZy*Do_4VfzE~_zsqX4pQ5(K0QL(@E(*Ksu zF2^(?ZGg9r6>(2eN3N)B{nQJmnKXEw=s9EbUBptzlv?TZDBx^6A$HA{&8kU1MhU?@ ze&pFwhrRejU34=*<&QIt|DN#JDYxe<*NqZ3bK|GAr4ip56pxf=XQyc2oe*$1w&m$eoTq>pW&fa)%l)|^OlVKFZ-dlMP;h%m+gD4$_9Lz zo5|`Pzr4W`0=GH?G-_`x*u?bY-$iH(okc0>fr261*S}`!``)zdE4XNy(bnaHVkKEu z)P0}dBt&yDQVWiLC-wGixf6wru#mQyka2-u97C5_hQ_Wtca}TenCV@PEO6=Cof3M# zzpqtu3XrZ3Z9nW|ZVbkCp6-cR;s`x*b%l42o{uNRc}%>Y7n3DiD*OFl;(wZaWnpSF zmQwB6kOiOKprp3CVQc{;)S?U^MOST{Y?0@_gMcoF{FKOGhpN{IDXTxG92 z&wSumj@n!+2$(^!ySr<{Qi6XdCN?sURCy^EI-2zuHC<+z;ZbTt4oi|&Daqqj`Y059E_ zINHKHccBD1Y_-kHvTDwc4n1nk3mi?m9ABuvOwMDgG?494@_NUQFXDQ=6D|A)P= zjEZYn+D3zgK=9y%;1=8^A%O$}1ed`H&fqY(B@mq81b26s8C-$|cN^T@Wq?7xmG`~( z+;h)8=iK%Ef7jYSW@h*9>Q!A&Kh;&$d+K(w_Fx6|i}dFdf4)W6$?yvdEYYl(YKAYC zEH-=YeU-e;T6Eu{iXi8gV__jaVmpF?Lt#D{L|ZOQIbeT&Hu-XWom z5(%H}tglTzL+RpxVR3k>*+A0MvGZXApXa6E#Eyu+u_Uw#|vhHuUBt6$Ek*-gAXt?Ztpj@=xZg4Hu&XR1xCMNF(r*t3!Hk4*I zS;ydM{XK;a;8wNa%nh&6545{OQ0p0MIywL{sVWoMyB#Ipv8o^wq!A>KcM@IX*9q!yX1>dqIDN!TX{m69>Y3X2z zW1c0hd5wJ=SkV~8QcNN={A)vy1k)7WnoaH`9(VgH$x)j!brYpeh%9AOtVc{c9cZe`BTyZJEkr`%_p&=nHJ$Od~i)Blq5V^>eN-jf^APe1XS?{D_>eSu9R8cSYhgCfg*sI0RCX`<7BY0%MP^I~0D01QR% z?7N6dv8EnykHi49;Gz#gokoKE$Ysj#8uOelb^%&h%`JMv_4J%a--=wX$2QYW-#GVk zK;67~K8J@to}HM22%J)Z=2y^H?`h{=JC_`*fX7VY7A;OawpU{7bS(cQU*5nDJ`(ms7z_wj0yS#mUT0tQNR24t*O?#77qRR zs=!SbJ-dp`B-}rTAbzki@`H0{L8_yidwfw@nDt6_U^Ez*A^<#P_4U21$=C^|k7Qn& zoFag*#G?w9+<-H$Py4yxKh)-IthUCLBo|6V$`5oeTWSNdNPHl6ON-5dfKnW;rb;nC zuw`!9>zS$3h$*v4sK8q%L*FtL(Ed!7oPxq+s<0DlT3@&I6G#*>+4ryL(EdcOM1_9c zIkQ)F7fS)UzE{==8jtNPeda^S#hY52Ssp!?N%h5xszKJz6?LoF5!B+a5__{>`K9C< zsSg@RN)47Zwsp;}Q*Q7dzSmur$)|hEdnW>uZ{0n1SVEOBjgaT@MYU8Kl-@FUemozP?!<-9+PY%|aGwaGZgoX9R8yL1RWb?OA4V=|B zk(IS-o6BQQh5pJN3h+}eh9y@E9Mt&M6omstjBrdjj?a}Ob;0!!6oMY(!hmCPp%UZQ zuLDSR9|h%VDA>eT3E=s~dtvtKssb)_QR}z?|rVKXS3I@(i4OVME)teE5)fQJ52G$BNI93`?z$!03mq5U#{Un2_!s8|1 zz&o*`&fCjn4vn@8A`8yr3LZB*1s9{TH12nJrLW69d;m3WgUS5WRx2=pl5X(Jxnj#Q zE{#0Ox>=J;CyGWpnZcie);&|(X*{N(f|E50?ZB+YS=hwbeFXN>&oWD7WHe*IFSX1t zhD9v8Sn_^kI!_~@NGr-A?S1c%>>;bE$1M!-yp-7@b&u|!c{sg&QZ~dofujUhF}}d7 z;m4u)t6b8cfni4wuKtzhusD4C3!!2mA1w|IaB#u*ZqGo!%i1uo!dDi@gyY5iVdGJ; z5gHB~M=ls_YYot>vyuitZR6F+0fCM>I?3?Lz#PctLA<7Zk;7VdZ*edXxConqgRS&a zByP@zC8xQ2C{@c^e{tN9wIk5BHQxHCYLaKg&w#j`j7JZmRrH0NA357$M_DcxJ1T=Gq`nt?kK3HDGtYG{+ z7TH&0F1LKp?6x3dOp%vnFH2uM8}a>fAkD$3>hOjD1%^oIzwyFvUK)o|+tei3G8}jS zdrB{(c2mu7sw8^AXGgw0Kfior3KOZ-(6%P7(@@x7+V=z?1ng^AA~_1dnf&%Oq4Obx zOuN6_*^h=L5O7iabcI31LL(^g$V8QU$!#rSk*F79=Abt&iT8}Bv!omxYV<(Vf8WhM z;e9cw+3XNWDLjU#0$Yv)G^u(7m%Qjx1U#>fR~F-@MrZcPXJ**R@E*f}HY86Ff_vj* zdGg>-y)kkH;1gZ@cJ#%YHXBS@KPe}YU|Vuhh7gHn!uZ9k%NWHJj@5}+*xQ}(QENty zyb45Z%#o_JXDFn&vTl{M=z;wpwtTKnm#kpaV7o4}3&U0}?ovX1d_+`+0WAa=VHx3t*ntQU6H_?uc zj^_is!*0mu6Gf{11<{b5T%cshBgn_88*94r1L#uutIv;i;#3u}5W7i55#Aep@%ods z>Q4&_3OwTn&G@aS*ekMOKMsZ^5Fet%FSYWVv@+OBp}Xcam3=lPkuC5=&t_MYX*Ng? zun!3EoXxL-SRJ(Shjtu_Vf-?@2wMDDr1Fk zJy0>PgMEN%@&TE2lbS%z$>?Cb9GHsOAga)7WK#l+LP0882VZKO>Y}Z!C#%?LSR5+$0^Bw;WQ~CFjo*87wOko5fR?=V z-%%Wz5qC^Uib4Z_=Ey{h?a$Us)|e}Cb@FHY`mf|coe|HiG?2&Ig`K~*$k_mIv&8qV znJSa!odymvxSe^LOM=AJGAfn(dUW-kh4tgFyce!@CMLdU_)@gwC=RyD=iBUkI#G+d z?s^b?cN0x8eTGM^>}RyLt@~9^@8gq2t1X0^j{&X_?KunMB}rWIQM+|Oq}y8P{RZ-J z02sboQdXfpcNC5sRb&UNy1=(?lD_BT)dbxRPgyZFT?BD992SQjyFO%D*NV2DayT#h zeQJiA(J;iLuZ-@xw1^J-%lfY6s}%Y4--BLB9>^k5a#;NjH~uHM{22)c6Zl5Vg3Z@tR0! z=rtY-p)8CX$YxxV~hFeM&erFXgf8^NL0{`7Gcj_fEW%9*X+i!M?wy4Qa*6H1Sf2bls!FS6#Waz?T07|jB1PYh zS;3fl9ZafXd6Nqk@KeLFf7SxToY=FYVAA53OO5BbmlyblRbsd{VTHwXT$H#xv~aHD zLdxb&vLuGnsV1G?)^L~9dOPV~^w}VmryOLb??Y-VE_18^hthz)1!Z@Sy&y3f;NOJG zf6>9nJX$gz(&4N)UE%Z@*P)GVt35~C$LWP&Oepgc65Oi01toT;$)xz)^q8|&%8UmAv`qhRN%)P3j1@G`6u5^88!A|bzEF8&jA&CYV;fraVxWTDxsnL{uNlf z2E;WUD<7$@;w8$^S@34QcYbi;JW=#W*}=iBzC~TPG4FX3*b9D8;{JXcP=1u_YD>Op z54Gfl?DcNB7T$*`^whV+GcS3g&k+!=PSgO7@d&@nXu9a!10WTc z(1pNWSX16RhOSXOX)fxNd>r3o5?4GRZ1ch0tr6#XkLF>@WenqJr#LtF`14K!Y~!yE z^ZaiF%6}I{!>j(m=RLW%mFV5_Pqkl3p}6(X(r#lqU;q5OXJmx@=OzgX+7efb7}p*h z9PY`@^*5zZj=N+5OQh6g$G%qaS^0wWvoryqD?=e}rFI)^0`?aB)*yqV_R$ zdSU@<@Afh`m8YnN@vhiJtLGX7S%%VeEYSz$TiA#P?0Db?eg02m{sxE4>bCz$n9ag# zO2tgW`>>RlkKKs>C#p+X8YnWv>oA4ffFN6XTqH_j_ba33U8ZK$YSqDTvkY3=o-Zi5 zZ_3fXE)7#G%;79w74t_-^94QT&`HaGwODkEK)Wxsg~W52@6@H_L4d0+oklF=n>;Z? zX#`D~{4F+)S~!vihz_6Ba+*taoKHAm=cA>1Ix3e*X}y;<9QU$R&XbwR*f{bRcdejp zFc&M7hBPr7rw6KBz^L$S?^49{4IoXRy3EI0HB!J#@WT^r5LdEU6k{u&_`FD)UCWGo zYig6Wyu{KRA9jTOR5=i1Z|iGQ{&0=?-a~bU`g_a$C5x{#G1(Z0y(314N)I@)^dAGg zLThB8I3+0T4Y^tQ5_w}ZV-liz zMB_X$DT#?_OA>0UE+h1v(U81*?%MUA!6w{XrChT!+Mpp=$|T{B5}`@PYr+C0YGJ&a~X ztNC_2i%y?b^`$30%ygW`fgB=h<#udl-1{R$3zsQF9`K8no2~xlW~HbJlKXs@LLZ#j z0tJFq? z9ch@AaZXs>h^xK~(eN$|QL1^cX3yQ%D=DXT^l~WK!Ge?vT6N2|ek>S%30N&paQLom zeTL0-ZPUhKZA&{1+h zc376kN*#T@7`1s&U<2*8Up6~S`Ra%YRyxf8+>n0YO&m{Dn8~d4HqUe6(`2-Qrk<1r{yVe`YbU%2!v#4rz9dJly&fk zI@D>>n?3U|j=IA2OUuQ|8rh%F;XgoUEN2Lt5s-s>s1?R*_mao$v?y5TIH=}5vn^gL zv{NrAe3D8n!mB<$k5!^1sW;9y>T*65vF4#UD3%jswOM=r{$}Cey#KCG#z(YOf9zv)`)y(mZDxyqJRC5-_c?uy|Q;kca%u|Z5L)jWS z$mVVsnfqy<1@)eUXxDj35taB!A5nS!UDEjjwk}NGTx;1HFr`lgebd)_KA0?Gk+i{R zRL-EA@oKS2l_qu5U{6pPp|?w31fjO~CcmVL_4z=`k(|6&HV1I&7kaM#9pg$ zD%@s;gG|D{f=te_hRhYaS&{aV1)X+(1AfJmebyjS(ge8Ih`V=l-)b@7wVan0Z?yp5 zTPI-aghF|vok0;cY6~{D99SIs=E%2JHr8&ol)+#hSl&?rYBi}wsawohk^1Y|{8h0= zM*4H4&ZN(Z=6MRK(ge~#uioBbhrcI!mc&7uCj3-eJ6zv>!PBaN>BYg`4Ni+;)ix99(MAh(`2`9G?X}6O8NU z%eXXlWAsjheCOYYs2t@msHTdZliRYa9AVHLjZRq3)o#x9t$1`SvJK|Ape%1Xq-`_& z=8F8uk~@NeCbAnp?qz)kGuvC=EIm~5*0luk*%tHB|GcRmeKS+#R`N(!4UkurGIsro zqC84*#oX1>BOQr*NL&jN(dX`466;1Ti?&=XMqAz#Z8$@bo4Ai1Mqwe5ofDK15FHj!YSvx?O2^xh2h&0W=KoK*ls zPEK8SAKQb_dj&js%6R3pzwdQ-I-LS`NtyF6OGZL|Dfss#SyF45x-boC>!iSXD~w0D z{q~aBD&JG0*NZ>v2~pa&WrkO?yEGH&T+zs16Ure;yD?}YG$Mmb&1dej>qYZzhNzQJSm{rvi`Kl>CFGMOVXC4xz z`dT4zGOzthE59fqlI#w3?z6wQbQn5g#Zev{jU*6Wl%-<-9kR_iEblk#P3sHK_I@zSG0x4AgherH=0ju z=tKZ6$S8(~*ndCTpXfZ}^Ug!B`aI7rw}OvPHMNESwYfCMyHXd`ZrU+=uO)1-w zTWGr+j#Hd(&V-IYx{Gqou+J;-^R1txrq2%X+Uf@}V(4KA=`+nI6s67uoYa9oV@yy{ zYD#Fn6+MYu{c$GZHZBC()e;|2*o!UBLA>$N*7=0PiL`j-@~|t-);g`TUMNki#&&NZ z^;2d)_)kpwUuKS9)Hd-%q&)*~nrvcoJGL~G@H*fB5=fF;UJAzJR7(o!`4o#zs<^0D$M%uzF2Zsym9ARp8Ev@3TM!9t^Ww7Mk8Xh}f zK~t@Gf3Qn`8}VZawA+aLcF>_tVayz5nbBw~_wQH<38hTia5!CM0lqB2^_a>@N7Q8} zF0-z>3xJBMjF5Oq22_l?M(FKV&vDF!^1}@p`PaDW^(!gZugb{L0GIVJOqe>_9 zkkk3ZyJiNv56BBK6`Ur2dCug2?IZJvzcDoRAfc>lk(2^u6rY*xMU;$c?SHSJr5%Yw zL2FYe8m|9)w)sVp%-HxyvQK04|I`wHZ>RqGM6^h@a^6D`e~Xo0sClF8ha?o5#P^rS z7k+~lUmg;&z3Q%$?Vlszck*dNQPA3yJ9An7Ys*X)bWFb#l?`llm7q;oprkI2#Gso`~BL`?t;9Kgs=fjsE913pr$z<@|}Q z`M($aD^^Q{j_H>Z{9g6Hw^YT(M-t4F*pm4xslN>;n^_8p^6iJ@zbe%DSIcA-KcqUA z3t_?kq9jaO{I~v{r7jfey1MHva%w6nr7>d!@d*hY1}drZg34l43UnXoMyk9igz%-> zux3j37gtpdV4B%Sa3V`(MSl_-SP8NF+di&p*}IC4L;l%TbWcmj*8_ghp%xb9o^>>Z z8Anv4MrLlhS0{%Ui`>6L+y66}Qjf9L4`JgknxEYt zfl}6+Qh)a@ApZt5k)4SK*A)jee2Y*1!-*B8cj1ekN0%*4N8VRgb#7ffOw4q2i{1>Z zIVO$4o~dL<AQpsZ_J>ZK?NBzX+?)AWRfN_BJfP7-}F|_n_n$@r5OKVH0p#WMo)3>BJvgU3J zEPs;ch84}dw(L~%^0u0Ax{UTT6_<8oOW2nFXTf?TH*MRjgahU=Xyc{jf-OAWptK3a zchXK9Y+vMURj79I9!u`MqK1`~<1ACiKI!{Zf+i)x`pW466chtiAHYwA&X@l%_jZ(! z5QQ_lU==}mY>GdcQWoaKx!rW}QM)HyWh?efGl<5VuF~^Cf;=VVfOk;=vH!yW2aSLg z#n3u+M3B6*Ryh`lxNV*SQ;oDxWVYs^Lx^O`)shW&XG~@*(VMm)x3qYAaK6GA-t2qh zvlRD~1ZA#v$iX%eV@ZSidu@u&4+Fw|g$G^bvpwGhrpKFy|9DT4zZOv@iV#T!w)Y=U zfk}i}gfjEc;-!sbb2JM;PHcwKL~x9jpg18*HI|qZ)rS=-&~it!WY$an zbJBjT1GLWmot@rUN0eRS^50QJLX-cnHrCqse>ATs{^{q<0J!J(&&i4<+sgO5Bq4`% zLd9-P8@4Q#$7Bvr%5N#3{|=YPWKbXY2| z-qj?O5?@{MHRJ+H=z7CH!cLF_hm-SgN0ZS%Fpg-jYHsu1c0A1LQi{ zw!>lV7yiiKjP^KZP1X5^g@xQnhk~JC!Z%{U;yy)i^oV3oCZ!#m8OBZ9CQgb<>d*Nv zR-_#XM@!yc!dF8Q%xU~m{@d=qOevGEUJYGxX4AV$on*#w_1QPt5mxk7z((OSzTZak zS5!8Ff{y72Sbl5z?q3@J^G_opzglj&m{0uq{eOx0zdrwe^cfYRoY?(_Ya8wNdgsIN z&%cFBJBmFx+dhF~djIZ?X|x~x9wN7VECx|-*&zG|cZ}4Y$`0=d;eO-4cWtDco?7(z zNjs4%IhM%(PPMFX1VG?`i>D3j1@dMT*1jzjr@rKOiHH zK!_tZ0W_Twsrdw|#uP`Eys6!xI#e{37=rki)WXg$Ze4W$e!fx&8S%AP0bvv0s_^Xo zk$!lq-D0M>K>4Ka8Kk803j?rD`FApc8IS>I)A`;_xcH$>x&l6D5c2r9u?lPQS+?6SiUK@JR^V8i%y)M zDPF>>O1cr9UpU;0kMehzYiRw=v-vZCOVy(Pq|N4#^BjEdhg2u5S4J{5{YH=&^*?y_ z_tT3HMCJ*$2piLPBB1rRR@5vByqMfvGykJw@w;Uk87-Sb>d{l6GR#^L1+8sx$7)pb zk4pT5PVuEONsv(tZSnr|#=mupFO?aHiH`*RhSU2GhvAR+f8QL%@bGUm_>V{bufzY- z;lF9X{|)9pzSD~NH!;|4+dXJyDz)~HFu)f}*F1tiUO7j4aRsIoLnGO)TYE91-{maN zpV+@fOa9(AQ~|zfd{CcC&r@kcI4}C4#>b2dbmK=HCcG0~YR>JdKZ{f4)9Sc-9X(cqqab?0Ph(G7pX?=US|hc5ifyhYp)3 zCw(i1^ioZhD>T5ST&Z&AyAoz~oe<)x*R1SXRSGzoHq!wWklvQ1R%?m~p~4#YR>)^j z%T7aywg>Dzq?w@(w)qs!rnW z-~wGI!S@TJqd_H>{|q2(Uyq>UnqL+E1-_v(CeHjyu12s8j(@!oe8Za2kXb7o|^OR5}b=eK~Fuh9xAdJKO9q>%QBah3ZMa-Il@UN zo#OWAD)4A8Rt(1%=tSHxG!N3{U7WuHZM9aEHV?B@xT#)26;v8LAa@~6-;35{i zv3#WoxZD-3p=p_knk{7tp07o+PZbfmrdQ>j@ij-l16TE*Hn`0AdD9h*2K{5mf=vb- zx42VIIA4?+9tdau6>Ip7kw;#lOhoX9vz0yflTttlc_y+Rr!2A_IIEN2rE~6(z)8uI z3ro&TN#q=9)W1*3c9NyaxeHLo$_Yn80psN2js}7r6zdE#Nx;yOzS2a!%$hDA7HYr7`P z#Sx+s`Sf#|cpre++u^x4wX#{5NFKs0U&o9F)wvX4H%*i*r4Hn=EFV zG}cGm4-f(P-t_nMz2DA>t!Poq;ng#(D)G^V_s-pH?N#ihq2qupVnyw`U#9V{l0~$v z^F&Y+H2oOa>krt_sXyoCK%B~R^ue+Z%b%b0Fj1DQDG96g)EBv;?j@Whv}Q?)yR}m5 zRdz8YkEr)hdB(`-^SvUC9AG~(Y46_9skP6NxLr1xE=Ty3RZM`cw)dRJahVbfBGfA+ zOFbd2xoTX@@0GiQ`}wX@=~%U%!Q5|giP!6#22u*}B%LS2&Jx%}=~ZQ^_se^qVpxBp z7~WpvWt-*nxaPW_1@ zYw|ptymi;PSP}DX5R>nh0F=J>{q=3!2)~NW<+=6k5@rW!`U!ac~6LV=1J?#?B4rbnPEd1F{fH!k2$RQjUz#yqopX>NO@LL}P z@jLvV%s**IA8Ic5-+vBY43)(-yOWoH$~q^0A^&4N~2M`m&>Eor)6NPF&AFdjGE~=Ifpdn5e45ph2=?2 zCL6p;xm@XrRZ$3hzXd51+R7Sdng{hcIid=c5b}etd1Ts^$jHZuW+@m&r%!_cyKPHxm6AgqwC_tCXx{(K*A@T9*Aq>|dwl5a z9*pN6(&EK6q&JDRATs}1F&_P;%mM!bzNg6`Nex(sG(*HMjlnK^`Ak>m@Guk8n^(vC zvu#nu1H&VqlC)MFYe~*D{N*8j%KBnvEYa1U9m-j>Wa~tr|Ol zQ^Y5NJW*>%T}Khj5@2*w^M}ZBgDQ#GWYgy@3!m$D=H+fD&#Sb#UO2CVfW^$}sWbio zDhZy+(?eY1x5?vaj!;PJ>s9FUkFFMU0@S_}1Xg9AE=-sk7QTht-!{7kuigk>j$)n+ z0w8Zv62b=u)=cKSNb6}HFhVVHeQzdou@Mz?49QJ9F!!x{(r-sPKcATwn6X%_)uCbu zK9Rn?nA9`WOwHOmT(I816dGwzXH+q6T$xwauZR>2jByGodcWXSLH@;}Azg8Q26ss3 z%dP#ortSf$BGq&mIH`4UuLJv5nJC^WwS;M#Fn>9TziOX1=XMS9t!G3)#5W)_ z)|&1O_$4ee9;zAJPixUku#2c;N9l7F8WAp~@JXxw&{@SZZPdpOhEAQfK^%`jq3+=&d4h zt7BFV(D{Vo=x!nKbIM}-yv_Y)Zk;DhYk~FJq>@6rxVFS0ebhJ4EF(#b9lW8Ab5Vrn zmxVQSEs>qpm$7GAto2nuRnAZyCOVT3xCiUgc`2KQeOjj{z16@o8Mbs=FwrI@hmJTQ z-X}!Z`df4xLP;Eb4-C8qxY!5k{im-NWSNU41u)!w;vK~_QiciGH*O8C*0)*xIXbJV zLvswP_70Y4&$u6)*zC^8LpSC#9d6)B{4q}B!RJn7iJn!h{X?HWwM^J_7p|x|kaG6e z$%y$+`kZBbNx`l5Tg-_zx&bv1iE3^c^E-r-dnGbF*3MCSHR|H$J-i|o6}jGxoIcLz zi`B#Tb?Y4kMhw&AwcE!ghe_A(Nq4DFrnAHJ#LNeo?3QfUQ`=8JY!rl59bPk4w%K47 zec)U#TNCadc9NGhSqUggS9syGLpJ<%zS!=@wLr^bML5N$E>uu0q%|L1EYYdjV2g>S zMuX$cBf*+l_WrI=@Cz^I6}$#$XyEUo^g==-{40*TD29$5?lbFuv~$vu-G@y@;zi8oraGZd?Qpu6S}RiqRs55WI|@-Ywzz zzGR+%&xT_y@ys9sfR4V_vBfjGT8s%BXZz|rdiRQQ;7Z1Fsxg= zr^!Ls-g#Tb;eFSbH8rex=LH}d_{b&Fm{_}(I-^xB>z_p>bXgyF zs}gn2UndE`sa~{jM`}c$yz{jpxk(kV26YqCT+~xW*;9h72|V6Ba&&plX!MdmSt>fV zyd4y0=+^YK^LzM9a4$WpFvj^-l}*^}W5cjkZt24x(k72+Lj&A~*oKXF^hq^Z?Ip8~ zAN+Qt>5GUfx>y0X3N2?2w*gbtPYdKL&pvxm?$1yic5|Ysd6_blx}P ziQUV8>lT^9z|J;H_dY4!jPWCx$=edO>4dH%%dl2u)b5q63_O|e6qF_T+8251)!%b^ z@674J=p3(V#ABa_K0k2giE{Xu$~7NZmbWm^H=Al;? zU@3p@Sy`l`5(h3oNh)qRY4W=IPx`QRQk4`=TQ`LWUS8kxbsp>T7ny!)0zX~(;RqRe z@`mAYS4V76wh7170NkEcF&uryiQg6iAvsv&vQGMw9x*IdY*L_l(=g0a;fxvGPHB)Tz3@#UWMmEVZ`F zzPw9_PsOq93lFP8 zCIRCD;N9H(36V&uClLeD`{7ZP8E|gPwlRWP7q@4Q&8tW1wTh8-sA-lAp1bE5`{qO@mnw1PkL~8LhBR7V zp9_istrkngvny7P3^c%bll&FgiD!&_52y5$EAI)dI}d3ofFGLHFTOUf+HuuhZ+;H8 zTc8#~&^_^TK#N|=jptdAm4(Q?az-z+v&3CUn5r&NG|gGA2_!197S00%8Uj@ zFqz_8uS`AtjIWIyH}Ye~`;tD@UKOe3Mx>j==i6%#5zN4eFm+II^__58-SEik@0@Ko zk&8jL-RO08ZwGw>XRI4xfS~fKQYck^i^h`dmUa4TCk#CgXj5eTZ3K6&<>>8&a%yIv z!^#P18N&U5B@O{1n^s$5D#0&5SXnfes-Q?*y-_EWHfe5Lp>H4(8vgXgP<3cIrTm=s zVhii_*RVfvx=;zeAhWQnCyEQch!{V=C;tK^|(h2V~`V+J3~VGuT!mB0h~i znbU@*$Z_TIixJ}*qQ-76+0myB(GvUlNc-b%33G`DRr94PS04lhv!u2a9GbUbE_@55 z82Y`^#Td-lffYS+(;?xBK2bY6kYzb#F>_J9b`r!-$J%VY)*mMEl(7;NTpndFFjV7Q zo5Z$KlG$AQ~eZ$Loh!3EXB`XPnhO%jQ=VF zx|U@`RFyQWfHNWnNFwK{6ol1>og8{X;_3QR;J11ZViVu<16PiD`h26V5R)tVx8>pO z9V4d`=8!hBFdu1)S7L3L`jmwCjhmejm=x8OZC0-A)IKXGtk6!Pk!(ffCf~lEG46Tc zUA6>Q3O|}CN?;?kYmVKXG?@*18;-zuwml`f;Sv^A1huofL?7G7F_){}D4r_6*ZPYI z#&s$=E6#!38hUy&4aosDlY^s4;-0KA9AQKE+q2Qp8ehlb8^X%lar$0XY6{O&+pTYl z8ZxV}?ldu!w0$vi_C%v9iZO3EQ}AX&8FC1b2j(V6QvYR zkKpNVa3(XJ%g?+hs8B(Y2*t+k*ICIrDUkbc%=9%ge^n8--=hN1pee=QxbT!T{@62DGKUeFH1MPuj3q|GJ8hnR2 z_jN{jM~TDrgy8$_H>yM?!`{KwyhfO9$RuqfIh)R4V5i%70=B+nc%Wkmrt`ril3P*5 zhm#D@kNRdolL`mYgGD8417GC2>&fnB!NA=T)En~mn)|nE`4x6D=l3~o1>q#q2IC@E z;SOB-Ux}TV;dbe4bW0Cj(z8?UzygdI`$OLRoHDNV3pS+2qYMm*vibIpCgsWOzNmOJ zSEE>1ZQ#l&rRTILf4uNHk+IrV2vmKZ;`;~DjflVq1l#LsG8uLos6adrvlsJ-XPVP> zOs2cMZhk#^WhG<)0Z(0~p4^DGZ{-qW;j!EnU-6_T^7(6j=EU#&kP=vaBX)Fr^Sqp` z>j^epIe6TDxS8RqYgiit{aasM0UhaP@AmdLKbk0oA5Kw~c7fM3?^VkrfZ{;c1Fp6y z4s>Ri6DCGfhUxs2blmd~j%zreytTQP)}`sqLmq|eRP(ktNmWD@u{I~rpyUOH+F%Gr zKpJs)L~?u}aPx`dA$wo%eC$j?$1U{fL33}Nfloj{Y1OvC>YWLHPe@?w>l?i5OD`^y zZ(|q7m~YQ%Q;>GWPoz^t7umk1lt+UceD-gHPcr2tYP>pWY6SyQtA;vsV(QJ# zSH<`_d;8@Kcjnql0p4NDw{@AR%`T&9AWOQkZ5-xH$AQT7M)F7=0NuLqk=YVu)gAYj z=O-Sv#agZ3HI9i~*L3V-2Mx}|QCP}?33sM$wqXa5eup0{gFVGiP)7`-`w-1(`YEC} zs;b4)e*D#juscRsxHSK24uv_C$`^uO=02yN5me5k-=)}KC-JIe5w)jP9y&y%KDaYX zR@GeI_=JJUVh4-0#ULa1;-$$m-`FZIz+yOo&gAO8&OQsxBSQXVG?Pt_pg4{4Ay?{> z<+Bfmsx+&0g8GNk7?p5C5_8CVgOMMTY+tDS`t>4f!U=U9r(Bf=An?ZobC+T%gty0B z{k;Kj>e%Fnw-xUyt|(rJ&UxjYqjr<#&+G|s=CN>UHmplX!{k$*)D|tNE zheHR>a70E0(!QqjH)~IGeP~Dh@XUtZ`JN`nnjt%gf)#kx;~;jwMvg3?#?LB?_D1TD zSMp%y-!{NJb||9&7~{=V^>S&h z?WUe&`!f<_^sm(zG0MZjbKBlT1UyjXkv-M0dK%JVa@6ryL99SD_`vZk>Bg$o@y_Mw#)W* zNIXE^vGK8<66`Ig1Md??|Lrr~mRp4nBiF6%ANoDuk3Na<5_d!(mXZndKKG3ByYZM@ zl^6I``N(6{F(Cn_-8;jR0OQ|gzC%I*O~86&6Sg^gJc)5KsVMpQ|UX)1Q~FulkfBSk1V4ulnv^UHVUQ>$VD zvx;#Gwa)qIdRiu3PJ4x#19R`?ff-sAE$`%n%gteow0HN7l{=)}9GBedBe>A(H_t$= zc%$O>t%k4phn*f__%H)`w+6WDaHb76n{P*oJtpqpMyGW|bEm?!JKil$JvOz>c{ppH zGZ+tUeJhhk7QkVXp$gtqHkW*yq3;}-AV1=$2&m9>vc;>Uqy&^6vjznL4MZ1|zWY5+ zk4t*UHxCLySs|7W@uLK=n;_1~XX9Qjm9J+jc-6E^HYtaDpCE620!A2#&B%ESmP?;m zi_oRp#^6Ma2As{~%&3jw7L*~7Ic(@-wl@=#MNOu4cG#e%$d9{`4~e25VW1ldR@*PH ze-@&8m30-?>VE2N!fc%8f8uK=Q}E=-P)ms0Ryz*SPal6!CWK(dZq`4%yZI>=z7WP` zxnKk6649ys`kCY>DZ{7&IOW8@Y$Dt?&st~47lJ_%)?-|tnJcl>jqZS~_lj;QxLPBd zzw$HCfo8BfS=z+mg<3Q;-!+Xx*63tG>*0IP^TrjG3k0u@O|XHe5vWUV-8O&u1uLvO9+(g<(q&`O0| z$ve28YISRy!sijsl$^QOLIg(00(J2?cqYRA@eCe;#{@t*JEy4l0;A2%FW|7He@fwsxU3H->lVe+?<}|ZhvL*>B-FJkM&Hc z8xw76x5Y9q_klMWAMDV+%QxkB7S=x1-aHI&KJnFT)e>Joz&58;&tL)&! zl5QL(w{39A>>9*M(Go(J8sbjvlGWyMBtz&PDd4lEaA=Uj&P}5oPgYa^YH4Shm{r z7@urV7^=)dI!FczFPy;<727A88+QTchRh5*JtD%O{KB=O`smK;&~qO@f5sn2!ST4e$|ex1<^FakgJ)#JqzzDU|b6acB#5Nw0Ys2DM2?9$@_(@S}si$7HeM7 zT!EMxV&5q+BeIRBD{(P*OB*CN^AvPiW2Wf?=~%(0#;l)VQX7t|ZG6|tx! zhp_F=H4LZ#b*OnM$aQLKT!62&QD}Ronw;Z#zUoe-H1G%KQ_i)AWTo`iyF}-ft>=q2 znq*$MBb#xg#9%EE%(Vw2n+qXV<3nv6mlUr`5D|`I?qQm7y%8yPr(zj)Htti4ZdaMR zM*TqSEGpHnBktfOP1Ee$gp+gM2W!{(!ghC&2UM}|&mKLhx?a8h{ZQE|^Xauzb90@qux4ZLcQy(u|-h~~_gfMu2DHtCo zs-!)Ln~8qA)h>>%rk^KsvSaE|wdMwVic_s`t0Yn5B4|t1M#4*Cj{yy(b{ApEb$}M9 zj*_y3@T*srI%BRX_Vz&)N7qFtWSgcVB>kx(7@3VU#*OWMYW4_qw`iWOkUNx$(`1>Z@`+YBhthRMK- z^5XalUST!OM?>el%6Hq9BB>8OX-?X-Zbbpk{+n8D2VbKN5j4rb7(r^Whj3mfZWS(i z%MF9${bq_py_v?AojZ}ShwY-eBUY;$HwizeNJV!yJHMe+Bge)u@#$C$@m_;oyn`N7 zq@;^=(ziWi4D)!6LVzHP9aRh;_xHu81Cq(=c^9UI-_S5<7LJ4o1(n z=O*pF$i%KUi?P~VcXhb3qY^P9bt%O{zoIqSno}V}9Y>Omw=w1Fb9PtmhRog&+3!BT zJnYvzHGfnRUA$rvv9XCJEdyN3&VMlnXf`qK&K?wwpl4draOwuYwM}%yF_-*KR660VsWBlY^$l zd+HYh_(Ph#C9mGs1Dvr6s9LS0Z6K<+h6e@-1q`%&*;>Y0nBbJ2%=}y&HSx0$esv|_ z1|kkcnIj!)vbT@?^VTgv0r#j$4=LS0+2cVby=J>Gg5HvB3heAbzDewjD!Xddikmz^ z>^>_vKK~*z?or7xe($xQMGC`0tWe!h@GCBFYyqCa8o`iS`>uqhqZT#Xj9ls-SSZ{} zN0^IqD--T6v1!HC5;jIQR_{-0(ID8rQQTT zDx8nVNZJ}xHkv{6a2>%-TH5+fr*}*_MdC4MJMi1;e*fU$vTs;HnGyz>^{8)6mY1e# zpP-o_$?5x}=e4uV>_k6!`-;X1jVec(xjnT+vN3Mc9ui?1lQ2V9%BbOxs>0bp2-nl| zleFna6T1l7mO2UTiQH1skj@-UJI7yf0mm**aa2xkRDb$dWutP4(%^wsu(A;F*;Rj`>9^KcK+^6HomXGAIq#duoxM72?2Mq6b5=cT zQAPuafb0ucL=__5un+`M$2NnD@LA&1iGg>$Ixbr@gn&MZ2$T zeIu)&PVnEkA|!kZA>{Q%@N3;M)(^jZA}l0rBxamWYDeJ_TQ+?KF zKct+X1MLbz^vC%gLo#GeiI_iDcTBK-?AuO^It%F?Wj=qxbh=^ty^OgI%-7GQF7 z%<*ZB7=a}yC9bs>*>yjC4LX$Wu43z-u zcb&+ylculOQHTV7<2jJG238!(xP!;`kel+JOxxYz&tdPyxcLq8pF)Zg3ANcos)8y98dY^^M|reVikSamO6 z@y42)zaYiM+DnY2%?k65C_W7L)RA_q5pp}yTJ06=xGjHrOFDFYT!|5G;)HPLAB_i}N;``ufXf_ld6{!rI`%Ab5+&Hy-t$9Qesz%uM&Vpo*uQpaWtC_O;GQDOhp-(i*ZQ)N)HdyB7rqOqv;&a zLeJ$cF*y=iWHzJ=8NP6VcWmV9R6FwzOxqOa%<8Y)Xg+@Ou_KiX2(prZew6?@>f?Gj zO+T-gbeD<_Uj~@Gp5GwsAsg_@R`F)l35t0uBqa2!r1u^`m7FF$#- zHXzxtK9_1>sqw_f_o}T zppT6_stN1#r-s=E|NcRkS1xhLMrC~GTl&rABwt@5=3)N;K}m(cgrlxy0}9Mp{qWe^ z$M3^#O*|Jq{bJ1az@DHt4n7YOBLMQr!<9FmnsxYxihZ|06JreoAqJmbNb->!ldOzh zI)tGvdEAyc)muH7zc5JXp~T}T?DQg_j1tJpkui@vs4ta(ZkyMwHw#tS*<%b78*uf_ zJ!N+Mb^qqYlD>dK38NuAu(APXli(oEuzw@)I`AfaZvRLyExFRj_%4oU24(^gLVUdxY zA?6P{(1)ehOy_q7yOio;Z9Od@-C>x9Q`p*Ox{DgO;4c4Yh)Bngi|^ALt15#Fk&k~3 z)4Y>Hp`Z?QFks^sd9wfgw;9fim&i@jYx~rI4XvQ+qH0-8&gD6cpRE9sOG771{%l&@ zwdf5oLZEqArlf9FsO@_A*?DzcG6~d#e>tZT_qr*!brt;Lp)!`+!>YH`DUCZLtu z+9`7TR_JHFE#LB*dSs{4FG*fX_m>NHQRL>=E9Rl9VmuK^6|fZWOv5bWYw*v~P8?S{ zPG44%*cy(XTIw|Y28>Mr3D&+z%AVpd^#CS;qfpa0leepstm$~flm^5Hr4R{8?+3suL}1 zt||=tCcd_xe}>$5OjTliRIk`oELX^|Omn7pDcl*vP-i|Zdp+ds>A(~X zJZEl)3PB_B{VP1>>|S5AM3=O4IFmd zj8{|LyiR(U5;)w}2nAco-#3VuY597aVd(iVEA}5~$a0IxQ6xan;u3)+7{yMy=g1e;go}X zmNY7a~$KC zUF!nec?7%seZ!)rW03xke@F)hx~E^^+QIFaVuq0Q8OqFnTSGg-oPDGbXiBT(YpY`o zo~t*Llr9o@40{B;BGeNHc6QAk;;jZc`nMO(es$kqhgE#tP@@~*y95q=pO|XQ1JcA@ zTYu`86I#9%cro>*xrl{NqVU1K=Zh-t)hv5%<6Tn;eTKD_CL_tX?+$@}r`3K!%_6nW z^omy^X{hwMBJdfmnIRwY6wkDH;1(NMYHO8s{&Tm8<>!szk>gs zQeTUFg_m}kM>fX8WRbJ0(PRTNZMqxP+m@vwaU~$=fGQ?7(*(a?njKt9q;4@4>UO`v z9BuoBG)8m<`FU!;smrh@KSN$CU94TzrUKU2LY4gz$4@*o`;Z#RUgw#^4Oz~ZTpPD%zDobSh` zYVY-i2T$X+vxHAGE;BXtWSzVJ`621CK_fnWRFtE|qXfWPB8rcwfibT&-~O#s2LgF1dS0rBmn4DRtu9Cc6Zb*!8DX!gEAd}!%d*_ z{NjLzugm5($=N%);jn>}CE0+cfvpLIF=#%UZ*$za#C;5!ZO-c?F@b%S`#|HzLGCY7 zim8Wobsn*NU>jDF|9!J144QXE#Z$iIZZ7`SHv3aU7UOTn*$5aozIy1amqY!k0+v7O zIoLvOQi%=pg$ELVsBBC&qBLTh$1bJ|#GsK-D)ZDWLU0JwlsVh6MI{4U+F5Vy!f`3E zl;_tzuw`))08EKnz33CI^60O)$@rSx9AOMQ@^t}^!3Sn~c`U&tg148k6>h%I+axqM zmouTJJ{K^6W2(=*>l8t}j(;8HBAD1e?S^$2H)o5;1bzCfiDUDw@l@;M=b!!o5MLK@ zg)a+}R@ipOvLkBQWbI!D=G^29`pc#@ahEi13B9YYg!&iF+9%*T(I(bfwPzx>9Z=|X zGL7Kem?O5fibG8M`i|8Dw_W^I@&mRUgxNLXsOmnYV5l^n9ljJMhvDH)z_JkzQC)k%k|y)XMCY}#F}PYZa<@ql-yOj}TFqs!#I zI3HmfEl~c-Dw%2}e1og4vbpRQ-xHg|;Z=@ClKUmrh!<^t^eafA;`0qgh}fk)ivWYG z>ElvvOmDSySfg0A>}h6YC1#voKrL5iu?vRnb%Wb?^i5$o16rgojTdILA7k&a(L03R zx@`f)s5=%CJvAk=4V9>TX}u-j=b$B=*Kvk6MvcLaVNX35@-?dNn)r`gmmkaJ^|4{8 z+LfDTiun7!J3sV0gEB;z&`z3)+6Ild*XL+ZW7}1fLl}BmW@^khxhHMT#q?4;IQ12G(zfKx;k8JY|(nG$dcXA!q zuCMr3LV;Z7FX!2a4Zv+ zJ?BsA`5@SU@!>_sPhXYgzlcgqRDiCOVCAU|YrEw$(g}iq^kJJ8th-l8*Su6j{QvMl z|2sSPuNn#rB#f?@uXO2}f)sC`Bw_9{30ThP{nxMkoui8v2$YvXcG#rWxls6bga2yz zZ!U5o@V`HS^r7i46aQ_4|5a(xhVtTx;7ZLG(BHK77n%D9 z@_)JTcarm$%KsIlzYyeaivKG}|GyI?3sw|JzjgK6tS*(9YrMBl8y?L6N@Qo;AUH2d z?@H#Vw3P5am3SbW!J!gsi3HRg$zclpqHvAg>geE1lGM=$5HvUd^xE65;U8_pX!7{u zkbEWXaXq>pQN#G_{1zt_1q8pmc#raK?Jd3oEtl+MtT7ckTUcvQLw%&w=dUmFM1TyO zi=Mfq*qxACANEWURK6w=l^KNIC$2Eni zZ1eCY1qi53Oz@{KjVq#I6f}|5*80GoMYSqKxGs8bw72yYuoSf0hYZRv0ru|t)g;52 zCON~;Pl>&2B44d0M73~z?dB;IoSF_q(^>}TIZ(Sl&0to_ezmb!L&bOOk1dBj-c>I5 z3D3DjAv+3H=i*Pxpt^`ZN+F*Ri#S*{{$7!wtaOhl*m$GP(GPHRnf8fpcgOx1y!DYv z7;~DIDv*X0R-mZJA^s&ggY>BA8uOeS{+g*sU+lC=JE5MkGq=dHV!P$4s=HpN$WSKC zaZq2lVIMWG6-$PeC}%g|Y3pUnTH%xOD|J#=i_fWlpdF;1;um|5jYnF1X?5NcZ{Bo& z`Nk>+SS*(fls36#+$Z1)*VSR^T2Vf2`a)nfM&^9lw@UY!#arO;V!h-o``A5Cp{-I^ zxnx^JwEoJ_I&kP=siyLp>|^?|?7}OIE^HUpGO|AzAkW?hFKg5v|2e92@Cl!Jk13Hjmbe@B zjNv=@dObsTpOPOBH7@tqHy85opwag^A&Bzi$glt>Y#f`MPfT&u;>SS}A^hmZXv#fp z8n?a6jwc1H2i`C9KQH}Tl%!DJtuYXOf8rA#SSIot9OYr~A~kIysNoMRfSap@v&s9h zs2e+iDY+uL;f|nYT1Yr*0`Dng4txrkLh^uhBOJW^m$KtBAY=1)r##J>le@xnsM2Ua zb;QwP9sY5}Qna4;$2AFPKreYjO1c*#4?l)DgZNt~7SHl%s4mOmr-0zG)|};%Ll1Xh zO{M3z@9v&WF)1Ttw|uKJE6W369k%;tpv@J709Tm6gsnctFoXktS`@YE7c)I)ihYCH z%fXSM{>J5gp$N)}aZfDt7>vLVi5i-MAKg`6fL84srM|LzAsom;&-2nZ(!!^$T*0Bb zTehoV!E(CiFp?OW;AsczA4UUb&z<7o$;$`9l(CepIR>Ae|Io@}p3Gb+v?+gtt=5$N z%J3ImJHU%c(GQLnd7V4F7+iV$(cP{Optxj7E{}+PKgWaItF|G&DJ|$ALpf(CzT_~o z-Q}tW@YeK1^#iD{06UOni&fAB=4w_3jx|B#guq>vWo zG{qbRhH>nb!C&rRhS~VkHiAV97BRs7rMcR>>pVNM#z*wRUnU8 zJbRtMZ{1nu$l#=HkDH1^sbik&3k$Vm^XQLFTgG|_J0f3QG*X%CWqfNGUC!smEx@l2#JdK;6eiq2{n zaY*%Ir3DX8^O_5HS6#%PhsJ|mGH32(*JEt&FzVH08X5i8I_7f#U?e>uLUf1p_NNT$ z^$jAW!dm|YtAto`ew%(g&! zwdNW-Tcq|!hlI5j09b~<@^0s@+>-6BX7H3~oVPMbVN7NyF(g_ml|-$Js@rvclLlA9 zbq5JN5*O1iUiK$*Cn81a~^AV?Isdau^q$i!^(^dQI5;+XNTzvqNjqcC6CX;6?*j`DcVp#7RPIL zGc$$WskAu=WM*$s4t8|#_7^UhTm+agAbWlBCT_uc%_1>0;(p0;Uk5??b$sx`KlZwr zk-&eV^T$SI1?3?$iE>RL6UBYW_x!pKyGr^8_qvi9X2EiZ>wgj6AcYbmy;W3_f&>)M_2L3hHXdUwqU{N>m@NH+|E08K>2P7q|MR<~rN@B=RMqHoK}O``-3YK7SJZrKU)5Ta<5v zFh{)Sq4yTRf_17y7jZIV>_B(Jtdcrps_+I9TY z{u1zMwRsR@t1;46haY!(EQPPXK++BrypRH!=EGID&uc(=+}q6v3Y$+J^Iwkix6_GB zG$TYZK#Xl)lVqM*DsOR*-qFsDwNa`o_J6;uzrT<-x&+x3%_e8p`5%lpM}gI~yaZ>X z!f!eLQ2!3y7_ZOMsOztzKfGUC#AkU3U(r+wY2iGpylWoUzS-ig^lmBiwe{>uYfR#2 z;fMfpq?kl>iZ>tWjJWD`mud~}_PJWk8Mo;S%9uU#grEx;C*u2W4j3(Di(B_LJl5e6 zqN8D48O?1%-ZjUpc=0w12!LKbUh@em;ha-Tc-z|dt$I|Nj4dL#Amze8F?W0RK`#+c z?XQxp*G)l?Ff2~en6-Pz5~{;Zx$oV*PZl(Fm&?De?Gz)o0%l7hd(RJgYyC*Ogm_%3 z&~^^vdAjUld*4cjD z2Y*jytD*iM0*{1`7kGm4{s~TYYAjwLTb5LC=X>6FyR~3T+er6b#iou*aqH6+CB%X= zfgcYq29IrKy-+hXxjVC}K1VmLrK8Gz{uf!7aG5y$)7?ofRK|g5DJg#W-t-a~{KQ;;rAVo-U zma(B{S7tX&iD#s9{a{j{lD-1QJ4{jQ=pG-_k6Tl9HMY9h1HDY%QA%Q!)cd(6Px?BB z9qpR9Oc4O;myXMRrIn6U+uCx5XeHgPRmCe^0hIv#v9RQC5;Zu0mXStwL+^VZ0@=a| zR2qL+ycaW5Y;$1ZWabh{oaX)qrFU*jU=Jrn0Cm1>-&w2i0f!kS8QX$UL)~}IqmK@u zN7*I>7A>}r_Zp4eL#F`3lKb%wO|wHTNP-JQH4){$OUsd51g(9Hl^V#QShRtk)yh3v z=Er>GNIiPPw7AHlE}g}EFZLQIca0a5zJJq^{Z-wtwVH-C=AMDxYtNVT%;(jID;GOH z+<9R0yhZ(16!#{HXiz#1d(A__r{;SX`^)~BF{cecyg?3bm&2WT)AadE*8_`Rg3SAI z&mCC|cUfy-wEyh4yG+@+sky7dpItJ@ELf3v*;`DGR&5f4J+yhrjPm@j&S?% z0fYkd@~mnc)+(XrgF5ErZiL)EEP{el+fJVF*j;ZvaIJ2#-8x`~`XdcMweeO(b4^Rx zxqZ&$iS*!gs9(*}=Auc}0D82XtjMx3yrpm9RiO3Py6TG;OY?b zcP%$*S|kOjoNii81@+#7Ul+Uiw~#2&c#;-M^38goX+4Hv`=v86=H*R}ixE2d(hRtT z)>oRp|IvoMHOq?H**yJC)@VtzFW>(7Xb%2qHv+lofhu0elJ$s!B#tH4^s`{)<3mpg zHJ}#^MYa za++d8DYd|DN8Kw;mvSG+E+Orm5M(lD*rxIGE?KO~EbYdYz}OKMvMkO4azf^^N-?4g zdE7+pmdM&ddJeX=0JUuv$p>;3jjZR)p%4MIy#m?!CuyS^HKF|I52Qq$cx+JnY z9k;=mX;eoad_u7n$J%lfnVo^2?ZGz2i7`iEr7Rqegm-LP(zNNv8~AFd<7#5d6^VW} zU#uKsPV~EDxEI?ozxQAFCTZ@&a2D*yQCFYcVJo$iOq0iL)i74?=duHy+>=XAzNh9v z&S#2|uB|J@cGUB^wKW!U-wY?FHO}BqdUFMtCFoy!2GB#R_`p7yG}QJrn)^|x_c$n) z*GI;K?d7$fHDREag9@r!FCke3)|5)5jHOIwJYXzeYiE}0lH8>r{#Yi9qx+*^SfB18_(LU#DTbGLta zg|j6t*5}$@CMqbAwf2U{#AI=9<{Gf{`GRU)O2OQIbO$dMbCkfiRoaWDMD9Z5-Jhdx zbS}TME9M0m3=Ru~9`~7+%{5~&(c7->6OH=Kq#uY3-EGdB{qp;5bYB=Ksh|qvWxo`l zm;`w@yH#G%6?AN?qq&R9WYHjZPu#E?qNeAZYH{YEtk9#qGwr3WX@v^uT54 zbQ1{pQ9wXStdbpU@_|~ja^P+1aq;~(lbwP!t55RE`9VznD>!{IDIw)6uQVGhBuFM? z^pr^S-ut_tEpXvB-jU3s9j}7b<8*XQDmo;;(aqcf!Ufpd!lq3xN(aP$qe&)Hgz7Of zDi2+%+L_+7H;GWFF>b2d4tP?2GD!T7bVm?jvx~J`BUG2%&2G49PT6tw(9U+|oSl}^ zYguE~y_3Hf?3A2N%`7IwAXVN@fq%ZT(F~X{S=Q0Xnu~w$cYZZ5c1~TM@<_2`XMCM{ zgF3(GWVn$33d?e%VinrbC$qh9)zatgG3p%T8vV4yeI;yb9KqI+M3k}=()O%;@mzC> zp1uOs-Zt-cR8TIw03y5W7+M1%&pG$i438yVh)YUaxnqZbukSThfxAL~nFlE_zA@B2 z%YGK#MJz?2TPn!kBKre|-3q)KDkkYeQjz1pgujJ%Su|pur>| zv3Z-lc&6ntEhhJdNXzx7+2R18HkWFw0E*7@5>-75q!Chz?Xmp$6eZHBil>-6lnEm6 z`GI#p#tV(Qc#$KCEiqSg-qmqA{Ws*Ys!u9?BBmoNBkl9b0GT24^(|!iUQAtDhmreT zu9Nk6W;F$NfbWz}qCbM03*gqTDm+E~((N}ikLEa#wrjJg?IRm>E$j=T_VXDnF$^i* zMa^aEJio@BdlR+1e^^Xj%O`+A4w?wsIEwM`e9N?RG}=GM*!1OctT}A_eU7&T$$B9s zpkhf;Yk9A+lBoALwA_JwOb#sP2I-R`Ta4nsGohAQgoTrbs5T?%O72r zMz99>Mil*=z=XtICkB^7(Hn}_66ORX2rcW0vA2~on++>tY6s^^4TD4t2yF- z-hHgy;3=~fO5%^}*Nk7b%9#(bFn+KDmNp4!=h@9n3^>{Ymj9C^y^13D2j`+4{8=G3!;?B-N}!9u!RSC_hGlb+42J9lTob7kciQxAPL58BnZ4UdN&g%7H0z;{6^^`JhMO-y{W9~VpAs|*Cba?vup6=vX0Zd5+ym^axt zqpHKnN-N7Z2iXZ!pU}tOtQ2mON$#=JATTy<9m5dhVEUg8iqgQtQ$!F)|4@fz??f=f zDQoDfXMz~Xv!hQ`QIK3Gotx2LQ*N`N3WOSMY{a*)xkdb zGKc%93oJ4FgJdlSuo7b`5gVMm0H24ZiDU*Z<2l%1>M7-@OH2+bzsc#&=)fmHP86ju zva~`vXP(r4bLgh|iaW9SdJL&u*W?P-D&bNMxW4<2CYrODX@%lQ5>lfm%7&Fh0^k4Dtz>{aXqx`Lw3zeN_CbPno>8#E8&dvfml^1inH zqd(>#4_;WkhvkK8Up0K_!o6wZzM6e2Cg}LQquHCqI2zA0@{lbK$O3SP#h_Pit<`1M zRK;ReOi|SQ$(MZ)N{q+!!>;1#s2%k(%j+Vpp4(ZiW^djT*itjXZoJ{pt+yv(VZ9a2 z-%70TXRMs@fc4FYxdV0Hdx<2YPgamYt)L5g4%yZR>cHNm8mkWTVB`Ih+@wJ-?p>mF zxcsMQu-nG?W>Xsi{j8e!T$Mp<22a&u*TZ?+L~DVxG>Lkc#FL1%!r7**F1QlN`Ga9r zN}$hWI3&Da$1~!s1MmsFZOcrP68*=}av#%|BV|L_Oof5*9B_E!zd*l%2E`&`k$KZ{RFoI>>g%@25#P-h8M!!MR}E2s4mh*Olt(ZZ z;nuPpSj;PYXL2h|B>9wjRs}+RwkDtAdh4g4Gjh?q5J&Ms278O*KAsl>SKw5COtL;4 z7CTKrvZfkds#o*#Cru;IpVQ<_+NuIzpPd%_e!_ss^jS_4dSTUa`DM`2=`^LNf7uKD-M^ea_5` zFrA&C+o&qTl6h$wtq6O&m&==x+iyyx7tvo|WWANvn9w{@9d$Gp`H`iFM_ohVt^fI+ z?u9x~PdzBu)J}-OvfWZwF8y6H5M5E+M~l$pEcE+8>*T7Qx&nA;N!9DVyr@GHAP6Io zX9KfNG;H&95+8EDn~djksNV}uu{#Ynp|pxx-R6AtZY62irD=`;-(`eECfj-Z(ni$e zxdzjvC78rXsOMU*KGSZ%&2@c%OSwzeVRCk9?l8>ZXU#Cf;&h^mdt?7d_~GlLrH?Tm z7aAFF&yPX1ZKxBx-u@V|pCB>eg_uH=O?yjk0QvCh!tE}Eu~%AQ!?&`RR5n!xH*Tta zw&6#yfe$R2-mNmpD+TD$>B5&q&h=35@tEN9CEE>3cVjF;J}x12oFk~ml$A&!VTcF3 ziNE8%mG4o&wdJFjbKmHzrS|$eAt;)s@M3j4^?}lNlS!OdWsHz35>=|z_wU^3nSb^dc?wV*{=SENcq)=&Sm zhttpkF&oXAk_^n22Q=%qb=?zNCU}2XE7#do>GFLsr@91y%3DX%5{wN{z$U;N|&XqKO|c8#p^Y>GuKFS-qf)JNq|gu}|}9 zd?`w7N5t7hE_TvVL9}kEZ?fHePQif6D(%%|l3Kmi7N9Nu8-2H>c54UaU==_x2scER zS(E{eSiGU^Tk%q zu;OM=j(+4HJND>uBWDBd*$p{0#aT5`D1LMaI*hX(`RGc?Kd~FcSJg7Y|NexEq_UdN z+khqYDdoF+>{e8fzhtp<1dz4s47%a@pPt0_ZJBls^ga#lgSH2?78U**Z6#$wPlwc8 z6a961Urzd2SFN6vwzF)z?OT+#%59PQmKr07gdn}!e(9eEo-Wq!ma&FQrT^^ENTHQ{S3w3lUg1Be}G;8RAdg_7=y^yL5%9CqyYi! z0bEZ$6TkZ7-k*05X&`jy8k+A_GWzSXoxqXrQgtKMidH}V)Z0I0T>l{OKQE-jpS^!l ziT;|J;qSlomrpa$Aty5;VRR*L78fi2_r1TbQNcwf2>3@-;4dHlzZJW--%BB%Yzwhk zCH&FP|J$Q~)XxM5psaaGP1FB<7yeAZ-$e&ug6~g!gkvKY|09j{H_!dYn-_F+NX;}8 zF5&-gJEa@@JJ%bVpC=IUM?e47;lIE5{{lO7Yfxg1wy!;W%n81 zzC8sx?dkp=^*?#@`UMh37xo7=(}*q^CPVRqyEg7;kyyyYdRIryIj2TGMh|u>5Z}@49lBx!UI4EO}m^ zF4}idM?H5OFnyP6azKYA>(W4yxcxvY5dBDd56?Z;ldZTAc&QNUOVcBHB|)Sw*|=?t z4;tv?xc%S&+dcW%`mCk*>xQkW@4W7}mE!0BRBp{*Q5Kok<$?oB{2}4B*(h4*Dg4Nk z4$s2B{(%J$^c&o6mIZvB;Z*8RUI1*X@MNz7mERqAtr+aU1_!g-0{sy$X6Wx|{OX$U zIx+ZLhul-IBr_^sTda)OAOtK{Kd1c1nCbE){EqrROYt2rFwQ@8d#HErUeKMY$Jz8{ zUn2}pI6i2E&%0maWjNHJ6x}irI)l}AMDn-(=&>h#wL5;{$Am8%s<XW}x*jHDZuo>^MRy|pRl-D{>46rpL8?YvUCzPtO!8wn!G;)TZp@Meh`E?j zq$B0FLlESlquIDTH|t{ae*5;K%MHFgom8q>8rb0OQ!BFG`AcbBgx!T``3>8tND~mz_bOu>{s~9F(2lJI;`{YMjE23tT_l=Vm3*G z@{e47t9eT+ID-1QE9fgN4bvayFdD?5*A>t*arBuh&tJDT7`pjl_j1`{hyFn?fxH3} zb!y^s@x|~3#%p*iZCF~CXwXwYl2W zK}Q<72rhzN9qdW^2kRBA49vWd0D%Hw-mvczbFl6#U$#!`lPk1~_Kp2N#j&KNICJ=M z->p4o#!J1Xb!oaIL;Q5da{sKYw|JDjXLp4o>i5%g?H<9{Rd+nCSACJ`sY3njmjouc8Jqpdm(3t-m3G`J;_$bZmVC`81rdhwSzKpfKJ? zORrPc2pV-}M7}G)8^#rTVd0y5-d{y`C*~m;>HzQj}XYOyTHQ%-=2B_tMi1RJW*C_3L=t zgWwlDLo(ah?cxA&d9PF~8KIx>BkdE-KMs%ybVAWK4Ur9)-g|KRd@NaarLA-e{b|$Q z-^tbZxJ2!3K;|iVJSSTFGQY%YnJawfNOkk*q324$jyfu|S5DjFvG;01iM!<7*Vprk zL=}O57!svL-ERaw4!Ro(x?&9Rb!nRh4*N^)jCZS;son>D^r5vZtxbg)9}l%1^-(Vy zZ(FGPcgMK&sq&b{7_i}7E_?f@J$8VP+BFWmF*=WxmMPETS{(h7{GDwc{EA1fvI-31 zgFve8F@axZ@%^w9%M$ay%lhwR(x11TJJrd)mPQTd_|w+=lsCw%a;nymI~Pn zUb>Lx#I}(^HOusarB5pc)=j=%2GhWev_7X7Qcp_Wo0CEXCfl+(*`U%|s*p96_Op3WR zMRqQ9aY?sp&%K$f^GkOj^txxfp>XW*?Xc|;H!tT!TPUCpI;6{q0nXkaeC?1zXQ3l~rOKTIQDQ^F2rByj{!q6W0Go!H4I~SKqq5IgTahU1M|;AEwOK+iPcits**Zu29@jWA|8G zk2N$4t`PK0iLUydWp}r{#~gV;idlVOxasV1c%*zg?dg;#w3C)lYeMrt77%^+{xEG! zm(*8TJyvHoZFt6DTkxL$^W!8Tz&HL-$#Nlpv)tU)=C);V>Wm9b#Nx20j4ohh%*>>4%jD} z$9g7O%1QY}kR+K0cYSw%hWD0f%!I&p+s3?93y6?2WFGg@9@ zTLphXZx?KUxrDtHX^xuGr2>ZuPknW(!HKh?Yj3a+mCk3bH(V!g>TgYYwSI7XJ6hHM z>$$>Z%Ki1mqPOpiPeQv+4_vL@KLQ*+x07kWLC)vDzSwSPav2S~8S=1^*C_Q%ulaUM zbR|}O=vAp30`3`7WzN)-GvRf17u)!i3B$zBW4y_UG*BJ)Ds!PN#{D0T2q8hE_yDf~h+Z55S~?m3H%xM>q4k_1Q85ZQX?fgdUE>S@4&ag&>TNdw1yYkipCAJEMOx z$4j&1j=9V)xvpoGY*xys@21gQ46G9_Lj6(Kk~JI zx#FFf6mMk9HA{B0BCwS3VI_O9^XlA9&zusc6L)-}*3HFi3jR`Ky@R!)}37gW6|tSzNR1j=F57eN?L*5YgYNsnmxrw*n&g*(m2r4It*k0 zV?X=^Ci#APR`L)@ZgA#MRsUDp_woWVC}%+p^t)RjF3ZZf(eAG4E*}eW*FFjrrn7wc zh9WBWe~_DY!PFp`XPS^#g{htpFXot?f{xnDfP8%I*fl&%*_vEj#l?+LLbXigHXmq( zJ}Pe1Pr?XK{fq{ZK@Ivo>UJdD&FSuOY!-9)E1OQ=L_gN}*^ke;GVH&d z@6ATsn$Qxbv%F*DyDOjWPKLS0XR=shp8s~!ms8km+Oglrh0Z=%^*^?*oVJH0^v)_v zX}Ppd{5#v^!l9t_q_zCjpir}u&e@vTD?@x&8s^qp=J)424sj@(@waQXM%Y3cFQdKL zSRRn!++TWOUwK8sD6+3Xna|Gh$aW<#Ayy%NPm@z&t&f zm%GED)7Iv1rcM1rj`vAOg9}EiNA*bGov*hq70FBYP_oy{#v^;AOgMV~R=r`Dw^QMBZa5smz)g;w_U2mD+ zneU*uQqcHrE>x0uas>BAo}mgw+t>_v*w2gT8G{Uh00l88ySJP;LwP<{q#r;*nE!uhQ z!QJokGrNN%H@NK1ZOC=kNz!!j#G?>(Ny#_%+Bet|MJw;QUMf&25T$=4Vb{08=oFJM zEo45kd?VDsB*65NxI?oU|B%GzV-B(AxP6aq*POWdd%i8jSu>7$Go#$XR|C=`;0CPD-_x3P|kg zz(E3mx{iUUsP%k+8OI`KX+SeHS$R$LSz-S@?*y4GI z%(P71b@Q;W1;SqSL`gfu%XYHOSjJ^|=SlVPOUZAuRg7u?FWY0Gu`B+pp09=>-kEA@ zHg$<6@q6M+Q~;w6TmGBn4i>ytDN1W9uZIay(z~rJy`8tL``*D%ym^zc;&FU7xU2>ZGv%`%rz673oqMTHsb@vcclF`~LRkrY!(QhsD z>+>DWXPX@!!#ti_;KRUz1I@~B8h~T5^Mot{?pi+}sY2`{nqT7~TzYafY%s`r)_Bl6 z*J8w^5E}|_R!AE(P4d-B^bLC5XiW}n$E|%g;@juR-&W~*i&}`k?cPY>g zTSM;B9JFm<@`o+2o+mlS{#cI~T~Z0RR@f-=e%tq#x3x5;xF%|G#5}(WkZ>`Mj&Ijs zBSxhZ44VpF{*O}eaBYPPqjk%K9PVc;k)Y#zG7_U$)G`++oZq$fANL$?%3oMzQW#hNK*XJGMECQlqyM0Ij{Pw|v9`Q{ zTB3h3xBP`whjs1${gnATourS5WjZ+{P(O}F{%r$pB&5Mc%)fp7{Xv@u4Lgyv250Qk z|H7I zQ-StfxyRoaU}F6QogI;6^m$nTGlQ0c>*;)y<2swih5wL-)n)-zHEU$z@7^W%EYcjj=}0Etus z*bVzs21wi8>1%E$MpRf8F{}re2E1e#A9P|Fy%tduf!r|pWU3-XJN40St9r`yP%Hr{ zA^P{h+v*I&ByHn1oQ&NOS6t_b7y>Qd=adJGr|?=(v9S*Hysc*Pyf@TZ@dCo|6ymSbC1VCTddAc8 z>4~IgDc?EqXOnMQKvL;ZhH`qF@6A?vQ3&Ie%*7@5Xfud;p;e_|Mr>)yW@XWg#Z8R~ z&_PG9I^MspqVRE8A^G2ZoH<{9#&<@8`%LN+lFj}+gR|-L^fAZSW#Z|AkoqXcBzi!P zNY4AKFZjv2&enCK)Lmss3;P#boL<=;9XRHw^ZrM*Cvw`Zf!B>A*KNdlIB1m3uLar4 zOPPgdWb8dx%-SJ^d-X+qVh5eqowDDm6BB+;lB2_QV8TpmtnjxP$gU?Mw$wjIqGOz` z=REsNR^8t?Qz}J{+OF3mUb7z* zqisWW6f1Qiif`=jcm$o8`T!)eQ}8R?tz7BYdj({Z4Ja;;K28BG?qi0^BFo*!J(C;+ z@wjA+&3Lhg6}IbIhEVB)fEYrx1V(hD(tMu`K6&1KedufL2!`j7Y4k#q@N}gIi`TqC z`@NT#rcjk%j2Zj?%K!Yz`Gd@ zD!q`Vmn#G?QJR(JI$}}qw`K>dgPV$PvDwYDHaFLU+*gCNwy~E-(I%hKdz(`)80YEx zlW+WO)oK{n$vig)?P)^ZT@c{|D@j_1Zbw6uwn+p=E@@MyStW(4z!>8Wn4~}`Z zYtHatx&&^8D=BjOh3C>Ep?QT3_Y3o({tUgW1f^QqU5_CN4V7qXYvo$G_Ui!%gB0Di zHCG->3|#b9(8smGKbm)K;gMD3+e#fyXK`!QU}JwKf|!PkzmooohDCX{CYHjXd%KkW z3dR+dEct>=3$&a4$w`DMaG7JI$m_8fveI-+QR>4;ysjPUp25Bt`B?o*0q$L~L5cS5 z*=SI9Rw2Ot-MNJZ;Z=y^2I0^RkQj5F#bS=*kZD`CdX0&q)PP|5kOT=yi6*{l^_9kt z-Z)0YjV1~dcJ^`QaR-e7T;kg#b4mZ*i!xL@<9%R{s`}Qu)%^{gMbbV1q1T)CHO2q*~ZHkmyDcqm29?%S|`};_q%Hz*%2B&!hseqfNTtZB0CmvSZ`CqoFqMEm<|oY zVWZKvmU)!y7uydHnxfBH*e2WuYonDf;5IU!I+ozER;cE_$DF7+i~fLbFY{lZjNUbK zVR#~fU^I7OWKy%?gJI`Ml%;v9ovo(gTNpI=AC=R;n9q?w8;LKoyb+8xJ^i+-+(Cgkk<=wAD5DJmdk!;YY zn;*gV1lo^jtZqjyJARp_D|eD-*h+2MTi@^&XG@igJhbtq59GcMHk_bKC~8gLX4vmG z%j(QLYc3YNI68+6rh7Fjhaq;~>Sv*(P-J^>G(5NwHhu$QjMIniTVR#6tiy501sfw z``n9b{h!1S8}`u6!g0Xp$0*}BjEGV6^DP6NW<)bp=G1MChh}|&f}`_GEk3t#Nx?cr))J%BB@uQOWwG9xZPQU zJ^Hj}TK5W3@ciU5h^BNgGP7A~iK?I5!&P{4P$rQE)%WC#V(OHKWn&XHKhTlZ4qp&nhrer=ydV#&NlG&0ZFo8*3;&SGLo zwFB8l?OgC$U4DN~y6D)4!oZyIH(D|Y?p+q1@gcht$3tdZGU1nh&BT? z=%2vp@iJ)}K}9Pt6=oWjDQBH~RgYJVi*f$_IBIdnC)=$s8)$)2#8eSXOmk7l4c+|? zV&kE8%`IpxAn_Zzw~x{MAhmBmnGrd;KOb<}v8V}~Z<9J3Rd6{jA0(%#RHBU?r?U_L z3tc*us>5}8qI&wi>JWKKQl>=HrCbk`#}MXXW`+Zk&zUcZ$jP%qI0#F=*%?2Z3@VCu z>1rl-E}qP>{{`-BiT*3N6SwOr=ga)wlCA6PR3n1w?9jaoYvJ<(KEtDtQsUF4JpqcD zGH1kFj*23Ov$AwseJ+7IscB1M<`~Z71w~2{Gu!J08GPA3<{Bu2WYCHk&+LR5&_QpH zJ~ITcjnJi6C0ODYc`z-8AEW@G!)LG&^9Ptze%mhIZyCy^QQMQ?Dra2mKywfmkM`Jq z0GquW%gn^S3vo|cc-xuw*SF-#L3W|<W{oRgz4OSk_Pe~kq~(e(sc30 zzu_Kw4I1WqpT~1)nJIG9g>CjDYJ2)#FbX=k#}HSS$_Rup*UXpEBhsIq(4_55s%+1! z=89j+M6VZ!nIwo2Z^ZLC&oAiN9J$U(%ziyy%-0%{lC3?3drIA-Q5O=MWYY&H%4`dE zG#N*am%BEj#C*wJXJ;Z_uxOGE-Sfhk9(VoTdfBF8{?b=ukhema*=v!DgO z3-=Tf|AK-%`%tn&$1NkwpCGW_bMX_&(z!t4FucVxdAqycYXOW3!bE`{{3v88O7X=p z0CB8|fS&cmTJ57f_;6-jM{ir|MCeik_aDl=K)s!vbg1Q^ybPMaxnbtB2aObOp=MQ^ zxWY{=oF4A34JHZjLOXa27yoypI;CEwL263jdN%Sg!j zw*(3p%lqHGl(N4U+zOdSD7-wy7pUp)NqlPmN;y`ItUo~DUcUMcI!qWZ zd^#M1Z7E5lmzi>A8b^ohQ{N$3g7*WF^nS$d>fe*-{PXy415(0HJrO=k=bE(Uy_DQG z3?FbpE-yJcIeDqRC-Gq z%$T()@$iq18HJc7k?x(KkIuOo#ojrYceovNEP=;i>ZGN zVYl{;NDmiPk1VCDr)i_-yTCUEMg^od8BTmg*#bVU%&PKOwQngCW$5F25p5mBZwq>Sa7+u>mt?)M#f6pP|e|Gaj2A z45))Pn~+xc%X`;lgX$LDbpjD5!XEm4Qh1!DvCD~%p9gwR0#}t>C4@P8_Tn@0M!Ia1 zWm$Oil*Ns_E`$2#pD|VD`wyFRZ-VMvFTHfmTMtideMpA5%wUpaOTAb@mpN!UFZtGd z94-xa4LY;ee$sj7g&ToKcqg6fkQ4nlYMd4b-lL)Z*}>NCrq_R}k-BW}HV?2w_nCw^2PqV3r3 zbZ@fg3sP&iwgR82JQMHR@(|C@CoKpC3?|mh*Hiw$&3~G$@@@BnuZ++?x}uPsNye0D z%E3~pu+JjRUo1(m1SK6CjVG7w43&$pi3pl=Rf^`=$7N)tP|fO8J{O5!uYR;XJa5*$ zlKHsEzHa_urJZjhv%1^Ru=-yJ#?$ureXD?47tX8Ym419^ySIZHjb>*qLzKnep;smy1u)5PGy~khP8Vt)tVB=KvqWf%MWOsM^4_RWzhj5gCysIG(nU z&Nv*;XAZJ|1{su56m4ZeDEo2iLml<^#ppHo(*kAu5D82LPvvY%4~>-mn3x3K1Wj$a zWRW5%r;@e~mj_@DYxcXPYNh>eWRnjyYkD3XfDOA&$CUquF*Z3#w0;Xrty;%iaeQGt zGDs-EgTdEaVp9~v9ms!sd#>N5!&&21V?to$bIPHEK}UlvFTGIMWnVL|zIu>`)U%<9 zNB~qwtFc3OfXuGNWP**=(KyuV)cn(hxz7#VNPqRtA+5Z%(f~>0eCTHucka ztDfQ4B@;vn=TD$(IPd!$P0WZ@_OcG!O~LRd9oiYP#wqW9-iqQ+t5h(cq4YSENyvNmAS%1_=mi zeIXX&MkxekU@nPXpFIUxt1yAO=EKJ`j$F;K={&=Ok+wyahWVYc^GT{LnWhGmnl2YI z4J0j6s{_EwJN})1mtG_H9QiPZ@w;Fe$XUuF^eDo>dd8V2QaPW!g z9g90}1AUQ#zL6^qlMAV7fB0#!L*2cd=mYp~SHL$XzbsE>Vmf1;&K%uuLLIV=eq%3il2feZN9tGyM&uPgWM3LaJSmPn6G8w@Lii*SR-? zVCqhAjMN7$RR9G!v329INzZ;29tb}UW@!_49b??_q;);x7-Yst=~+Pg=H5{R`7M$1 z$_|*5w{lE!chs~>T_c1>;H1=NC^=MW^xyLC17o5E7q&POiNxse3kD@C_+cMn%D-5j;xS!VpvzZ_IU9`0jFG zJNvFN&28j{uZZC75asR~m8mFf`Xe(AiXDLr4h>s`cS?}Bo>A#rSD$`Ej&B)N0*si3 z%Vi@JVz$H2va+u9lm+Ik*D~zm`B#3eLHk0+wQpk%c~mF{}fX zKW-ad5wL4E(p97RhXMQ^(F78cw3U#N=7$DXdAQV6g?cCCJ3|ZF-$e0;WIWVk&CyUD z;_*=^#%hoI+k0mOtFs3crO{8TDQ=KHCB%03bHFvcs!_qz7Qh&AR+bs|94e9Eokj6>MWBPo2 zq@)Mfzxk8-;7Uo%*xGpU6ijtWI-^TFQ)7bRRbO#0yvThrO{4iIz~e_RsO5vNjFb?Q z=D(H~AfTKDZ=v4Z3SkMPDKyJ?Dy7gCFJh+4`LZh1FgJY{bjY8X81s~%;*nFAbGM%2 z&QqAkAnKA#lJ`Jv-B7aGXgd`m0FBaG%UdMct- zr%bjHIui{O8IZeH9^Uo&Oo~!=YK!{cu=AK|A3uSWfN6+Q9*uayYYU24amyOc4oG5! zlC^nGG8Bi3T1!^el|(Ho76AxiR_FIRrr(;cg9~n@yFawR@ifu*iPW)ZJzM926f`s))-KFFI07Zw9%GwaF_;5A=(~xQpbI7c+uIYl+2MA-Q*@3ot1PS zvEdtAl9oHZlB88R-{%yH{8`(+%hk4;h&$VEcUSnp{?k7L1@{RhbAR$|4=LuwgEh;-C`!JK747Zp2v=#2Sv zt7+F{*8yixW%4$P2@*fNi22ayA!?t3tCi*t-=iRvVR`}m;CT1Y-`!_eEM?-$A|_$b zsB)geuesEH*i|XjU*`~GGa1P=EuEzrM`w}bZ0vz~9c9TjFn5S-@T5o(7_AlKFbUHk zn`{>jrs)5Y2NCU(@M`Na!JVNnW{1xPl1BVu*^Zjo#Jr+sN7tRz~e^DOr374??SE5FjDf7}a^WMC&UMbJLL z{^Ry9vsx2kZTVT%CuQGGtAg%v)BQf34i4s$zwkV?6+Mn zT|37f99-J=MNoMqAuF=aaml6ki_2~iW+(|vNh#!`kYg$YtaTEF2#Nz9ksrx&S@=Co zY!X7B-GQVr+34??l$ukZHG5JlGGZ)ReQF1SfKEz6+x>2SNbxF9K=B<=s{{u~8mxy3 zD0+fAJ}8)QN>p!>z1fI@T?Ykzd~%FU15q!6boM4`MLB*qyy}j`vd^+6$NLwk%NY)) zESj&gH7$I+!JyugCU=||2p0t0F1Vq}4?Zm3=^TdLOlpC(3>L))2IywuXDsZu3~~wM zX)D8^wDoqFu={d|$?_jAEJ@6D8wntoDPcR^A8u|0!3Cw%uU$WE9PGCd0CE>q>K6W8 z1oqucd^bxW4yVg6OhprK+pf_1KHcEj;j(B{Vg16@X=!8F5}BctTZkcZb_3uMa_2E@&wU%6S(7<(=ieN~V-MneFGzYi zIn5_QVp@DNKXlV`y@NvbIRqSjg470Y>wq&p&}PZ8Q^EYw=CB=NV3!4}o#tVS>s8GL zNpB6PdgE|eNsB-Ue%dNTzp`wtX`*W@+_&X{@rI+#m-Zv{v`V zA`|=aD4iRu(u6b>WK8xGvRZC~n(I`K7dCTtLeb%qRi-nDvtyiTLSdJB+Ow`fbSH1L zo+#&+;)Q5IEw_iIg>MSlXLWH6C4|o=_Sc9DB&dC?ysj0|->-;USs119+gxU(VOh#! z5%0<36SYczuOo;`;>yB-YelbD$$q_=BxojJ0IY8J$b3Hqz`v5lQFSk`(7LP*+xBiy zAo@GmHs2#<-BJc9Z2|z&L7*PFfkclQ)6d=L_*PRfHFMwfu$=*nT#_()bp;J!q6ge> zaIp}mibBP(N#|Kj2n;$T3nm2`c7xTsspmeFayL_n|S@!ESA{Nuqa8SG85AZ2V1LoVxdK1 zSHxn<8TVy72fW&f%ZoUhV*S3@g>;irhYPrra_>U^!pUJUA9#<(Zxy2^ z+E!?vM-^mpJPcyFP}8VrU9Rjchc_~E|6mwD>blUlBZXV_k2IC4ud*+!N}rq)8cMf(j66wWvzk>$SpSd-7E8x_t}A*N|_r1#6J$xk<=kjM2oijpLLc=DuVAcX!6GrSTk&KY~r`gRx=DdsjI~Gi}xxEoa1#2c5g+!7j1`ir7eGe4)@6s zmJ}Fg2yX)I^}+|3a3AngTnEL3!~A_^Aa;U~73(c={fvcv(&$2ut(3xG0U&ot3)>sX zlpS<9>e5RE$e;BYRP7#7DyP={);;}-)m7SOk*_IgpRa-YnH`*dK<77YSe zA1M&O3K zqheNR3Qzv7oBc1hz|A2~PW>T@%pDB}zcQX1X>(v^WRvUv?l&7b2*7djy^OR`1wmAR`u6 za=KS08fOq){nje%HeR*D4FT959o$O%K+LS%Ns{~03dW|E+*}YGSXeDS6l)+-gNZXf z7?W$(aW*eo%ii-zGWRJi0oz9@J;U}3%R%C&ru%HwKHp~nhDQO{RM#2`p8$nJCp}M5GiF-(MsY@A2s@laM!639BPsBC%fJ{*Qx!w)CvcAm*TiEHcD#k? zj=+*onE>rl>bE0qO4F=5)8lU-*;{H%%+|H}Z(DZzcz3iPoV2L0Y*rVX&^yf7q@~li zWW8q)xmCs4l*lYM{Q+}Nz@7K1^o7*)-JSNy@K%IO)q zn)vS;@{^JW*xI zEZW2EZ;Nb=a3K0h8cM;2Fu$X$n8@@s0KtD)!+^h-)W@4cjL-pPxxZ`L`O2{TNB8|a z7(i{_A0hWZHQ{jZh0#7tmS0@9LXQ>r&HV7yu_O8*K5%DJO0?N+Va`aW8AT5uSPTS< zj-)bY&z5Hj2d-O~`y7K9PY#cHH~A>3f%PiO72`WIt zc~8Q9zrDJKhs%uNA{84f#7?#yDL-l9RfqAS%;jmK?*kPkEf!hSdO!<)K?u2 zc+e_cexwh!TCtfH&R47Xg8qF>n(TbK2tOMkl*!1yl_z8Ip2~bn0UR`)^-xlm|Dd?N zMMq95+upCn2zoa_C6t`58JeO=Jx=OIFkq&flzcjfwa@;l_4FF5bdXo)Q$(xOUaZ#K z^*Rgt{Zu$B;49SL(k=JTx!$*d7o&d`XLU ziZ7FLiS?FIKCCHVeSa3XK^6~_QcIs-GyOvL)yf|}m=d)lK4jnex-+5zvt;BBElrK` zdkRSLU>1mz8(~|?Kr%y;&%Z(rYl)f*THw{w1}-tB3!4at*=Gti-FH4ov$N@qgT-ya z<~XBUt1VbfeI9keaCJL+(1&J=BiG0c|Zpp5QrlYL2Zhqurf& z+yWVc#H|j6g>^EZXq4}_VEiBauVVaXVO}p-Nw~-vpf@sOCIzWsJ-|Sk%&}GGZ#_4|*`_ zU3KhBXSk{^r_L00Utwt-9l185bvqmAba_%R}sNz%R-$< zd;Gd1&ziW)WJWFgK2#Jxre!g4lEWR7CbC&M$XkA1Bnw%)el|Khwz-&iVKht1!)@;f z)NkMd!MuSGRxD&b5L?P{7_n7}*m#b!t)Cp8T9Ed%Q2YW2Ph&cF9CBvyYzQw4K4_DTs%I%W%JJ%W`W~(c z4??rJzHIQ2+rD)e&MdlM$8<8HeYi{si?z!-XbF7!nQskc$X=z%l3)hALp;)-i);lG zkG~@guIUU1HK{b%vc;Nd0TfV@h*zFwC=^NNf%u?u;7aKjq2iA*8-c7_$}K1S689?P znTBvI%|~*}2{GeGtxN|KXQD9o-&eu=*eXfE{ZgcT zPr}_T&}KVmpjW8rGcoa#buWo=y#1QPSk)`9?#+I!APe#qLe^2^dB&4ESX{Bol)HZ- zNZL)_+o{Qb2~g-YJk}6R-bLd%J;9qL1>ser$7fpk!S~LCmxX2A_oVll+VC%Q0lTZ% zl`+iTwQrbVA8&jn;|xb5s|mXqn+4C5*HtZeIc?H6-bh6J-OtE9Ioq)(|Qrdp|yO$%;y7n zm?)8H<$yBRa$YO!I+k#+HDo_c-0@EHR?|FK4IMv->|XIm+wYHq>p-B?WB+9xfO7 zTMs76O4KL~(;m;C0mBAc&5uDEK7E&~)+XH#JV1tp#4kjF$6-4Of+r(RE73UXis??1 zt&!l>N|TlFDV8KbX+L?^Irr@HH>k(XC*y*>iYG@BVB{#n$|5Kwy9xKawMubVY7z+L z-#Ms@Mxs%BaF0U1gJnwhCCZ?kkzu8kvhHe>291~F8rYzyzrhXc*bnf-1J@6#YU+9z z3<6bsFk;WQ@WSqUIaI3*q%F6!%>A1Az?!XhT&;{VgYXaiwi<`~yFs`T&!9u(4%|+T zi>f8p3dk)U0TvH5bZ!B(Gy!(G{kE7(s#lGj=Q2>nQZR_>Q82Y*KT#3X15 z!sKjg2Jw>h8?W1^wRw=IpnT;d)=9HA&T}uu6i$$!c~^41m<4o-o8QWpdRCSICCz48 zf!0hJ3mrzsBB)>Lg?j=EVs`}u<$#YsSLLpQBDH$>pf&y# zDlAT{sXT|G<54Ki=CAQJx0ldE8CTgL@dL^$6M`q>PM{|~Re(=VJkPl7KPibgg!0PC z34qe^H3JQnA*T2b^xy}$#~aeq!Z~3g5DaoBKhrDlSX#pj|FpS_Equ~v%WpIKlEr+h z{0yl6z5t*VMh8_Ote^M8urxaZat8Jc)!EF)G4U7;&7S@+^LT?UApb`~!)}iM=@hGLPplhEFwQ;l3$t))`9> zT*tf|->r_;RdaZ(d^-(>fuEd`{U#5AD+LWm+^b2cfUKJ;6( zvJ+1k0&viGCWM=F zOV({zQ`&pO@LOhGZLQ=KHIb%zH(A2z>H~N0sz08+{Lty)%T~yyK+SI50yS}VKLDpQwN{$+w#N}fv>W+89CN}b$GLaA03b7`6#cPTSb zF9T3MrFJscsH5+Dw$a>48}45uD+B|2(V`|=XGiqAYJc88x>{C#z<81 zlv?dlND|b0;jcfq(M{NsbRP!QKF&V(Z<_Mh;B;?U@mjX}M4`a9np>ox5qG!?=bUs`$D->pcCbeWPADQVq*f`5+*=mRD%U;dz}$3dD`^ zUzr;|)nGsGRb~=>l7^+dC{&Zkh;kO=2ydg!>sDcG4}h}goe2LxUZ{6b%cm!2$`~2_ z6i-?i9%=g6^VrG_x|`yT4?7|;9IC#J(K?Zp?C3g=+(IMZ9cg1<^9snlO^TF^FJRp% zZmz55M|YLW8uU3jH62y~62?a)sz1%7|DNSuT=GQqsQg!#u0Q@m9_PLWkuPg(+)v&Z zf9}$qn28tZyH)I^!xe4g$xsHAbuJVRR+}`!k!UilRik8CCoArq2n}7bOjA}wc!Ti4 zC7wgn@Qaqr;(fnp>HCcS$(XC(|8oPkHwcvk)jV2>FEPCQbrVVYhGUGq^)8R1aqZei z`EiV-P1yPL)ZLMkf)((m-4Vdd+9)ke(7yMWtSc6tAezo-fzoFKk%9H~p)1!8YB~4>ai6z60ENd_VhXujtSrILLnzv|DyQea}(A z^ZWKD8P2pu@*90Kj}c?HTx7KkTRwP1l52S}II$<}9xV84bf(9a)*T=&&(wneOpc52Q?3ARQO|TR6##({-C@hrn8WK z4a2nhH8!R~)1_c524G}O(h;JJE?fE_?~Y2+Y*>B`Po+l$KE-};va3ako^Ha)POz2H z633~gf_Tlfp8D0DLAs~j=JTX zUjrHJP`$AF#nbecWAcx2nkYE+Q|S!;um5rTR~+7?XD3Qej-dEArv79!U&2x9bU?(-zo0w{8233qSV9TB{ z_Rq}~v%=!Hs#TabkCBYhW?zv5@)*b=P+2$m3#tgF(q0QhH zrMyaS9ZSTCu$AfrTY*L1tWe&V8MyYwFg((=66s@!f0}h{<>zrl6#npo5Q+@N*ddWs z?&dq-Y$ROf%ABqksGm6}^6sC#{z(Y(MkI)MFFJ1jKu(yrBc6{5%5CLn;<0qMFwDw3Yab;kfPFQT>xDGC8SqD4J8A;KGZ}=NNmF>8QGv+ z>G$+03~KJ@BwDOEW(0K%l1)Wi>$_&;RFB4SehH^YY4nPlo@xV%G|0 zY2!Obn%~gYlvjCQoS14;hJESSFlytytj5V);{eqLYn<|=O|Dgc{tJ1-Ts_n@q;%G} zt{*jmdKz%Kbv|>>s0JgsA~2|yF_ra^ZYW02=egX=#^j7+$M?QE?39)H59f3Cl=2(* zkyw5ut!3jEr0wp7N#;;0>Y^)R%u16CSf-AYa>T3df7>Cz12#KXvj z0AG2f`H>U!<`qp5Ly);qfz(?sAGdkMrNk9k{IU4!qw4HYQbpwzuhRNeaM$M?ri(5$ zl8RGKYPniIYx}Py=boU5cFNK?49toN<^~^O^C^R|qb#kql{>8Amv_I+5;7W;=wBU; zPL#-%movJPtbVA8%|3hO_fw82q>4+P=wM@dT!P8+*YKx?-*S@tQ!vDV&;fHxmMx8FRqJ#$y zY~RQi9~8dyky-=lR6bL&JZtyB!Qw1D@(JTur3OPn@A3va{rUWh0#*4<{WFPPNMLmD zquZi;$eh$ENyyciX-P1BhFK?#lSbJjzPR*A2J|F#SI7suY0WwxwG`2~bPs!vpX2k9 z#bBhqR1VkpnX>Srn|<$UJR2MhjK)0H-(Zn}k>3;!a+Pr}67 z@>A2VMp#Ju=v`k{Fk9bdVOe%uof8PNiR8PK?&UZ}8SMr4zK|vqpk!igQyVdvFfCC0 z&a=pA(@kRT)1G(DJ;X&^bZ_44Nsq{J&i5IyorBCxJQ@~JQg+u2_D6ZJ7wvLYW{sz% zsXs|3(;N3&i}gL?ag}vB{aVs26EvY2xuzjC&&4tXTU|MbKu`XhRGCWIkKEDQBlDy+BL@q5vqXQ7 z2cBQCt_4LO{(|-XLBHJQUw7~$MccpH_aA!@oBtI&9Gwz@%ijUF6>Mv!dO@`4=fe5; z&q`>|b;BBJe4uu^N0&wiZ*CqzwX~)ryUN6zinAr?Q-`O@K%#q5)XbontLvk%W6YJz z<$-Jfq9OeV1)AZ{%RDJw^18B;2VfLQk7D9~PBejmMJWCP1G~Y z_Ydx5r#G6<4sk4|Dh)4;dFW`y8lhMlF`M?=+9TzgkE9I>lK1QkG5#47{6NEjX->{3 zfm4?g^E47M^SB3>KRNW2eUmW4{gMVpN73bHfwf8qeMkO`k?kEC^PhOB7vmKL;w46w zSE%qf;;#D$Rs(#UFuT%erlRXY@jct&8~sz?al15VJzFf(!@Wv5$ccEfA-KN>yZAH9 z6`%xrt*u<@K1a01!P_pNlf~tFtrXZ&1Cry>+t@W+=kgNN1GcVioVo}P$r_EEW_W5f zr1A><*xQDBv%H;qNGGFC zgaJa&(ou7a^t?PgynGS&Y*LBz;4XZT?x9&7tPeu5A_^;hBHK?pRTsa^zUPU6Y?-LO z^C&rdGVK7fk-gHZkrms4-T#RN@Lm0~8$e3%Co(<;1M2}Z87OBFj=~QIwANA#q^D)} zA>MInS0}0uN|;YjvQO&o@5?baD-|&N(V;%D5bA-Sv7rR|Qk*u=-Jz7O^TJD)CGs1y z?MER4_;zN2mtT0LA|F|&TH;v<6{Um*Z$G;hmt5J#7RN-(yMnWCt!LKm9-V6lN8X@e z41f#lyX;5XdGZA)?qjSn{GA?${N*B>8@_>4Q7>5x=_$jK-VkACNEL1iA9%2g3{`o? z$9Q%C3{6wyeiR#1iK5kTTKCJ*paUuF+pU<0dw9FUsS-3cP&%c%-A z7_xV1rgu`P0W29BeN?1+Dc+N)>ed>E+Yc`%V@yCq))5MIm41^(FY+b?P0>a8^e3gd z?)1k*MEm_d^G(iY+xc~X+MriFN8XAZtS9X{)Cr_H+R`6uUgdG5f#N&6?|Wj6uG@&- z9J0NSQ3WS+Jr$yVhWv?+5PL+eg>QY@{X|Bo0uL)Ja}nc!xgRxhWN5n;yu2#5ODB3` z>(617uEx7M9XQ?$yEnGELRe7cvi!P>zso3QNkg?TYPrRsjTvX(uEV^*%?idbr-7R5 z@=VRx({3@zbNArmz(XHRH3*gHFpk@5Uo=LfU`xq>S{o>SDzjkD9Y|oO9URgzC)j1+ z;RCz2O)~hcs)Zi^c)?)J)7mohiY(4~6pdJrZ&-_qb{VP5_Q9Ke*(g9*m}Qcdv|wIe z)6}nN1kI8Y{%96`x905QZA#_LRGTzNN?LlYwu|ch1o`qrZ;T&wrSM44vq=Q6sXJ>_ zA%oswL1K+aUy|EeVxGwIP+F?X@+LWJJH>j_kcQ;BDfEXsO`6p=WUBoj+ zK3hyEF+i|k**GRxrH}-IJuIJ(pwm%L&koiuaA~OIzcSlhfzqB2hgc&IVJ%x8Yic@q zeS;#3sF_%&6s%W()%cqg!xER(bAZZJU2$o3H^*UAgJ)g`GvA%6beDHZDJoI1;*^S~ zSjz$HUMFdR5)4QFY9vvXanlQmH-n&G<)NxoeiiqwMVq?U9*eK2o=0D33wjQe84qpvi@bHFjPyEyQE%`-m5jn)_fCo>9&-_Vewbu#4|O^GYM9e(jOMj)Tp7%`vun zdq#pas$)xJK+WK4@b?90T2RYL0w2;HyB`=`b9M8vMXz`agcb=bfA_c})Waeu^Pkfr zam0+#emR-p65rzEerXKEe@GTXGk2buP-@@pL=*hlSJkOzHE}Ew$d?>TeT8-nRqn1;@A;NWR`8l=! zc}66?-D~j7nUKpmo+~e@FTN*(T5%WSr&#-8LbO*|de&-UT`cFJ`@rFenUdpCs?6BL z_S#Ncm+QJfCJ*|JYXcxU2)V|6+rufJb;+{s@N=x>uVuqaw z#rG<0k&I@LTmT?WJ5tWNb0qV#-m&K{nx&;vL867H^F^pWsnkrz?p=W;)?U+LmYlvt zmy)Lc;l?hH!!tbg?1_mEbtJrHDN%5par%Dvty5;oH|mzE`K*Fy-5LQ&0hLNK-Tkg3 z=*q^5Nz*1o>yd@$HogbcIG7gA`LpDn*Zji_+47j?FjR92*ttlvLtDVa$b^n5zy(L)| z*Z!h&+F;nn8w!X<1mt_sW|Tr8s0FdDut9+mF|^$x_2erhXEZYYkjK z;!XOhMpR$X&WCra<>Uq8pLn{0%BcTw%~&p*HSiY9`XgKLfSY9CqnID6*PaNUfOyy4 zAyL<#J@VO5{wlRRmruAPmYe@aspY#EQb0=U+QNd?9+8?Deeo9D-`mR~h$t|iz0N7- zza2_Z2V)6CPxr^9#%L(~dpQGHJ^;i!W&A(c;4i;r?i*MSnAGnBQh%aV{%rz^J)+{k zRQCwv$^89L9XN!*(GOcxe+zT&)34{}^~@>izaRPr7OvO4&KdXbZzBP}Ze@;2`~MF^ zQ(#~>>VLGNz#<%~Z+x+HaEQm5g}$NQP;$d7sG ze?bm*bp#Zc$)q%k%vtq6ysASp%TzNMIe&OnN3rG_IH0a(ns==$v;MqG#frZ{@^6^_ z(fcwChY)B9Ip(^urkJ{WZn$PW)6~4~J~eXobUx!QOL;2<$ZdgL$-%Lc{3_xkNt@A{ zH=tlsDy}X@jSYM)#cW(w%J5M)R}H9{TP9)pJ>j)TF=k2LR04Vl&WyxRyo@)6898^J zjTRe8ip=HHfNv!aXvBN0tsZYd-v1)=_yZ@osqf$y)0k&Hi^^7o?bv6l zVUae4?&PCLv3YfgipJ?X|CTeuHq9ZzPSPfT(O8oD;Oy1;Kv?Al6SWy)?*qO9chQkT^1Ab&WI{MhrHvS5k2CumeP8v>$}O~ z6StoJwO=hkVj zZqAQuw2?cAx2GlD1)yQg>rQ6L354cN*35=Q{z00uB_9x1{UijV3fq(Nc+utUaSN~- zO1R|L&8$BAOc3|=w%P;S6X4xmWG|hARIr}G^4M+rI_eVk5epd89wyqMlp)l~ff@(% zmrbmNx))``fv@mbC6;>1vC$V@y!YO}!$^000_2eVy*5~B5)>Ur6%fyt{Zz1Bt1grmS zc;);OO7LOi>wbqT2_U{eRd8`5met%epUDHJSLmfeYLNe))Z(fCdOXl7jC|HZC2kkU zd!tiOGcF=*=A!+W9m2gDFo$uuWU`kz1mDXg8;I~Xje-G|C{TbymSPjNk?$>86{}>8 z{EnW5nFE-Nz)T8h?L+~&%KbiP7FYN|M&N?{ro}{dO&^cu(V2p}q1(w@7sp%r^4#EH zX8p9r&wRu9;ipD{Md`xw4G*E!TZW91D`joQD&igAAI@zImP(tSJSI_Ehm?9u`JcRV zjJKslJj8kD1sbh0vU5VR^#d=g%iZC z-oH)r*N&{tYE{|xtmWUW`oh#t(icbxhY6NruTc^;N-zcnVS`kXS{z0M;L3W(wFAQu5wI$fIQod{Z$VEEV?Rp1h9AkZv>NvF#Nd?Z7>09_@7k zD6gnLHW|FE!EFNY8&q5a-jH9X_6(;5Ue4|j$9D*-nbmyqmKJl(yaXU^RYiS9T}H{v*a{F$_1^r%vEYr8Nw zo?Q+?c-pLa(-dhGe~$|k@@p<)bqe40%Hddb@#}CkT|GUs8}sgoJoT1}3AJyLe?fXj z0-)}7{Tpr!M3AK*fGrN(?W71gk${QsxF{B-zUS48s!ZuFYyA3bU@;sZ<+t>G;PgW4 z0kzi`A^3oY@9ZxVAa6|Js3WA za9xCx=D=acb`O^SKx4 zZpV)Lkmy@1elu$1tD^;0yB*-`&dVBkIpy*BT`CpuF zoC<^4>mm2wCH_v7{)?!;MbSS7{1;LGMbuyEtN$MzJHXE-SORo-%LO^ zJ~$g?`68u0>PAzwj4C_O5ru)n@Gh%)gJ@Csd6IJAw`h z1?0&8wwVoTF{c<{*YEBG{APg%V!|ci+ll>T zq?vj|nSxn)97qyAq=M_-K<#g>uwM4XeO279sD9^_?3lu^$z}z6lArg}^xqiD&3I8O z4Q1M@Ir&st0Oc1W-Q7jBL-YXN0px4oj+{gdUY~e6FAy}JR-)Z8)5v*X8 zzNwmKY<+^EVsaa;0o_!T1n~NEKkAA_^YrVIR8r|>x!hcE#gi3-)77ux>x(+b zD<$@*=_k8%h4u`@l3i6?l^?TO96xf>yx6|&qc%^n~ZF$=2j~&?{Csct*B4xvChSR-!`fu zg_CmGsU}poq5n=r)c%oV99F)-5??ZoBCf&2a6Xj z76^eWK|#H=gX4y|K0dcRCBTA3r`^Oh%&^3*TL%&l%lIa3LKXHX9EZ z9)2bUr%ZLMOIt-;A4Qon*2eLK5mNnWb#^YxdAuv9(;u!-90bzq= zSU*gz8QJ&|24;VkL&0R2oe-t(qZx@}D=%_k`A@>aF{9|={K*x!L@ybP3g^`aj2IR) z9*xXzG*x?ZnBi*)5$)REr+tcUjk>bV-zw|3L;oF|6}&Sd5*8nY`S;-K!)NO67f_HN zY(b3!%D^*aE{?;)b{Q{)~ETyjtBnpE9aMD>i|JlyVSyGz!Z;P9$T`qa$KNE|(z6MZD*4lem! zp~VG0`_ByRR7ySBAQ_uKeD8*O?_^pP28M3pKOd})>K6DB-V$e^N&zW(Nr3pj@kvn3 zi?dl#b;Esrm9-!QyeJsVUQ}LVyOSnL_wVq+>EXPs@s2f{$X9VHu?p^LQaIBY^9qPLM$o67 zw={p>`?+KwMB*U|QBMM{j!F#PsZtgqvYH*JU1!QLTIn9Bi4t-rYjcoG2)hE_g9FI^ zoA#fjd*2x33oz?Gyz27Nou#P6uiL>zgdIUw72BfyeFbOnK!}7s20XDi90#o!ywf{p zh{bAFptiUL!@xVenrx({8&Pf;&ui=6r+;f5v7fjqJ{tX3wo3tB%UY*vDQR|sg0)Hb zg7R^o#NTw2{tLJy{AyGWkt77cL>SE8EV+>wPq% z&)hJAug-Zc?ZwleyI~QbyJeOTOsDW~p9Gr1J*oCcr(4>y+0MaP>{<@KlQa+mQd%$o zsedC<5G$1!FfUT4JWpaWUcH^#6P5 z|NM*C2b^43evX09RW$#a@2@-mUE;6t^RIvZi>QC0;;%dZMbuy8=U@N+7g7I2g(ZRz zndRQaaVu?aUet1)N&oN1qaE%U%5`J2*!O2SlA#-N>gKqAYHtiUZWvdlI2cqK8d&8E z%Cei`3&9tMX^y6DTgIuHYT~gtX`Fb(uGg<*7SNfYW}|H0FVB|SG?Z)hU@vT!kf=v z7s1z~`d>fpe+v!MEf749H*m47t~2_(l(8L!k~^6zBw4dtl#dqmRsxXgETpQcr>gtuwmm**nKPxpYcnsc~5mQx8%lN zE=>EOmT; z-lK@W!f~GOPTo)FuODN!Dy%&6;ln$yZ*TSm@{VOii^46eX#r`lO!Hh9Gu!D8HlN7{ z$@R{P0%)9FI*)XHw|~x?MOkaq zyNW)BOvEe_lbR^fnzm-@^OOR3lbr7wx5yJYE@Wr3c_6_ddghBOK**L&hD0;xLuZ#- zw-MqNAd_YU`v3%7shXLw(h*J9`|igWMRDk?pwQqfg0MXsJw7u-WHNq>0ate$)xZxr z&_6xAfWP;8?dKL|&2zWc4O7%7SH#^LJN!+b?PKG56~{O4Rid=ey^nnzIsuHjSayl# zN7!=qI~S02-GHw`B^A@|k$WL}1$bS-pX&$c1TC9$5b%-%%V5HUrV~nIK1`oX3)+t5 z?pGOhh%YY>jMd>P$_bS8!Du89;uAD=q z0Dwf;%rV{Tuf9X;TLfk>1tZliuk8go#VuCQw~o8i&9+Q3AWb{YEcXjTm!B2P>@~CI zDu9)1!y{E{&M)iPuGXQV0cvP_)$#Sg#=e@5ZAv38q)Bu`Kbu6e=tCr3%zl0)jmh*8 zu5wp9pCwguE>sn1OZOTpAg`*eh~Op-seEv)TpY~pIm!%kJFf2Q-X!gyuA%$&dR2gq^O0@$9p`l$&MB@IC1!bvw>X_iT~pk zf?2q0o{FG8P*%xQ+s7N^FTiDAiP6e~bPXQUvyvX#Ghb6aY%GalWKGFztVSw9sE-*R zFC7%!|I(M+acaQ0-lTlUhMhQQl*Y0smxtWv=T*_kj=%PmpVnQ!ZY3l6gY7q=y>hcH z+ptDgA#Q5j!N8taP|t>!XIrDbrdGO}DK-x$GKx?T5t`>Jyso zoTs@KHd06?RG!|M6J+7{>--FtRqJCa(-rPMTF2K*qJnZ5$anK;Mx2n+w|No-BZSB- za(6j`u~VafIF&S~$2R8~YhW5+56UJ0NV+Kk!_WANPm}@&7@M|ir!WL79;g`Y|eYCosr!{UPHQVw)cLMe8&`OHf0Ct#aXE!s5nt9D|$4rg>*wy_G}V3Ou2sN`#}mEBP|j zMR&(5P79;7wi8kv4VXn*E62_Kx+7$Et&<>D8p)KWUBxt@W$3#vTzX8{c5&$g;QI3{ ziQ%-I9X4zaVF62J4QU;4#1kjQ_s#YY;QKbEI(6jjp09EVqLn>E>yzPoM~pvhR@rtk zt|CuHGFYXirgt#hKJTeTn63R_@(BooLO7oqZDZ#q-+a?o40Md)Y8T4*HTUo^QnD1g%YSXCj&N-87c)xqQaQyBGUGr8`;NkdWn0q za2Ls0>u@s3K!xQ_NO|5mw7vGZEOaBx&Z))}qeEy7;saz+8U%D(e0tkh&zXrYbY5JU zE-Il`gV=#J@r%QMeCf08f^P8Y=mjxcJOdF8PfZ4-ik$q-qcwge!ER+Iw-}}~rFje( zFuwP1FknhDJ|JSbu>7h+f#=E4Z|H9k8kN!dj%jk~A`8lW9G@Eh!TY2_mV@+*NX=1+ z9=%YV>PSHSTRQ(EN*!C~t~8k|szdLAZ$4(j%b4B!aIZ`%4dL8LblA-E)PS}J-XPln zBX1F|d{#SyyE8mX-4T$`FSmBQ%6q{gRLyEtD70Zr^ISdo>StM>kM+}EZD0|7&99GRiAWmc2`zai{|8q_UU_S zu5KUf{KlhWDX?L6V!bx5!R-&EGIz2$Ad5xemL<~s?I*pKbjliGVM&NQ=slIYFhtI_ zA`_JDugY7sOeZ68HZx#f#X2d86R#ZQv{|^BXui;Iz2s=Swnm36B3oF4V%9M5qFvq1 zI|YL?GY5tU?vVJ8mA zVd6@jmF(djzHPx>DnQ!alPmtt;COv26#Gx3DxXpe-idq83lmje0gf*^6|@eZ3h;Su zeTWr()LjFDb<%Q5&{Y+aOJ7A;X_n}n6;_r(?mnwS$WQw#xL~Pa1l{@7q=z0zjW0xF zhhpgfQBg6P{rc9NyKU?Fm?ecaQV-G^x*bRIY)K&%mZJ}Q{)`nC{Wlq_6pJ+*1#&Q>1v%SBeeVk~X6e-y6m-QcHh4QvTCURHj+)YvD`U}TFqyo~bngl=UOvVJjBkk>U<051rrARFfWqPeI+|Bp_Kyx88t~@WfO1GmcyNzNtib{o#w5XlB zemGe9v{SPx%c4(QO+u^CUEsKWui?d zDQHQgF69C37Lvgzcj==0^)9?owUUl5KN3bAtY=vdn9~lzZ=fA3)Y>cdki0vC8cI&? zDGsESdP-NOtcgDN#0TnmQr_T_e|pXWU%-7XPwNUcq^MZ`7r?R@e zjay4+|Cx}~X$|qh{S+HZTv+Uqs-Xo=O%E;&``lw5OT;1o{LX31sU{s3srFEc>#pgM zCwyPzViZhcNudcImjx4lFk2n;PyjAs0Z(CUESuYDT&+^JeQk+m%wkhu<4I!RPs^w{ zv>m5~J|jm-GL;9(m^07ZHOg~h*u^R^&K!ATYd-Ik5Enuod7U2>>c%qDXQIyt^EiU`zvw z?%EbQX=D`_aA;g~qFwl|ibrw#3Fqulnq@d20^qGq2PjE(EOf!|uVZ;!+IGSkT^miz9 zySSpQ892$wC5{O_Uol|$Y{@TtR5EI3rPMvYO`I%RaCIb=PY(34Iz z{C=wT!*Jl6$`|jskn{y9Lyqz&toUgLRo9vBJ&aBh?gBT*`N>JtPlvwxBvHaUev;Tk z^&0j$>&~%D&cEa?y#HALR?0L3IqG;PIk9#^H&ZU@qdDKez3C{hilr24`M{TN=Ym#8 z)*0<)O8x+AeWzzWR)y;V3dzX0CKeI|8aU;wu+96NDLv)Mj~ubutOs+*?p+U!m2nO@ zy{m<02P@BRP95#f0f=^Bx*1DiOrrgsKh5Q|Gq4P;sK6CXeDN7ncsje%VL7f=Z3ewR z`u1EZesv;10}Yt($+B5>JPf;95tgVwf9&$q=xuqy(=`I3qO#V@iqALjYmk;bX`xp* z2>udjp%aEeLdI5KsmN>iR_{1?wWQ&0&mmS16Gg#sUnsuQ< z_l0vML?&vewsru#~k3tP}g}Ddy^* zIfZ7fU742kb`K`=D#`Cr&y1VK5vnM;G8PbjCl^-6od&T(&9P3TZ1T^X{@+LhYX%?=M8Cte;=_ zM$%yrw|r%y_zcqnpON2*tEM8Ti1r4zWoe~!g?|1Sld)A#o%Y!wYP|Jajs2^dJbY?L zynFG|rf2smpm;aLoir?S-;MNo9q^Vw@|0wa9+@KYR8yM!SX*ItEIzHMz;7HKs@Oqv zlEJTyME<>-LyVQ%k;vgWInqTrh_k1L!(=Te=1d)_W&MCQNDV!bwk6AzsT&Hun%7}a z2%a0CjbD9NTO%^fR4o2}buZ$e(mPlofnu^WN8D3FwALF*O_*9w2`XuzDK==Vx0O=B1VXv zwz@J%HpPiCFEL@?jv?(Q^z*5s$GsEpR8q08A&$)#p>cmbhp_B(qY<^sYusLWA=Qff zBdnp~EgT*Fo%oS;6U;XgC_1}z>7GBP?=47MQEXNG@$US&I??Yo{4$N>aqUkA{X$P7 zAx9v8iYh>~<0sAt>ULpbSM>rP_nwF2Hu|E0m$CDF<|mH{zA%J&Pjf`RRan#jYt(~A z`1T;iwt6kS3`%&(8hkZA{9JXbHpbO#CGq5`@-^zg=ZHssH;Iz-tkRw&I>c)UPd=N> z6)r3vvx*VJW7oMDKYLwrCC)6 zTGOFj0TPdvLpSi8(!ti*@4g7gJtHj%A2&~*JbID+dLDR7AqLN0f`aM>4_8e?z%my~ znwBgQ1loM13ECz>=tR6Q13N1qV;_fpbZ_bGglqC#s7grNa{JyY!)T})R)~~cz^F1+ z(H|`Pwcc`J!*c;1D$G2GEhL4Wlgwv`^0UpW4c0KXJNmtcZr#`u3LLGP2HQnN)`7U* z)zAU4Oo5j2zW7Q7t`Ns`m&N`yj(^U@F|8{VuRv^zMp+YRxY z>Zo0*al1A#n8hkFnw>X=W6LIGD1|btmTKLhf#lfIwuBOaz`2cjynHR2E;^lwhA3KV z)Rrh1+cx^={$2c%7M)=Cme7k&E`hzuJehzsZv%NrsRKy?*QfVcC)1eU^Nj?%oeuhP z-3a4~J9qQ;U7!0cy)asMCDODZU5hG1c~381awXprn@b>l+Q+Ic$(Fu9T6jf}?;q)2 zf!g$qv*hR~#Y61u`E1e)8(VC8u0+LRQ#)oEF+^BHa=tapWkO~N4c^L&vJb{m9PYC0Y`ai<$m&+@lMh8%&gq(x@oW2aV4tMUrUo#M zl1IgVTwG*_*x~JS!cEr@-jI=tRSgI7w4)v^(?J{ji?)@d=@LqeYq>?|l)9CJeB7kA znK1lbjc(t=-nY-X#|fM@SVKGN_bqFvebjsu?H_UH%(%-T>??Cq%cz<)|X z7@S0mJUfy$$iIa!C*}=B#a=IGaXXo?^pbTH(08B^!5&VVIBYI`6rgA78HX@8x$CEJbov z;u+{;&Z58*cID4pt*AvJ5oIdTJD)(RvOIbq^|j=;m1FC^8+n#*;?52vS zWf@1|O0cd^UHEYB660!ZwjEau$Me(mZcqhXice48i*wdejCy7CjU?}>m6aALe5!ow zu(647K6t*#+V7rg@7|?MYyFAFXcbPGqw8HmtRLLPH@jbwE#u@7Rcw52HMlaY3Wm5AU9LBwsoKOB z<#QyOT+Ysz<%J#ujYC}KrB)+(0vg}2aYMM$NVp=*58l4zw?-RQh4(d!tI}nk|z{Dl~x>;tTbVSFST~x6`DLKrp}b?$_7OQeiE+{v{8%gpUy1D^Uc+<>gc{wb z)CfAqr53{!d-0{REj{N)enLUfD1$J*tpAAx$eS7_DBr8{pRs)y_rodsJZRzooKScS z>Is)2hL8M8F|^{Q)AP|foZAO&%rO*a!AU~bp}))FY<=7IVqn3QdW;=Ezc+^=3AX%- zH)idNc9{xq`8j8Fk41oYKYRVT6vG;hPP-YnBca2&+{i5KT8^EUH*2mbwk-U^kzlChA%^#sALU{Q%fZO2riBC|z!T68LpMp@eA z*UEZ)?DXBKbUly54sWpt@MrH)^MdE}2P>u~APZo!w0neo)grQ^|zJ0h)`yWKyGJi3sOnO@}~ zIzFr*my86~P~E*$-5Sp3g51}e*I&Ub1h;@jYfhyI;cSah_3e-uLKBCl8Bf9}P!?~6tvOPi|mHQCHn<61NZ5W)kN;HN-K2BGKp$Eo?5(papH01!pk zv$qr{W;2Tu+D(x4LzjK$8yW8HDVn*x)jEk3O$ozgXy+Tr=CpBixNAY)?hEnv?p~yx z+@ax@mAwz_Q9W`3iDn0v&YU;WLtX))vnr1K_$H^PJaJ)n#X5J>CmCO^a#*nBx?k9X zdp?HqbOR6qkXOPe2i-RSKRh<0rj5*4I{HO_ie8=&NlVUI^N?~TII2lRV^Xtkm#G%q zjTE;~f-(bDAzSyVo;*L%U*3Jf8k!;XvKdlXKJfiI?777JnP;=~d|*Aj+|n@^UXGZ= zzljI-?(?7lz>LrhknDJyA1Lhfdi^#9bD?S7cq4v+c}8>Zwdf@LLds|msBXpLZ8yDzNNew;IyZ4yx{zgj4E}Va%+nG| zfi6(%g(46uWh=Ab4Fc+EHd*+5)mWM58O_o3QCU%%a zL`i;Zsg~^Q?nWdnkFbmKoe>$!qBw6`cA}3N{e-H_v}^dj3KHuBz|*Uprh|SYiZq;} zbdA15f#WJ=&aHb;khtIMZKM`Ke0>^rfy2?P1(S23GO2du`fD`N3lv_yBSb%BvKKWpHOn5tR^A<}wLcVh{Ud zfGF@}dRSfOWLKT+6lF*%9}hjf@YSNm;Ne07>GhMGOMTvF)Z{mtHajeO=S0CeUZNbvjcS zOy(_gS$IO+IYwdNN5|y}_bh~HYpRKgNY>|t`=63NwvP?ZntdI5p?3eGh(M#Pzz?@~ z1|3wwXwSU6b$bCvTFE9{m7JH=hI)FWq=$be7S!R|@FaZ5BjK;nEH6Jcw;^k4nA@ZY z+ylI?V0pCdiIJGLAqsRHiF?Su&r9OU)n3bXu5n*+L=E9Nd`=gYwYwJ8;%Vz5WhGwf!Ma##H;es85-;9>4lqn$4w zuTKy07X|HWYb=Mu)_h_7i#9kkRp{xZT)oZw2WnxeD~hwSdnY(G^7cB1`6l@%FjzfW zh73Df9PV6+BGeXXVPC&;I=%jVvHZc9WWDvBq^`|O*Qtr)O)e+R+a5oXtJ@soOwDxO0GV2vZF?y^D_|(Z2btU7{ zI>~fzzd6(w26;eM&zD~aW)jIUP;#NQL2TnV${^P==9@QeRqJGLNf!ug4WCL)bT5ne zGGGU2EJ-Jbku-bExpd^M; zjPsoci(&G0Kbw+qPiR2!x`Wb9CV6!I8=q*|F6@$MoZH+9OOecNV^V(-8#mD}-b}Rg z?>doUhptW&pw-WIhPY51N=sUfHY=ic`uNq@1v#c)qns;VWZ`aSpb++_#(y2;fjluM zpz;g>VElamm!xkS50J;(eOHjvT(}*huEOrOECgl)1sg}Sm8GtpO~ULRKKH4D5tFvK zuLj~F=L`jAE)n&un|d*VE&dZpSnG^nH~wM4MXq(caV`l1Q^~zVjK>&O%To9Ws3wE9 zGh}q;K2&*UgqFWAwV%JZN`{qD;?A&Z4rfihAmx{68`=R2UYjHyadRfvuz%Wt(NOts5$^~_enfSD};F_hD zJ2{Jo;iY57z4Q7GtRN>C`^F-j{<4qH@#~|SnLEz6`?(32%7xPK`b6leVtf!o4vrRI zn4PN+AYZ+f9Wsk5ET|~I{uuPmm*~`j`7#=LQ%s{$?W*8y5@wdxX{i}Adx&eYVWgnJ z>#n;>wkAQhjIz{?+{+JQ&4?MM)&|j32i=^);kkUTcQfO+azV3DeH#O|h~2K({OD<+ zP|&ZS)j+vGB;yH0JXvly_7(qt2wL|__uwlE-nZcnk7j(Gn~m$p3$RjMBk>_Fjz}22 zDy^m7edPJP6WW>VD)Cm&AHfp>3<_+GL-g_};ZA-o&loJ@)7A_ghS@xlB5AShz*22a zhEF)9>qB4x|bRuyd4^hW3UFI!A91*7-d zc+IDxyrID@M`zP6j^qR-d6_kjTuHaoaWSt{hr^x=nPVDGL;GZ<@)kMr^HPQm1Pe<< zJdi>KR?zLQ39<_unno|Z7w@i@vD9~SYK8N-^a;Q4&g+=Bjo8 zeC_(I@jkH|Jqe=5UF(8{aFKn7_@GywVPiHYNr0UI4Pae_QdgIWU}z#EJ*uHJ>~oTW zIA(9mfYT>^f!&O~7u}e!6cTa8iPmIy`j-uf*%h7bo9cNl-hyk=Ndbjg2HIKd&fI|PT|+E_!7#w8)RySuwP3GOtFySq0IckF%6zWcoA?)TUC z_xm@;8a-xJSJkRnt5&V&(HCR1RGb{}%6LN~>%)H9fL@XwmFF|L@m039UEZgHufl97 z2$ecJ*&bRr{qQT*jo37|Uqir{P-{2|8rspaP;%63`2{(_@>3*ia2(B=uIaK}b>1zh zZ9`uTm$I^)I15L(I7ayn#b$=84FjF6hK0sj1zSY$p0AH=O}Gb%lsNtOBh`uVIFoo2 zzdTtX$i~*0DacMr11WKmcFUkMw*W3`Y9qcQ?#ztzdIBegdbgW_Q_ZNu1J zwZP{rW!1BHs>{5^AVl0UiUz`?54h@<(S;A3uc-;_#O$jf2$d}UO8T7oO%_8Sb*YgN zW$F`txi-?*Zt9e*-&SkH@x;(Gdd(ckvL2Oba99+7?%NFVLlRxv<5}mc5JX`A<;u*0 zI~~cCi7JIG8_#k?#{&a+TT*xQLCY+~zozJ*xJLUFQT)vDF_Q7L4(N=)Ev}sPtMe*P z`7PhKRW>e-Hnnwpu$=Ze^8CGkPGv%6D@A+mz2QB`?kfCZ+MF#qF zbI82!LW?r;Jz|`Y;I0o;%8bD!IC%?sZV>mAW`js<{&w(h4l#4)x|j_5RMwET{)0@u zLZtQY{8`<%L=E4X%DG%cUpj^}8s+fuiF9D2X(<-68>kr=P*vN5)i@lO(pj-Lx?G~- zEzEn~;vaEDiv6B%`kEm)vo~`0kUYzDWVAV>1uOD{`Hs{TS*&7>HJU;nA$!e*N)& z)uNCtUl1wxoAv{g&nSiPsMD*M5$4z{Nk@hLcbywzj;U4p>;}8fRV`}#=7PhWlG8yU znTTXIc@;yyOQp`L3{X_rEcsg zBgvBLk`ERpYTSPYq? z#(K7O8cs>VsawfS@m(zy2QX0#sF?I2B)f^ zck5&kREN+ndmhzXpeanp`J>4RCC^GgJHo*kB-_WJI^+p{$HX3GevxoNFq?~6?AqFz zAswNY-yC82jN^SIh9%-X<8D&er$~OZPkv<)K&C{bb!h&>aPlU@@(0ezo|`RTFRyY0Uk^GtYwUk^qA}1jfepvq;347c{4{^ zuIdK)QdBYXo~E8TgpJrIyR(a7+ReCQ)JtM^`ZORfZo#PSMU3Hx8hi}jSMuaAt79g$ zKuBp_IQ;HaXyMkt1zGJcy}dEta$UAe#;^0ca#M)#W75&0;V7<$sT;9X*YeW%q=ZZ{ z!uNgnpAMI?+d#JG6Q2Pq>~8^f^_|?A^7bKA^;Oqr1l3IrwD4=cr{Z!7|+phWX7pBw!zHI`iz#UO%yo?B`n*xjdC~5HbC+oPk2Pl07 z?3Hf~K2%$PzJE78X=ad&?Hg=#bNsZ*xzu8fJbp2EKi~3p8d2n?uw0D+I_3`lxS<@L z)Yjz8dJ?GiK{A-580}!Gh7NRp&s8#YY=6L!)Dvu_@M=wA(4T>emyl&!3r=LDbEYxi%kq&>I zkqYIE_+!rG+VPJe=5y5UQ#wk2;qPoqT*yGVDYtw?MX8l?4H0W}Ie;ZR81*eHI}xBtB~ zlt{I;yM;G741*AGdBbIS0xh?Ok9hcn`FK26&o#v0r+ph)@jZW)rAs9I`x;2*pmba; z=!OtH9rlfKMOl$Z?JQLlL9(s@roqnuTmQ({|6y1qJxIuojVwQi@q{+(A%1mNksV7A zd$S&XIY9a+5U7&`pGUA68(T@M-l5+VW3h?m7`cE;9p@Y(chMUMZ7v$4 z>b@Z_2N#%#nfm$;NFU%0S*0ou3e?=I_4%^1(u!q{&!V3c63J74hpSS+^M`1|eEl@#(L+EHq_hL7Z$0{Z1?%LkfyU9zK`t!J6_ zRP6m_Zg`6?Mpag0 zb6H#P-ugd+X+S&V=7Tj;potQ9^E~UP;0?DI++*cxz-@X(>|7%Pm=|-JSo`6dPOEK@ z!hDmSn?pdldMLY;&{R^^Cn^f4r*tCb?Fr6efW({9a)O8Q{R#nmB+`wpD=}j525@NhyTYB51#VSuGdmp!x$!rdGmIsX8 z8$IJ#J62phyz2*dpKwh4U>p0|svTv4!T2T?wFfH95#~-mO;hvD9UkaHHp?JkQ^$uK z&%7m3gco6lD5MEc9|#@7SKXUIH7%*49F$261(r6d*th}WYJp1y@2scwBJGkqX7qOC zS{N;j#gU60W>M|Kxy+va{33o5W|U79?uQgi{|{Jq$^vH@I!=lG-a$UmLu?(l&xa&6 zoMI>9SCeWH?NzVZw1+`RoU!~;xd_+3(^Z#28V};p&16y)MN%?i)`4J3jNQ1hw{N}A zSv;yRtyL4!TGw(OrYK7Cu&99br4v7_7_O=FPvQE{HLj&yq>nijXazgu!ZccomH5@p zNa=7wdSSdtW4z0>hbh4XS|ok3@AEp9^7mTP3dj%gX4&_9=5}uO`VYw?N+HufSlD2e zuG+8$T;JNfI|Oz*OYjU?UqKl@)t#t+~)xLyj9iQkhe|k)yq%w#@ae#1)g$hAK9fDyUoETfa%B()w9{2;xU@%0 zc`uWCSi{;V3f#-3k+*!85LsC+EwTi-gKC$Z1=O|{@l-zFz=s8gWxY>mhq|}VS{?Yb5%N<*u5|PbHMj1sMqOpcA-{ly+Vgdadg8f;bA;7T zmx?-En6?SCLvRfNz&`rjiQ>l?L;Fx>&JnyF#YEK90Lg>S1b?(wm2m+G?xf=zYipkO z#1FSg>pWgwE;HIyWjGK-Gqh$&mcF}VFeK+!xB2LXsLuR`7kP)e*t#gceqQ)U2B@i5 znSA1&Gxy_3X(4C-Q=pLZm!FKko3;|>%=zRvtc+N|@PI{Bct_j?s@}$K1~2I|IAN-c zg)TPRqCNQh<@(=m8H{HxDou@4qp~`XiOu1l>QwG%ykEP3X~J1MN5LFNc$%DGD%?yZ zxE~7H>T_?r=afu*t1iSkbQ4N;Ln@b>h~We4Pgl9SLwd$VGg@*<`KI)MAN98)0o z+)NIc-&uO!affGRa@qkIPj_cohmjJ2sxQdg8q^e?_Zc=PznFD8trOx`OFnvLnlg6S znZZ}PaX|A@wyF(x`-)u&8zi#y0=^r^Q+kjbn7`tMSeY7ByfT>~9pkhgG3G{1@KT=C zyWxx?N=&-lIW|W&C3U7p28e%S-1F=k3Xk%#lnO5`_y)H+HM@6H zbwQ*2E((oO4bkLge`r1ee|kHF1plhdQXi+4shp=(~Xj;*XARr-XhcXQvIqkN-X!#4(TjB zGl`!m9~k7=RvfCBu2N=5gq2>;wrTe*pfQbj*o{_fH@CVb?%v(77Wzm*ym#9*yZN-< zT(^rjzS)hWq@;;9_6`D)Gg z++SK~32ze8W5~D{3B5PQl5FzV?fIQPkEb;NRMGPfn1d(?1=3VPr`j5n#WG3*YGTVy zR#@fGgL;gi-P=^f+64zp%W92Z3yuZL>#M0S>rM7~RS6`XiMU;O99C(HA~fq?NolC#VoHTnQ_9`OS(oc7X-;bj_j~6o(GgPag6&UBQJm@xet)Ltl8#MN4JYd8v z$2|OQ5HVmdM^-6Pc}B)%zB#Lm(S{!Qj*zDWUn}KIEk4UL_S=T@7!sJzw6d@n-j%5e z7E>&nJty=mVMIBOrOj^;(yp=h3WV}h{Jz3gJQbQ8z~{bwKc?80QI~Fc)Y5Z`em46d zUk(!4kA%X8^kxt(X*&{RPYqdZn)b4esrZ;M$j6kYOM<;K@$Y5?9e|D zUcS>@EAlL3X7Ja(7ke&W=5sOoER8YT95n+R0ot~{;ebSkkqt5$PguTB{kK!x>jTIwl|bB@nFTkW_1QFDGraKoCvKzqeKwe&235%oyJn6O0CNu#cMQG1=Vt zfZc>ZdOFez6_Nc_ODpdT)jg%6eY~2nM^S-0A2=*E&TdaYKv%>+wA8Dk`yW2P7A~^v}AJ&nRtG z3A~-#YZLER1{Q^k?>-&dM}WlSe>PVs$K|-2?+XdlN*Q{!jkhUV@wFT9bXt5W+NErJ z_ePFPIK6U9H$R1cRCl1*{ZO>ispp&rd}jwPA21Xabp!ULOn|uC1&vpD7f!n}p0&S& zoafzPLhd4ckmDY);uY)xOY}ubZoRzfL#hMN!NP$~793xj(JWONK4Dhk0VUtf$hi-r zO=816u+n3dE6(fblCLISY^E+>)gT`{p1dB~b{Cq|^vdcX-R$j(KVd?yDtPTlS7&3k z3VzK~$ZFLr+saxWjScULX|V&6*4f}Zw3g;tIm{fHNqHQZ=+5-K)IvJxmWgozX^oie zZ8;WUsZC_l3|}0UL#DM?2SJ~7!0~_>#Z);~jF=s{qzpry^s-Tw&7T=+q@RicBrv!G5)|y_k$W&&p~monVKZhgdR>WjUUW~#>rb|h|1SZ)na#+>vNS|rDMSTIWuYdK7K&%W#R;@gw{Ntdo6 z8Q(PXp}{T_=lxdz;=Vo_p2u(1sZpE`RRfDwg!IDnVe3M@mhim=E=T0 z6U)emzKOUPuCg;?<@ZUm#OLxl+v`G6Q`iShPSsKix~6?Rn3!Lbm#GudF2+7rlqZU8 zbntfKnUbe4=bcwL-VDX6s^FeUhK*hZ-ws}cO>t=OsrRIH7UoTLv41h`t2-Nhk^Cay z>(d2_R2dg(b}S`L#zcGv8NSrs+o01>&T(Z-rsecySLVrZk-vArlDR*8!{DcOJxnBl zEnZXRYl+Q`11}({u*VOOf@?(O8Xm!M+1{btvlM;`IsP&k)6uX~`2F)^=i+TRDN~@q zm#t_Ea5z^Q-$FQ-{8{^%Itsb0HQRo#vHH(jor=EMv}kkGgL_-u7^NEmnIe7;N;JFz zh0_c^WNWoKnH|kfAeMHlNTV+VlxrVMPbx95HG$_VsEZPK{w0m5^G$Q@{Mx&j8LUwv zJUrL?UnAO@=*4-Sf3XF%NR0$}w}r5kH@JTV%-Tk2=vVX!-{`5?$AeqoTA038Jjjn- zuKv6oynXvQJ>vP**n6T<{}Uq~kWv2KA@&-dgc>%vhx`<2$~{SW+1Mujlk}d-S^jiUSz-5Aq1!mj5@n}dW!QkgXp2i)LL3hbI+99u*CUK?ThA(X` zYMI=+9DpEZR~Q#zb3wBy%~%{UayC1(#z=EQqVtRda_#M1d@GKS40 zIbm0fR@dAS($y1mNaSOt9?dgJRW}2#GLlZBa24#ASyAZ_>Jvu7*oiE*2QJ)$MpH@` z{*|((Kr>4Wv`ft92jHfU;Ixd}`U-}J?dTHb0WLFd=;6#cL3iH(K{%{&C zPCO@50Lt-UeQrWUY>0BA4%TT55une1x0^WSZj5`;i~G7Ppd8OajwR0^gFBIeG*&VA zD%zx*o*TLEHuUT)lsQ|3_i@}+7SqB26^fDNgt4cWe?Qn22ZQRW2Nw==+9*B}d1D1P zFJqzPBkPu(7-<+XOWlCKb>`>v)BFlO?uiFVwzU&0Ci!zGVkjh(w|(5!_(}6?`{VOg zHGn8&4}w%u{5dS1apo?Kw&0^66OFid{+$}RFIMLVKnDzs-&A*^dT6~@@-RY|n`xb1 z^&L0HQ?C>auTruAH^VF#60l$g+1+0x?Nl{QZ0a*lkmy3!!p+OcGRSw({N zSb5LTyppoZzrA3yT5{nDb_5M@9$}q^vX5(AHrTAj=-z@`a0=zDMLJAwWPX>-I=XR$ z7$-mPGkVx6C9*3y(Bp!(PWYDSE0TK0#*p}4qv$Oar4MK zgq74kHNGsd*fg$Bpz+)#nU{{gSdwJI261j+0B<&muz|iD45FT{D{mBjK-)bxM zHJKY{D$cS?qn<|Zbu#BnS4r%Z*<{i5#ffjU2wKKSmX*4$XR_mFR-O{6Bd!wnv z6dd)E15F3?yZ0l}XMTqJAxGJN1UwNdcQV`p#Ny_djT}#Po`c8lgo7o0k5D|!e#4#d zF9$pWBP@PN*1sR#M_7ub!^mPB8S$Pg?)X*^3z)1*EbbDZ(k)S|Q_3@`b+TdnG0i!H0L2_o)VNR~T=iOsebLp!Cz%K{YCe{FOcDI$mz8 ziVGpmod$4BojG5+XF^@Lt~No19u4Q1mH2rbvF~12NY@S`mQLhd2G+DN-BGi1J`?*6 zVfn4Jh89y2{Jm7d17XJ(tqvYk%&Z5eR?OOHj+fF`l@t|hR0>)0?-ni94Xn$FvSN?~Ea>IMhuW%)L9@@ly2X2clESHzaK@3#Gsvl7Olh*eLU zWrf0f@MfhNt0TESq}pmS?hk|kTdo4hYHQv+V8o|PNy8kRjXjJm`W~rvOUC^)e$^)6@JJBUBJ7=FoacQ?REmGK8|BUX4EM)#r@nj5$uxmb-O=$)1MT^2 zKH+xy$)=L`Mes{&@$2L7J)^-rBX3siD#PCsdzbfn+B>gLSrhfXMb{AtlE3D}CW57` z9|#2;?79JB6?$zAVk?$M+k+-3WOU;{p9sL6B*JRWAxQdFY9qN8#mGn#+g#svO2_o8 z*NDbct*3-F`hN%yGm*gs9Gn!Y<$=Yfu!4v1Q1D9eFDUbw$Ph>szq<M84Hry%V2Uc$)_Q(XNDGWLKNr00`7}5sp>IZl> z4qpYAY8u>_j|oG(SP_D|*{@a!<}%9T;0MNS84^5;vLQF3?Q~7|t27l_x2p6%+Yf@+ z*3^*>4_f;YB*eXJ=Y&55GhS{r%3dn**?^bBkWDig;p;eTtj@mW-zr`7HiI+!+R6*| z`USkyOP2#425bxqS4qFZbu;N_U755K+Kp1_9VHIo926^+abwyhL$tO)%2E|uq~Eqe z(#x8aDqDp`ZQ3Qw>f21GTCcY}%eHwh7N8J0>LN%Z zx|i7kg2XW8gXO4tS3FQfLCWyez8&Y#Bcp}2*u4$2;c3)K)dj`2oBoK{cuy#*Ix<8* z?YO;d143V9TYe8JU!t6$D;LYxh>fR=&807pd~_%QNE~)EpFAGjW^@A&AGKWegWR8| z_Z-9WzgCK-zNwoP+1cz^*34CmGM1R>PNrEQjc$sZ4uHJqTZEK3Lk>dg*xxLVG$l#)dC!2! zxm9>>-59>>Tb(#GKNEBUb52Pv$g0PxguEseR=(5wstr?x;R@c`dOVw$an{yULA!7s zFz#PqT!~w~t6X7+Vr>R#nT=r6!!(x@$~B_M&-N0rNn*75OFvsI%T3`{?1=2jHN z#6w;Qj?f&46QRy{%{X0bcoD=w(?%v?qsN2N3jL>`Wfs%5g z?>4?$8A-kT@zS@L0$yvQte;?EppR?>AF za;F&TPm|1pIk^@%y)K<~;^#;f?li(o#Y2l+W&A&;k!5Jb*Cqgx&ke;w)z^|h3?JNY1mWIrJ&#(-@y<}3xjX{2s^^AYNh*;e=50*#-Rt6B zRx@^jyV}GhY+T>TuO=dV6sS~hqV4BW*hY9 z9Km~Hs*}gqUK(ASOZGJ{b;#JQ@|1!Wssv0}YbrOV*`_DqbzHXbz2Y}SdAOVMC7xMJ zO73ZcsKeOap9cM$8;?clWK1iO-^K`5m`&8t%xK z=k+Eb=-BEKoA64th^ua0$D^F^;Bvn)DSB&AY5)f|-gb~F5w5PVs=#_7_-71{ZwW3N zBSR)qxc$G-p!bmw^sV#EA)Lh#={%n;lnJStJ{WRWJFua#@52qRZ{v?i@r1t7x$fiR z2pKP7_Z!yxH*llq-aBKo{qdcVwos~W+{twEKVV8He;{a(84}Et0pD-1wl+u$mPS&9 z*8co<#V!;GV>41hoSIavu$uhANLKcT%2KD7%E36p%BFQtG8})VRNx;feW!q1p6Q?X z;#y4;&nbWsofIef^lpFr5>8!o;H=$rj+lt$F!V*{c8>!(Z^Ey zZyjaTbX(a(KI>zkk%<3^usT_R>ZrVAACly3(L^NY7W5}lNcJO+G1~sANdGa_{{lt% zU%;87SbrdkU=dll#r+#<0b zjqA>bV#`vXGh={75d)~E9t_nwj_E)q$v>b5l##7P68ybacLS|sUxNcomhyjV`M1)O zħ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

    oW5;~D0{L=$M@Vkz8W7wehld!B3a6bMiS{2S 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 literal 75828 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 WCELD2Iw1r3d{ji-#_I6h`TqeI!_kcZ diff --git a/bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2b.png b/bundles/org.openhab.binding.linky/doc/connectlinky-myelectricaldata-step2b.png index 4569154a3e886f24766e9f3c54579548d1d3c7f0..5e7ccdf61baf21b940ca339115cd668b478f7dcf 100644 GIT binary patch literal 104790 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 o){ckSUK4T}pd4yr%kKNHa(bkTEvy!|o$(**!j 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ξKQHav8i5`2O8CD6)h93~x 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 literal 113779 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%0Df`CE9VDxjNT6OBPEmxqUYvCTZDHF1XT| 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 dsfYcFUmUK literal 65112 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

    ^d|a^P*m=*vTHbkKD_p=X56F(Hfs7t3|2#e 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

    q_W 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�Zl{QtXBEO}5A^Zn=Qx>n=? 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

    745EvoG_m7C57yMC(mD7DIm?dqC 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 literal 62695 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 From c1172598a87de2115f8d3da6eb7929310ce5297e Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 12:46:35 +0200 Subject: [PATCH 082/135] fixes for @Clinique code review #3 Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 8 ++--- .../linky/internal/LinkyAuthServlet.java | 5 ++- .../linky/internal/LinkyHandlerFactory.java | 12 ++++--- .../linky/internal/dto/TempoResponse.java | 1 - .../linky/internal/dto/WebPrmInfo.java | 6 ++-- .../internal/handler/ApiBridgeHandler.java | 1 - .../internal/handler/EnedisBridgeHandler.java | 7 +--- .../resources/OH-INF/thing/thing-types.xml | 34 +++++-------------- 8 files changed, 26 insertions(+), 48 deletions(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index e34b8557262..8970b09a93d 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -11,13 +11,13 @@ The binding will not provide these informations unless this step is ok. This new binding version is able to use multiple bridge to access the consumption data. You can use : -- The EnedisWebBridge : this one will use the old Enedis API, base on the enedis web site to gather the data. -- The MyElectricalDataBridge : this one will use the new Rest Enedis API. We will use the MyElectricalData proxy site to access the data. -- The EnedisBridge : this one will also use the new Rest Enedis API, and will directly gather data from Enedis Site. +- The enedis-web bridge : this one will use the old Enedis API, base on the enedis web site to gather the data. +- The myelectricaldata bridge : this one will use the new Rest Enedis API. We will use the MyElectricalData proxy site to access the data. +- The enedis bridge : this one will also use the new Rest Enedis API, and will directly gather data from Enedis Site. There is advantage and disadvantage for each method. -- EnedisWebBridge is the old way to go. +- enedis-web bridge is the old way to go. ## Supported Things diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 4b13006bc33..4cf46870129 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -69,6 +69,7 @@ public class LinkyAuthServlet extends HttpServlet { private static final String KEY_CB_DISPLAY_INSTRUCTION = "cb.displayInstruction"; private static final String KEY_ERROR = "error"; private static final String KEY_PAGE_REFRESH = "pageRefresh"; + private static final String TEMPLATE_PATH = "templates/"; private final Logger logger = LoggerFactory.getLogger(LinkyAuthServlet.class); private final String index; @@ -79,8 +80,6 @@ public class LinkyAuthServlet extends HttpServlet { private final String myelectricaldataStep2; private final String myelectricaldataStep3; - private static final String TEMPLATE_PATH = "templates/"; - private ApiBridgeHandler apiBridgeHandler; public LinkyAuthServlet(ApiBridgeHandler apiBridgeHandler) throws LinkyException { @@ -239,7 +238,7 @@ public class LinkyAuthServlet extends HttpServlet { try { replaceMap.put(KEY_AUTHORIZED_USER, String.format(HTML_USER_AUTHORIZED, reqCode + " / " + apiBridgeHandler.authorize(servletBaseURL, reqState, reqCode))); - } catch (RuntimeException e) { + } catch (LinkyException e) { logger.debug("Exception during authorizaton: ", e); replaceMap.put(KEY_ERROR, String.format(HTML_ERROR, e.getMessage())); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index d5ec63f2be9..6a517ec0497 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.linky.internal; +import static org.openhab.binding.linky.internal.LinkyBindingConstants.*; + import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZonedDateTime; @@ -100,24 +102,24 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { - return LinkyBindingConstants.SUPPORTED_DEVICE_THING_TYPES_UIDS.contains(thingTypeUID); + return SUPPORTED_DEVICE_THING_TYPES_UIDS.contains(thingTypeUID); } @Override protected @Nullable ThingHandler createHandler(Thing thing) { - if (LinkyBindingConstants.THING_TYPE_API_ENEDIS_BRIDGE.equals(thing.getThingTypeUID())) { + if (THING_TYPE_API_ENEDIS_BRIDGE.equals(thing.getThingTypeUID())) { EnedisBridgeHandler handler = new EnedisBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; - } else if (LinkyBindingConstants.THING_TYPE_API_WEB_ENEDIS_BRIDGE.equals(thing.getThingTypeUID())) { + } else if (THING_TYPE_API_WEB_ENEDIS_BRIDGE.equals(thing.getThingTypeUID())) { EnedisWebBridgeHandler handler = new EnedisWebBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; - } else if (LinkyBindingConstants.THING_TYPE_API_MYELECTRICALDATA_BRIDGE.equals(thing.getThingTypeUID())) { + } else if (THING_TYPE_API_MYELECTRICALDATA_BRIDGE.equals(thing.getThingTypeUID())) { MyElectricalDataBridgeHandler handler = new MyElectricalDataBridgeHandler((Bridge) thing, this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; - } else if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { + } else if (THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { LinkyHandler handler = new LinkyHandler(thing, localeProvider); return handler; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java index 3994c836ed6..c18e7f5f71e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java @@ -22,6 +22,5 @@ import java.util.LinkedHashMap; */ public class TempoResponse extends LinkedHashMap { - @java.io.Serial private static final long serialVersionUID = 362498820763181264L; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java index aa0ce6684e9..a93700122b8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java @@ -20,11 +20,11 @@ package org.openhab.binding.linky.internal.dto; public class WebPrmInfo { public class Adresse { - public Object adresseLigneUn; + public String adresseLigneUn; public String adresseLigneDeux; - public Object adresseLigneTrois; + public String adresseLigneTrois; public String adresseLigneQuatre; - public Object adresseLigneCinq; + public String adresseLigneCinq; public String adresseLigneSix; public String adresseLigneSept; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index fc6182b4c8d..a000baabf5b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -138,7 +138,6 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { logger.debug("Acces token: {}", accessToken); return accessToken; } catch (RuntimeException | OAuthException | IOException e) { - // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage()); throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); } catch (final OAuthResponseException e) { throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index ec395b4ae8d..71ad3637eb9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -60,11 +60,6 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); } - @Override - public void initialize() { - super.initialize(); - } - @Override public String getClientId() { return config.clientId; @@ -77,7 +72,7 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public void dispose() { - logger.debug("Shutting down Netatmo API bridge handler."); + logger.debug("Shutting down Enedis bridge handler."); super.dispose(); } diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 6f0cddea660..60f0b597adc 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -49,10 +49,8 @@ Authentication ID delivered after the captcha (see documentation). - - @@ -66,7 +64,6 @@ - @@ -80,7 +77,6 @@ https://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. - @@ -91,9 +87,6 @@ - - - @@ -105,22 +98,19 @@ http://youopenhab/connectlinky) - - - - + - + @@ -135,13 +125,11 @@ - Maximum power usage value - Maximum power usage value for Yesterday @@ -172,7 +160,7 @@ - + @@ -194,7 +182,7 @@ - + @@ -216,7 +204,7 @@ - + @@ -241,20 +229,19 @@ - + - + - + - @@ -322,7 +309,7 @@ Number - + This status describes the tempo color of a day. @@ -348,7 +335,6 @@ - Number:Energy @@ -370,6 +356,4 @@ time - - From 2518a9f64c236f67827119dab3eef0ee9f5db18a Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 21:46:21 +0200 Subject: [PATCH 083/135] remove old fr translations Signed-off-by: Laurent ARNAL --- .../resources/OH-INF/i18n/linky_fr.properties | 47 ------------------- 1 file changed, 47 deletions(-) delete mode 100644 bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties deleted file mode 100644 index 7733ef8ac1d..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/i18n/linky_fr.properties +++ /dev/null @@ -1,47 +0,0 @@ -# add-on - -addon.linky.name = Extension Linky -addon.linky.description = Cette extension collecte vos données de consommation d'énergie depuis le site internet d'Enedis. - -# thing types - -thing-type.linky.linky.label = Linky -thing-type.linky.linky.description = Fournit vos données de consommation d'énergie. Pour recevoir ces données, vous devez activer votre compte sur https\://espace-client-particuliers.enedis.fr/web/espace-particuliers/compteur-linky. - -# thing types config - -thing-type.config.linky.linky.internalAuthId.label = ID d'authentification -thing-type.config.linky.linky.internalAuthId.description = ID d'authentification délivré après le captcha (voir documentation). -thing-type.config.linky.linky.password.label = Mot de Passe -thing-type.config.linky.linky.password.description = Votre mot de passe Enedis -thing-type.config.linky.linky.username.label = Nom d'utilisateur -thing-type.config.linky.linky.username.description = Votre nom d'utilisateur Enedis - -# channel group types - -channel-group-type.linky.daily.label = Consommation quotidienne -channel-group-type.linky.daily.channel.timestamp.label = Horodatage Pic -channel-group-type.linky.daily.channel.timestamp.description = Horodatage du pic maximum de consommation d'énergie -channel-group-type.linky.daily.channel.yesterday.label = Consommation Hier -channel-group-type.linky.monthly.label = Consommation mensuelle -channel-group-type.linky.monthly.channel.lastMonth.label = Consommation Mois Dernier -channel-group-type.linky.monthly.channel.thisMonth.label = Consommation Mois Actuel -channel-group-type.linky.weekly.label = Consommation hebdomadaire -channel-group-type.linky.weekly.channel.lastWeek.label = Consommation Semaine Dernière -channel-group-type.linky.weekly.channel.thisWeek.label = Consommation Semaine Actuelle -channel-group-type.linky.yearly.label = Consommation annuelle -channel-group-type.linky.yearly.channel.lastYear.label = Consommation Année Dernière -channel-group-type.linky.yearly.channel.thisYear.label = Consommation Année Actuelle - -# channel types - -channel-type.linky.consumption.label = Consommation Totale -channel-type.linky.consumption.description = Consommation pour un intervalle de temps donné -channel-type.linky.power.label = Pic Consommation Hier -channel-type.linky.power.description = Pic maximum de consommation d'énergie hier -channel-type.linky.timestamp.label = Horodatage - -# Thing status descriptions - -offline.config-error-mandatory-settings = Le prmId est obligatoire. - From aaa7e75239b3949414574e24cefb756d3145281c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 21:52:07 +0200 Subject: [PATCH 084/135] fixes for @clinique review #3 Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/EnedisBridgeHandler.java | 13 +++++++++++-- .../internal/handler/EnedisWebBridgeHandler.java | 13 +++++++++---- .../linky/internal/handler/LinkyBridgeHandler.java | 6 +++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 71ad3637eb9..68cbb1adb80 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -15,6 +15,7 @@ package org.openhab.binding.linky.internal.handler; import java.time.format.DateTimeFormatter; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.core.auth.client.oauth2.AccessTokenResponse; import org.openhab.core.auth.client.oauth2.OAuthFactory; @@ -62,12 +63,20 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public String getClientId() { - return config.clientId; + LinkyConfiguration lcConfig = config; + if (lcConfig != null) { + return lcConfig.clientId; + } + return ""; } @Override public String getClientSecret() { - return config.clientSecret; + LinkyConfiguration lcConfig = config; + if (lcConfig != null) { + return lcConfig.clientSecret; + } + return ""; } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 8ef80f640c6..d4bd73a1407 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -167,10 +167,15 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { @Override protected synchronized void connectionInit() throws LinkyException { - logger.debug("Starting login process for user : {}", config.username); + LinkyConfiguration lcConfig = config; + if (lcConfig == null) { + return; + } + + logger.debug("Starting login process for user : {}", lcConfig.username); try { - enedisApi.addCookie(LinkyConfiguration.INTERNAL_AUTH_ID, config.internalAuthId); + enedisApi.addCookie(LinkyConfiguration.INTERNAL_AUTH_ID, lcConfig.internalAuthId); logger.debug("Step 1 : getting authentification"); String data = enedisApi.getData(URL_ENEDIS_AUTHENTICATE); @@ -207,13 +212,13 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { AuthData authData = gson.fromJson(result.getContentAsString(), AuthData.class); if (authData == null || authData.callbacks.size() < 2 || authData.callbacks.get(0).input.isEmpty() - || authData.callbacks.get(1).input.isEmpty() || !config.username + || authData.callbacks.get(1).input.isEmpty() || !lcConfig.username .equals(Objects.requireNonNull(authData.callbacks.get(0).input.get(0)).valueAsString())) { logger.debug("auth1 - invalid template for auth data: {}", result.getContentAsString()); throw new LinkyException("Authentication error, the authentication_cookie is probably wrong"); } - authData.callbacks.get(1).input.get(0).value = config.password; + authData.callbacks.get(1).input.get(0).value = lcConfig.password; logger.debug("Step 4 : auth2 - send the auth data"); result = httpClient.POST(authenticateUrl).header(HttpHeader.CONTENT_TYPE, "application/json") .header("X-NoSession", "true").header("X-Password", "anonymous") diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index de07af29e08..dce8b20d72e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -63,9 +63,9 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { protected final EnedisHttpApi enedisApi; protected final ThingRegistry thingRegistry; - protected final LinkyConfiguration config; protected final Gson gson; + protected @Nullable LinkyConfiguration config; protected boolean connected = false; private static final int REQUEST_BUFFER_SIZE = 8000; @@ -104,8 +104,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { this.enedisApi = new EnedisHttpApi(this, gson, this.httpClient); - config = getConfigAs(LinkyConfiguration.class); - updateStatus(ThingStatus.UNKNOWN); } @@ -117,6 +115,8 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { public synchronized void initialize() { logger.debug("Initializing Linky API bridge handler."); + config = getConfigAs(LinkyConfiguration.class); + updateStatus(ThingStatus.UNKNOWN); scheduler.submit(() -> { From 82dcde06d3035143682aa616746b75183867417a Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 22:10:33 +0200 Subject: [PATCH 085/135] fixes for @clinique review #4 Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/LinkyAuthServlet.java | 2 +- .../binding/linky/internal/dto/ContactInfo.java | 2 +- .../binding/linky/internal/dto/IdentityInfo.java | 4 ++-- .../binding/linky/internal/dto/WebUserInfo.java | 15 ++++----------- .../linky/internal/handler/ApiBridgeHandler.java | 4 ++-- 5 files changed, 10 insertions(+), 17 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 4cf46870129..396f5564f08 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -111,7 +111,7 @@ public class LinkyAuthServlet extends HttpServlet { if (url == null) { throw new FileNotFoundException( - String.format("Cannot find '{}' - failed to initialize Linky servlet", templateName)); + String.format("Cannot find '%s' - failed to initialize Linky servlet", templateName)); } else { try (InputStream inputStream = url.openStream()) { return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java index 72c1654f047..d6a3aa71eb4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java @@ -27,7 +27,7 @@ public class ContactInfo { public static ContactInfo fromWebUserInfo(WebUserInfo webUserInfo) { ContactInfo result = new ContactInfo(); - result.email = webUserInfo.userProperties.mail; + result.email = webUserInfo.userProperties.mail(); return result; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java index 86c33a4b80c..8424d96bd9f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java @@ -29,8 +29,8 @@ public class IdentityInfo { public static IdentityInfo fromWebUserInfo(WebUserInfo webUserInfo) { IdentityInfo result = new IdentityInfo(); - result.firstname = webUserInfo.userProperties.firstName; - result.lastname = webUserInfo.userProperties.name; + result.firstname = webUserInfo.userProperties.firstName(); + result.lastname = webUserInfo.userProperties.name(); result.title = ""; return result; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java index f79c33dcc4a..a5eae76ab5b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java @@ -21,17 +21,10 @@ import com.google.gson.annotations.SerializedName; */ public class WebUserInfo { - public class UserProperties { - @SerializedName("av2_interne_id") - public String internId; - @SerializedName("av2_prenom") - public String firstName; - @SerializedName("av2_mail") - public String mail; - @SerializedName("av2_nom") - public String name; - @SerializedName("av2_infos_personnalisees") - public String personalInfo; + + public record UserProperties(@SerializedName("av2_interne_id") String internId, + @SerializedName("av2_prenom") String firstName, @SerializedName("av2_mail") String mail, + @SerializedName("av2_nom") String name, @SerializedName("av2_infos_personnalisees") String personalInfo) { } public String username; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index a000baabf5b..137d62d6e1a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -140,7 +140,7 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { } catch (RuntimeException | OAuthException | IOException e) { throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); } catch (final OAuthResponseException e) { - throw new LinkyException("\"Error during oAuth authorize :" + e.getMessage(), e); + throw new LinkyException("Error during oAuth authorize :" + e.getMessage(), e); } } @@ -175,7 +175,7 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { LinkyBindingConstants.BINDING_ID); return uri; } catch (final OAuthException e) { - logger.debug("Error constructing AuthorizationUrl: ", e); + logger.debug("Error constructing AuthorizationUrl: {}", e); return ""; } } From 9cba347ee34f6fa31590b3a7315782d05237b649 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 21 Aug 2024 09:32:13 +0200 Subject: [PATCH 086/135] fix build Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 3 ++- .../binding/linky/internal/handler/ApiBridgeHandler.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 8970b09a93d..464a8b56c9d 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -35,6 +35,7 @@ This binding does not provide discovery service. To retrieve data, Linky thing will be need to be linked to a LinkyBridge. LinkyBridge can be today select between enedis-web, myelectricaldata and enedis. ### enedis-web bridge + If you select enedis-web bridge, you will need : - To create an Enedis account : https://mon-compte-client.enedis.fr/ @@ -102,8 +103,8 @@ Don't select the two linky in the same procedure, it will not work ! ![connectlinky-myelectricaldata-step3b](doc/connectlinky-myelectricaldata-step3b.png)
    - If you select enedis bridge, you will need : + - To create an Enedis account : https://mon-compte-client.enedis.fr/ Follow these steps to initialize the token. you can access the procedure from the connectlinky page available from your openhab: https://home.myopenhab.org/connectlinky/index. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 137d62d6e1a..0ee5fc1f814 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -175,7 +175,7 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { LinkyBindingConstants.BINDING_ID); return uri; } catch (final OAuthException e) { - logger.debug("Error constructing AuthorizationUrl: {}", e); + logger.debug("Error constructing AuthorizationUrl: ", e); return ""; } } From 708bae7b15fe9f9ebeb129b3b000088ce9ff20fb Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 22 Aug 2024 10:41:32 +0200 Subject: [PATCH 087/135] div fixes Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/LinkyAuthServlet.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 396f5564f08..f97ed9aace5 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -93,7 +93,6 @@ public class LinkyAuthServlet extends HttpServlet { this.myelectricaldataStep1 = readTemplate("myelectricaldata-step1.html"); this.myelectricaldataStep2 = readTemplate("myelectricaldata-step2.html"); this.myelectricaldataStep3 = readTemplate("myelectricaldata-step3.html"); - } catch (IOException e) { throw new LinkyException("unable to initialize auth servlet", e); } @@ -111,7 +110,7 @@ public class LinkyAuthServlet extends HttpServlet { if (url == null) { throw new FileNotFoundException( - String.format("Cannot find '%s' - failed to initialize Linky servlet", templateName)); + String.format("Cannot find {}' - failed to initialize Linky servlet".formatted(templateName))); } else { try (InputStream inputStream = url.openStream()) { return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); From fad66d6be8979aca25b838c001a84bd8a55b3d9e Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 27 Aug 2024 15:59:55 +0200 Subject: [PATCH 088/135] fix enedis presentation Signed-off-by: Laurent ARNAL --- .../src/main/resources/templates/enedis-step2.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html index 89386df6389..61f9902a147 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html @@ -145,6 +145,12 @@ function retrieveToken()

    Pour utiliser ce plugin, vous devez donner votre accord pour qu'Enedis transmette vos données.

    + +

    + Enedis est le gestionnaire du réseau public de distribution d’électricité sur 95% du territoire français continental.
    + Enedis gère le réseau d’électricité jusqu’au compteur d’électricité. +
    +

    Pour donner votre autorisation, vous devez avoir un compte personnel Enedis.
    Ce compte vous permet également de suivre et gérer vos données de consommation [ou production en fonction de votre service] d’électricité.

    From f836272367250ca343ff2e70e8c823e672b91f09 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 27 Aug 2024 16:01:39 +0200 Subject: [PATCH 089/135] - review oAuthService initialization because we move config initialization to initialize - Move URL constant to respective bridge for clarity - Move to production URL for enedis bridge Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyBindingConstants.java | 18 ------- .../internal/handler/ApiBridgeHandler.java | 51 +++++++++++++++---- .../internal/handler/EnedisBridgeHandler.java | 14 ++++- .../MyElectricalDataBridgeHandler.java | 13 ++++- 4 files changed, 63 insertions(+), 33 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 9f9fef6cde8..d4864cf90b2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -123,22 +123,4 @@ public class LinkyBindingConstants { */ public static final String LINKY_SCOPES = "am_application_scope default"; - public static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; - public static final String ENEDIS_AUTHORIZE_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "dataconnect/v1/oauth2/authorize"; - public static final String ENEDIS_API_TOKEN_URL_PROD = ENEDIS_ACCOUNT_URL_PROD + "oauth2/v3/token"; - - public static final String ENEDIS_ACCOUNT_URL_PREPROD = "https://ext.prod-sandbox.api.enedis.fr/"; - public static final String ENEDIS_AUTHORIZE_URL_PREPROD = ENEDIS_ACCOUNT_URL_PROD - + "dataconnect/v1/oauth2/authorize?duration=P36M"; - public static final String ENEDIS_API_TOKEN_URL_PREPROD = ENEDIS_ACCOUNT_URL_PREPROD + "oauth2/v3/token"; - - // List of Linky services related urls, information - public static final String LINKY_MYELECTRICALDATA_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; - // public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL - // + "v1/oauth2/authorize?usage_points_id=21454992660003&user_type=aa&person_id=-1"; - public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = ENEDIS_AUTHORIZE_URL_PROD; - public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL - + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; - - public static final String LINKY_MYELECTRICALDATA_CLIENT_ID = "_h7zLaRr2INxqBI8jhDUQXsa_G4a"; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 0ee5fc1f814..746a957f86a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -60,7 +60,9 @@ import com.google.gson.JsonSyntaxException; public abstract class ApiBridgeHandler extends LinkyBridgeHandler { private final Logger logger = LoggerFactory.getLogger(ApiBridgeHandler.class); - private final OAuthClientService oAuthService; + private final OAuthFactory oAuthFactory; + + private @Nullable OAuthClientService oAuthService; private static @Nullable HttpServlet servlet; @@ -69,22 +71,29 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); + this.oAuthFactory = oAuthFactory; + + updateStatus(ThingStatus.UNKNOWN); + } + + @Override + public void initialize() { + super.initialize(); + String tokenUrl = ""; String authorizeUrl = ""; if (this instanceof MyElectricalDataBridgeHandler) { - tokenUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_API_TOKEN_URL; - authorizeUrl = LinkyBindingConstants.LINKY_MYELECTRICALDATA_AUTHORIZE_URL; + tokenUrl = MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_API_TOKEN_URL; + authorizeUrl = MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_AUTHORIZE_URL; } else if (this instanceof EnedisBridgeHandler) { - tokenUrl = LinkyBindingConstants.ENEDIS_API_TOKEN_URL_PREPROD; - authorizeUrl = LinkyBindingConstants.ENEDIS_AUTHORIZE_URL_PREPROD; + tokenUrl = EnedisBridgeHandler.ENEDIS_API_TOKEN_URL; + authorizeUrl = EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; } this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, tokenUrl, authorizeUrl, getClientId(), getClientSecret(), LinkyBindingConstants.LINKY_SCOPES, true); registerServlet(); - - updateStatus(ThingStatus.UNKNOWN); } public abstract String getClientId(); @@ -130,7 +139,12 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { try { logger.debug("Make call to Enedis to get access token."); - final AccessTokenResponse credentials = oAuthService + OAuthClientService lcOAuthService = this.oAuthService; + if (lcOAuthService == null) { + return ""; + } + + final AccessTokenResponse credentials = lcOAuthService .getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); String accessToken = credentials.getAccessToken(); @@ -153,7 +167,12 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { protected @Nullable AccessTokenResponse getAccessTokenByClientCredentials() { try { - return oAuthService.getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); + OAuthClientService lcOAuthService = this.oAuthService; + if (lcOAuthService == null) { + return null; + } + + return lcOAuthService.getAccessTokenByClientCredentials(LinkyBindingConstants.LINKY_SCOPES); } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { logger.debug("Exception checking authorization: ", e); return null; @@ -162,7 +181,12 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { protected @Nullable AccessTokenResponse getAccessTokenResponse() { try { - return oAuthService.getAccessTokenResponse(); + OAuthClientService lcOAuthService = this.oAuthService; + if (lcOAuthService == null) { + return null; + } + + return lcOAuthService.getAccessTokenResponse(); } catch (OAuthException | IOException | OAuthResponseException | RuntimeException e) { logger.debug("Exception checking authorization: ", e); return null; @@ -171,7 +195,12 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { public String formatAuthorizationUrl(String redirectUri) { try { - String uri = this.oAuthService.getAuthorizationUrl(redirectUri, LinkyBindingConstants.LINKY_SCOPES, + OAuthClientService lcOAuthService = this.oAuthService; + if (lcOAuthService == null) { + return ""; + } + + String uri = lcOAuthService.getAuthorizationUrl(redirectUri, LinkyBindingConstants.LINKY_SCOPES, LinkyBindingConstants.BINDING_ID); return uri; } catch (final OAuthException e) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 68cbb1adb80..2fb64e2be78 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -39,7 +39,10 @@ import com.google.gson.Gson; public class EnedisBridgeHandler extends ApiBridgeHandler { private final Logger logger = LoggerFactory.getLogger(EnedisBridgeHandler.class); - private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + // private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + // public static final String ENEDIS_ACCOUNT_URL = "https://ext.prod-sandbox.api.enedis.fr/"; + private static final String BASE_URL = "https://ext.prod.api.enedis.fr/"; + public static final String ENEDIS_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity?usage_point_id=%s"; @@ -52,9 +55,16 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + "metering_data_clc/v5/consumption_load_curve?usage_point_id=%s&start=%s&end=%s"; + public static final String ENEDIS_AUTHORIZE_URL = ENEDIS_ACCOUNT_URL + + "dataconnect/v1/oauth2/authorize?duration=P36M"; + public static final String ENEDIS_API_TOKEN_URL = BASE_URL + "oauth2/v3/token"; + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final String BASE_MYELECT_URL = "https://www.myelectricaldata.fr/"; + private static final String TEMPO_URL = BASE_MYELECT_URL + "rte/tempo/%s/%s"; + public EnedisBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -151,7 +161,7 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public String getTempoUrl() { - return ""; + return TEMPO_URL; } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index e2f6ec8530e..229e5e0dbc2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -55,6 +55,14 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL + "consumption_load_curve/%s/start/%s/end/%s/cache"; + // List of Linky services related urls, information + public static final String LINKY_MYELECTRICALDATA_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; + public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; + public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; + + public static final String LINKY_MYELECTRICALDATA_CLIENT_ID = "_h7zLaRr2INxqBI8jhDUQXsa_G4a"; + private static final String TEMPO_URL = BASE_URL + "rte/tempo/%s/%s"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -80,7 +88,7 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { @Override public String getClientId() { - return LinkyBindingConstants.LINKY_MYELECTRICALDATA_CLIENT_ID; + return MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_CLIENT_ID; } @Override @@ -95,7 +103,8 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { @Override public String authorize(String redirectUri, String reqState, String reqCode) throws LinkyException { - String url = String.format(LinkyBindingConstants.LINKY_MYELECTRICALDATA_API_TOKEN_URL, getClientId(), reqCode); + String url = String.format(MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_API_TOKEN_URL, getClientId(), + reqCode); EnedisHttpApi enedisApi = getEnedisApi(); if (enedisApi == null) { return ""; From c48b103e736fb8a643ab170106803723e7f34c0c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 27 Aug 2024 16:03:05 +0200 Subject: [PATCH 090/135] - remote updateState on updateConsumptionTimeSeries because we don't have current value, but only previous one - review calculation of week index Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/handler/LinkyHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 9d81341f305..1e43dd23c39 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -464,7 +464,7 @@ public class LinkyHandler extends BaseThingHandler { } sendTimeSeries(groupId, channelId, timeSeries); - updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); + // updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); } private void updateKwhChannel(String groupId, String channelId, double consumption) { @@ -704,7 +704,7 @@ public class LinkyHandler extends BaseThingHandler { int baseYear = meterReading.dayValue[0].date.getYear(); int baseMonth = meterReading.dayValue[0].date.getMonthValue(); int baseDayOfYear = meterReading.dayValue[0].date.getDayOfYear(); - int baseWeek = ((baseDayOfYear - 1) / 7) + 1; + int baseWeek = meterReading.dayValue[0].date.get(WeekFields.of(Locale.FRANCE).weekOfYear()); for (int idx = 0; idx < size; idx++) { IntervalReading ir = meterReading.dayValue[idx]; From 77e5e9ff132490906c234124bc6fa518b9d129cc Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 27 Aug 2024 16:16:08 +0200 Subject: [PATCH 091/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/LinkyBindingConstants.java | 1 - 1 file changed, 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index d4864cf90b2..48d1a785f3b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -122,5 +122,4 @@ public class LinkyBindingConstants { * Smartthings scopes needed by this binding to work. */ public static final String LINKY_SCOPES = "am_application_scope default"; - } From 8c898491053d3a67c0c8029fe4c4c0bc7621600e Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 8 Oct 2024 18:23:31 +0200 Subject: [PATCH 092/135] change uri for enedis Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyHandlerFactory.java | 23 +++++++++++++++++-- .../internal/handler/EnedisBridgeHandler.java | 6 ++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 6a517ec0497..bfb70098084 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -35,6 +35,8 @@ import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.binding.BaseThingHandlerFactory; import org.openhab.core.thing.binding.ThingHandler; import org.openhab.core.thing.binding.ThingHandlerFactory; +import org.openhab.core.thing.binding.ThingTypeProvider; +import org.openhab.core.thing.type.ThingType; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -52,7 +54,7 @@ import com.google.gson.JsonDeserializer; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault -@Component(service = ThingHandlerFactory.class, configurationPid = "binding.linky") +@Component(immediate = true, service = ThingHandlerFactory.class, configurationPid = "binding.linky") public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final DateTimeFormatter LINKY_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); private static final DateTimeFormatter LINKY_LOCALDATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd"); @@ -63,6 +65,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private final OAuthFactory oAuthFactory; private final HttpService httpService; private final ThingRegistry thingRegistry; + private final ThingTypeProvider thingTypeProvider; private final ComponentContext componentContext; private final Gson gson = new GsonBuilder() @@ -90,18 +93,34 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, - ComponentContext componentContext) { + final @Reference ThingTypeProvider thingTypeProvider, ComponentContext componentContext) { this.localeProvider = localeProvider; this.httpClientFactory = httpClientFactory; this.oAuthFactory = oAuthFactory; this.httpService = httpService; this.thingRegistry = thingRegistry; + this.thingTypeProvider = thingTypeProvider; this.componentContext = componentContext; + + ThingType tt = this.thingTypeProvider.getThingType(THING_TYPE_API_WEB_ENEDIS_BRIDGE, null); + System.out.println("tt:" + tt); + } + + @Override + protected void activate(ComponentContext componentContext) { + // TODO Auto-generated method stub + super.activate(componentContext); + + ThingType tt = this.thingTypeProvider.getThingType(THING_TYPE_API_WEB_ENEDIS_BRIDGE, null); + System.out.println("tt:" + tt); } @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { + ThingType tt = this.thingTypeProvider.getThingType(THING_TYPE_API_WEB_ENEDIS_BRIDGE, null); + System.out.println("tt:" + tt); + return SUPPORTED_DEVICE_THING_TYPES_UIDS.contains(thingTypeUID); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 2fb64e2be78..029766fa042 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -39,9 +39,9 @@ import com.google.gson.Gson; public class EnedisBridgeHandler extends ApiBridgeHandler { private final Logger logger = LoggerFactory.getLogger(EnedisBridgeHandler.class); - // private static final String BASE_URL = "https://ext.prod-sandbox.api.enedis.fr/"; - // public static final String ENEDIS_ACCOUNT_URL = "https://ext.prod-sandbox.api.enedis.fr/"; - private static final String BASE_URL = "https://ext.prod.api.enedis.fr/"; + // private static final String BASE_URL = "https://gw.ext.prod-sandbox.api.enedis.fr/"; + // public static final String ENEDIS_ACCOUNT_URL = "gw.ext.prod-sandbox.api.enedis.fr"; + private static final String BASE_URL = "https://gw.ext.prod.api.enedis.fr/"; public static final String ENEDIS_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; From a434b160ae583866b742b2e343bce54261ac1002 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 10 Oct 2024 14:24:36 +0200 Subject: [PATCH 093/135] add svg logo Signed-off-by: Laurent ARNAL --- .../src/main/resources/web/linky.svg | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 bundles/org.openhab.binding.linky/src/main/resources/web/linky.svg diff --git a/bundles/org.openhab.binding.linky/src/main/resources/web/linky.svg b/bundles/org.openhab.binding.linky/src/main/resources/web/linky.svg new file mode 100644 index 00000000000..4fd5ed95509 --- /dev/null +++ b/bundles/org.openhab.binding.linky/src/main/resources/web/linky.svg @@ -0,0 +1,76 @@ + + + + A0924594-7213-430D-A943-FE07E1B6E747 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 77597253314f41d92015953e7ff9ff18f07867e5 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 10 Oct 2024 14:25:27 +0200 Subject: [PATCH 094/135] move to svg logo instead of png Signed-off-by: Laurent ARNAL --- .../src/main/resources/templates/enedis-step2.html | 2 +- .../src/main/resources/templates/myelectricaldata-step2.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html index 61f9902a147..92737e5b6d4 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step2.html @@ -141,7 +141,7 @@ function retrieveToken()
    - +

    Pour utiliser ce plugin, vous devez donner votre accord pour qu'Enedis transmette vos données.

    diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html index b5c7b1529d5..ab19fedc48f 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/myelectricaldata-step2.html @@ -141,7 +141,7 @@ function retrieveToken()
    - +

    Pour utiliser ce plugin, vous devez donner votre accord pour qu'Enedis transmette vos données.

    From 9f317e242dd84770a2afcb9f82da785a27c8fc04 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 10 Oct 2024 14:38:39 +0200 Subject: [PATCH 095/135] review some bridge initialization in regards to Clinique review of 22 August. Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/ApiBridgeHandler.java | 13 +++---------- .../linky/internal/handler/EnedisBridgeHandler.java | 8 ++++++++ .../internal/handler/EnedisWebBridgeHandler.java | 5 ----- .../handler/MyElectricalDataBridgeHandler.java | 3 +++ 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 746a957f86a..89217b5928d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -66,6 +66,9 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { private static @Nullable HttpServlet servlet; + protected String tokenUrl = ""; + protected String authorizeUrl = ""; + public ApiBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -80,16 +83,6 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { public void initialize() { super.initialize(); - String tokenUrl = ""; - String authorizeUrl = ""; - if (this instanceof MyElectricalDataBridgeHandler) { - tokenUrl = MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_API_TOKEN_URL; - authorizeUrl = MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_AUTHORIZE_URL; - } else if (this instanceof EnedisBridgeHandler) { - tokenUrl = EnedisBridgeHandler.ENEDIS_API_TOKEN_URL; - authorizeUrl = EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; - } - this.oAuthService = oAuthFactory.createOAuthClientService(LinkyBindingConstants.BINDING_ID, tokenUrl, authorizeUrl, getClientId(), getClientSecret(), LinkyBindingConstants.LINKY_SCOPES, true); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 029766fa042..84ae1df134f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -71,6 +71,14 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); } + @Override + public void initialize() { + tokenUrl = EnedisBridgeHandler.ENEDIS_API_TOKEN_URL; + authorizeUrl = EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; + + super.initialize(); + } + @Override public String getClientId() { LinkyConfiguration lcConfig = config; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index d4bd73a1407..0ad08133899 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -95,11 +95,6 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { super(bridge, httpClientFactory, oAuthFactory, httpService, thingRegistry, componentContext, gson); } - @Override - public void initialize() { - super.initialize(); - } - @Override public String getToken(LinkyHandler handler) throws LinkyException { return ""; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 229e5e0dbc2..1a225273da6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -83,6 +83,9 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { @Override public void initialize() { + tokenUrl = MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_API_TOKEN_URL; + authorizeUrl = MyElectricalDataBridgeHandler.LINKY_MYELECTRICALDATA_AUTHORIZE_URL; + super.initialize(); } From 859118a5338dc4ce7cddbf59f5a86bc019f7cc09 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 10 Oct 2024 15:05:55 +0200 Subject: [PATCH 096/135] fix logic on getting All prmId Signed-off-by: Laurent ARNAL --- .../internal/handler/ApiBridgeHandler.java | 22 ------------------- .../internal/handler/LinkyBridgeHandler.java | 14 ++++++++++++ .../linky/internal/handler/LinkyHandler.java | 1 + 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 89217b5928d..20881103086 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -13,10 +13,7 @@ package org.openhab.binding.linky.internal.handler; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; import java.util.Hashtable; -import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -35,10 +32,8 @@ import org.openhab.core.auth.client.oauth2.OAuthClientService; import org.openhab.core.auth.client.oauth2.OAuthException; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.auth.client.oauth2.OAuthResponseException; -import org.openhab.core.config.core.Configuration; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; -import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingRegistry; import org.openhab.core.thing.ThingStatus; import org.osgi.service.component.ComponentContext; @@ -202,23 +197,6 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { } } - public List getAllPrmId() { - List result = new ArrayList<>(); - - Collection col = this.thingRegistry.getAll(); - - for (Thing thing : col) { - if (LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - Configuration config = thing.getConfiguration(); - - String prmId = (String) config.get("prmId"); - result.add(prmId); - } - } - - return result; - } - @Override public Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException { try { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index dce8b20d72e..a95b515859c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -15,6 +15,8 @@ package org.openhab.binding.linky.internal.handler; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; @@ -70,6 +72,8 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { private static final int REQUEST_BUFFER_SIZE = 8000; + private List registeredPrmId = new ArrayList<>(); + public LinkyBridgeHandler(Bridge bridge, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, ComponentContext componentContext, Gson gson) { @@ -131,6 +135,16 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { protected abstract void connectionInit() throws LinkyException; + public void registerNewPrmId(String prmId) { + if (!registeredPrmId.contains(prmId)) { + registeredPrmId.add(prmId); + } + } + + public List getAllPrmId() { + return registeredPrmId; + } + public boolean isConnected() { return connected; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 1e43dd23c39..2a342623830 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -175,6 +175,7 @@ public class LinkyHandler extends BaseThingHandler { updateStatus(ThingStatus.UNKNOWN); if (config.seemsValid()) { + bridgeHandler.registerNewPrmId(config.prmId); pollingJob = scheduler.scheduleWithFixedDelay(this::pollingCode, 0, 5, TimeUnit.SECONDS); } else { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, From 6e0e640952b4bd86128f9548c94cdca4a814641c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 10 Oct 2024 15:19:15 +0200 Subject: [PATCH 097/135] force rebuild Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 464a8b56c9d..c668c61e671 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -366,3 +366,4 @@ Number:Energy ConsoMoisDernier "Conso mois dernier [%.0f %unit%]" { cha Number:Energy ConsoAnneeEnCours "Conso cette année [%.0f %unit%]" { channel="linky:linky:local:yearly#thisYear" } Number:Energy ConsoAnneeDerniere "Conso année dernière [%.0f %unit%]" { channel="linky:linky:local:yearly#lastYear" } ``` + From a19e9bec716b6bc60b77bd3325d0c61836ee0dcb Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 14 Oct 2024 09:37:01 +0200 Subject: [PATCH 098/135] toggle a build Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index c668c61e671..68a7554513e 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -2,7 +2,7 @@ This binding uses the API provided by Enedis to retrieve your energy consumption data. You need to create an Enedis account [here](https://mon-compte-client.enedis.fr/) if you don't have one already. - + Please ensure that you have accepted their conditions, and check that you can see graphs on the website. Especially, check hourly view/graph. Enedis may ask for permission the first time to start collecting hourly data. From 2179e831c9f6982902f78960fbf7c21d1de21c77 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 7 Nov 2024 16:41:17 +0100 Subject: [PATCH 099/135] try fixes for last wweb site versions Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/api/EnedisHttpApi.java | 3 ++- .../linky/internal/handler/EnedisWebBridgeHandler.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 982b8efc29a..5f9987853b4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -99,7 +99,8 @@ public class EnedisHttpApi { private static String getData(LinkyBridgeHandler linkyBridgeHandler, String url, HttpClient httpClient, String token) throws LinkyException { try { - Request request = httpClient.newRequest(url); + Request request = httpClient.newRequest(url) + .agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"); request = request.method(HttpMethod.GET); if (!token.isEmpty()) { request = request.header("Authorization", "" + token); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 0ad08133899..30c0e1dbdef 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -230,6 +230,10 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { logger.debug("Add the tokenId cookie"); enedisApi.addCookie("enedisExt", authResult.tokenId); + enedisApi.addCookie("personne_for_MPS172TIB", + "y0h0geJCDj9T3eoUXLx_KwkT54ezal6GofjGbZ6o0bOdxGv3qAbxXx4-w4Bmrp_VMHxmU5JuX9dT3eoUXLx_K9eP5tkkcInfNyHLRhBRCDZDqRmAfdoPUbkghioAEM5aPI2kaNOAJ7I2mRSC0s36vbp_KW_3XY6IiQzoqGQdo14"); + enedisApi.addCookie("externalProxy", + "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..HOTGmgkjHCsyx_c5.XLMvWahx76n1kXHauJRz_A4HYe5Q-qAnR7X3ucWCpDd6NS-ZB7X-Zrc-LOEFuxOSLnQTrJ-jVDAZjRaOpcJtOOFWGA0I4u0yGN2uiO27cACs4F_CgkYSZMaBzR5pC-viDRvqc0VL9zsSrLn_jopIJWBvqrKxKm4Nne84WajFGXvDhyLiuSeiSmfDfXdfnOZGcRhvAkMW9gdKTcJxc8CJlKmcmiYHDW4gnJ-__sAeU8eoCnSgRpbk9M1thEabzELE88gus2qbiZPB2O0zZQjYS7LmDFPiYpuBLTkURA-UFat70BSwciTnwTVV_Lh9eDFgr2ubwE8o0a4VCqyOEjD-SC09mgocSn50_BGgO2Ekulk8iw9XwRE0QpnCs-OWj9BlBD6djo9qfYp5sAaDYCyXG3XgP7Il4hpRKnua2-xdt02SOoGaXZHhaV0fZhLSTRVCCZ_W_TKE66vdhNIA9pLCjna4eoffoIzFlBHvFJENzBJFCPS5DxPnT5r53e6lQ4qR9t8Av0agouxYnCMORXTFieOngg9DhIk1CLgyEBIrMVdwPa9aqdHwxVA_6UCoI9wMPejizUY4OwhEKi-7sJgAu1vOMi8ODVUspESi7odjWr67onxQoz0e9TB519Uj4QupT3fUBZK2AJeFOV1qo4c9wSyPbu5fhYwxg6G0MiO7q7V9ZFTV49nKIYhDl1cmOs0AfR3FbhyTsn7xfyfXEoW9v9wV4RROt0RbSNOMC8zv6AmA6H-xtIIzfU2QiE7HzVYycU5tvBZOXlJR6D006OqnrqM7JvqHHdPcqXmUqbgspKRDISMC4TeEzWNjM_xLqJ9YSb3JcvI1JrFzUabRf7I_MTnk-MYD3tjBkhEx6at6eYP715_HBQ_ymaK08uhTj5kl0uJUr6A1ReJjElZILQCib1b5Y0O6bgfdC5wjGvj5R5InetEzNnFxKn7Y7NR7llan_LUpZLgrj8flNj8s1zV05yNNO-hqEWdCSCN84tc2DjiiGQ9kNnZPYxyYInR2wNAocv7Kwt9Zq79HJtwyuHfUOwYZGAiu7j_4vAjKMCTJafZARdlLz0aQsXVqfTSpv2KkBtjBRw.wjzjNu2wXlDM54nPfn5djQ"); logger.debug("Step 5 : retrieve the SAMLresponse"); data = enedisApi.getData(URL_MON_COMPTE + "/" + authResult.successUrl); From 3b44508f678a68c463496d9c27439e17ca9e1f50 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 8 Nov 2024 14:16:12 +0100 Subject: [PATCH 100/135] fix EnedisWebBridgeHandler to support last version of enedis WebSite : need new call to uri : /mon-compte-client/api/private/v1/userinfos to retrieve the personne_for_MPS172TIB cookie Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 6 ++-- .../handler/EnedisWebBridgeHandler.java | 33 ++++++++++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 5f9987853b4..e280f0b2717 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -99,8 +99,10 @@ public class EnedisHttpApi { private static String getData(LinkyBridgeHandler linkyBridgeHandler, String url, HttpClient httpClient, String token) throws LinkyException { try { - Request request = httpClient.newRequest(url) - .agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"); + + Request request = httpClient.newRequest(url); + + request = request.agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"); request = request.method(HttpMethod.GET); if (!token.isEmpty()) { request = request.header("Authorization", "" + token); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 30c0e1dbdef..941a788d768 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -12,9 +12,13 @@ */ package org.openhab.binding.linky.internal.handler; +import java.net.HttpCookie; import java.net.URI; import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import java.util.regex.Matcher; @@ -66,6 +70,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { public static final String URL_COMPTE_PART = URL_MON_COMPTE.replace("compte", "compte-particulier"); public static final URI COOKIE_URI = URI.create(URL_COMPTE_PART); + private static final String USER_INFO_CONTRACT_URL = BASE_URL + "/mon-compte-client/api/private/v1/userinfos"; private static final String USER_INFO_URL = BASE_URL + "/userinfos"; private static final String PRM_INFO_BASE_URL = BASE_URL + "/mes-mesures/api/private/v1/personnes/"; private static final String PRM_INFO_URL = PRM_INFO_BASE_URL + "null/prms"; @@ -230,10 +235,6 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { logger.debug("Add the tokenId cookie"); enedisApi.addCookie("enedisExt", authResult.tokenId); - enedisApi.addCookie("personne_for_MPS172TIB", - "y0h0geJCDj9T3eoUXLx_KwkT54ezal6GofjGbZ6o0bOdxGv3qAbxXx4-w4Bmrp_VMHxmU5JuX9dT3eoUXLx_K9eP5tkkcInfNyHLRhBRCDZDqRmAfdoPUbkghioAEM5aPI2kaNOAJ7I2mRSC0s36vbp_KW_3XY6IiQzoqGQdo14"); - enedisApi.addCookie("externalProxy", - "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..HOTGmgkjHCsyx_c5.XLMvWahx76n1kXHauJRz_A4HYe5Q-qAnR7X3ucWCpDd6NS-ZB7X-Zrc-LOEFuxOSLnQTrJ-jVDAZjRaOpcJtOOFWGA0I4u0yGN2uiO27cACs4F_CgkYSZMaBzR5pC-viDRvqc0VL9zsSrLn_jopIJWBvqrKxKm4Nne84WajFGXvDhyLiuSeiSmfDfXdfnOZGcRhvAkMW9gdKTcJxc8CJlKmcmiYHDW4gnJ-__sAeU8eoCnSgRpbk9M1thEabzELE88gus2qbiZPB2O0zZQjYS7LmDFPiYpuBLTkURA-UFat70BSwciTnwTVV_Lh9eDFgr2ubwE8o0a4VCqyOEjD-SC09mgocSn50_BGgO2Ekulk8iw9XwRE0QpnCs-OWj9BlBD6djo9qfYp5sAaDYCyXG3XgP7Il4hpRKnua2-xdt02SOoGaXZHhaV0fZhLSTRVCCZ_W_TKE66vdhNIA9pLCjna4eoffoIzFlBHvFJENzBJFCPS5DxPnT5r53e6lQ4qR9t8Av0agouxYnCMORXTFieOngg9DhIk1CLgyEBIrMVdwPa9aqdHwxVA_6UCoI9wMPejizUY4OwhEKi-7sJgAu1vOMi8ODVUspESi7odjWr67onxQoz0e9TB519Uj4QupT3fUBZK2AJeFOV1qo4c9wSyPbu5fhYwxg6G0MiO7q7V9ZFTV49nKIYhDl1cmOs0AfR3FbhyTsn7xfyfXEoW9v9wV4RROt0RbSNOMC8zv6AmA6H-xtIIzfU2QiE7HzVYycU5tvBZOXlJR6D006OqnrqM7JvqHHdPcqXmUqbgspKRDISMC4TeEzWNjM_xLqJ9YSb3JcvI1JrFzUabRf7I_MTnk-MYD3tjBkhEx6at6eYP715_HBQ_ymaK08uhTj5kl0uJUr6A1ReJjElZILQCib1b5Y0O6bgfdC5wjGvj5R5InetEzNnFxKn7Y7NR7llan_LUpZLgrj8flNj8s1zV05yNNO-hqEWdCSCN84tc2DjiiGQ9kNnZPYxyYInR2wNAocv7Kwt9Zq79HJtwyuHfUOwYZGAiu7j_4vAjKMCTJafZARdlLz0aQsXVqfTSpv2KkBtjBRw.wjzjNu2wXlDM54nPfn5djQ"); logger.debug("Step 5 : retrieve the SAMLresponse"); data = enedisApi.getData(URL_MON_COMPTE + "/" + authResult.successUrl); @@ -247,6 +248,30 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { if (result.getStatus() != 302) { throw new LinkyException("Connection failed step 6"); } + + logger.debug("Step 7 : retrieve "); + result = httpClient.GET(USER_INFO_CONTRACT_URL); + + HashMap hashRes = gson.fromJson(result.getContentAsString(), HashMap.class); + String cookieKey; + if (hashRes != null && hashRes.containsKey("cnAlex")) { + cookieKey = "personne_for_" + (String) hashRes.get("cnAlex"); + } else { + throw new LinkyException("Connection failed step 7, missing cookieKey"); + } + + List lCookie = httpClient.getCookieStore().getCookies(); + Optional cookie = lCookie.stream().filter(it -> it.getName().contains(cookieKey)).findFirst(); + + String cookieVal; + if (cookie.isPresent()) { + cookieVal = cookie.get().getValue(); + } else { + throw new LinkyException("Connection failed step 7, missing cookieVal"); + } + + enedisApi.addCookie(cookieKey, cookieVal); + connected = true; } catch (InterruptedException | TimeoutException | ExecutionException | JsonSyntaxException e) { throw new LinkyException(e, "Error opening connection with Enedis webservice"); From 6737f63ccb946b781ebcd8d65219bab38492c3ce Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 9 Nov 2024 17:10:58 +0100 Subject: [PATCH 101/135] backport change from main branch Code cleanup on DTO Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 2 + .../linky/internal/LinkyHandlerFactory.java | 16 +- .../linky/internal/api/EnedisHttpApi.java | 246 ++++++------------ .../linky/internal/dto/AddressInfo.java | 36 --- .../dto/{ContactInfo.java => Contact.java} | 10 +- .../{ContractDetails.java => Contract.java} | 20 +- .../binding/linky/internal/dto/Contracts.java | 68 ----- .../linky/internal/dto/CustomerReponse.java | 26 -- .../dto/{IdentityInfo.java => Identity.java} | 12 +- .../linky/internal/dto/MeterReading.java | 2 +- .../binding/linky/internal/dto/PrmInfo.java | 19 +- ...erIdResponse.java => ResponseContact.java} | 7 +- ...ointDetails.java => ResponseContract.java} | 22 +- ...tityDetails.java => ResponseIdentity.java} | 15 +- ...{MeterResponse.java => ResponseMeter.java} | 2 +- ...{TempoResponse.java => ResponseTempo.java} | 2 +- .../dto/{TempoDayInfo.java => TempoDay.java} | 2 +- .../linky/internal/dto/UsagePoint.java | 46 +++- .../linky/internal/dto/WebPrmInfo.java | 47 ---- .../linky/internal/dto/WebUserInfo.java | 33 --- .../internal/handler/ApiBridgeHandler.java | 32 +-- .../internal/handler/EnedisBridgeHandler.java | 2 + .../handler/EnedisWebBridgeHandler.java | 66 ++--- .../internal/handler/LinkyBridgeHandler.java | 8 +- .../linky/internal/handler/LinkyHandler.java | 154 ++++++----- .../MyElectricalDataBridgeHandler.java | 2 +- 26 files changed, 303 insertions(+), 594 deletions(-) delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{ContactInfo.java => Contact.java} (71%) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{ContractDetails.java => Contract.java} (64%) delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{IdentityInfo.java => Identity.java} (70%) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{CustomerIdResponse.java => ResponseContact.java} (83%) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{UsagePointDetails.java => ResponseContract.java} (64%) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{IdentityDetails.java => ResponseIdentity.java} (72%) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{MeterResponse.java => ResponseMeter.java} (96%) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{TempoResponse.java => ResponseTempo.java} (92%) rename bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/{TempoDayInfo.java => TempoDay.java} (96%) delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java delete mode 100644 bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 68a7554513e..8bdbeec7cf4 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -144,6 +144,8 @@ The thing has the following configuration parameters: | prmId | The prmId link to the linky Handler. | | token | Optional : need if a token necessary to access this Linky thing (use for MyElectricaldata) | +Thing linky:linky:local "Compteur Linky" [ prmId="xxxx", token="yyyyyyyyyyyyyyyyyyyyyyy" ] + ## Channels diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index bfb70098084..0a6d5a86ce5 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -35,8 +35,6 @@ import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.binding.BaseThingHandlerFactory; import org.openhab.core.thing.binding.ThingHandler; import org.openhab.core.thing.binding.ThingHandlerFactory; -import org.openhab.core.thing.binding.ThingTypeProvider; -import org.openhab.core.thing.type.ThingType; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -65,7 +63,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private final OAuthFactory oAuthFactory; private final HttpService httpService; private final ThingRegistry thingRegistry; - private final ThingTypeProvider thingTypeProvider; private final ComponentContext componentContext; private final Gson gson = new GsonBuilder() @@ -93,34 +90,23 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, - final @Reference ThingTypeProvider thingTypeProvider, ComponentContext componentContext) { + ComponentContext componentContext) { this.localeProvider = localeProvider; this.httpClientFactory = httpClientFactory; this.oAuthFactory = oAuthFactory; this.httpService = httpService; this.thingRegistry = thingRegistry; - this.thingTypeProvider = thingTypeProvider; this.componentContext = componentContext; - - ThingType tt = this.thingTypeProvider.getThingType(THING_TYPE_API_WEB_ENEDIS_BRIDGE, null); - System.out.println("tt:" + tt); } @Override protected void activate(ComponentContext componentContext) { - // TODO Auto-generated method stub super.activate(componentContext); - - ThingType tt = this.thingTypeProvider.getThingType(THING_TYPE_API_WEB_ENEDIS_BRIDGE, null); - System.out.println("tt:" + tt); } @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { - ThingType tt = this.thingTypeProvider.getThingType(THING_TYPE_API_WEB_ENEDIS_BRIDGE, null); - System.out.println("tt:" + tt); - return SUPPORTED_DEVICE_THING_TYPES_UIDS.contains(thingTypeUID); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index e280f0b2717..658f2b0ce2a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -14,13 +14,13 @@ package org.openhab.binding.linky.internal.api; import java.net.HttpCookie; import java.time.LocalDate; +import java.util.Objects; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import javax.ws.rs.core.MediaType; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; @@ -29,19 +29,20 @@ import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.util.Fields; import org.openhab.binding.linky.internal.LinkyException; -import org.openhab.binding.linky.internal.dto.AddressInfo; import org.openhab.binding.linky.internal.dto.ConsumptionReport; -import org.openhab.binding.linky.internal.dto.ContactInfo; -import org.openhab.binding.linky.internal.dto.Contracts; -import org.openhab.binding.linky.internal.dto.CustomerIdResponse; -import org.openhab.binding.linky.internal.dto.CustomerReponse; -import org.openhab.binding.linky.internal.dto.IdentityInfo; +import org.openhab.binding.linky.internal.dto.Contact; +import org.openhab.binding.linky.internal.dto.Contract; +import org.openhab.binding.linky.internal.dto.Identity; import org.openhab.binding.linky.internal.dto.MeterReading; -import org.openhab.binding.linky.internal.dto.MeterResponse; +import org.openhab.binding.linky.internal.dto.PrmDetail; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.binding.linky.internal.dto.TempoResponse; +import org.openhab.binding.linky.internal.dto.ResponseContract; +import org.openhab.binding.linky.internal.dto.ResponseContact; +import org.openhab.binding.linky.internal.dto.ResponseIdentity; +import org.openhab.binding.linky.internal.dto.ResponseMeter; +import org.openhab.binding.linky.internal.dto.ResponseTempo; import org.openhab.binding.linky.internal.dto.UsagePoint; -import org.openhab.binding.linky.internal.dto.WebUserInfo; +import org.openhab.binding.linky.internal.dto.UserInfo; import org.openhab.binding.linky.internal.handler.EnedisWebBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyBridgeHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler; @@ -88,18 +89,17 @@ public class EnedisHttpApi { return response.getHeaders().get(HttpHeader.LOCATION); } - public String getData(LinkyHandler handler, String url) throws LinkyException { - return getData(linkyBridgeHandler, url, httpClient, linkyBridgeHandler.getToken(handler)); + public String getContent(LinkyHandler handler, String url) throws LinkyException { + return getContent(logger, linkyBridgeHandler, url, httpClient, linkyBridgeHandler.getToken(handler)); } - public String getData(String url) throws LinkyException { - return getData(linkyBridgeHandler, url, httpClient, ""); + public String getContent(String url) throws LinkyException { + return getContent(logger, linkyBridgeHandler, url, httpClient, ""); } - private static String getData(LinkyBridgeHandler linkyBridgeHandler, String url, HttpClient httpClient, - String token) throws LinkyException { + private static String getContent(Logger logger, LinkyBridgeHandler linkyBridgeHandler, String url, + HttpClient httpClient, String token) throws LinkyException { try { - Request request = httpClient.newRequest(url); request = request.agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"); @@ -127,7 +127,7 @@ public class EnedisHttpApi { } } if (result.getStatus() != 200) { - throw new LinkyException("Error requesting '%s' : %s", url, result.getContentAsString()); + throw new LinkyException("Error requesting '%s': %s", url, result.getContentAsString()); } String content = result.getContentAsString(); logger.trace("getContent returned {}", content); @@ -137,165 +137,86 @@ public class EnedisHttpApi { } } - public PrmInfo getPrmInfo(LinkyHandler handler, String prmId) throws LinkyException { + private T getData(LinkyHandler handler, String url, Class clazz) throws LinkyException { if (!linkyBridgeHandler.isConnected()) { linkyBridgeHandler.initialize(); } - PrmInfo result = new PrmInfo(); - result.prmId = prmId; + String data = getContent(handler, url); - result.contractInfo.subscribedPower = "Na"; - - try { - Contracts contract = getContract(handler, prmId); - UsagePoint usagePoint = contract.usagePoints[0]; - - AddressInfo addressInfo = getAddress(handler, prmId); - if (addressInfo != null) { - usagePoint.usagePoint.usagePointAddresses = addressInfo; - } - - result.contractInfo = usagePoint.contracts; - result.usagePointInfo = usagePoint.usagePoint; - result.identityInfo = getIdentity(handler, prmId); - result.contactInfo = getContact(handler, prmId); - - result.addressInfo = result.usagePointInfo.usagePointAddresses; - } catch (Exception ex) { - logger.debug("Warning, unable to read contract info"); + if (data.isEmpty()) { + throw new LinkyException("Requesting '%s' returned an empty response", url); } - return result; + try { + return Objects.requireNonNull(gson.fromJson(data, clazz)); + } catch (JsonSyntaxException e) { + logger.debug("Invalid JSON response not matching {}: {}", clazz.getName(), data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); + } + } + + public PrmInfo getPrmInfo(LinkyHandler handler, String internId, String prmId) throws LinkyException { + String prmInfoUrl = linkyBridgeHandler.getContractUrl().formatted(internId); + PrmInfo[] prms = getData(handler, prmInfoUrl, PrmInfo[].class); + if (prms.length < 1) { + throw new LinkyException("Invalid prms data received"); + } + return prms[0]; + } + + public PrmDetail getPrmDetails(LinkyHandler handler, String internId, String prmId) throws LinkyException { + String prmInfoUrl = linkyBridgeHandler.getContractUrl(); + String url = prmInfoUrl.formatted(internId) + "/" + prmId + + "?embed=SITALI&embed=SITCOM&embed=SITCON&embed=SYNCON"; + return getData(handler, url, PrmDetail.class); + } + + public UserInfo getUserInfo(LinkyHandler handler) throws LinkyException { + String userInfoUrl = linkyBridgeHandler.getContactUrl(); + return getData(handler, userInfoUrl, UserInfo.class); } public String formatUrl(String apiUrl, String prmId) { return apiUrl.formatted(prmId); } - public Contracts getContract(LinkyHandler handler, String prmId) throws LinkyException { - if (!linkyBridgeHandler.isConnected()) { - linkyBridgeHandler.initialize(); - } - - String contractUrl = linkyBridgeHandler.getContractUrl(); - String data = getData(handler, formatUrl(contractUrl, prmId)); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", contractUrl); - } - - return linkyBridgeHandler.decodeCustomerResponse(data, prmId); + public Contract getContract(LinkyHandler handler, String prmId) throws LinkyException { + String contractUrl = linkyBridgeHandler.getContractUrl().formatted(prmId); + ResponseContract contractResponse = getData(handler, contractUrl, ResponseContract.class); + return contractResponse.customer.usagePoint[0].contracts; } - @Nullable - public AddressInfo getAddress(LinkyHandler handler, String prmId) throws LinkyException { - if (!linkyBridgeHandler.isConnected()) { - linkyBridgeHandler.initialize(); - } - String addressUrl = linkyBridgeHandler.getAddressUrl(); - - if (addressUrl.isEmpty()) { - return null; - } - - String data = getData(handler, formatUrl(addressUrl, prmId)); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", addressUrl); - } - try { - CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); - if (cResponse == null) { - throw new LinkyException("Invalid customer data received"); - } - return cResponse.customer.usagePoints[0].usagePoint.usagePointAddresses; - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", addressUrl); - } + public UsagePoint getUsagePoint(LinkyHandler handler, String prmId) throws LinkyException { + String addressUrl = linkyBridgeHandler.getAddressUrl().formatted(prmId); + ResponseContract contractResponse = getData(handler, addressUrl, ResponseContract.class); + return contractResponse.customer.usagePoint[0].usagePoint; } - public IdentityInfo getIdentity(LinkyHandler handler, String prmId) throws LinkyException { - if (!linkyBridgeHandler.isConnected()) { - linkyBridgeHandler.initialize(); - } - String identityUrl = linkyBridgeHandler.getIdentityUrl(); - String data = getData(handler, formatUrl(identityUrl, prmId)); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", identityUrl); - } - - return linkyBridgeHandler.decodeIdentityResponse(data, prmId); + public Identity getIdentity(LinkyHandler handler, String prmId) throws LinkyException { + String identityUrl = linkyBridgeHandler.getIdentityUrl().formatted(prmId); + ResponseIdentity customerIdReponse = getData(handler, identityUrl, ResponseIdentity.class); + return customerIdReponse.identity.naturalPerson; } - public ContactInfo getContact(LinkyHandler handler, String prmId) throws LinkyException { - if (!linkyBridgeHandler.isConnected()) { - linkyBridgeHandler.initialize(); - } - String contactUrl = linkyBridgeHandler.getContactUrl(); - String data = getData(handler, formatUrl(contactUrl, prmId)); - - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", contactUrl); - } - try { - if (data.contains("av2_interne_id")) { - try { - WebUserInfo webUserInfo = gson.fromJson(data, WebUserInfo.class); - return ContactInfo.fromWebUserInfo(webUserInfo); - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching UserInfo.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contactUrl); - } - } else { - CustomerIdResponse cResponse = gson.fromJson(data, CustomerIdResponse.class); - if (cResponse == null) { - throw new LinkyException("Invalid customer data received"); - } - return cResponse.contactData; - } - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", contactUrl); - } + public Contact getContact(LinkyHandler handler, String prmId) throws LinkyException { + String contactUrl = linkyBridgeHandler.getContactUrl().formatted(prmId); + ResponseContact contactResponse = getData(handler, contactUrl, ResponseContact.class); + return contactResponse.contact; } private MeterReading getMeasures(LinkyHandler handler, String apiUrl, String prmId, LocalDate from, LocalDate to) throws LinkyException { String dtStart = from.format(linkyBridgeHandler.getApiDateFormat()); String dtEnd = to.format(linkyBridgeHandler.getApiDateFormat()); - String url = String.format(apiUrl, prmId, dtStart, dtEnd); - if (!linkyBridgeHandler.isConnected()) { - linkyBridgeHandler.initialize(); - } - - String data = getData(handler, url); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", url); - } - logger.trace("getData returned {}", data); - try { - // See if with have response header from old Web API - if (data.startsWith("{\"1\":{\"CONS\"")) { - // If so, decode to ConsumptionReport, and convert to new Format - ConsumptionReport consomptionReport = gson.fromJson(data, ConsumptionReport.class); - if (consomptionReport == null) { - throw new LinkyException("No report data received"); - } - - return MeterReading.fromComsumptionReport(consomptionReport); - } - - // Else decode directly to new API format - MeterResponse meterResponse = gson.fromJson(data, MeterResponse.class); - if (meterResponse == null) { - throw new LinkyException("No report data received"); - } + if (handler.supportNewApiFormat()) { + ResponseMeter meterResponse = getData(handler, url, ResponseMeter.class); return meterResponse.meterReading; - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching ConsumptionReport.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); + } else { + ConsumptionReport consomptionReport = getData(handler, url, ConsumptionReport.class); + return MeterReading.convertFromComsumptionReport(consomptionReport); } } @@ -314,36 +235,17 @@ public class EnedisHttpApi { return getMeasures(handler, linkyBridgeHandler.getMaxPowerUrl(), prmId, from, to); } - public TempoResponse getTempoData(LinkyHandler handler, LocalDate from, LocalDate to) throws LinkyException { + public ResponseTempo getTempoData(LinkyHandler handler, LocalDate from, LocalDate to) throws LinkyException { String dtStart = from.format(linkyBridgeHandler.getApiDateFormatYearsFirst()); String dtEnd = to.format(linkyBridgeHandler.getApiDateFormatYearsFirst()); String url = String.format(linkyBridgeHandler.getTempoUrl(), dtStart, dtEnd); if (url.isEmpty()) { - return new TempoResponse(); + return new ResponseTempo(); } - if (!linkyBridgeHandler.isConnected()) { - linkyBridgeHandler.initialize(); - } - - String data = getData(handler, url); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", url); - } - logger.trace("getData returned {}", data); - - try { - TempoResponse tempResponse = gson.fromJson(data, TempoResponse.class); - if (tempResponse == null) { - throw new LinkyException("No report data received"); - } - - return tempResponse; - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching ConsumptionReport.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); - } + ResponseTempo responseTempo = getData(handler, url, ResponseTempo.class); + return responseTempo; } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java deleted file mode 100644 index 80293849024..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AddressInfo.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -import org.eclipse.jetty.jaas.spi.UserInfo; - -import com.google.gson.annotations.SerializedName; - -/** - * The {@link UserInfo} holds informations about energy delivery point - * - * @author Laurent Arnal - Initial contribution - */ - -public class AddressInfo { - public String street; - public String locality; - - @SerializedName("postal_code") - public String postalCode; - - @SerializedName("insee_code") - public String inseeCode; - public String city; - public String country; -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java similarity index 71% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java index d6a3aa71eb4..db8124d49ab 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContactInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java @@ -12,22 +12,20 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - /** * The {@link UserInfo} holds informations about energy delivery point * * @author Laurent Arnal - Initial contribution */ -public class ContactInfo { +public class Contact { public String phone; public String email; - public static ContactInfo fromWebUserInfo(WebUserInfo webUserInfo) { - ContactInfo result = new ContactInfo(); + public static Contact convertFromUserInfo(UserInfo userInfo) { + Contact result = new Contact(); - result.email = webUserInfo.userProperties.mail(); + result.email = userInfo.userProperties.mail; return result; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContractDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java similarity index 64% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContractDetails.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java index 91cd6840748..490b190bce9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ContractDetails.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java @@ -22,7 +22,7 @@ import com.google.gson.annotations.SerializedName; * @author Laurent Arnal - Initial contribution */ -public class ContractDetails { +public class Contract { public String segment; @SerializedName("subscribed_power") @@ -45,4 +45,22 @@ public class ContractDetails { @SerializedName("last_distribution_tariff_change_date") public String lastDistributionTariffChangeDate; + + public static Contract convertFromPrmDetail(PrmDetail prmDetail) { + Contract result = new Contract(); + + result.segment = prmDetail.segment; + result.subscribedPower = prmDetail.situationContractuelleDtos[0].structureTarifaire().puissanceSouscrite() + .valeur(); + result.lastActivationDate = ""; + result.distributionTariff = ""; + result.offpeakHours = ""; + result.contractStatus = prmDetail.situationContractuelleDtos[0].informationsContractuelles().etatContractuel() + .code(); + result.contractType = ""; + result.lastDistributionTariffChangeDate = ""; + + return result; + } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java deleted file mode 100644 index 47aa9d13890..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contracts.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -import java.util.Arrays; - -import org.eclipse.jetty.jaas.spi.UserInfo; - -import com.google.gson.annotations.SerializedName; - -/** - * The {@link UserInfo} holds informations about energy delivery point - * - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API - */ - -public class Contracts { - @SerializedName("customer_id") - public String customerId; - - @SerializedName("usage_points") - public UsagePoint[] usagePoints; - - public static Contracts fromWebPrmInfos(WebPrmInfo[] webPrmsInfo, String prmId) { - Contracts result = new Contracts(); - - WebPrmInfo webPrmInfo = Arrays.stream(webPrmsInfo).filter(x -> x.prmId.equals(prmId)).findAny().orElseThrow(); - - result.usagePoints = new UsagePoint[1]; - result.usagePoints[0] = new UsagePoint(); - - result.usagePoints[0].usagePoint = new UsagePointDetails(); - result.usagePoints[0].usagePoint.meterType = ""; - result.usagePoints[0].usagePoint.usagePointId = ""; - result.usagePoints[0].usagePoint.usagePointStatus = ""; - - result.usagePoints[0].usagePoint.usagePointAddresses = new AddressInfo(); - result.usagePoints[0].usagePoint.usagePointAddresses.city = webPrmInfo.adresse.adresseLigneSix; - result.usagePoints[0].usagePoint.usagePointAddresses.country = webPrmInfo.adresse.adresseLigneSept; - result.usagePoints[0].usagePoint.usagePointAddresses.inseeCode = ""; - result.usagePoints[0].usagePoint.usagePointAddresses.locality = ""; - result.usagePoints[0].usagePoint.usagePointAddresses.postalCode = webPrmInfo.adresse.adresseLigneSix; - result.usagePoints[0].usagePoint.usagePointAddresses.street = webPrmInfo.adresse.adresseLigneQuatre; - - result.usagePoints[0].contracts = new ContractDetails(); - result.usagePoints[0].contracts.contractStatus = ""; - result.usagePoints[0].contracts.contractType = ""; - result.usagePoints[0].contracts.distributionTariff = ""; - result.usagePoints[0].contracts.lastActivationDate = ""; - result.usagePoints[0].contracts.lastDistributionTariffChangeDate = ""; - result.usagePoints[0].contracts.offpeakHours = ""; - result.usagePoints[0].contracts.segment = webPrmInfo.segment; - result.usagePoints[0].contracts.subscribedPower = "" + webPrmInfo.puissanceSouscrite; - - return result; - } -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java deleted file mode 100644 index e940fff4660..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerReponse.java +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -import org.eclipse.jetty.jaas.spi.UserInfo; - -/** - * The {@link UserInfo} holds informations about energy delivery point - * - * @author Gaël L'hopital - Initial contribution - * @author Laurent Arnal - Rewrite addon to use official dataconect API - */ - -public class CustomerReponse { - public Contracts customer; -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java similarity index 70% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java index 8424d96bd9f..217af3eafb7 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - /** * The {@link UserInfo} holds informations about energy delivery point * @@ -21,16 +19,16 @@ import org.eclipse.jetty.jaas.spi.UserInfo; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class IdentityInfo { +public class Identity { public String title; public String firstname; public String lastname; - public static IdentityInfo fromWebUserInfo(WebUserInfo webUserInfo) { - IdentityInfo result = new IdentityInfo(); + public static Identity convertFromUserInfo(UserInfo userInfo) { + Identity result = new Identity(); - result.firstname = webUserInfo.userProperties.firstName(); - result.lastname = webUserInfo.userProperties.name(); + result.firstname = userInfo.userProperties.firstName; + result.lastname = userInfo.userProperties.name; result.title = ""; return result; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 5700ce10a79..928fba9db7b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -48,7 +48,7 @@ public class MeterReading { public IntervalReading[] monthValue; public IntervalReading[] yearValue; - public static MeterReading fromComsumptionReport(ConsumptionReport comsumptionReport) { + public static MeterReading convertFromComsumptionReport(ConsumptionReport comsumptionReport) { MeterReading result = new MeterReading(); result.readingType = new ReadingType(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java index d2413001cf3..eea7177cb21 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java @@ -22,22 +22,5 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class PrmInfo { - - public PrmInfo() { - customerId = ""; - contractInfo = new ContractDetails(); - identityInfo = new IdentityInfo(); - addressInfo = new AddressInfo(); - contactInfo = new ContactInfo(); - usagePointInfo = new UsagePointDetails(); - } - - public String prmId; - public String customerId; - - public ContractDetails contractInfo; - public UsagePointDetails usagePointInfo; - public ContactInfo contactInfo; - public AddressInfo addressInfo; - public IdentityInfo identityInfo; + public String idPrm; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java similarity index 83% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java index 3975fb4641a..05d5f120d16 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/CustomerIdResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java @@ -19,14 +19,13 @@ import com.google.gson.annotations.SerializedName; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Gaël L'hopital - Initial contribution * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class CustomerIdResponse { +public class ResponseContact { @SerializedName("customer_id") public String customerId; - public IdentityDetails identity; + @SerializedName("contact_data") - public ContactInfo contactData; + public Contact contact; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePointDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java similarity index 64% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePointDetails.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java index 2b2eeb81111..adf05afb0ca 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePointDetails.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java @@ -23,16 +23,20 @@ import com.google.gson.annotations.SerializedName; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class UsagePointDetails { - @SerializedName("usage_point_id") - public String usagePointId; +public class ResponseContract { + public Customer customer; - @SerializedName("usage_point_status") - public String usagePointStatus; + public class Customer { + @SerializedName("customer_id") + public String customerId; - @SerializedName("meter_type") - public String meterType; + @SerializedName("usage_points") + public UsagePoints[] usagePoint; + } - @SerializedName("usage_point_addresses") - public AddressInfo usagePointAddresses; + public class UsagePoints { + @SerializedName("usage_point") + public UsagePoint usagePoint; + public Contract contracts; + } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java similarity index 72% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java index 15a07b6a275..6f3b85f631e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IdentityDetails.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java @@ -19,11 +19,18 @@ import com.google.gson.annotations.SerializedName; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Gaël L'hopital - Initial contribution * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class IdentityDetails { - @SerializedName("natural_person") - public IdentityInfo naturalPerson; +public class ResponseIdentity { + @SerializedName("customer_id") + public String customerId; + + public IdentityEntry identity; + + public class IdentityEntry { + @SerializedName("natural_person") + public Identity naturalPerson; + } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java similarity index 96% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java index f5d1f85ad73..f8717ec7fc2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java @@ -23,7 +23,7 @@ import com.google.gson.annotations.SerializedName; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class MeterResponse { +public class ResponseMeter { @SerializedName("meter_reading") public MeterReading meterReading; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java similarity index 92% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java index c18e7f5f71e..f3dda97d2f1 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java @@ -21,6 +21,6 @@ import java.util.LinkedHashMap; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class TempoResponse extends LinkedHashMap { +public class ResponseTempo extends LinkedHashMap { private static final long serialVersionUID = 362498820763181264L; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDayInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java similarity index 96% rename from bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDayInfo.java rename to bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java index b5ba925c7d1..d3f1249fba4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDayInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java @@ -21,7 +21,7 @@ import org.eclipse.jetty.jaas.spi.UserInfo; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ -public class TempoDayInfo { +public class TempoDay { public String tempoDay; public String tempoVal; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index 6cafa867629..d8ae2324c5d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -24,7 +24,47 @@ import com.google.gson.annotations.SerializedName; */ public class UsagePoint { - @SerializedName("usage_point") - public UsagePointDetails usagePoint; - public ContractDetails contracts; + @SerializedName("usage_point_id") + public String usagePointId; + + @SerializedName("usage_point_status") + public String usagePointStatus; + + @SerializedName("meter_type") + public String meterType; + + @SerializedName("usage_point_addresses") + public AddressInfo usagePointAddresses; + + public class AddressInfo { + public String street; + public String locality; + + @SerializedName("postal_code") + public String postalCode; + + @SerializedName("insee_code") + public String inseeCode; + public String city; + public String country; + } + + public static UsagePoint convertFromPrmDetail(PrmDetail prmDetail) { + UsagePoint result = new UsagePoint(); + + result.usagePointId = ""; + result.usagePointStatus = ""; + result.meterType = prmDetail.situationComptageDto.dispositifComptage().typeComptage().code(); + result.usagePointAddresses = result.new AddressInfo(); + + result.usagePointAddresses.street = prmDetail.adresse.ligne4(); + result.usagePointAddresses.locality = prmDetail.adresse.ligne6(); + result.usagePointAddresses.city = prmDetail.adresse.ligne6(); + result.usagePointAddresses.postalCode = prmDetail.adresse.ligne6(); + result.usagePointAddresses.inseeCode = ""; + result.usagePointAddresses.country = ""; + + return result; + } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java deleted file mode 100644 index a93700122b8..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebPrmInfo.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -/** - * The {@link UserInfo} holds informations about energy delivery point - * - * @author Gaël L'hopital - Initial contribution - */ - -public class WebPrmInfo { - public class Adresse { - public String adresseLigneUn; - public String adresseLigneDeux; - public String adresseLigneTrois; - public String adresseLigneQuatre; - public String adresseLigneCinq; - public String adresseLigneSix; - public String adresseLigneSept; - } - - public String prmId; - public String dateFinRole; - public String segment; - public Adresse adresse; - public String typeCompteur; - public String niveauOuvertureServices; - public String communiquant; - public long dateSoutirage; - public String dateInjection; - public int departement; - public int puissanceSouscrite; - public String codeCalendrier; - public String codeTitulaire; - public boolean collecteActivee; - public boolean multiTitulaire; -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java deleted file mode 100644 index a5eae76ab5b..00000000000 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/WebUserInfo.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2010-2024 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.linky.internal.dto; - -import com.google.gson.annotations.SerializedName; - -/** - * The {@link UserInfo} holds informations about the user account - * - * @author Gaël L'hopital - Initial contribution - */ - -public class WebUserInfo { - - public record UserProperties(@SerializedName("av2_interne_id") String internId, - @SerializedName("av2_prenom") String firstName, @SerializedName("av2_mail") String mail, - @SerializedName("av2_nom") String name, @SerializedName("av2_infos_personnalisees") String personalInfo) { - } - - public String username; - public boolean connected; - public UserProperties userProperties; -} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 20881103086..b6bbd985c86 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -23,10 +23,6 @@ import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.linky.internal.LinkyAuthServlet; import org.openhab.binding.linky.internal.LinkyBindingConstants; import org.openhab.binding.linky.internal.LinkyException; -import org.openhab.binding.linky.internal.dto.Contracts; -import org.openhab.binding.linky.internal.dto.CustomerIdResponse; -import org.openhab.binding.linky.internal.dto.CustomerReponse; -import org.openhab.binding.linky.internal.dto.IdentityInfo; import org.openhab.core.auth.client.oauth2.AccessTokenResponse; import org.openhab.core.auth.client.oauth2.OAuthClientService; import org.openhab.core.auth.client.oauth2.OAuthException; @@ -44,7 +40,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.Gson; -import com.google.gson.JsonSyntaxException; /** * {@link ApiBridgeHandler} is the base handler to access enedis data. @@ -198,30 +193,7 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { } @Override - public Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException { - try { - CustomerReponse cResponse = gson.fromJson(data, CustomerReponse.class); - if (cResponse == null) { - throw new LinkyException("Invalid customer data received"); - } - return cResponse.customer; - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching CustomerReponse.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); - } - } - - @Override - public IdentityInfo decodeIdentityResponse(String data, String prmId) throws LinkyException { - try { - CustomerIdResponse iResponse = gson.fromJson(data, CustomerIdResponse.class); - if (iResponse == null) { - throw new LinkyException("Invalid customer data received"); - } - return iResponse.identity.naturalPerson; - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching CustomerIdResponse.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); - } + public boolean supportNewApiFormat() { + return true; } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 84ae1df134f..957764ff0be 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -48,6 +48,7 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity?usage_point_id=%s"; private static final String CONTACT_URL = BASE_URL + "customers_cd/v5/contact_data?usage_point_id=%s"; private static final String ADDRESS_URL = BASE_URL + "customers_upa/v5/usage_points/addresses?usage_point_id=%s"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; private static final String MEASURE_MAX_POWER_URL = BASE_URL @@ -181,4 +182,5 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } + } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 941a788d768..c3ba8fcfe44 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -35,10 +35,6 @@ import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.AuthData; import org.openhab.binding.linky.internal.dto.AuthResult; -import org.openhab.binding.linky.internal.dto.Contracts; -import org.openhab.binding.linky.internal.dto.IdentityInfo; -import org.openhab.binding.linky.internal.dto.WebPrmInfo; -import org.openhab.binding.linky.internal.dto.WebUserInfo; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; @@ -73,7 +69,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { private static final String USER_INFO_CONTRACT_URL = BASE_URL + "/mon-compte-client/api/private/v1/userinfos"; private static final String USER_INFO_URL = BASE_URL + "/userinfos"; private static final String PRM_INFO_BASE_URL = BASE_URL + "/mes-mesures/api/private/v1/personnes/"; - private static final String PRM_INFO_URL = PRM_INFO_BASE_URL + "null/prms"; + private static final String PRM_INFO_URL = BASE_URL + "/mes-prms/api/private/v2/personnes/%s/prms"; private static final String MEASURE_DAILY_CONSUMPTION_URL = PRM_INFO_BASE_URL + "undefined/prms/%s/donnees-energie?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; @@ -172,19 +168,19 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { return; } - logger.debug("Starting login process for user : {}", lcConfig.username); + logger.debug("Starting login process for user: {}", lcConfig.username); try { enedisApi.addCookie(LinkyConfiguration.INTERNAL_AUTH_ID, lcConfig.internalAuthId); - logger.debug("Step 1 : getting authentification"); - String data = enedisApi.getData(URL_ENEDIS_AUTHENTICATE); + logger.debug("Step 1: getting authentification"); + String data = enedisApi.getContent(URL_ENEDIS_AUTHENTICATE); logger.debug("Reception request SAML"); Document htmlDocument = Jsoup.parse(data); Element el = htmlDocument.select("form").first(); Element samlInput = el.select("input[name=SAMLRequest]").first(); - logger.debug("Step 2 : send SSO SAMLRequest"); + logger.debug("Step 2: send SSO SAMLRequest"); ContentResponse result = httpClient.POST(el.attr("action")) .content(enedisApi.getFormContent("SAMLRequest", samlInput.attr("value"))).send(); if (result.getStatus() != 302) { @@ -203,11 +199,11 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { + reqId + "%26index%3Dnull%26acsURL%3D" + BASE_URL + "/saml/SSO%26spEntityID%3DSP-ODW-PROD%26binding%3Durn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST&AMAuthCookie="; - logger.debug("Step 3 : auth1 - retrieve the template, thanks to cookie internalAuthId user is already set"); + logger.debug("Step 3: auth1 - retrieve the template, thanks to cookie internalAuthId user is already set"); result = httpClient.POST(authenticateUrl).header("X-NoSession", "true").header("X-Password", "anonymous") .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous").send(); if (result.getStatus() != 200) { - throw new LinkyException("Connection failed step 3 - auth1 : %s", result.getContentAsString()); + throw new LinkyException("Connection failed step 3 - auth1: %s", result.getContentAsString()); } AuthData authData = gson.fromJson(result.getContentAsString(), AuthData.class); @@ -219,7 +215,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { } authData.callbacks.get(1).input.get(0).value = lcConfig.password; - logger.debug("Step 4 : auth2 - send the auth data"); + logger.debug("Step 4: auth2 - send the auth data"); result = httpClient.POST(authenticateUrl).header(HttpHeader.CONTENT_TYPE, "application/json") .header("X-NoSession", "true").header("X-Password", "anonymous") .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous") @@ -236,26 +232,28 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { logger.debug("Add the tokenId cookie"); enedisApi.addCookie("enedisExt", authResult.tokenId); - logger.debug("Step 5 : retrieve the SAMLresponse"); - data = enedisApi.getData(URL_MON_COMPTE + "/" + authResult.successUrl); + logger.debug("Step 5: retrieve the SAMLresponse"); + data = enedisApi.getContent(URL_MON_COMPTE + "/" + authResult.successUrl); htmlDocument = Jsoup.parse(data); el = htmlDocument.select("form").first(); samlInput = el.select("input[name=SAMLResponse]").first(); - logger.debug("Step 6 : post the SAMLresponse to finish the authentication"); + logger.debug("Step 6: post the SAMLresponse to finish the authentication"); result = httpClient.POST(el.attr("action")) .content(enedisApi.getFormContent("SAMLResponse", samlInput.attr("value"))).send(); if (result.getStatus() != 302) { throw new LinkyException("Connection failed step 6"); } - logger.debug("Step 7 : retrieve "); + logger.debug("Step 7: retrieve "); result = httpClient.GET(USER_INFO_CONTRACT_URL); - HashMap hashRes = gson.fromJson(result.getContentAsString(), HashMap.class); + @SuppressWarnings("unchecked") + HashMap hashRes = gson.fromJson(result.getContentAsString(), HashMap.class); + String cookieKey; if (hashRes != null && hashRes.containsKey("cnAlex")) { - cookieKey = "personne_for_" + (String) hashRes.get("cnAlex"); + cookieKey = "personne_for_" + hashRes.get("cnAlex"); } else { throw new LinkyException("Connection failed step 7, missing cookieKey"); } @@ -263,12 +261,8 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { List lCookie = httpClient.getCookieStore().getCookies(); Optional cookie = lCookie.stream().filter(it -> it.getName().contains(cookieKey)).findFirst(); - String cookieVal; - if (cookie.isPresent()) { - cookieVal = cookie.get().getValue(); - } else { - throw new LinkyException("Connection failed step 7, missing cookieVal"); - } + String cookieVal = cookie.map(HttpCookie::getValue) + .orElseThrow(() -> new LinkyException("Connection failed step 7, missing cookieVal")); enedisApi.addCookie(cookieKey, cookieVal); @@ -279,27 +273,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { } @Override - public Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException { - try { - WebPrmInfo[] webPrmsInfo = gson.fromJson(data, WebPrmInfo[].class); - if (webPrmsInfo == null || webPrmsInfo.length < 1) { - throw new LinkyException("Invalid prms data received"); - } - return Contracts.fromWebPrmInfos(webPrmsInfo, prmId); - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching PrmInfo[].class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); - } - } - - @Override - public IdentityInfo decodeIdentityResponse(String data, String prmId) throws LinkyException { - try { - WebUserInfo webUserInfo = gson.fromJson(data, WebUserInfo.class); - return IdentityInfo.fromWebUserInfo(webUserInfo); - } catch (JsonSyntaxException e) { - logger.debug("invalid JSON response not matching UserInfo.class: {}", data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response"); - } + public boolean supportNewApiFormat() { + return false; } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index a95b515859c..952ae3de37d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -29,8 +29,6 @@ import org.openhab.binding.linky.internal.LinkyBindingConstants; import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; -import org.openhab.binding.linky.internal.dto.Contracts; -import org.openhab.binding.linky.internal.dto.IdentityInfo; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.io.net.http.TrustAllTrustManager; @@ -71,6 +69,7 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { protected boolean connected = false; private static final int REQUEST_BUFFER_SIZE = 8000; + private static final int RESPONSE_BUFFER_SIZE = 200000; private List registeredPrmId = new ArrayList<>(); @@ -99,6 +98,7 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); this.httpClient.setFollowRedirects(false); this.httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); + this.httpClient.setResponseBufferSize(RESPONSE_BUFFER_SIZE); try { httpClient.start(); @@ -198,7 +198,5 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { public abstract DateTimeFormatter getApiDateFormatYearsFirst(); - public abstract Contracts decodeCustomerResponse(String data, String prmId) throws LinkyException; - - public abstract IdentityInfo decodeIdentityResponse(String data, String prmId) throws LinkyException; + public abstract boolean supportNewApiFormat(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 2a342623830..c92f6912bcf 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -38,16 +38,23 @@ import org.openhab.binding.linky.internal.LinkyConfiguration; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.api.EnedisHttpApi; import org.openhab.binding.linky.internal.api.ExpiringDayCache; +import org.openhab.binding.linky.internal.dto.Contact; +import org.openhab.binding.linky.internal.dto.Contract; +import org.openhab.binding.linky.internal.dto.Identity; import org.openhab.binding.linky.internal.dto.IntervalReading; import org.openhab.binding.linky.internal.dto.MeterReading; +import org.openhab.binding.linky.internal.dto.PrmDetail; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.binding.linky.internal.dto.TempoResponse; +import org.openhab.binding.linky.internal.dto.ResponseTempo; +import org.openhab.binding.linky.internal.dto.UsagePoint; +import org.openhab.binding.linky.internal.dto.UserInfo; import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.library.types.DateTimeType; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; +import org.openhab.core.library.unit.MetricPrefix; import org.openhab.core.library.unit.Units; import org.openhab.core.thing.Bridge; import org.openhab.core.thing.ChannelUID; @@ -85,7 +92,7 @@ public class LinkyHandler extends BaseThingHandler { private final ExpiringDayCache dailyConsumption; private final ExpiringDayCache dailyConsumptionMaxPower; private final ExpiringDayCache loadCurveConsumption; - private final ExpiringDayCache tempoInformation; + private final ExpiringDayCache tempoInformation; private @Nullable ScheduledFuture refreshJob; private LinkyConfiguration config; @@ -140,7 +147,7 @@ public class LinkyHandler extends BaseThingHandler { this.tempoInformation = new ExpiringDayCache<>("tempoInformation", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); - TempoResponse tempoData = getTempoData(today.minusDays(1095), today.plusDays(1)); + ResponseTempo tempoData = getTempoData(today.minusDays(1095), today.plusDays(1)); return tempoData; }); @@ -183,6 +190,20 @@ public class LinkyHandler extends BaseThingHandler { } } + public boolean supportNewApiFormat() throws LinkyException { + Bridge bridge = getBridge(); + if (bridge == null) { + throw new LinkyException("Unable to get bridge in supportNewApiFormat()"); + } + + LinkyBridgeHandler bridgeHandler = (LinkyBridgeHandler) bridge.getHandler(); + if (bridgeHandler == null) { + throw new LinkyException("Unable to get bridgeHandler in supportNewApiFormat()"); + } + + return bridgeHandler.supportNewApiFormat(); + } + private void pollingCode() { try { EnedisHttpApi api = this.enedisApi; @@ -195,11 +216,35 @@ public class LinkyHandler extends BaseThingHandler { return; } - PrmInfo prmInfo = api.getPrmInfo(this, config.prmId); - updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, - PRM_ID, prmInfo.prmId)); + if (supportNewApiFormat()) { + Identity identity = api.getIdentity(this, config.prmId); + Contact contact = api.getContact(this, config.prmId); + Contract contract = api.getContract(this, config.prmId); + UsagePoint usagePoint = api.getUsagePoint(this, config.prmId); + + updateMetaData(identity, contact, contract, usagePoint); + + updateProperties( + Map.of(USER_ID, "", PUISSANCE, contract.subscribedPower, PRM_ID, usagePoint.usagePointId)); + + } else { + UserInfo userInfo = api.getUserInfo(this); + PrmInfo prmInfo = api.getPrmInfo(this, userInfo.userProperties.internId, config.prmId); + PrmDetail details = api.getPrmDetails(this, userInfo.userProperties.internId, prmInfo.idPrm); + + Identity identity = Identity.convertFromUserInfo(userInfo); + Contact contact = Contact.convertFromUserInfo(userInfo); + Contract contract = Contract.convertFromPrmDetail(details); + UsagePoint usagePoint = UsagePoint.convertFromPrmDetail(details); + + updateMetaData(identity, contact, contract, usagePoint); + + updateProperties(Map.of(USER_ID, userInfo.userProperties.internId, PUISSANCE, + details.situationContractuelleDtos[0].structureTarifaire().puissanceSouscrite().valeur() + + " kVA", + PRM_ID, prmInfo.idPrm)); + } - updateMetaData(); updateData(); disconnect(); @@ -229,53 +274,44 @@ public class LinkyHandler extends BaseThingHandler { return config; } - private synchronized void updateMetaData() { + private synchronized void updateMetaData(Identity identity, Contact contact, Contract contract, + UsagePoint usagePoint) { EnedisHttpApi api = this.enedisApi; - if (api != null) { - try { - PrmInfo info = api.getPrmInfo(this, config.prmId); - String title = info.identityInfo.title; - String firstName = info.identityInfo.firstname; - String lastName = info.identityInfo.lastname; + String title = identity.title; + String firstName = identity.firstname; + String lastName = identity.lastname; - updateState(MAIN_GROUP, MAIN_IDENTITY, new StringType(title + " " + firstName + " " + lastName)); + updateState(MAIN_GROUP, MAIN_IDENTITY, new StringType(title + " " + firstName + " " + lastName)); - updateState(MAIN_GROUP, MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); - updateState(MAIN_GROUP, MAIN_CONTRACT_CONTRACT_STATUS, - new StringType(info.contractInfo.contractStatus)); - updateState(MAIN_GROUP, MAIN_CONTRACT_CONTRACT_TYPE, new StringType(info.contractInfo.contractType)); - updateState(MAIN_GROUP, MAIN_CONTRACT_DISTRIBUTION_TARIFF, - new StringType(info.contractInfo.distributionTariff)); - updateState(MAIN_GROUP, MAIN_CONTRACT_LAST_ACTIVATION_DATE, - new StringType(info.contractInfo.lastActivationDate)); - updateState(MAIN_GROUP, MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE, - new StringType(info.contractInfo.lastDistributionTariffChangeDate)); - updateState(MAIN_GROUP, MAIN_CONTRACT_OFF_PEAK_HOURS, new StringType(info.contractInfo.offpeakHours)); - updateState(MAIN_GROUP, MAIN_CONTRACT_SEGMENT, new StringType(info.contractInfo.segment)); - updateState(MAIN_GROUP, MAIN_CONTRACT_SUBSCRIBED_POWER, - new StringType(info.contractInfo.subscribedPower)); + updateState(MAIN_GROUP, MAIN_CONTRACT_SEGMENT, new StringType(contract.segment)); + updateState(MAIN_GROUP, MAIN_CONTRACT_CONTRACT_STATUS, new StringType(contract.contractStatus)); + updateState(MAIN_GROUP, MAIN_CONTRACT_CONTRACT_TYPE, new StringType(contract.contractType)); + updateState(MAIN_GROUP, MAIN_CONTRACT_DISTRIBUTION_TARIFF, new StringType(contract.distributionTariff)); + updateState(MAIN_GROUP, MAIN_CONTRACT_LAST_ACTIVATION_DATE, new StringType(contract.lastActivationDate)); + updateState(MAIN_GROUP, MAIN_CONTRACT_LAST_DISTRIBUTION_TARIFF_CHANGE_DATE, + new StringType(contract.lastDistributionTariffChangeDate)); + updateState(MAIN_GROUP, MAIN_CONTRACT_OFF_PEAK_HOURS, new StringType(contract.offpeakHours)); + updateState(MAIN_GROUP, MAIN_CONTRACT_SEGMENT, new StringType(contract.segment)); + updateState(MAIN_GROUP, MAIN_CONTRACT_SUBSCRIBED_POWER, new StringType(contract.subscribedPower)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_ID, new StringType(info.usagePointInfo.usagePointId)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_STATUS, new StringType(info.usagePointInfo.usagePointStatus)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_TYPE, new StringType(info.usagePointInfo.meterType)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_ID, new StringType(usagePoint.usagePointId)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_STATUS, new StringType(usagePoint.usagePointStatus)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_TYPE, new StringType(usagePoint.meterType)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_CITY, new StringType(info.addressInfo.city)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY, - new StringType(info.addressInfo.country)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE, - new StringType(info.addressInfo.postalCode)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE, - new StringType(info.addressInfo.inseeCode)); - updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_STREET, new StringType(info.addressInfo.street)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_CITY, + new StringType(usagePoint.usagePointAddresses.city)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_COUNTRY, + new StringType(usagePoint.usagePointAddresses.country)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_POSTAL_CODE, + new StringType(usagePoint.usagePointAddresses.postalCode)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_INSEE_CODE, + new StringType(usagePoint.usagePointAddresses.inseeCode)); + updateState(MAIN_GROUP, MAIN_USAGEPOINT_METER_ADDRESS_STREET, + new StringType(usagePoint.usagePointAddresses.street)); - updateState(MAIN_GROUP, MAIN_CONTACT_MAIL, new StringType(info.contactInfo.email)); - updateState(MAIN_GROUP, MAIN_CONTACT_PHONE, new StringType(info.contactInfo.phone)); - } catch (LinkyException e) { - logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); - } - } + updateState(MAIN_GROUP, MAIN_CONTACT_MAIL, new StringType(contact.email)); + updateState(MAIN_GROUP, MAIN_CONTACT_PHONE, new StringType(contact.phone)); } /** @@ -285,9 +321,9 @@ public class LinkyHandler extends BaseThingHandler { boolean connectedBefore = isConnected(); updateEnergyData(); - updatePowerData(); + // updatePowerData(); updateTempoTimeSeries(); - updateLoadCurveData(); + // updateLoadCurveData(); if (!connectedBefore && isConnected()) { disconnect(); @@ -344,15 +380,15 @@ public class LinkyHandler extends BaseThingHandler { dailyConsumptionMaxPower.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - updateVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value); + updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_1, new DateTimeType(values.dayValue[dSize - 1].date.atZone(ZoneId.systemDefault()))); - updateVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value); + updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_2, new DateTimeType(values.dayValue[dSize - 2].date.atZone(ZoneId.systemDefault()))); - updateVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value); + updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_3, new DateTimeType(values.dayValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); @@ -474,10 +510,10 @@ public class LinkyHandler extends BaseThingHandler { Double.isNaN(consumption) ? UnDefType.UNDEF : new QuantityType<>(consumption, Units.KILOWATT_HOUR)); } - private void updateVAChannel(String groupId, String channelId, double power) { + private void updatekVAChannel(String groupId, String channelId, double power) { logger.debug("Update channel {} with {}", channelId, power); - updateState(groupId, channelId, - Double.isNaN(power) ? UnDefType.UNDEF : new QuantityType<>(power, Units.VOLT_AMPERE)); + updateState(groupId, channelId, Double.isNaN(power) ? UnDefType.UNDEF + : new QuantityType<>(power, MetricPrefix.KILO(Units.VOLT_AMPERE))); } private void updateTempoChannel(String groupId, String channelId, int tempoValue) { @@ -603,13 +639,13 @@ public class LinkyHandler extends BaseThingHandler { return null; } - private @Nullable TempoResponse getTempoData(LocalDate from, LocalDate to) { + private @Nullable ResponseTempo getTempoData(LocalDate from, LocalDate to) { logger.debug("getTempoData from"); EnedisHttpApi api = this.enedisApi; if (api != null) { try { - TempoResponse result = api.getTempoData(this, from, to); + ResponseTempo result = api.getTempoData(this, from, to); return result; } catch (LinkyException e) { logger.debug("Exception when getting power data: {}", e.getMessage(), e); @@ -658,9 +694,9 @@ public class LinkyHandler extends BaseThingHandler { boolean connectedBefore = isConnected(); updateEnergyData(); - updatePowerData(); + // updatePowerData(); updateTempoTimeSeries(); - updateLoadCurveData(); + // updateLoadCurveData(); if (!connectedBefore && isConnected()) { disconnect(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 1a225273da6..12459acfd0d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -112,7 +112,7 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { if (enedisApi == null) { return ""; } - String token = enedisApi.getData(url); + String token = enedisApi.getContent(url); logger.debug("token: {}", token); From c82b9fe84ebc1eb39c705b8cd2018db0735485c4 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sun, 10 Nov 2024 12:25:08 +0100 Subject: [PATCH 102/135] div fixes Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/api/EnedisHttpApi.java | 2 -- .../binding/linky/internal/dto/PrmDetail.java | 3 ++- .../linky/internal/handler/LinkyHandler.java | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 658f2b0ce2a..759ddb0e6dd 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -18,8 +18,6 @@ import java.util.Objects; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; -import javax.ws.rs.core.MediaType; - import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java index 76f5aa56297..fe87beb9dda 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java @@ -21,6 +21,7 @@ import java.util.ArrayList; */ public class PrmDetail { public record Adresse(String ligne2, String ligne3, String ligne4, String ligne5, String ligne6) { + } public record DicEntry(String code, String libelle) { @@ -77,4 +78,4 @@ public class PrmDetail { public SituationContractuelleDto[] situationContractuelleDtos; public SituationAlimentationDto situationAlimentationDto; public SituationComptageDto situationComptageDto; -} +} \ No newline at end of file diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index c92f6912bcf..4e5c28ad76e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -409,6 +409,21 @@ public class LinkyHandler extends BaseThingHandler { }); } + /* + * private void setCurrentAndPrevious(Aggregate periods, String currentChannel, String previousChannel) { + * double currentValue = 0.0; + * double previousValue = 0.0; + * if (!periods.datas.isEmpty()) { + * currentValue = periods.datas.get(periods.datas.size() - 1); + * if (periods.datas.size() > 1) { + * previousValue = periods.datas.get(periods.datas.size() - 2); + * } + * } + * updateKwhChannel(currentChannel, currentValue); + * updateKwhChannel(previousChannel, previousValue); + * } + */ + /** * Request new daily/weekly data and updates channels */ From a4593f88f0059933e339e250a755c5a6e63a0094 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 11 Nov 2024 09:36:23 +0100 Subject: [PATCH 103/135] spotless::apply Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/api/EnedisHttpApi.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/Contract.java | 1 - .../java/org/openhab/binding/linky/internal/dto/PrmDetail.java | 2 +- .../openhab/binding/linky/internal/dto/ResponseIdentity.java | 1 - .../java/org/openhab/binding/linky/internal/dto/UsagePoint.java | 1 - .../binding/linky/internal/handler/EnedisBridgeHandler.java | 1 - 6 files changed, 2 insertions(+), 6 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 759ddb0e6dd..6dbd9cceb9e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -34,8 +34,8 @@ import org.openhab.binding.linky.internal.dto.Identity; import org.openhab.binding.linky.internal.dto.MeterReading; import org.openhab.binding.linky.internal.dto.PrmDetail; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.binding.linky.internal.dto.ResponseContract; import org.openhab.binding.linky.internal.dto.ResponseContact; +import org.openhab.binding.linky.internal.dto.ResponseContract; import org.openhab.binding.linky.internal.dto.ResponseIdentity; import org.openhab.binding.linky.internal.dto.ResponseMeter; import org.openhab.binding.linky.internal.dto.ResponseTempo; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java index 490b190bce9..08e650f866f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java @@ -62,5 +62,4 @@ public class Contract { return result; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java index fe87beb9dda..7df3627151c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java @@ -78,4 +78,4 @@ public class PrmDetail { public SituationContractuelleDto[] situationContractuelleDtos; public SituationAlimentationDto situationAlimentationDto; public SituationComptageDto situationComptageDto; -} \ No newline at end of file +} diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java index 6f3b85f631e..1d08bfcf089 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java @@ -32,5 +32,4 @@ public class ResponseIdentity { @SerializedName("natural_person") public Identity naturalPerson; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index d8ae2324c5d..806435f47f9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -66,5 +66,4 @@ public class UsagePoint { return result; } - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 957764ff0be..8b5c6e9bb67 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -182,5 +182,4 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { public DateTimeFormatter getApiDateFormatYearsFirst() { return API_DATE_FORMAT_YEAR_FIRST; } - } From f66858704f01c1a5f29e0cf71f01586a6003a494 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 11 Nov 2024 10:56:08 +0100 Subject: [PATCH 104/135] fix on time series for current value Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/handler/LinkyHandler.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 4e5c28ad76e..50ef4326573 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -321,9 +321,9 @@ public class LinkyHandler extends BaseThingHandler { boolean connectedBefore = isConnected(); updateEnergyData(); - // updatePowerData(); + updatePowerData(); updateTempoTimeSeries(); - // updateLoadCurveData(); + updateLoadCurveData(); if (!connectedBefore && isConnected()) { disconnect(); @@ -516,7 +516,7 @@ public class LinkyHandler extends BaseThingHandler { } sendTimeSeries(groupId, channelId, timeSeries); - // updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); + updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); } private void updateKwhChannel(String groupId, String channelId, double consumption) { @@ -708,10 +708,7 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("Refreshing channel {}", channelUID.getId()); boolean connectedBefore = isConnected(); - updateEnergyData(); - // updatePowerData(); - updateTempoTimeSeries(); - // updateLoadCurveData(); + updateData(); if (!connectedBefore && isConnected()) { disconnect(); From 2a09d0c1a4649250e1b6715728eaffccb571e37e Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 11 Nov 2024 11:02:24 +0100 Subject: [PATCH 105/135] fix tempo channel update : missing groupId Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/handler/LinkyHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 50ef4326573..186909cd319 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -533,7 +533,7 @@ public class LinkyHandler extends BaseThingHandler { private void updateTempoChannel(String groupId, String channelId, int tempoValue) { logger.debug("Update channel {} with {}", channelId, tempoValue); - updateState(channelId, new DecimalType(tempoValue)); + updateState(groupId + "#" + channelId, new DecimalType(tempoValue)); } protected void updateState(String groupId, String channelID, State state) { From d5e3a00df3bda3da9c899a7159e824894f10279f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 11 Nov 2024 12:15:04 +0100 Subject: [PATCH 106/135] review expose contract information with WebBridge Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/api/EnedisHttpApi.java | 3 +++ .../openhab/binding/linky/internal/dto/Contract.java | 6 ++++-- .../openhab/binding/linky/internal/dto/UsagePoint.java | 10 +++++----- .../binding/linky/internal/handler/LinkyHandler.java | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 6dbd9cceb9e..d421eaf4608 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -194,6 +194,9 @@ public class EnedisHttpApi { public Identity getIdentity(LinkyHandler handler, String prmId) throws LinkyException { String identityUrl = linkyBridgeHandler.getIdentityUrl().formatted(prmId); ResponseIdentity customerIdReponse = getData(handler, identityUrl, ResponseIdentity.class); + String name = customerIdReponse.identity.naturalPerson.lastname; + customerIdReponse.identity.naturalPerson.firstname = name.split(" ")[0]; + customerIdReponse.identity.naturalPerson.lastname = name.split(" ")[1]; return customerIdReponse.identity.naturalPerson; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java index 08e650f866f..5b63126f469 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java @@ -53,11 +53,13 @@ public class Contract { result.subscribedPower = prmDetail.situationContractuelleDtos[0].structureTarifaire().puissanceSouscrite() .valeur(); result.lastActivationDate = ""; - result.distributionTariff = ""; + result.distributionTariff = prmDetail.situationContractuelleDtos[0].structureTarifaire().grilleFournisseur() + .calendrier().libelle(); result.offpeakHours = ""; result.contractStatus = prmDetail.situationContractuelleDtos[0].informationsContractuelles().etatContractuel() .code(); - result.contractType = ""; + result.contractType = prmDetail.situationContractuelleDtos[0].informationsContractuelles().contrat() + .typeContrat().libelle(); result.lastDistributionTariffChangeDate = ""; return result; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index 806435f47f9..5fdc9f78cea 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -49,18 +49,18 @@ public class UsagePoint { public String country; } - public static UsagePoint convertFromPrmDetail(PrmDetail prmDetail) { + public static UsagePoint convertFromPrmDetail(PrmInfo prmInfo, PrmDetail prmDetail) { UsagePoint result = new UsagePoint(); - result.usagePointId = ""; - result.usagePointStatus = ""; + result.usagePointId = prmInfo.idPrm; + result.usagePointStatus = prmDetail.syntheseContractuelleDto.niveauOuvertureServices().libelle(); result.meterType = prmDetail.situationComptageDto.dispositifComptage().typeComptage().code(); result.usagePointAddresses = result.new AddressInfo(); result.usagePointAddresses.street = prmDetail.adresse.ligne4(); result.usagePointAddresses.locality = prmDetail.adresse.ligne6(); - result.usagePointAddresses.city = prmDetail.adresse.ligne6(); - result.usagePointAddresses.postalCode = prmDetail.adresse.ligne6(); + result.usagePointAddresses.city = prmDetail.adresse.ligne6().split(" ")[1]; + result.usagePointAddresses.postalCode = prmDetail.adresse.ligne6().split(" ")[0]; result.usagePointAddresses.inseeCode = ""; result.usagePointAddresses.country = ""; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 186909cd319..54cb0eb6507 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -235,7 +235,7 @@ public class LinkyHandler extends BaseThingHandler { Identity identity = Identity.convertFromUserInfo(userInfo); Contact contact = Contact.convertFromUserInfo(userInfo); Contract contract = Contract.convertFromPrmDetail(details); - UsagePoint usagePoint = UsagePoint.convertFromPrmDetail(details); + UsagePoint usagePoint = UsagePoint.convertFromPrmDetail(prmInfo, details); updateMetaData(identity, contact, contract, usagePoint); From 74ed4a89a6859a1dab75803c667fb791d84f3cdb Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Mon, 11 Nov 2024 14:58:11 +0100 Subject: [PATCH 107/135] backport some change from main branch Signed-off-by: Laurent ARNAL --- .../internal/handler/EnedisWebBridgeHandler.java | 13 ++++++++----- .../linky/internal/handler/LinkyHandler.java | 15 --------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index c3ba8fcfe44..c0b12f97650 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -24,10 +24,13 @@ import java.util.concurrent.TimeoutException; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.ws.rs.core.MediaType; + import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.util.StringContentProvider; import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.http.HttpStatus; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -183,7 +186,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { logger.debug("Step 2: send SSO SAMLRequest"); ContentResponse result = httpClient.POST(el.attr("action")) .content(enedisApi.getFormContent("SAMLRequest", samlInput.attr("value"))).send(); - if (result.getStatus() != 302) { + if (result.getStatus() != HttpStatus.FOUND_302) { throw new LinkyException("Connection failed step 2"); } @@ -202,7 +205,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { logger.debug("Step 3: auth1 - retrieve the template, thanks to cookie internalAuthId user is already set"); result = httpClient.POST(authenticateUrl).header("X-NoSession", "true").header("X-Password", "anonymous") .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous").send(); - if (result.getStatus() != 200) { + if (result.getStatus() != HttpStatus.OK_200) { throw new LinkyException("Connection failed step 3 - auth1: %s", result.getContentAsString()); } @@ -216,11 +219,11 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { authData.callbacks.get(1).input.get(0).value = lcConfig.password; logger.debug("Step 4: auth2 - send the auth data"); - result = httpClient.POST(authenticateUrl).header(HttpHeader.CONTENT_TYPE, "application/json") + result = httpClient.POST(authenticateUrl).header(HttpHeader.CONTENT_TYPE, MediaType.APPLICATION_JSON) .header("X-NoSession", "true").header("X-Password", "anonymous") .header("X-Requested-With", "XMLHttpRequest").header("X-Username", "anonymous") .content(new StringContentProvider(gson.toJson(authData))).send(); - if (result.getStatus() != 200) { + if (result.getStatus() != HttpStatus.OK_200) { throw new LinkyException("Connection failed step 3 - auth2 : %s", result.getContentAsString()); } @@ -241,7 +244,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { logger.debug("Step 6: post the SAMLresponse to finish the authentication"); result = httpClient.POST(el.attr("action")) .content(enedisApi.getFormContent("SAMLResponse", samlInput.attr("value"))).send(); - if (result.getStatus() != 302) { + if (result.getStatus() != HttpStatus.FOUND_302) { throw new LinkyException("Connection failed step 6"); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 54cb0eb6507..9266673ca82 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -409,21 +409,6 @@ public class LinkyHandler extends BaseThingHandler { }); } - /* - * private void setCurrentAndPrevious(Aggregate periods, String currentChannel, String previousChannel) { - * double currentValue = 0.0; - * double previousValue = 0.0; - * if (!periods.datas.isEmpty()) { - * currentValue = periods.datas.get(periods.datas.size() - 1); - * if (periods.datas.size() > 1) { - * previousValue = periods.datas.get(periods.datas.size() - 2); - * } - * } - * updateKwhChannel(currentChannel, currentValue); - * updateKwhChannel(previousChannel, previousValue); - * } - */ - /** * Request new daily/weekly data and updates channels */ From 479a0c739497fa910a8641038e314bb3150a600f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 21 Nov 2024 08:56:09 +0100 Subject: [PATCH 108/135] fix url for getting prms infos : mes-prms-part/api/private/v2/personnes/MPS172TIB/prms Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/handler/EnedisWebBridgeHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index c0b12f97650..e52a1bded75 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -72,7 +72,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { private static final String USER_INFO_CONTRACT_URL = BASE_URL + "/mon-compte-client/api/private/v1/userinfos"; private static final String USER_INFO_URL = BASE_URL + "/userinfos"; private static final String PRM_INFO_BASE_URL = BASE_URL + "/mes-mesures/api/private/v1/personnes/"; - private static final String PRM_INFO_URL = BASE_URL + "/mes-prms/api/private/v2/personnes/%s/prms"; + private static final String PRM_INFO_URL = BASE_URL + "/mes-prms-part/api/private/v2/personnes/%s/prms"; private static final String MEASURE_DAILY_CONSUMPTION_URL = PRM_INFO_BASE_URL + "undefined/prms/%s/donnees-energie?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; From bb39f57827fc42445ecec27e934b3179ad01742c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 21 Nov 2024 09:22:59 +0100 Subject: [PATCH 109/135] fix getting PrmInfo on EnedisWebGateway in case of multiple PRM for a same account Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/api/EnedisHttpApi.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index d421eaf4608..f35dc81fb97 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -14,7 +14,9 @@ package org.openhab.binding.linky.internal.api; import java.net.HttpCookie; import java.time.LocalDate; +import java.util.Arrays; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; @@ -160,7 +162,13 @@ public class EnedisHttpApi { if (prms.length < 1) { throw new LinkyException("Invalid prms data received"); } - return prms[0]; + + Optional result = Arrays.stream(prms).filter(x -> x.idPrm.equals(prmId)).findFirst(); + if (result.isPresent()) { + return result.get(); + } + + throw new LinkyException(("PRM with id : %s does not exist").formatted(prmId)); } public PrmDetail getPrmDetails(LinkyHandler handler, String internId, String prmId) throws LinkyException { From 9e0f5fe3e79e903b6bd37f68b2805921267369a9 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 21 Nov 2024 09:29:25 +0100 Subject: [PATCH 110/135] fix getIndentity for myElectricalData Bridge Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/api/EnedisHttpApi.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index f35dc81fb97..207efc73629 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -203,8 +203,11 @@ public class EnedisHttpApi { String identityUrl = linkyBridgeHandler.getIdentityUrl().formatted(prmId); ResponseIdentity customerIdReponse = getData(handler, identityUrl, ResponseIdentity.class); String name = customerIdReponse.identity.naturalPerson.lastname; - customerIdReponse.identity.naturalPerson.firstname = name.split(" ")[0]; - customerIdReponse.identity.naturalPerson.lastname = name.split(" ")[1]; + String[] nameParts = name.split(" "); + if (nameParts.length > 1) { + customerIdReponse.identity.naturalPerson.firstname = name.split(" ")[0]; + customerIdReponse.identity.naturalPerson.lastname = name.split(" ")[1]; + } return customerIdReponse.identity.naturalPerson; } From 61e68315868a979dce88d85c4def261a16e27f6f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 21 Nov 2024 10:26:45 +0100 Subject: [PATCH 111/135] Refactor EnedisBridge to enable toggling between preprod / prod environment Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyConfiguration.java | 1 + .../internal/handler/ApiBridgeHandler.java | 2 + .../internal/handler/EnedisBridgeHandler.java | 72 ++++++++++++------- .../MyElectricalDataBridgeHandler.java | 5 ++ .../resources/OH-INF/thing/thing-types.xml | 5 ++ 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java index 15de2ca1e26..fa967723928 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java @@ -29,6 +29,7 @@ public class LinkyConfiguration { public String prmId = ""; public String clientId = ""; public String clientSecret = ""; + public boolean isSandbox = false; public String username = ""; public String password = ""; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index b6bbd985c86..1b7295727d5 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -83,6 +83,8 @@ public abstract class ApiBridgeHandler extends LinkyBridgeHandler { public abstract String getClientSecret(); + public abstract boolean getIsSandbox(); + private void registerServlet() { try { if (servlet == null) { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 8b5c6e9bb67..9b40f8f108e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -39,26 +39,23 @@ import com.google.gson.Gson; public class EnedisBridgeHandler extends ApiBridgeHandler { private final Logger logger = LoggerFactory.getLogger(EnedisBridgeHandler.class); - // private static final String BASE_URL = "https://gw.ext.prod-sandbox.api.enedis.fr/"; - // public static final String ENEDIS_ACCOUNT_URL = "gw.ext.prod-sandbox.api.enedis.fr"; - private static final String BASE_URL = "https://gw.ext.prod.api.enedis.fr/"; - public static final String ENEDIS_ACCOUNT_URL = "https://mon-compte-particulier.enedis.fr/"; + private static final String BASE_URL_PREPROD = "https://gw.ext.prod-sandbox.api.enedis.fr/"; + private static final String ENEDIS_ACCOUNT_URL_PREPROD = "gw.ext.prod-sandbox.api.enedis.fr"; - private static final String CONTRACT_URL = BASE_URL + "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; - private static final String IDENTITY_URL = BASE_URL + "customers_i/v5/identity?usage_point_id=%s"; - private static final String CONTACT_URL = BASE_URL + "customers_cd/v5/contact_data?usage_point_id=%s"; - private static final String ADDRESS_URL = BASE_URL + "customers_upa/v5/usage_points/addresses?usage_point_id=%s"; + private static final String BASE_URL_PROD = "https://gw.ext.prod.api.enedis.fr/"; + private static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; - private static final String MEASURE_DAILY_CONSUMPTION_URL = BASE_URL - + "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; - private static final String MEASURE_MAX_POWER_URL = BASE_URL - + "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; - private static final String LOAD_CURVE_CONSUMPTION_URL = BASE_URL - + "metering_data_clc/v5/consumption_load_curve?usage_point_id=%s&start=%s&end=%s"; + private static final String CONTRACT_URL = "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; + private static final String IDENTITY_URL = "customers_i/v5/identity?usage_point_id=%s"; + private static final String CONTACT_URL = "customers_cd/v5/contact_data?usage_point_id=%s"; + private static final String ADDRESS_URL = "customers_upa/v5/usage_points/addresses?usage_point_id=%s"; - public static final String ENEDIS_AUTHORIZE_URL = ENEDIS_ACCOUNT_URL - + "dataconnect/v1/oauth2/authorize?duration=P36M"; - public static final String ENEDIS_API_TOKEN_URL = BASE_URL + "oauth2/v3/token"; + private static final String MEASURE_DAILY_CONSUMPTION_URL = "metering_data_dc/v5/daily_consumption?usage_point_id=%s&start=%s&end=%s"; + private static final String MEASURE_MAX_POWER_URL = "metering_data_dcmp/v5/daily_consumption_max_power?usage_point_id=%s&start=%s&end=%s"; + private static final String LOAD_CURVE_CONSUMPTION_URL = "metering_data_clc/v5/consumption_load_curve?usage_point_id=%s&start=%s&end=%s"; + + public static final String ENEDIS_AUTHORIZE_URL = "dataconnect/v1/oauth2/authorize?duration=P36M"; + public static final String ENEDIS_API_TOKEN_URL = "oauth2/v3/token"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -74,12 +71,20 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public void initialize() { - tokenUrl = EnedisBridgeHandler.ENEDIS_API_TOKEN_URL; - authorizeUrl = EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; + tokenUrl = getBaseUrl() + EnedisBridgeHandler.ENEDIS_API_TOKEN_URL; + authorizeUrl = getAccountUrl() + EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; super.initialize(); } + public String getAccountUrl() { + if (getIsSandbox()) { + return ENEDIS_ACCOUNT_URL_PREPROD; + } else { + return ENEDIS_ACCOUNT_URL_PROD; + } + } + @Override public String getClientId() { LinkyConfiguration lcConfig = config; @@ -98,6 +103,15 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { return ""; } + @Override + public boolean getIsSandbox() { + LinkyConfiguration lcConfig = config; + if (lcConfig != null) { + return lcConfig.isSandbox; + } + return false; + } + @Override public void dispose() { logger.debug("Shutting down Enedis bridge handler."); @@ -130,42 +144,46 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public String getBaseUrl() { - return BASE_URL; + if (getIsSandbox()) { + return BASE_URL_PREPROD; + } else { + return BASE_URL_PROD; + } } @Override public String getContactUrl() { - return CONTACT_URL; + return getBaseUrl() + CONTACT_URL; } @Override public String getContractUrl() { - return CONTRACT_URL; + return getBaseUrl() + CONTRACT_URL; } @Override public String getIdentityUrl() { - return IDENTITY_URL; + return getBaseUrl() + IDENTITY_URL; } @Override public String getAddressUrl() { - return ADDRESS_URL; + return getBaseUrl() + ADDRESS_URL; } @Override public String getDailyConsumptionUrl() { - return MEASURE_DAILY_CONSUMPTION_URL; + return getBaseUrl() + MEASURE_DAILY_CONSUMPTION_URL; } @Override public String getMaxPowerUrl() { - return MEASURE_MAX_POWER_URL; + return getBaseUrl() + MEASURE_MAX_POWER_URL; } @Override public String getLoadCurveUrl() { - return LOAD_CURVE_CONSUMPTION_URL; + return getBaseUrl() + LOAD_CURVE_CONSUMPTION_URL; } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index 12459acfd0d..e2078f38b0f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -98,6 +98,11 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { public String getClientSecret() { return ""; } + + @Override + public boolean getIsSandbox() { + return false; + } @Override public String formatAuthorizationUrl(String redirectUri) { diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 60f0b597adc..b1534ee5e3b 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -21,6 +21,11 @@ Your Enedis clientSecret + + + To test on the sandbox environment + true + From 18265b0f0da513a9561f4cc5d9ff08b9e5137678 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Thu, 21 Nov 2024 10:42:06 +0100 Subject: [PATCH 112/135] div fixes for customer registration journey with myelectricaldata bridge Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/LinkyAuthServlet.java | 2 +- .../binding/linky/internal/handler/EnedisBridgeHandler.java | 2 +- .../internal/handler/MyElectricalDataBridgeHandler.java | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index f97ed9aace5..d04e0fa432a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -146,7 +146,7 @@ public class LinkyAuthServlet extends HttpServlet { } else if (servletBaseUrl.contains("myelectricaldata")) { template = myelectricaldataStep1; } else { - template = enedisStep1; + template = index; } // for some unknown reason, getRequestURL return a malformed URL mixing http:// and port 443 diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 9b40f8f108e..1a54ca8b58f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -43,7 +43,7 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { private static final String ENEDIS_ACCOUNT_URL_PREPROD = "gw.ext.prod-sandbox.api.enedis.fr"; private static final String BASE_URL_PROD = "https://gw.ext.prod.api.enedis.fr/"; - private static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; + public static final String ENEDIS_ACCOUNT_URL_PROD = "https://mon-compte-particulier.enedis.fr/"; private static final String CONTRACT_URL = "customers_upc/v5/usage_points/contracts?usage_point_id=%s"; private static final String IDENTITY_URL = "customers_i/v5/identity?usage_point_id=%s"; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index e2078f38b0f..d8fc1d6b681 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -57,7 +57,8 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { // List of Linky services related urls, information public static final String LINKY_MYELECTRICALDATA_ACCOUNT_URL = "https://www.myelectricaldata.fr/"; - public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; + public static final String LINKY_MYELECTRICALDATA_AUTHORIZE_URL = EnedisBridgeHandler.ENEDIS_ACCOUNT_URL_PROD + + EnedisBridgeHandler.ENEDIS_AUTHORIZE_URL; public static final String LINKY_MYELECTRICALDATA_API_TOKEN_URL = LINKY_MYELECTRICALDATA_ACCOUNT_URL + "v1/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=na&user_type=na&state=na&person_id=-1&usage_points_id=%s"; @@ -98,7 +99,7 @@ public class MyElectricalDataBridgeHandler extends ApiBridgeHandler { public String getClientSecret() { return ""; } - + @Override public boolean getIsSandbox() { return false; From 0ebdee853ac76f887b02663b0befd7442ffaeba8 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 17 Dec 2024 12:52:25 +0100 Subject: [PATCH 113/135] backport some missed mods during rebasing process Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 1 + .../linky/internal/handler/LinkyHandler.java | 54 ++----------------- 2 files changed, 5 insertions(+), 50 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 207efc73629..a2690f7d94f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -129,6 +129,7 @@ public class EnedisHttpApi { if (result.getStatus() != 200) { throw new LinkyException("Error requesting '%s': %s", url, result.getContentAsString()); } + String content = result.getContentAsString(); logger.trace("getContent returned {}", content); return content; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 9266673ca82..499ac134811 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -116,13 +116,10 @@ public class LinkyHandler extends BaseThingHandler { LocalDate today = LocalDate.now(); MeterReading meterReading = getConsumptionData(today.minusDays(1095), today); meterReading = getMeterReadingAfterChecks(meterReading); - /* - * if (consumption != null) { - * logData(consumption.aggregats.days, "Day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); - * logData(consumption.aggregats.weeks, "Week", true, DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); - * - * } - */ + if (meterReading != null) { + logData(meterReading.dayValue, "Day", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); + logData(meterReading.weekValue, "Week", DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); + } return meterReading; }); @@ -790,14 +787,6 @@ public class LinkyHandler extends BaseThingHandler { } /* - * private @Nullable Consumption getConsumptionAfterChecks(Consumption consumption, Target target) { - * - * - * - * return consumption; - * } - * - * * * private boolean isDataFirstDayAvailable(Consumption consumption) { * Aggregate days = consumption.aggregats.days; @@ -810,41 +799,6 @@ public class LinkyHandler extends BaseThingHandler { * logData(days, "Last day", false, DateTimeFormatter.ISO_LOCAL_DATE, Target.LAST); * return days.datas != null && !days.datas.isEmpty() && !days.datas.get(days.datas.size() - 1).isNaN(); * } - * - * - * private void logData(Aggregate aggregate, String title, boolean withDateFin, DateTimeFormatter dateTimeFormatter, - * Target target) { - * if (logger.isDebugEnabled()) { - * int size = (aggregate.datas == null || aggregate.periodes == null) ? 0 - * : (aggregate.datas.size() <= aggregate.periodes.size() ? aggregate.datas.size() - * : aggregate.periodes.size()); - * if (target == Target.FIRST) { - * if (size > 0) { - * logData(aggregate, 0, title, withDateFin, dateTimeFormatter); - * } - * } else if (target == Target.LAST) { - * if (size > 0) { - * logData(aggregate, size - 1, title, withDateFin, dateTimeFormatter); - * } - * } else { - * for (int i = 0; i < size; i++) { - * logData(aggregate, i, title, withDateFin, dateTimeFormatter); - * } - * } - * } - * } - * - * private void logData(Aggregate aggregate, int index, String title, boolean withDateFin, - * DateTimeFormatter dateTimeFormatter) { - * if (withDateFin) { - * logger.debug("{} {} {} value {}", title, aggregate.periodes.get(index).dateDebut.format(dateTimeFormatter), - * aggregate.periodes.get(index).dateFin.format(dateTimeFormatter), aggregate.datas.get(index)); - * } else { - * logger.debug("{} {} value {}", title, aggregate.periodes.get(index).dateDebut.format(dateTimeFormatter), - * aggregate.datas.get(index)); - * } - * } - * */ private void logData(IntervalReading[] ivArray, String title, DateTimeFormatter dateTimeFormatter, Target target) { From 3495c279ad84a142d154beec877e319f7b481826 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 17 Dec 2024 14:18:51 +0100 Subject: [PATCH 114/135] fix web api returning buggy value on some case, add a test for this. Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyHandler.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 499ac134811..783c237704a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -471,10 +471,15 @@ public class LinkyHandler extends BaseThingHandler { for (int i = 0; i < iv.length; i++) { try { + if (iv[i].date == null) { + continue; + } + + Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); + if (Double.isNaN(iv[i].value)) { continue; } - Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); timeSeries.add(timestamp, new DecimalType(iv[i].value)); } catch (Exception ex) { logger.debug("aa"); @@ -482,7 +487,10 @@ public class LinkyHandler extends BaseThingHandler { } sendTimeSeries(groupId, channelId, timeSeries); - updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); + + if (!Double.isNaN(iv[iv.length - 1].value)) { + updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); + } } private synchronized void updateConsumptionTimeSeries(String groupId, String channelId, IntervalReading[] iv) { @@ -494,11 +502,17 @@ public class LinkyHandler extends BaseThingHandler { } Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); + + if (Double.isNaN(iv[i].value)) { + continue; + } timeSeries.add(timestamp, new DecimalType(iv[i].value)); } sendTimeSeries(groupId, channelId, timeSeries); - updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); + if (!Double.isNaN(iv[iv.length - 1].value)) { + updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); + } } private void updateKwhChannel(String groupId, String channelId, double consumption) { From b185b54803701ee9c6fbf2511cb1565c57124cb1 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 17 Dec 2024 18:08:15 +0100 Subject: [PATCH 115/135] review disconnection handling for EnedisWebBridge Signed-off-by: Laurent ARNAL --- .../handler/EnedisWebBridgeHandler.java | 19 +++++++++++++++++++ .../internal/handler/LinkyBridgeHandler.java | 1 - .../linky/internal/handler/LinkyHandler.java | 19 ++++++++++++++++--- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index e52a1bded75..eb6f1229f90 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -42,6 +42,8 @@ import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; import org.openhab.core.thing.ThingRegistry; +import org.openhab.core.thing.ThingStatus; +import org.openhab.core.thing.ThingStatusDetail; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Reference; import org.osgi.service.http.HttpService; @@ -164,6 +166,23 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { return API_DATE_FORMAT_YEAR_FIRST; } + @Override + public void disconnect() { + if (connected) { + try { + httpClient.getCookieStore().removeAll(); + String location = enedisApi.getLocation(httpClient.GET(BASE_URL + "/logout")); + location = enedisApi.getLocation(httpClient.GET(location)); + enedisApi.getLocation(httpClient.GET(location)); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, + "Error while disconnecting from Enedis webservice"); + } + } + super.disconnect(); + + } + @Override protected synchronized void connectionInit() throws LinkyException { LinkyConfiguration lcConfig = config; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 952ae3de37d..71ee8af4d46 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -153,7 +153,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { if (connected) { logger.debug("Logout process"); connected = false; - httpClient.getCookieStore().removeAll(); } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 783c237704a..dbf270f0cdb 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -213,6 +213,15 @@ public class LinkyHandler extends BaseThingHandler { return; } + LinkyBridgeHandler bridgeHandler = (LinkyBridgeHandler) lcBridge.getHandler(); + if (bridgeHandler == null) { + return; + } + + if (!bridgeHandler.isConnected()) { + bridgeHandler.connectionInit(); + } + if (supportNewApiFormat()) { Identity identity = api.getIdentity(this, config.prmId); Contact contact = api.getContact(this, config.prmId); @@ -273,8 +282,6 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updateMetaData(Identity identity, Contact contact, Contract contract, UsagePoint usagePoint) { - EnedisHttpApi api = this.enedisApi; - String title = identity.title; String firstName = identity.firstname; String lastName = identity.lastname; @@ -678,6 +685,13 @@ public class LinkyHandler extends BaseThingHandler { } private void disconnect() { + Bridge bridge = getBridge(); + if (bridge != null) { + LinkyBridgeHandler bridgeHandler = (LinkyBridgeHandler) bridge.getHandler(); + if (bridgeHandler != null) { + bridgeHandler.disconnect(); + } + } } @Override @@ -748,7 +762,6 @@ public class LinkyHandler extends BaseThingHandler { int size = meterReading.dayValue.length; int baseYear = meterReading.dayValue[0].date.getYear(); int baseMonth = meterReading.dayValue[0].date.getMonthValue(); - int baseDayOfYear = meterReading.dayValue[0].date.getDayOfYear(); int baseWeek = meterReading.dayValue[0].date.get(WeekFields.of(Locale.FRANCE).weekOfYear()); for (int idx = 0; idx < size; idx++) { From 9bbc1985254bbfae5e976027c7d187497bcf7221 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 18 Dec 2024 12:35:06 +0100 Subject: [PATCH 116/135] remove updataState on timeseries as it broke graph by adding value on current data/time Signed-off-by: Laurent ARNAL --- .../linky/internal/handler/LinkyHandler.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index dbf270f0cdb..730f9a539e4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -350,15 +350,15 @@ public class LinkyHandler extends BaseThingHandler { } }); - int tomorrowDayIdx = values.size(); + int size = values.size(); Object[] tempoValues = values.values().toArray(); - updateTempoChannel(TEMPO_GROUP, TEMPO_TODAY_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 2])); - updateTempoChannel(TEMPO_GROUP, TEMPO_TOMORROW_INFO, getTempoIdx((String) tempoValues[tomorrowDayIdx - 1])); + updateTempoChannel(TEMPO_GROUP, TEMPO_TODAY_INFO, getTempoIdx((String) tempoValues[size - 2])); + updateTempoChannel(TEMPO_GROUP, TEMPO_TOMORROW_INFO, getTempoIdx((String) tempoValues[size - 1])); sendTimeSeries(TEMPO_GROUP, TEMPO_TEMPO_INFO_TIME_SERIES, timeSeries); updateState(TEMPO_GROUP, TEMPO_TEMPO_INFO_TIME_SERIES, - new DecimalType(getTempoIdx((String) tempoValues[tomorrowDayIdx - 2]))); + new DecimalType(getTempoIdx((String) tempoValues[size - 2]))); }, () -> { updateTempoChannel(TEMPO_GROUP, TEMPO_TODAY_INFO, -1); updateTempoChannel(TEMPO_GROUP, TEMPO_TOMORROW_INFO, -1); @@ -494,10 +494,6 @@ public class LinkyHandler extends BaseThingHandler { } sendTimeSeries(groupId, channelId, timeSeries); - - if (!Double.isNaN(iv[iv.length - 1].value)) { - updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); - } } private synchronized void updateConsumptionTimeSeries(String groupId, String channelId, IntervalReading[] iv) { @@ -517,9 +513,6 @@ public class LinkyHandler extends BaseThingHandler { } sendTimeSeries(groupId, channelId, timeSeries); - if (!Double.isNaN(iv[iv.length - 1].value)) { - updateState(groupId, channelId, new DecimalType(iv[iv.length - 1].value)); - } } private void updateKwhChannel(String groupId, String channelId, double consumption) { @@ -666,7 +659,7 @@ public class LinkyHandler extends BaseThingHandler { ResponseTempo result = api.getTempoData(this, from, to); return result; } catch (LinkyException e) { - logger.debug("Exception when getting power data: {}", e.getMessage(), e); + logger.debug("Exception when getting tempo data: {}", e.getMessage(), e); updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.OFFLINE.COMMUNICATION_ERROR, e.getMessage()); } } From d0b8f26b977e4e53eb776a1fa0a060243b33c765 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 18 Dec 2024 12:35:55 +0100 Subject: [PATCH 117/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../binding/linky/internal/handler/EnedisWebBridgeHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index eb6f1229f90..18b0aa815c0 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -180,7 +180,6 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { } } super.disconnect(); - } @Override From 0a61368bc92274e6b34853b6e1ce7d487e17c44f Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 18 Dec 2024 12:41:59 +0100 Subject: [PATCH 118/135] fix some code analysis warnings Signed-off-by: Laurent ARNAL --- .../java/org/openhab/binding/linky/internal/dto/Contract.java | 2 -- .../org/openhab/binding/linky/internal/dto/IntervalReading.java | 2 -- .../org/openhab/binding/linky/internal/dto/MeterReading.java | 2 -- .../java/org/openhab/binding/linky/internal/dto/PrmInfo.java | 2 -- .../org/openhab/binding/linky/internal/dto/ReadingType.java | 2 -- .../org/openhab/binding/linky/internal/dto/ResponseContact.java | 2 -- .../openhab/binding/linky/internal/dto/ResponseIdentity.java | 2 -- .../org/openhab/binding/linky/internal/dto/ResponseMeter.java | 2 -- .../java/org/openhab/binding/linky/internal/dto/TempoDay.java | 2 -- .../java/org/openhab/binding/linky/internal/dto/UsagePoint.java | 2 -- 10 files changed, 20 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java index 5b63126f469..d7d1b015cc8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index 7cd1a23658b..7b5eca9cb5b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -14,8 +14,6 @@ package org.openhab.binding.linky.internal.dto; import java.time.LocalDateTime; -import org.eclipse.jetty.jaas.spi.UserInfo; - /** * The {@link UserInfo} holds informations about energy delivery point * diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 928fba9db7b..08e82336ce2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -16,8 +16,6 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.List; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java index eea7177cb21..bdf053a7f6d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - /** * The {@link UserInfo} holds ids of existing Prms * diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java index 454f04fe295..c2298547388 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java index 05d5f120d16..9a6cfd72e3a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java index 1d08bfcf089..b49546285c3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java index f8717ec7fc2..b9c8a5476d9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java index d3f1249fba4..d5aeeef0dc3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - /** * The {@link UserInfo} holds informations about energy delivery point * diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index 5fdc9f78cea..df5330af903 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -12,8 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** From e7b972ddf7a3d9ed32f5b9caed8df36ec8774bc3 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 18 Dec 2024 12:51:12 +0100 Subject: [PATCH 119/135] fix some sat errors Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/dto/ResponseContact.java | 2 +- .../openhab/binding/linky/internal/dto/ResponseContract.java | 4 +--- .../openhab/binding/linky/internal/dto/ResponseIdentity.java | 2 +- .../binding/linky/internal/handler/EnedisBridgeHandler.java | 5 +---- .../openhab/binding/linky/internal/handler/LinkyHandler.java | 1 - 5 files changed, 4 insertions(+), 10 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java index 9a6cfd72e3a..da25eca1ab3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java @@ -17,7 +17,7 @@ import com.google.gson.annotations.SerializedName; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Laurent Arnal - Rewrite addon to use official dataconect API + * @author Laurent Arnal - Initial contribution - Rewrite addon to use official dataconect API */ public class ResponseContact { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java index adf05afb0ca..ff1d5ed84da 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java @@ -12,12 +12,10 @@ */ package org.openhab.binding.linky.internal.dto; -import org.eclipse.jetty.jaas.spi.UserInfo; - import com.google.gson.annotations.SerializedName; /** - * The {@link UserInfo} holds informations about energy delivery point + * The {@link ResponseContract} holds informations about the contract * * @author Gaël L'hopital - Initial contribution * @author Laurent Arnal - Rewrite addon to use official dataconect API diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java index b49546285c3..a86ba16175f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java @@ -17,7 +17,7 @@ import com.google.gson.annotations.SerializedName; /** * The {@link UserInfo} holds informations about energy delivery point * - * @author Laurent Arnal - Rewrite addon to use official dataconect API + * @author Laurent Arnal - Initial contribution - Rewrite addon to use official dataconect API */ public class ResponseIdentity { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 1a54ca8b58f..635e0fb6a69 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -106,10 +106,7 @@ public class EnedisBridgeHandler extends ApiBridgeHandler { @Override public boolean getIsSandbox() { LinkyConfiguration lcConfig = config; - if (lcConfig != null) { - return lcConfig.isSandbox; - } - return false; + return (lcConfig != null) ? lcConfig.isSandbox : false; } @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 730f9a539e4..27ed99f0f78 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -232,7 +232,6 @@ public class LinkyHandler extends BaseThingHandler { updateProperties( Map.of(USER_ID, "", PUISSANCE, contract.subscribedPower, PRM_ID, usagePoint.usagePointId)); - } else { UserInfo userInfo = api.getUserInfo(this); PrmInfo prmInfo = api.getPrmInfo(this, userInfo.userProperties.internId, config.prmId); From 656fc4b4b803b87849b89fafe0062d3459826d53 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 18 Dec 2024 14:05:59 +0100 Subject: [PATCH 120/135] force new build Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 8bdbeec7cf4..0788170da5f 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -25,7 +25,6 @@ There is one supported thing : the `linky` thing is retrieving the consumption o You can have multiple linky thing in your setup if you have different house / linky linked to your account. - ## Discovery This binding does not provide discovery service. From d9e2f04eb58067571a5862c87473cad1a764d35c Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 18 Dec 2024 14:19:02 +0100 Subject: [PATCH 121/135] fix missingcode in build report Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/handler/LinkyHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 27ed99f0f78..4769aafb84f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -567,6 +567,11 @@ public class LinkyHandler extends BaseThingHandler { for (int i = 0; i < size; i++) { double consumption = days[i].value; + LocalDate day = days[i].date.toLocalDate(); + // Filter data in case it contains data from dates outside the requested period + if (day.isBefore(startDay) || day.isAfter(endDay)) { + continue; + } String line = days[i].date.format(DateTimeFormatter.ISO_LOCAL_DATE) + separator; if (consumption >= 0) { line += String.valueOf(consumption); From 776e6bc54664ab9f91965ddb10203b680d402893 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 20 Dec 2024 18:42:57 +0100 Subject: [PATCH 122/135] new Enedis Web Site, first adaptations Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 15 +++--- .../linky/internal/dto/ConsumptionReport.java | 47 +++++++++--------- .../linky/internal/dto/MeterReading.java | 49 ++++++++++--------- .../handler/EnedisWebBridgeHandler.java | 26 ++-------- .../internal/handler/LinkyBridgeHandler.java | 8 --- .../linky/internal/handler/LinkyHandler.java | 26 ---------- 6 files changed, 62 insertions(+), 109 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index a2690f7d94f..988921aa99d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -218,11 +218,11 @@ public class EnedisHttpApi { return contactResponse.contact; } - private MeterReading getMeasures(LinkyHandler handler, String apiUrl, String prmId, LocalDate from, LocalDate to) - throws LinkyException { + private MeterReading getMeasures(LinkyHandler handler, String apiUrl, String mps, String prmId, LocalDate from, + LocalDate to) throws LinkyException { String dtStart = from.format(linkyBridgeHandler.getApiDateFormat()); String dtEnd = to.format(linkyBridgeHandler.getApiDateFormat()); - String url = String.format(apiUrl, prmId, dtStart, dtEnd); + String url = String.format(apiUrl, mps, prmId, dtStart, dtEnd); if (handler.supportNewApiFormat()) { ResponseMeter meterResponse = getData(handler, url, ResponseMeter.class); @@ -235,17 +235,20 @@ public class EnedisHttpApi { public MeterReading getEnergyData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(handler, linkyBridgeHandler.getDailyConsumptionUrl(), prmId, from, to); + String mps = "MPS172TIB"; + return getMeasures(handler, linkyBridgeHandler.getDailyConsumptionUrl(), mps, prmId, from, to); } public MeterReading getLoadCurveData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(handler, linkyBridgeHandler.getLoadCurveUrl(), prmId, from, to); + String mps = "MPS172TIB"; + return getMeasures(handler, linkyBridgeHandler.getLoadCurveUrl(), mps, prmId, from, to); } public MeterReading getPowerData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) throws LinkyException { - return getMeasures(handler, linkyBridgeHandler.getMaxPowerUrl(), prmId, from, to); + String mps = "MPS172TIB"; + return getMeasures(handler, linkyBridgeHandler.getMaxPowerUrl(), mps, prmId, from, to); } public ResponseTempo getTempoData(LinkyHandler handler, LocalDate from, LocalDate to) throws LinkyException { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java index e96b7af797f..396a473c5b6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java @@ -12,7 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import java.time.ZonedDateTime; import java.util.List; import com.google.gson.annotations.SerializedName; @@ -24,31 +23,37 @@ import com.google.gson.annotations.SerializedName; * @author Gaël L'hopital - Initial contribution */ public class ConsumptionReport { - public class Period { - public String grandeurPhysiqueEnum; - public ZonedDateTime dateDebut; - public ZonedDateTime dateFin; + + public class Data { + public String dateDebut; + public String dateFin; + public String valeur; } - public class Aggregate { - public List labels; - public List periodes; - public List datas; + public class Datas { + @SerializedName("donnees") + public List data; } public class ChronoData { - @SerializedName("JOUR") - public Aggregate days; - @SerializedName("SEMAINE") - public Aggregate weeks; - @SerializedName("MOIS") - public Aggregate months; - @SerializedName("ANNEE") - public Aggregate years; + @SerializedName("jour") + public Datas days; + + /* + * @SerializedName("SEMAINE") + * public Aggregate weeks; + * + * @SerializedName("MOIS") + * public Aggregate months; + * + * @SerializedName("ANNEE") + * public Aggregate years; + */ } public class Consumption { public ChronoData aggregats; + public String grandeurMetier; public String grandeurPhysique; public String unite; @@ -57,11 +62,7 @@ public class ConsumptionReport { public List data; } - public class FirstLevel { - @SerializedName("CONS") - public Consumption consumptions; - } + @SerializedName("cons") + public Consumption consumptions; - @SerializedName("1") - public FirstLevel firstLevel; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 08e82336ce2..57c1f9ab56d 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -49,33 +49,34 @@ public class MeterReading { public static MeterReading convertFromComsumptionReport(ConsumptionReport comsumptionReport) { MeterReading result = new MeterReading(); result.readingType = new ReadingType(); - - if (comsumptionReport.firstLevel.consumptions.aggregats != null) { - result.dayValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.days); - result.weekValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.weeks); - result.monthValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.months); - result.yearValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.years); - } else { - result.dayValue = fromLabelsAndDatas(comsumptionReport.firstLevel.consumptions.labels, - comsumptionReport.firstLevel.consumptions.data); - } - + /* + * if (comsumptionReport.firstLevel.consumptions.aggregats != null) { + * result.dayValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.days); + * result.weekValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.weeks); + * result.monthValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.months); + * result.yearValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.years); + * } else { + * result.dayValue = fromLabelsAndDatas(comsumptionReport.firstLevel.consumptions.labels, + * comsumptionReport.firstLevel.consumptions.data); + * } + */ return result; } - public static IntervalReading[] fromAgregat(ConsumptionReport.Aggregate agregat) { - int size = agregat.datas.size(); - IntervalReading[] result = new IntervalReading[size]; - - for (int i = 0; i < size; i++) { - Double data = agregat.datas.get(i); - ConsumptionReport.Period period = agregat.periodes.get(i); - - result[i] = new IntervalReading(); - result[i].value = data; - result[i].date = period.dateDebut.toLocalDateTime(); - } - + public static IntervalReading[] fromAgregat(ConsumptionReport agregat) { + IntervalReading[] result = new IntervalReading[1]; + /* + * int size = agregat.datas.size(); + * + * for (int i = 0; i < size; i++) { + * Double data = agregat.datas.get(i); + * ConsumptionReport.Period period = agregat.periodes.get(i); + * + * result[i] = new IntervalReading(); + * result[i].value = data; + * result[i].date = period.dateDebut.toLocalDateTime(); + * } + */ return result; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 18b0aa815c0..8989170362b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -42,8 +42,6 @@ import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.io.net.http.HttpClientFactory; import org.openhab.core.thing.Bridge; import org.openhab.core.thing.ThingRegistry; -import org.openhab.core.thing.ThingStatus; -import org.openhab.core.thing.ThingStatusDetail; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Reference; import org.osgi.service.http.HttpService; @@ -73,17 +71,17 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { private static final String USER_INFO_CONTRACT_URL = BASE_URL + "/mon-compte-client/api/private/v1/userinfos"; private static final String USER_INFO_URL = BASE_URL + "/userinfos"; - private static final String PRM_INFO_BASE_URL = BASE_URL + "/mes-mesures/api/private/v1/personnes/"; + private static final String PRM_INFO_BASE_URL = BASE_URL + "/mes-mesures-prm/api/private/v1/personnes/"; private static final String PRM_INFO_URL = BASE_URL + "/mes-prms-part/api/private/v2/personnes/%s/prms"; private static final String MEASURE_DAILY_CONSUMPTION_URL = PRM_INFO_BASE_URL - + "undefined/prms/%s/donnees-energie?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; + + "%s/prms/%s/donnees-energetiques?mesuresTypeCode=ENERGIE&mesuresCorrigees=false&typeDonnees=CONS"; private static final String MEASURE_MAX_POWER_URL = PRM_INFO_BASE_URL - + "undefined/prms/%s/donnees-pmax?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; + + "%s/prms/%s/donnees-energetiques?mesuresTypeCode=PMAX&mesuresCorrigees=false&typeDonnees=CONS"; private static final String LOAD_CURVE_CONSUMPTION_URL = PRM_INFO_BASE_URL - + "undefined/prms/%s/courbe-de-charge?dateDebut=%s&dateFin=%s&mesuretypecode=CONS"; + + "%s/prms/%s/donnees-energetiques?mesuresTypeCode=COURBE&mesuresCorrigees=false&typeDonnees=CONS&dateDebut=%s"; private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -166,22 +164,6 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { return API_DATE_FORMAT_YEAR_FIRST; } - @Override - public void disconnect() { - if (connected) { - try { - httpClient.getCookieStore().removeAll(); - String location = enedisApi.getLocation(httpClient.GET(BASE_URL + "/logout")); - location = enedisApi.getLocation(httpClient.GET(location)); - enedisApi.getLocation(httpClient.GET(location)); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, - "Error while disconnecting from Enedis webservice"); - } - } - super.disconnect(); - } - @Override protected synchronized void connectionInit() throws LinkyException { LinkyConfiguration lcConfig = config; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 71ee8af4d46..3f83100c5b2 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -149,13 +149,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { return connected; } - public void disconnect() { - if (connected) { - logger.debug("Logout process"); - connected = false; - } - } - public @Nullable EnedisHttpApi getEnedisApi() { return enedisApi; } @@ -163,7 +156,6 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { @Override public void dispose() { logger.debug("Shutting down Linky API bridge handler."); - disconnect(); super.dispose(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 4769aafb84f..2939194daa7 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -252,8 +252,6 @@ public class LinkyHandler extends BaseThingHandler { updateData(); - disconnect(); - final LocalDateTime now = LocalDateTime.now(); final LocalDateTime nextDayFirstTimeUpdate = now.plusDays(1).withHour(REFRESH_FIRST_HOUR_OF_DAY) .truncatedTo(ChronoUnit.HOURS); @@ -321,16 +319,10 @@ public class LinkyHandler extends BaseThingHandler { * Request new data and updates channels */ private synchronized void updateData() { - boolean connectedBefore = isConnected(); - updateEnergyData(); updatePowerData(); updateTempoTimeSeries(); updateLoadCurveData(); - - if (!connectedBefore && isConnected()) { - disconnect(); - } } private synchronized void updateTempoTimeSeries() { @@ -551,7 +543,6 @@ public class LinkyHandler extends BaseThingHandler { public synchronized List reportValues(LocalDate startDay, LocalDate endDay, @Nullable String separator) { List report = buildReport(startDay, endDay, separator); - disconnect(); return report; } @@ -681,16 +672,6 @@ public class LinkyHandler extends BaseThingHandler { return false; } - private void disconnect() { - Bridge bridge = getBridge(); - if (bridge != null) { - LinkyBridgeHandler bridgeHandler = (LinkyBridgeHandler) bridge.getHandler(); - if (bridgeHandler != null) { - bridgeHandler.disconnect(); - } - } - } - @Override public void dispose() { logger.debug("Disposing the Linky handler."); @@ -705,7 +686,6 @@ public class LinkyHandler extends BaseThingHandler { lcPollingJob.cancel(true); pollingJob = null; } - disconnect(); enedisApi = null; } @@ -713,13 +693,7 @@ public class LinkyHandler extends BaseThingHandler { public synchronized void handleCommand(ChannelUID channelUID, Command command) { if (command instanceof RefreshType) { logger.debug("Refreshing channel {}", channelUID.getId()); - boolean connectedBefore = isConnected(); - updateData(); - - if (!connectedBefore && isConnected()) { - disconnect(); - } } else { logger.debug("The Linky binding is read-only and can not handle command {}", command); } From 21a738eca159322c4039674e095ffa853e409e48 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 21 Dec 2024 08:28:07 +0100 Subject: [PATCH 123/135] fix date handling on deserialization Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyHandlerFactory.java | 20 +++++++- .../linky/internal/dto/ConsumptionReport.java | 27 ++++------- .../linky/internal/dto/MeterReading.java | 46 +++++++++---------- 3 files changed, 49 insertions(+), 44 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 0a6d5a86ce5..d1fff691099 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -12,12 +12,14 @@ */ package org.openhab.binding.linky.internal; +import static java.time.temporal.ChronoField.*; import static org.openhab.binding.linky.internal.LinkyBindingConstants.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; @@ -56,8 +58,22 @@ import com.google.gson.JsonDeserializer; public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final DateTimeFormatter LINKY_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); private static final DateTimeFormatter LINKY_LOCALDATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd"); - private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = DateTimeFormatter - .ofPattern("uuuu-MM-dd HH:mm:ss"); + private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = new DateTimeFormatterBuilder() + .appendPattern("uuuu-MM-dd'T'HH:mm").optionalStart().appendLiteral(':').appendValue(SECOND_OF_MINUTE, 2) + .optionalStart().appendFraction(NANO_OF_SECOND, 0, 9, true).toFormatter(); + + /* + * ; + * + * DateTimeFormatter formatter1 = new DateTimeFormatterBuilder() + * .appendPattern(DATE_TIME_FORMAT_PATTERN) + * // optional decimal point followed by 1 to 6 digits + * .optionalStart() + * .appendPattern(".") + * .appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, false) + * .optionalEnd() + * .toFormatter(); + */ private final HttpClientFactory httpClientFactory; private final OAuthFactory oAuthFactory; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java index 396a473c5b6..b2781929202 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.linky.internal.dto; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import com.google.gson.annotations.SerializedName; @@ -25,30 +27,23 @@ import com.google.gson.annotations.SerializedName; public class ConsumptionReport { public class Data { - public String dateDebut; - public String dateFin; + public LocalDateTime dateDebut; + public LocalDateTime dateFin; public String valeur; } public class Datas { @SerializedName("donnees") - public List data; + public List datas; + public String unite; } public class ChronoData { @SerializedName("jour") public Datas days; - /* - * @SerializedName("SEMAINE") - * public Aggregate weeks; - * - * @SerializedName("MOIS") - * public Aggregate months; - * - * @SerializedName("ANNEE") - * public Aggregate years; - */ + @SerializedName("heure") + public Datas heure; } public class Consumption { @@ -56,10 +51,8 @@ public class ConsumptionReport { public String grandeurMetier; public String grandeurPhysique; - public String unite; - public String mesuresPasEnum; - public List labels; - public List data; + public LocalDate dateDebut; + public LocalDate dateFin; } @SerializedName("cons") diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 57c1f9ab56d..029785c717e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -16,6 +16,8 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.List; +import org.openhab.binding.linky.internal.dto.ConsumptionReport.Data; + import com.google.gson.annotations.SerializedName; /** @@ -49,34 +51,28 @@ public class MeterReading { public static MeterReading convertFromComsumptionReport(ConsumptionReport comsumptionReport) { MeterReading result = new MeterReading(); result.readingType = new ReadingType(); - /* - * if (comsumptionReport.firstLevel.consumptions.aggregats != null) { - * result.dayValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.days); - * result.weekValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.weeks); - * result.monthValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.months); - * result.yearValue = fromAgregat(comsumptionReport.firstLevel.consumptions.aggregats.years); - * } else { - * result.dayValue = fromLabelsAndDatas(comsumptionReport.firstLevel.consumptions.labels, - * comsumptionReport.firstLevel.consumptions.data); - * } - */ + + if (comsumptionReport.consumptions.aggregats != null) { + result.dayValue = fromAgregat(comsumptionReport.consumptions.aggregats.days); + } else { + // result.dayValue = fromLabelsAndDatas(comsumptionReport.consumptions.labels, + // comsumptionReport.consumptions.data); + } + return result; } - public static IntervalReading[] fromAgregat(ConsumptionReport agregat) { - IntervalReading[] result = new IntervalReading[1]; - /* - * int size = agregat.datas.size(); - * - * for (int i = 0; i < size; i++) { - * Double data = agregat.datas.get(i); - * ConsumptionReport.Period period = agregat.periodes.get(i); - * - * result[i] = new IntervalReading(); - * result[i].value = data; - * result[i].date = period.dateDebut.toLocalDateTime(); - * } - */ + public static IntervalReading[] fromAgregat(ConsumptionReport.Datas agregat) { + int size = agregat.datas.size(); + IntervalReading[] result = new IntervalReading[size]; + + for (int i = 0; i < size; i++) { + Data dataObj = agregat.datas.get(i); + result[i] = new IntervalReading(); + result[i].value = Double.valueOf(dataObj.valeur); + result[i].date = dataObj.dateDebut; + } + return result; } From ee940285c02e2c523995c06b56b6b48a871fed7d Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 21 Dec 2024 08:38:59 +0100 Subject: [PATCH 124/135] fix dto for load curves Signed-off-by: Laurent ARNAL --- .../linky/internal/dto/MeterReading.java | 32 +++----------- .../handler/EnedisWebBridgeHandler.java | 2 +- .../linky/internal/handler/LinkyHandler.java | 44 +++++++++---------- 3 files changed, 29 insertions(+), 49 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 029785c717e..69e294ad4de 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -12,10 +12,6 @@ */ package org.openhab.binding.linky.internal.dto; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.List; - import org.openhab.binding.linky.internal.dto.ConsumptionReport.Data; import com.google.gson.annotations.SerializedName; @@ -43,7 +39,7 @@ public class MeterReading { public ReadingType readingType; @SerializedName("interval_reading") - public IntervalReading[] dayValue; + public IntervalReading[] baseValue; public IntervalReading[] weekValue; public IntervalReading[] monthValue; public IntervalReading[] yearValue; @@ -53,10 +49,11 @@ public class MeterReading { result.readingType = new ReadingType(); if (comsumptionReport.consumptions.aggregats != null) { - result.dayValue = fromAgregat(comsumptionReport.consumptions.aggregats.days); - } else { - // result.dayValue = fromLabelsAndDatas(comsumptionReport.consumptions.labels, - // comsumptionReport.consumptions.data); + if (comsumptionReport.consumptions.aggregats.days != null) { + result.baseValue = fromAgregat(comsumptionReport.consumptions.aggregats.days); + } else if (comsumptionReport.consumptions.aggregats.heure != null) { + result.baseValue = fromAgregat(comsumptionReport.consumptions.aggregats.heure); + } } return result; @@ -76,21 +73,4 @@ public class MeterReading { return result; } - public static IntervalReading[] fromLabelsAndDatas(List labels, List datas) { - int size = datas.size(); - IntervalReading[] result = new IntervalReading[size]; - - for (int i = 0; i < size; i++) { - Double data = datas.get(i); - String label = labels.get(i); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[X]"); - ZonedDateTime dt = ZonedDateTime.parse(label, formatter); - - result[i] = new IntervalReading(); - result[i].value = data; - result[i].date = dt.toLocalDateTime(); - } - - return result; - } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 8989170362b..5d5597032e3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -83,7 +83,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { private static final String LOAD_CURVE_CONSUMPTION_URL = PRM_INFO_BASE_URL + "%s/prms/%s/donnees-energetiques?mesuresTypeCode=COURBE&mesuresCorrigees=false&typeDonnees=CONS&dateDebut=%s"; - private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + private static final DateTimeFormatter API_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter API_DATE_FORMAT_YEAR_FIRST = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final String URL_ENEDIS_AUTHENTICATE = BASE_URL + "/authenticate?target=" + URL_COMPTE_PART; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 2939194daa7..f5e7a1935c9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -117,7 +117,7 @@ public class LinkyHandler extends BaseThingHandler { MeterReading meterReading = getConsumptionData(today.minusDays(1095), today); meterReading = getMeterReadingAfterChecks(meterReading); if (meterReading != null) { - logData(meterReading.dayValue, "Day", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); + logData(meterReading.baseValue, "Day", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); logData(meterReading.weekValue, "Week", DateTimeFormatter.ISO_LOCAL_DATE_TIME, Target.ALL); } return meterReading; @@ -135,7 +135,7 @@ public class LinkyHandler extends BaseThingHandler { MeterReading meterReading = getPowerData(today.minusDays(1095), today); meterReading = getMeterReadingAfterChecks(meterReading); if (meterReading != null) { - logData(meterReading.dayValue, "Day (peak)", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); + logData(meterReading.baseValue, "Day (peak)", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); } return meterReading; }); @@ -154,7 +154,7 @@ public class LinkyHandler extends BaseThingHandler { MeterReading meterReading = getLoadCurveConsumption(today.minusDays(6), today); meterReading = getMeterReadingAfterChecks(meterReading); if (meterReading != null) { - logData(meterReading.dayValue, "Day (peak)", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); + logData(meterReading.baseValue, "Day (peak)", DateTimeFormatter.ISO_LOCAL_DATE, Target.ALL); } return meterReading; }); @@ -373,21 +373,21 @@ public class LinkyHandler extends BaseThingHandler { private synchronized void updatePowerData() { dailyConsumptionMaxPower.getValue().ifPresentOrElse(values -> { - int dSize = values.dayValue.length; + int dSize = values.baseValue.length; - updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_1, values.dayValue[dSize - 1].value); + updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_1, values.baseValue[dSize - 1].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_1, - new DateTimeType(values.dayValue[dSize - 1].date.atZone(ZoneId.systemDefault()))); + new DateTimeType(values.baseValue[dSize - 1].date.atZone(ZoneId.systemDefault()))); - updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_2, values.dayValue[dSize - 2].value); + updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_2, values.baseValue[dSize - 2].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_2, - new DateTimeType(values.dayValue[dSize - 2].date.atZone(ZoneId.systemDefault()))); + new DateTimeType(values.baseValue[dSize - 2].date.atZone(ZoneId.systemDefault()))); - updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_3, values.dayValue[dSize - 3].value); + updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_3, values.baseValue[dSize - 3].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_3, - new DateTimeType(values.dayValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); + new DateTimeType(values.baseValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); - updatePowerTimeSeries(DAILY_GROUP, MAX_POWER_CHANNEL, values.dayValue); + updatePowerTimeSeries(DAILY_GROUP, MAX_POWER_CHANNEL, values.baseValue); updatePowerTimeSeries(WEEKLY_GROUP, MAX_POWER_CHANNEL, values.weekValue); updatePowerTimeSeries(MONTHLY_GROUP, MAX_POWER_CHANNEL, values.monthValue); updatePowerTimeSeries(YEARLY_GROUP, MAX_POWER_CHANNEL, values.yearValue); @@ -411,9 +411,9 @@ public class LinkyHandler extends BaseThingHandler { dailyConsumption.getValue().ifPresentOrElse(values -> { int dSize = values.dayValue.length; - updateKwhChannel(DAILY_GROUP, DAY_MINUS_1, values.dayValue[dSize - 1].value); - updateKwhChannel(DAILY_GROUP, DAY_MINUS_2, values.dayValue[dSize - 2].value); - updateKwhChannel(DAILY_GROUP, DAY_MINUS_3, values.dayValue[dSize - 3].value); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_1, values.baseValue[dSize - 1].value); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_2, values.baseValue[dSize - 2].value); + updateKwhChannel(DAILY_GROUP, DAY_MINUS_3, values.baseValue[dSize - 3].value); int idxCurrentYear = values.yearValue.length - 1; int idxCurrentWeek = values.weekValue.length - 1; @@ -709,8 +709,8 @@ public class LinkyHandler extends BaseThingHandler { if (meterReading != null) { if (meterReading.weekValue == null) { - LocalDate startDate = meterReading.dayValue[0].date.toLocalDate(); - LocalDate endDate = meterReading.dayValue[meterReading.dayValue.length - 1].date.toLocalDate(); + LocalDate startDate = meterReading.baseValue[0].date.toLocalDate(); + LocalDate endDate = meterReading.baseValue[meterReading.dayValue.length - 1].date.toLocalDate(); int weeksNum = Weeks.between(startDate, endDate).getAmount() + 2; int monthsNum = Months.between(startDate, endDate).getAmount() + 2; @@ -730,13 +730,13 @@ public class LinkyHandler extends BaseThingHandler { meterReading.yearValue[idx] = new IntervalReading(); } - int size = meterReading.dayValue.length; - int baseYear = meterReading.dayValue[0].date.getYear(); - int baseMonth = meterReading.dayValue[0].date.getMonthValue(); - int baseWeek = meterReading.dayValue[0].date.get(WeekFields.of(Locale.FRANCE).weekOfYear()); + int size = meterReading.baseValue.length; + int baseYear = meterReading.baseValue[0].date.getYear(); + int baseMonth = meterReading.baseValue[0].date.getMonthValue(); + int baseWeek = meterReading.baseValue[0].date.get(WeekFields.of(Locale.FRANCE).weekOfYear()); for (int idx = 0; idx < size; idx++) { - IntervalReading ir = meterReading.dayValue[idx]; + IntervalReading ir = meterReading.baseValue[idx]; LocalDateTime dt = ir.date; double value = ir.value; value = value / divider; @@ -778,7 +778,7 @@ public class LinkyHandler extends BaseThingHandler { private void checkData(@Nullable MeterReading meterReading) throws LinkyException { if (meterReading != null) { - if (meterReading.dayValue.length == 0) { + if (meterReading.baseValue.length == 0) { throw new LinkyException("Invalid meterReading data: no day period"); } } From bcd520a46fd7d6cbd7397995392f6adeff30cc80 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 21 Dec 2024 15:43:10 +0100 Subject: [PATCH 125/135] backport Dto change from main review handling of URL for api based bridge Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 3 ++- .../linky/internal/dto/ConsumptionReport.java | 20 +++++++++++-------- .../linky/internal/dto/MeterReading.java | 2 +- .../linky/internal/handler/LinkyHandler.java | 10 +++++----- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 988921aa99d..eca02721116 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -222,12 +222,13 @@ public class EnedisHttpApi { LocalDate to) throws LinkyException { String dtStart = from.format(linkyBridgeHandler.getApiDateFormat()); String dtEnd = to.format(linkyBridgeHandler.getApiDateFormat()); - String url = String.format(apiUrl, mps, prmId, dtStart, dtEnd); if (handler.supportNewApiFormat()) { + String url = String.format(apiUrl, prmId, dtStart, dtEnd); ResponseMeter meterResponse = getData(handler, url, ResponseMeter.class); return meterResponse.meterReading; } else { + String url = String.format(apiUrl, mps, prmId, dtStart, dtEnd); ConsumptionReport consomptionReport = getData(handler, url, ConsumptionReport.class); return MeterReading.convertFromComsumptionReport(consomptionReport); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java index b2781929202..edb22034620 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java @@ -23,32 +23,37 @@ import com.google.gson.annotations.SerializedName; * returned by API calls * * @author Gaël L'hopital - Initial contribution + * @author Laurent ARNAL - fix to handle new Dto format after enedis site modifications */ public class ConsumptionReport { public class Data { public LocalDateTime dateDebut; public LocalDateTime dateFin; - public String valeur; + public Double valeur; } - public class Datas { + public class Aggregate { @SerializedName("donnees") public List datas; public String unite; } public class ChronoData { - @SerializedName("jour") - public Datas days; - @SerializedName("heure") - public Datas heure; + public Aggregate heure; + @SerializedName("jour") + public Aggregate days; + @SerializedName("semaine") + public Aggregate weeks; + @SerializedName("mois") + public Aggregate months; + @SerializedName("annee") + public Aggregate years; } public class Consumption { public ChronoData aggregats; - public String grandeurMetier; public String grandeurPhysique; public LocalDate dateDebut; @@ -57,5 +62,4 @@ public class ConsumptionReport { @SerializedName("cons") public Consumption consumptions; - } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 69e294ad4de..fcbe461d9d4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -59,7 +59,7 @@ public class MeterReading { return result; } - public static IntervalReading[] fromAgregat(ConsumptionReport.Datas agregat) { + public static IntervalReading[] fromAgregat(ConsumptionReport.Aggregate agregat) { int size = agregat.datas.size(); IntervalReading[] result = new IntervalReading[size]; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index f5e7a1935c9..7225f185f87 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -409,7 +409,7 @@ public class LinkyHandler extends BaseThingHandler { */ private synchronized void updateEnergyData() { dailyConsumption.getValue().ifPresentOrElse(values -> { - int dSize = values.dayValue.length; + int dSize = values.baseValue.length; updateKwhChannel(DAILY_GROUP, DAY_MINUS_1, values.baseValue[dSize - 1].value); updateKwhChannel(DAILY_GROUP, DAY_MINUS_2, values.baseValue[dSize - 2].value); @@ -431,7 +431,7 @@ public class LinkyHandler extends BaseThingHandler { updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_1, values.yearValue[idxCurrentYear - 1].value); updateKwhChannel(YEARLY_GROUP, YEAR_MINUS_2, values.yearValue[idxCurrentYear - 2].value); - updateConsumptionTimeSeries(DAILY_GROUP, CONSUMPTION_CHANNEL, values.dayValue); + updateConsumptionTimeSeries(DAILY_GROUP, CONSUMPTION_CHANNEL, values.baseValue); updateConsumptionTimeSeries(WEEKLY_GROUP, CONSUMPTION_CHANNEL, values.weekValue); updateConsumptionTimeSeries(MONTHLY_GROUP, CONSUMPTION_CHANNEL, values.monthValue); updateConsumptionTimeSeries(YEARLY_GROUP, CONSUMPTION_CHANNEL, values.yearValue); @@ -459,7 +459,7 @@ public class LinkyHandler extends BaseThingHandler { */ private synchronized void updateLoadCurveData() { loadCurveConsumption.getValue().ifPresentOrElse(values -> { - updatePowerTimeSeries(LOAD_CURVE_GROUP, POWER_CHANNEL, values.dayValue); + updatePowerTimeSeries(LOAD_CURVE_GROUP, POWER_CHANNEL, values.baseValue); }, () -> { }); } @@ -552,7 +552,7 @@ public class LinkyHandler extends BaseThingHandler { // All values in the same month MeterReading meterReading = getConsumptionData(startDay, endDay.plusDays(1)); if (meterReading != null) { - IntervalReading[] days = meterReading.dayValue; + IntervalReading[] days = meterReading.baseValue; int size = days.length; @@ -710,7 +710,7 @@ public class LinkyHandler extends BaseThingHandler { if (meterReading != null) { if (meterReading.weekValue == null) { LocalDate startDate = meterReading.baseValue[0].date.toLocalDate(); - LocalDate endDate = meterReading.baseValue[meterReading.dayValue.length - 1].date.toLocalDate(); + LocalDate endDate = meterReading.baseValue[meterReading.baseValue.length - 1].date.toLocalDate(); int weeksNum = Weeks.between(startDate, endDate).getAmount() + 2; int monthsNum = Months.between(startDate, endDate).getAmount() + 2; From 5d5fb38f1853e798c52042315c6ff422a62ae662 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 21 Dec 2024 15:53:30 +0100 Subject: [PATCH 126/135] fix date format to handle both api and web base bridge Signed-off-by: Laurent ARNAL --- .../openhab/binding/linky/internal/LinkyHandlerFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index d1fff691099..2ce3cc1e98e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -59,8 +59,8 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private static final DateTimeFormatter LINKY_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); private static final DateTimeFormatter LINKY_LOCALDATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd"); private static final DateTimeFormatter LINKY_LOCALDATETIME_FORMATTER = new DateTimeFormatterBuilder() - .appendPattern("uuuu-MM-dd'T'HH:mm").optionalStart().appendLiteral(':').appendValue(SECOND_OF_MINUTE, 2) - .optionalStart().appendFraction(NANO_OF_SECOND, 0, 9, true).toFormatter(); + .appendPattern("uuuu-MM-dd['T'][' ']HH:mm").optionalStart().appendLiteral(':') + .appendValue(SECOND_OF_MINUTE, 2).optionalStart().appendFraction(NANO_OF_SECOND, 0, 9, true).toFormatter(); /* * ; From ca4d2f4d582770b7804c70f3b0c362a18f8260f3 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 21 Dec 2024 16:08:02 +0100 Subject: [PATCH 127/135] - remove disconnect() as it interfers with multiple linky on same account - add retry mechanisms to reconnect web bridge in case of errors Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 20 +++++++++++++++++++ .../handler/EnedisWebBridgeHandler.java | 2 +- .../internal/handler/LinkyBridgeHandler.java | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index eca02721116..58be3b90747 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -99,6 +99,26 @@ public class EnedisHttpApi { private static String getContent(Logger logger, LinkyBridgeHandler linkyBridgeHandler, String url, HttpClient httpClient, String token) throws LinkyException { + int numberRetry = 0; + LinkyException lastException = null; + + while (numberRetry < 3) { + try { + return getContentInternal(logger, linkyBridgeHandler, url, httpClient, token); + } catch (LinkyException ex) { + lastException = ex; + + // try to reinit connection, fail after 3 attemps + linkyBridgeHandler.connectionInit(); + } + numberRetry++; + } + + throw Objects.requireNonNull(lastException); + } + + private static String getContentInternal(Logger logger, LinkyBridgeHandler linkyBridgeHandler, String url, + HttpClient httpClient, String token) throws LinkyException { try { Request request = httpClient.newRequest(url); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index 5d5597032e3..c3ba9ea8b53 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -165,7 +165,7 @@ public class EnedisWebBridgeHandler extends LinkyBridgeHandler { } @Override - protected synchronized void connectionInit() throws LinkyException { + public synchronized void connectionInit() throws LinkyException { LinkyConfiguration lcConfig = config; if (lcConfig == null) { return; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 3f83100c5b2..bf95b74d6f0 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -133,7 +133,7 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { }); } - protected abstract void connectionInit() throws LinkyException; + public abstract void connectionInit() throws LinkyException; public void registerNewPrmId(String prmId) { if (!registeredPrmId.contains(prmId)) { From 465ac499f8865dbbdb4aa25ea907d8f6014bc2e6 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 21 Dec 2024 16:08:47 +0100 Subject: [PATCH 128/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/dto/MeterReading.java | 1 - 1 file changed, 1 deletion(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index fcbe461d9d4..6d833f98a84 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -72,5 +72,4 @@ public class MeterReading { return result; } - } From 0cc5fdc51de7463175479e994feaed2334b29e8e Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Sat, 21 Dec 2024 16:21:44 +0100 Subject: [PATCH 129/135] fix hardcoded user Internal Id add some more info to docs Signed-off-by: Laurent ARNAL --- bundles/org.openhab.binding.linky/README.md | 12 ++++++++++-- .../binding/linky/internal/api/EnedisHttpApi.java | 9 +++------ .../binding/linky/internal/handler/LinkyHandler.java | 10 +++++++--- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/bundles/org.openhab.binding.linky/README.md b/bundles/org.openhab.binding.linky/README.md index 0788170da5f..e0fba21babd 100644 --- a/bundles/org.openhab.binding.linky/README.md +++ b/bundles/org.openhab.binding.linky/README.md @@ -17,17 +17,25 @@ You can use : There is advantage and disadvantage for each method. -- enedis-web bridge is the old way to go. +- Enedis-web bridge is the old way to go. +- MyelectricalData and enedis bridge both use new API format, less prone to change of the web site architecture. +- MyelectricalData bridge is handle by third party provider, but is stable. +- Enedis bridge use direct connection to Enedis, but currently required complex registration step with Enedis. + this limitation would certainly go away in near feature, that will make Enedis Bridge the preffered way to go. ## Supported Things There is one supported thing : the `linky` thing is retrieving the consumption of your home from the [Linky electric meter](https://www.enedis.fr/linky-compteur-communicant). You can have multiple linky thing in your setup if you have different house / linky linked to your account. +You can switch the thing from one bridge to another if you experience troubles with one bridge. +Data will be the quite the same ever bridge you use. +Only a few items from contract are not the same between web bridge and api bridge. ## Discovery -This binding does not provide discovery service. +This binding currently does not provide discovery service. +Perhaps will add auto linky discovery in a future version. ## Binding Configuration diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 58be3b90747..114151a1b14 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -254,21 +254,18 @@ public class EnedisHttpApi { } } - public MeterReading getEnergyData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) + public MeterReading getEnergyData(LinkyHandler handler, String mps, String prmId, LocalDate from, LocalDate to) throws LinkyException { - String mps = "MPS172TIB"; return getMeasures(handler, linkyBridgeHandler.getDailyConsumptionUrl(), mps, prmId, from, to); } - public MeterReading getLoadCurveData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) + public MeterReading getLoadCurveData(LinkyHandler handler, String mps, String prmId, LocalDate from, LocalDate to) throws LinkyException { - String mps = "MPS172TIB"; return getMeasures(handler, linkyBridgeHandler.getLoadCurveUrl(), mps, prmId, from, to); } - public MeterReading getPowerData(LinkyHandler handler, String prmId, LocalDate from, LocalDate to) + public MeterReading getPowerData(LinkyHandler handler, String mps, String prmId, LocalDate from, LocalDate to) throws LinkyException { - String mps = "MPS172TIB"; return getMeasures(handler, linkyBridgeHandler.getMaxPowerUrl(), mps, prmId, from, to); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 7225f185f87..a7d5a7f5841 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -99,6 +99,8 @@ public class LinkyHandler extends BaseThingHandler { private @Nullable EnedisHttpApi enedisApi; private double divider = 1.00; + public String userId = ""; + private @Nullable ScheduledFuture pollingJob = null; private enum Target { @@ -242,6 +244,8 @@ public class LinkyHandler extends BaseThingHandler { Contract contract = Contract.convertFromPrmDetail(details); UsagePoint usagePoint = UsagePoint.convertFromPrmDetail(prmInfo, details); + this.userId = userInfo.userProperties.internId; + updateMetaData(identity, contact, contract, usagePoint); updateProperties(Map.of(USER_ID, userInfo.userProperties.internId, PUISSANCE, @@ -598,7 +602,7 @@ public class LinkyHandler extends BaseThingHandler { EnedisHttpApi api = this.enedisApi; if (api != null) { try { - MeterReading meterReading = api.getEnergyData(this, config.prmId, from, to); + MeterReading meterReading = api.getEnergyData(this, this.userId, config.prmId, from, to); return meterReading; } catch (LinkyException e) { logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); @@ -616,7 +620,7 @@ public class LinkyHandler extends BaseThingHandler { EnedisHttpApi api = this.enedisApi; if (api != null) { try { - MeterReading meterReading = api.getLoadCurveData(this, config.prmId, from, to); + MeterReading meterReading = api.getLoadCurveData(this, this.userId, config.prmId, from, to); return meterReading; } catch (LinkyException e) { logger.debug("Exception when getting consumption data: {}", e.getMessage(), e); @@ -634,7 +638,7 @@ public class LinkyHandler extends BaseThingHandler { EnedisHttpApi api = this.enedisApi; if (api != null) { try { - MeterReading meterReading = api.getPowerData(this, config.prmId, from, to); + MeterReading meterReading = api.getPowerData(this, this.userId, config.prmId, from, to); return meterReading; } catch (LinkyException e) { logger.debug("Exception when getting power data: {}", e.getMessage(), e); From ca3942c6e6c104b40b2c222e243b4760a1d03116 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 8 Jan 2025 09:36:05 +0100 Subject: [PATCH 130/135] review connection error handling Signed-off-by: Laurent ARNAL --- .../linky/internal/api/EnedisHttpApi.java | 64 ++++++++++--------- .../internal/handler/LinkyBridgeHandler.java | 5 ++ .../linky/internal/handler/LinkyHandler.java | 5 ++ 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 114151a1b14..f8bae7b9a12 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -27,6 +27,7 @@ import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.util.FormContentProvider; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; +import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.util.Fields; import org.openhab.binding.linky.internal.LinkyException; import org.openhab.binding.linky.internal.dto.ConsumptionReport; @@ -99,26 +100,6 @@ public class EnedisHttpApi { private static String getContent(Logger logger, LinkyBridgeHandler linkyBridgeHandler, String url, HttpClient httpClient, String token) throws LinkyException { - int numberRetry = 0; - LinkyException lastException = null; - - while (numberRetry < 3) { - try { - return getContentInternal(logger, linkyBridgeHandler, url, httpClient, token); - } catch (LinkyException ex) { - lastException = ex; - - // try to reinit connection, fail after 3 attemps - linkyBridgeHandler.connectionInit(); - } - numberRetry++; - } - - throw Objects.requireNonNull(lastException); - } - - private static String getContentInternal(Logger logger, LinkyBridgeHandler linkyBridgeHandler, String url, - HttpClient httpClient, String token) throws LinkyException { try { Request request = httpClient.newRequest(url); @@ -130,14 +111,16 @@ public class EnedisHttpApi { } ContentResponse result = request.send(); - if (result.getStatus() == 307) { + if (result.getStatus() == HttpStatus.TEMPORARY_REDIRECT_307 + || result.getStatus() == HttpStatus.MOVED_TEMPORARILY_302) { String loc = result.getHeaders().get("Location"); String newUrl = linkyBridgeHandler.getBaseUrl() + loc.substring(1); request = httpClient.newRequest(newUrl); request = request.method(HttpMethod.GET); result = request.send(); - if (result.getStatus() == 307) { + if (result.getStatus() == HttpStatus.TEMPORARY_REDIRECT_307 + || result.getStatus() == HttpStatus.MOVED_TEMPORARILY_302) { loc = result.getHeaders().get("Location"); String[] urlParts = loc.split("/"); if (urlParts.length < 4) { @@ -163,18 +146,37 @@ public class EnedisHttpApi { linkyBridgeHandler.initialize(); } - String data = getContent(handler, url); + int numberRetry = 0; + LinkyException lastException = null; + logger.debug("getData begin {}: {}", clazz.getName(), url); - if (data.isEmpty()) { - throw new LinkyException("Requesting '%s' returned an empty response", url); + while (numberRetry < 3) { + try { + String data = getContent(handler, url); + + if (!data.isEmpty()) { + try { + logger.debug("getData success {}: {}", clazz.getName(), url); + return Objects.requireNonNull(gson.fromJson(data, clazz)); + } catch (JsonSyntaxException e) { + logger.debug("Invalid JSON response not matching {}: {}", clazz.getName(), data); + throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); + } + } + } catch (LinkyException ex) { + lastException = ex; + + logger.debug("getData error {}: {} , retry{}", clazz.getName(), url, numberRetry); + + // try to reinit connection, fail after 3 attemps + linkyBridgeHandler.connectionInit(); + } + numberRetry++; } - try { - return Objects.requireNonNull(gson.fromJson(data, clazz)); - } catch (JsonSyntaxException e) { - logger.debug("Invalid JSON response not matching {}: {}", clazz.getName(), data); - throw new LinkyException(e, "Requesting '%s' returned an invalid JSON response", url); - } + logger.debug("getData error {}: {} , maxRetry", clazz.getName(), url); + + throw Objects.requireNonNull(lastException); } public PrmInfo getPrmInfo(LinkyHandler handler, String internId, String prmId) throws LinkyException { diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index bf95b74d6f0..30e76d67431 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -159,6 +159,11 @@ public abstract class LinkyBridgeHandler extends BaseBridgeHandler { super.dispose(); } + @Override + protected void updateStatus(ThingStatus status, ThingStatusDetail statusDetail, @Nullable String description) { + super.updateStatus(status, statusDetail, description); + } + public abstract String getToken(LinkyHandler handler) throws LinkyException; @Override diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index a7d5a7f5841..2fd32f8a140 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -189,6 +189,11 @@ public class LinkyHandler extends BaseThingHandler { } } + @Override + protected void updateStatus(ThingStatus status, ThingStatusDetail statusDetail, @Nullable String description) { + super.updateStatus(status, statusDetail, description); + } + public boolean supportNewApiFormat() throws LinkyException { Bridge bridge = getBridge(); if (bridge == null) { From 4a7dbdf0557e2a2c03cdac1770b5c38bf2792a69 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 8 Jan 2025 09:48:54 +0100 Subject: [PATCH 131/135] fix headers Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/LinkyAuthServlet.java | 2 +- .../openhab/binding/linky/internal/LinkyBindingConstants.java | 2 +- .../org/openhab/binding/linky/internal/LinkyConfiguration.java | 2 +- .../java/org/openhab/binding/linky/internal/LinkyException.java | 2 +- .../org/openhab/binding/linky/internal/LinkyHandlerFactory.java | 2 +- .../org/openhab/binding/linky/internal/api/EnedisHttpApi.java | 2 +- .../openhab/binding/linky/internal/api/ExpiringDayCache.java | 2 +- .../binding/linky/internal/console/LinkyCommandExtension.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/AuthData.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/AuthResult.java | 2 +- .../openhab/binding/linky/internal/dto/ConsumptionReport.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/Contact.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/Contract.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/Identity.java | 2 +- .../org/openhab/binding/linky/internal/dto/IntervalReading.java | 2 +- .../org/openhab/binding/linky/internal/dto/MeterReading.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/PrmDetail.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/PrmInfo.java | 2 +- .../org/openhab/binding/linky/internal/dto/ReadingType.java | 2 +- .../org/openhab/binding/linky/internal/dto/ResponseContact.java | 2 +- .../openhab/binding/linky/internal/dto/ResponseContract.java | 2 +- .../openhab/binding/linky/internal/dto/ResponseIdentity.java | 2 +- .../org/openhab/binding/linky/internal/dto/ResponseMeter.java | 2 +- .../org/openhab/binding/linky/internal/dto/ResponseTempo.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/TempoDay.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/UsagePoint.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/UserInfo.java | 2 +- .../binding/linky/internal/handler/ApiBridgeHandler.java | 2 +- .../binding/linky/internal/handler/EnedisBridgeHandler.java | 2 +- .../binding/linky/internal/handler/EnedisWebBridgeHandler.java | 2 +- .../binding/linky/internal/handler/LinkyBridgeHandler.java | 2 +- .../openhab/binding/linky/internal/handler/LinkyHandler.java | 2 +- .../linky/internal/handler/MyElectricalDataBridgeHandler.java | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index d04e0fa432a..a5abcb04fec 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java index 48d1a785f3b..a4eb953e122 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyBindingConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java index fa967723928..fbe4dff6744 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyException.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyException.java index 728078d5bc2..1782d99eff3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyException.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyException.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index 2ce3cc1e98e..7ae9395ba5a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index f8bae7b9a12..57155ee8fda 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/ExpiringDayCache.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/ExpiringDayCache.java index c172806dc24..cd864db455b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/ExpiringDayCache.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/ExpiringDayCache.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java index 95d54a81224..5b9ae977a26 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/console/LinkyCommandExtension.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java index 8d92ddd2c02..175bdcba0b8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthData.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java index 8339f1436ae..8bbbb18a012 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/AuthResult.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java index edb22034620..ea347cf4e3e 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ConsumptionReport.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java index db8124d49ab..22c8583ef63 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java index d7d1b015cc8..061b2579352 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java index 217af3eafb7..91dc13ea0bc 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index 7b5eca9cb5b..06afb18ec05 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 6d833f98a84..57bd6dbc158 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java index 7df3627151c..e8f8cc30b3c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmDetail.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java index bdf053a7f6d..9c9b9742eb8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/PrmInfo.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java index c2298547388..05b127f3b95 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java index da25eca1ab3..b8bf45b0f84 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java index ff1d5ed84da..2bde5824957 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java index a86ba16175f..fdc4d366fef 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java index b9c8a5476d9..cafde95ed64 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java index f3dda97d2f1..329ccf864c5 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java index d5aeeef0dc3..c4ae1e27d5b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index df5330af903..f3e2d83188f 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UserInfo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UserInfo.java index 65e6052fa43..f9f438ea692 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UserInfo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UserInfo.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 1b7295727d5..3eb7443e3c3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 635e0fb6a69..19f0bf60cff 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index c3ba9ea8b53..cd901606fac 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 30e76d67431..3bad82ab718 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 2fd32f8a140..89801710664 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index d8fc1d6b681..bf7abbac974 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2010-2024 Contributors to the openHAB project + * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional * information. From 36057e312d9733848836a67dc5f6568e9e61ff80 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 8 Jan 2025 10:02:12 +0100 Subject: [PATCH 132/135] fix headers Signed-off-by: Laurent ARNAL --- .../java/org/openhab/binding/linky/internal/dto/Contact.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/Identity.java | 2 +- .../org/openhab/binding/linky/internal/dto/IntervalReading.java | 2 +- .../org/openhab/binding/linky/internal/dto/MeterReading.java | 2 +- .../org/openhab/binding/linky/internal/dto/ReadingType.java | 2 +- .../org/openhab/binding/linky/internal/dto/ResponseContact.java | 2 +- .../openhab/binding/linky/internal/dto/ResponseContract.java | 2 +- .../openhab/binding/linky/internal/dto/ResponseIdentity.java | 2 +- .../org/openhab/binding/linky/internal/dto/ResponseMeter.java | 2 +- .../org/openhab/binding/linky/internal/dto/ResponseTempo.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/TempoDay.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/UsagePoint.java | 2 +- .../binding/linky/internal/handler/ApiBridgeHandler.java | 2 +- .../binding/linky/internal/handler/EnedisBridgeHandler.java | 2 +- .../binding/linky/internal/handler/EnedisWebBridgeHandler.java | 2 +- .../binding/linky/internal/handler/LinkyBridgeHandler.java | 2 +- .../linky/internal/handler/MyElectricalDataBridgeHandler.java | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java index 22c8583ef63..ee7cef390d3 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contact.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java index 91dc13ea0bc..6a95b16d689 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Identity.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java index 06afb18ec05..8ca5b835e64 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/IntervalReading.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java index 57bd6dbc158..f4de7ff4113 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/MeterReading.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java index 05b127f3b95..0fd6cd37b46 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ReadingType.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java index b8bf45b0f84..e773f59a08c 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContact.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java index 2bde5824957..7385f7d0992 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseContract.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java index fdc4d366fef..00b07e46ad6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseIdentity.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java index cafde95ed64..36c0e7ff092 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseMeter.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java index 329ccf864c5..a6a1a5d0bc1 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/ResponseTempo.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java index c4ae1e27d5b..132089acf24 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoDay.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java index f3e2d83188f..d53faade17a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/UsagePoint.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java index 3eb7443e3c3..d66064b908a 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/ApiBridgeHandler.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java index 19f0bf60cff..04607ecb341 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisBridgeHandler.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java index cd901606fac..8a10c56519b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/EnedisWebBridgeHandler.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java index 3bad82ab718..a144a02a9a6 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyBridgeHandler.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java index bf7abbac974..13a55386f4b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/MyElectricalDataBridgeHandler.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional From 1670c52981f182c05d39ad1c606039b1d977755d Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 8 Jan 2025 10:05:11 +0100 Subject: [PATCH 133/135] fix headers Signed-off-by: Laurent ARNAL --- .../org/openhab/binding/linky/internal/LinkyAuthServlet.java | 2 +- .../java/org/openhab/binding/linky/internal/dto/Contract.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index a5abcb04fec..74700035bef 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java index 061b2579352..1e5899aa424 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/Contract.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2010-2025 Contributors to the openHAB project * * See the NOTICE file(s) distributed with this work for additional From 7931a14bf2426031757f85a4c55fdc9937553cd3 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 8 Jan 2025 11:36:43 +0100 Subject: [PATCH 134/135] review timezone handling Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyConfiguration.java | 4 ++- .../linky/internal/LinkyHandlerFactory.java | 8 +++-- .../linky/internal/handler/LinkyHandler.java | 34 +++++++++++++++---- .../resources/OH-INF/thing/thing-types.xml | 7 ++++ 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java index 1523ec7d17c..fd6608864d9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyConfiguration.java @@ -13,6 +13,7 @@ package org.openhab.binding.linky.internal; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.config.core.Configuration; /** * The {@link LinkyConfiguration} is the class used to match the @@ -22,10 +23,11 @@ import org.eclipse.jdt.annotation.NonNullByDefault; * @author Laurent Arnal - Rewrite addon to use official dataconect API */ @NonNullByDefault -public class LinkyConfiguration { +public class LinkyConfiguration extends Configuration { public static final String INTERNAL_AUTH_ID = "internalAuthId"; public String token = ""; + public String timezone = ""; public String prmId = ""; public String clientId = ""; public String clientSecret = ""; diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index a7b7a91a16e..ef1b2068640 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -29,6 +29,7 @@ import org.openhab.binding.linky.internal.handler.LinkyHandler; import org.openhab.binding.linky.internal.handler.MyElectricalDataBridgeHandler; import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.i18n.LocaleProvider; +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; @@ -80,6 +81,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { private final HttpService httpService; private final ThingRegistry thingRegistry; private final ComponentContext componentContext; + private final TimeZoneProvider timeZoneProvider; private final Gson gson = new GsonBuilder() .registerTypeAdapter(ZonedDateTime.class, @@ -106,9 +108,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { public LinkyHandlerFactory(final @Reference LocaleProvider localeProvider, final @Reference HttpClientFactory httpClientFactory, final @Reference OAuthFactory oAuthFactory, final @Reference HttpService httpService, final @Reference ThingRegistry thingRegistry, - ComponentContext componentContext) { + ComponentContext componentContext, final @Reference TimeZoneProvider timeZoneProvider) { this.localeProvider = localeProvider; - + this.timeZoneProvider = timeZoneProvider; this.httpClientFactory = httpClientFactory; this.oAuthFactory = oAuthFactory; this.httpService = httpService; @@ -141,7 +143,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory { this.httpClientFactory, this.oAuthFactory, this.httpService, thingRegistry, componentContext, gson); return handler; } else if (THING_TYPE_LINKY.equals(thing.getThingTypeUID())) { - LinkyHandler handler = new LinkyHandler(thing, localeProvider); + LinkyHandler handler = new LinkyHandler(thing, localeProvider, timeZoneProvider); return handler; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 032c290c93b..1342bb0f0d4 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -20,7 +20,6 @@ import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; -import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.WeekFields; @@ -50,6 +49,7 @@ import org.openhab.binding.linky.internal.dto.UsagePoint; import org.openhab.binding.linky.internal.dto.UserInfo; import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; +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.QuantityType; @@ -84,6 +84,9 @@ import org.threeten.extra.Years; @NonNullByDefault public class LinkyHandler extends BaseThingHandler { + private final TimeZoneProvider timeZoneProvider; + private ZoneId zoneId = ZoneId.systemDefault(); + private static final int REFRESH_FIRST_HOUR_OF_DAY = 1; private static final int REFRESH_INTERVAL_IN_MIN = 120; @@ -109,10 +112,11 @@ public class LinkyHandler extends BaseThingHandler { ALL } - public LinkyHandler(Thing thing, LocaleProvider localeProvider) { + public LinkyHandler(Thing thing, LocaleProvider localeProvider, TimeZoneProvider timeZoneProvider) { super(thing); config = getConfigAs(LinkyConfiguration.class); + this.timeZoneProvider = timeZoneProvider; this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); @@ -166,6 +170,22 @@ public class LinkyHandler extends BaseThingHandler { public synchronized void initialize() { logger.debug("Initializing Linky handler."); + // update the timezone if not set to default to openhab default timezone + Configuration thingConfig = getConfig(); + + Object val = thingConfig.get("timezone"); + if (val == null || "".equals(val)) { + zoneId = this.timeZoneProvider.getTimeZone(); + thingConfig.put("timezone", zoneId.getId()); + } else { + zoneId = ZoneId.of((String) val); + } + + saveConfiguration(thingConfig); + + // reread config to update timezone field + config = getConfigAs(LinkyConfiguration.class); + Bridge bridge = getBridge(); if (bridge == null) { return; @@ -386,15 +406,15 @@ public class LinkyHandler extends BaseThingHandler { updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_1, values.baseValue[dSize - 1].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_1, - new DateTimeType(values.baseValue[dSize - 1].date.atZone(ZoneId.systemDefault()))); + new DateTimeType(values.baseValue[dSize - 1].date.atZone(zoneId))); updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_2, values.baseValue[dSize - 2].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_2, - new DateTimeType(values.baseValue[dSize - 2].date.atZone(ZoneId.systemDefault()))); + new DateTimeType(values.baseValue[dSize - 2].date.atZone(zoneId))); updatekVAChannel(DAILY_GROUP, PEAK_POWER_DAY_MINUS_3, values.baseValue[dSize - 3].value); updateState(DAILY_GROUP, PEAK_POWER_TS_DAY_MINUS_3, - new DateTimeType(values.baseValue[dSize - 3].date.atZone(ZoneId.systemDefault()))); + new DateTimeType(values.baseValue[dSize - 3].date.atZone(zoneId))); updatePowerTimeSeries(DAILY_GROUP, MAX_POWER_CHANNEL, values.baseValue); updatePowerTimeSeries(WEEKLY_GROUP, MAX_POWER_CHANNEL, values.weekValue); @@ -482,7 +502,7 @@ public class LinkyHandler extends BaseThingHandler { continue; } - Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); + Instant timestamp = iv[i].date.atZone(zoneId).toInstant(); if (Double.isNaN(iv[i].value)) { continue; @@ -504,7 +524,7 @@ public class LinkyHandler extends BaseThingHandler { continue; } - Instant timestamp = iv[i].date.toInstant(ZoneOffset.UTC); + Instant timestamp = iv[i].date.atZone(zoneId).toInstant(); if (Double.isNaN(iv[i].value)) { continue; diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index b1534ee5e3b..0df3f46f919 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -97,6 +97,13 @@ Your prmId + + + The timezone associated with your Point of delivery. + Will default to openhab default timezone. + You will need to change this if your linky is located in a different timezone that your openhab location. + You can use an offset, or a label like Europe/Paris + Your Enedis token (can be left empty, use the connection page to automatically fill it From bdca404dea77d7ac074bd437def87749f8ecb004 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Wed, 8 Jan 2025 12:00:06 +0100 Subject: [PATCH 135/135] spotless:apply Signed-off-by: Laurent ARNAL --- .../main/resources/OH-INF/thing/thing-types.xml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml index 0df3f46f919..fcdc03ac268 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.linky/src/main/resources/OH-INF/thing/thing-types.xml @@ -98,12 +98,14 @@ Your prmId - - The timezone associated with your Point of delivery. - Will default to openhab default timezone. - You will need to change this if your linky is located in a different timezone that your openhab location. - You can use an offset, or a label like Europe/Paris - + + The timezone associated with your Point of delivery. + Will default to openhab default timezone. + You will + need to change this if your linky is located in a different timezone that your openhab location. + You can use an + offset, or a label like Europe/Paris + Your Enedis token (can be left empty, use the connection page to automatically fill it

    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 literal 0 HcmV?d00001 From f463db60d86e311a86d00b7e3abc5f33b1083752 Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Tue, 20 Aug 2024 10:17:22 +0200 Subject: [PATCH 078/135] review LinkAuthServlet to provide better wizard for connectlinky Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthServlet.java | 16 ++- .../resources/templates/enedis-step1.html | 2 +- .../resources/templates/enedis-step3-cb.html | 18 ++- .../src/main/resources/templates/index.html | 118 +++++------------- .../templates/myelectricaldata-step2.html | 3 +- .../templates/myelectricaldata-step3.html | 67 ++++++---- 6 files changed, 99 insertions(+), 125 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index 3450236755c..ed27cdc271b 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -64,6 +64,9 @@ public class LinkyAuthServlet extends HttpServlet { private static final String KEY_PRMID = "prmId.Value"; private static final String KEY_PRMID_OPTION = "prmId.Option"; private static final String KEY_AUTHORIZED_USER = "authorizedUser"; + private static final String KEY_CB_DISPLAY_CONFIRMATION = "cb.displayConfirmation"; + private static final String KEY_CB_DISPLAY_ERROR = "cb.displayError"; + private static final String KEY_CB_DISPLAY_INSTRUCTION = "cb.displayInstruction"; private static final String KEY_ERROR = "error"; private static final String KEY_PAGE_REFRESH = "pageRefresh"; @@ -126,7 +129,9 @@ public class LinkyAuthServlet extends HttpServlet { String servletBaseUrl = requestUrl != null ? requestUrl.toString() : ""; String template = ""; - if (servletBaseUrl.contains("enedis-step1")) { + if (servletBaseUrl.contains("index")) { + template = index; + } else if (servletBaseUrl.contains("enedis-step1")) { template = enedisStep1; } else if (servletBaseUrl.contains("enedis-step2")) { template = enedisStep2; @@ -203,6 +208,9 @@ public class LinkyAuthServlet extends HttpServlet { replaceMap.put(KEY_AUTHORIZED_USER, ""); replaceMap.put(KEY_ERROR, ""); replaceMap.put(KEY_PAGE_REFRESH, ""); + replaceMap.put(KEY_CB_DISPLAY_CONFIRMATION, "none"); + replaceMap.put(KEY_CB_DISPLAY_ERROR, "none"); + replaceMap.put(KEY_CB_DISPLAY_INSTRUCTION, "true"); if (queryString != null) { final MultiMap params = new MultiMap<>(); @@ -217,8 +225,14 @@ public class LinkyAuthServlet extends HttpServlet { if (!StringUtil.isBlank(reqError)) { logger.debug("Linky redirected with an error: {}", reqError); + replaceMap.put(KEY_CB_DISPLAY_ERROR, "true"); + replaceMap.put(KEY_CB_DISPLAY_CONFIRMATION, "none"); + replaceMap.put(KEY_CB_DISPLAY_INSTRUCTION, "none"); replaceMap.put(KEY_ERROR, String.format(HTML_ERROR, reqError)); } else if (!StringUtil.isBlank(reqState)) { + replaceMap.put(KEY_CB_DISPLAY_ERROR, "none"); + replaceMap.put(KEY_CB_DISPLAY_CONFIRMATION, "true"); + replaceMap.put(KEY_CB_DISPLAY_INSTRUCTION, "none"); try { replaceMap.put(KEY_AUTHORIZED_USER, String.format(HTML_USER_AUTHORIZED, reqCode + " / " + apiBridgeHandler.authorize(servletBaseURL, reqState, reqCode))); diff --git a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html index 4425a5fe8e5..73e9d5bba25 100644 --- a/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html +++ b/bundles/org.openhab.binding.linky/src/main/resources/templates/enedis-step1.html @@ -172,7 +172,7 @@ function retrieveToken()