From 6427d9898a33980e5feadb7c20f928f69954c754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20L=27hopital?= Date: Thu, 23 Sep 2021 14:53:22 +0200 Subject: [PATCH 1/8] Added semantic tags Make it ready for online translation of texts. Small code improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Gaël L'hopital --- .../internal/SagerCasterBindingConstants.java | 11 +- .../internal/SagerCasterHandlerFactory.java | 7 +- .../internal/SagerWeatherCaster.java | 5 +- .../SagerCasterDiscoveryService.java | 34 ++- .../internal/handler/ExpiringMap.java | 8 +- .../internal/handler/SagerCasterHandler.java | 54 ++--- .../main/resources/OH-INF/binding/binding.xml | 4 +- .../OH-INF/i18n/sagercaster.properties | 106 ++++++++ .../OH-INF/i18n/sagercaster_de.properties | 116 ++++----- .../OH-INF/i18n/sagercaster_fr.properties | 154 +++++++----- .../resources/OH-INF/thing/thing-types.xml | 229 +++++++++--------- 11 files changed, 426 insertions(+), 302 deletions(-) create mode 100644 bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java index aacd92956938f..90f576cd525d9 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java @@ -12,6 +12,11 @@ */ package org.openhab.binding.sagercaster.internal; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.ThingTypeUID; @@ -35,7 +40,6 @@ public class SagerCasterBindingConstants { public static final String CONFIG_PERIOD = "observation-period"; // List of all Channel Groups Group Channel ids - public static final String GROUP_INPUT = "input"; public static final String GROUP_OUTPUT = "output"; // Output channel ids @@ -55,4 +59,9 @@ public class SagerCasterBindingConstants { public static final String CHANNEL_TEMPERATURE = "temperature"; public static final String CHANNEL_PRESSURE = "pressure"; public static final String CHANNEL_WIND_ANGLE = "wind-angle"; + + // Some algorythms constants + public final static String FORECAST_PENDING = "0"; + public final static Set SHOWERS = Collections + .unmodifiableSet(new HashSet<>(Arrays.asList("G", "K", "L", "R", "S", "T", "U", "W"))); } diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterHandlerFactory.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterHandlerFactory.java index 9cd79feb9e605..aa8b7ff7998fd 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterHandlerFactory.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterHandlerFactory.java @@ -58,9 +58,8 @@ public boolean supportsThingType(ThingTypeUID thingTypeUID) { protected @Nullable ThingHandler createHandler(Thing thing) { ThingTypeUID thingTypeUID = thing.getThingTypeUID(); - if (thingTypeUID.equals(THING_TYPE_SAGERCASTER)) { - return new SagerCasterHandler(thing, stateDescriptionProvider, sagerWeatherCaster); - } - return null; + return thingTypeUID.equals(THING_TYPE_SAGERCASTER) + ? new SagerCasterHandler(thing, stateDescriptionProvider, sagerWeatherCaster) + : null; } } diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java index f629c7ea85a56..5451f7b71d8c1 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java @@ -76,8 +76,6 @@ @Component(service = SagerWeatherCaster.class, scope = ServiceScope.SINGLETON) @NonNullByDefault public class SagerWeatherCaster { - private final Properties forecaster = new Properties(); - // Northern Polar Zone & Northern Tropical Zone private final static String[] NPZDIRECTIONS = { "S", "SW", "W", "NW", "N", "NE", "E", "SE" }; // Northern Temperate Zone @@ -88,9 +86,10 @@ public class SagerWeatherCaster { private final static String[] STZDIRECTIONS = { "S", "SE", "E", "NE", "N", "NW", "W", "SW" }; private final Logger logger = LoggerFactory.getLogger(SagerWeatherCaster.class); + private final Properties forecaster = new Properties(); private Optional prevision = Optional.empty(); - private @NonNullByDefault({}) String[] usedDirections; + private String[] usedDirections = NTZDIRECTIONS; // Defaulted to Northern Zone private int currentBearing = -1; private int windEvolution = -1; // Whether the wind during the last 6 hours has changed its direction by diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java index 8ad3363106769..62ceadec34ed8 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java @@ -30,6 +30,7 @@ import org.openhab.core.library.types.PointType; import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.ThingUID; +import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; @@ -46,8 +47,8 @@ public class SagerCasterDiscoveryService extends AbstractDiscoveryService { private final Logger logger = LoggerFactory.getLogger(SagerCasterDiscoveryService.class); private static final int DISCOVER_TIMEOUT_SECONDS = 30; private static final int LOCATION_CHANGED_CHECK_INTERVAL = 60; - private @NonNullByDefault({}) LocationProvider locationProvider; - private @NonNullByDefault({}) ScheduledFuture sagerCasterDiscoveryJob; + private final LocationProvider locationProvider; + private @Nullable ScheduledFuture discoveryJob; private @Nullable PointType previousLocation; private static final ThingUID sagerCasterThing = new ThingUID(THING_TYPE_SAGERCASTER, LOCAL); @@ -55,8 +56,10 @@ public class SagerCasterDiscoveryService extends AbstractDiscoveryService { /** * Creates a SagerCasterDiscoveryService with enabled autostart. */ - public SagerCasterDiscoveryService() { + @Activate + public SagerCasterDiscoveryService(final @Reference LocationProvider locationProvider) { super(new HashSet<>(Arrays.asList(new ThingTypeUID(BINDING_ID, "-"))), DISCOVER_TIMEOUT_SECONDS, true); + this.locationProvider = locationProvider; } @Override @@ -82,8 +85,8 @@ protected void startScan() { @Override protected void startBackgroundDiscovery() { - if (sagerCasterDiscoveryJob == null) { - sagerCasterDiscoveryJob = scheduler.scheduleWithFixedDelay(() -> { + if (discoveryJob == null) { + discoveryJob = scheduler.scheduleWithFixedDelay(() -> { PointType currentLocation = locationProvider.getLocation(); if (currentLocation != null && !Objects.equals(currentLocation, previousLocation)) { logger.debug("Location has been changed from {} to {}: Creating new discovery results", @@ -99,28 +102,19 @@ protected void startBackgroundDiscovery() { @Override protected void stopBackgroundDiscovery() { + ScheduledFuture localJob = this.discoveryJob; logger.debug("Stopping Sager Weathercaster background discovery"); - if (sagerCasterDiscoveryJob != null && !sagerCasterDiscoveryJob.isCancelled()) { - if (sagerCasterDiscoveryJob.cancel(true)) { - sagerCasterDiscoveryJob = null; + if (localJob != null && !localJob.isCancelled()) { + if (localJob.cancel(true)) { + discoveryJob = null; logger.debug("Stopped SagerCaster device background discovery"); } } } public void createResults(PointType location) { - String propGeolocation; - propGeolocation = String.format("%s,%s", location.getLatitude(), location.getLongitude()); - thingDiscovered(DiscoveryResultBuilder.create(sagerCasterThing).withLabel("Local Sager Weathercaster") + String propGeolocation = String.format("%s,%s", location.getLatitude(), location.getLongitude()); + thingDiscovered(DiscoveryResultBuilder.create(sagerCasterThing).withLabel("Local Weather Forecast") .withRepresentationProperty(CONFIG_LOCATION).withProperty(CONFIG_LOCATION, propGeolocation).build()); } - - @Reference - protected void setLocationProvider(LocationProvider locationProvider) { - this.locationProvider = locationProvider; - } - - protected void unsetLocationProvider(LocationProvider locationProvider) { - this.locationProvider = null; - } } diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java index 612a8be336528..73de9b823a46b 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java @@ -38,10 +38,10 @@ public void put(T newValue) { long now = System.currentTimeMillis(); values.put(now, newValue); Optional eldestKey = values.keySet().stream().filter(key -> key < now - eldestAge).findFirst(); - if (eldestKey.isPresent()) { - agedValue = Optional.ofNullable(values.get(eldestKey.get())); - values.entrySet().removeIf(map -> map.getKey() <= eldestKey.get()); - } + eldestKey.ifPresent(eldest -> { + agedValue = Optional.ofNullable(values.get(eldest)); + values.entrySet().removeIf(map -> map.getKey() <= eldest); + }); } public Optional getAgedValue() { diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java index 322da57cdcd33..b7ea1c77d8e1e 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java @@ -17,16 +17,11 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.concurrent.TimeUnit; import javax.measure.quantity.Angle; -import javax.measure.quantity.Dimensionless; import javax.measure.quantity.Pressure; import javax.measure.quantity.Temperature; @@ -56,10 +51,6 @@ */ @NonNullByDefault public class SagerCasterHandler extends BaseThingHandler { - private final static String FORECAST_PENDING = "0"; - private final static Set SHOWERS = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList("G", "K", "L", "R", "S", "T", "U", "W"))); - private final Logger logger = LoggerFactory.getLogger(SagerCasterHandler.class); private final SagerWeatherCaster sagerWeatherCaster; private final WindDirectionStateDescriptionProvider stateDescriptionProvider; @@ -82,7 +73,7 @@ public void initialize() { int observationPeriod = ((BigDecimal) getConfig().get(CONFIG_PERIOD)).intValue(); String latitude = location.split(",")[0]; sagerWeatherCaster.setLatitude(Double.parseDouble(latitude)); - long period = TimeUnit.SECONDS.toMillis(observationPeriod); + long period = TimeUnit.HOURS.toMillis(observationPeriod); pressureCache.setObservationPeriod(period); bearingCache.setObservationPeriod(period); temperatureCache.setObservationPeriod(period); @@ -116,8 +107,7 @@ public void handleCommand(ChannelUID channelUID, Command command) { case CHANNEL_CLOUDINESS: logger.debug("Octa cloud level changed, updating forecast"); if (command instanceof QuantityType) { - @SuppressWarnings("unchecked") - QuantityType cloudiness = (QuantityType) command; + QuantityType cloudiness = (QuantityType) command; scheduler.submit(() -> { sagerWeatherCaster.setCloudLevel(cloudiness.intValue()); postNewForecast(); @@ -127,7 +117,7 @@ public void handleCommand(ChannelUID channelUID, Command command) { case CHANNEL_IS_RAINING: logger.debug("Rain status updated, updating forecast"); if (command instanceof OnOffType) { - OnOffType isRaining = ((OnOffType) command); + OnOffType isRaining = (OnOffType) command; scheduler.submit(() -> { sagerWeatherCaster.setRaining(isRaining == OnOffType.ON); postNewForecast(); @@ -139,13 +129,13 @@ public void handleCommand(ChannelUID channelUID, Command command) { case CHANNEL_RAIN_QTTY: logger.debug("Rain status updated, updating forecast"); if (command instanceof QuantityType) { - QuantityType newQtty = ((QuantityType) command); + QuantityType newQtty = (QuantityType) command; scheduler.submit(() -> { sagerWeatherCaster.setRaining(newQtty.doubleValue() > 0); postNewForecast(); }); } else if (command instanceof DecimalType) { - DecimalType newQtty = ((DecimalType) command); + DecimalType newQtty = (DecimalType) command; scheduler.submit(() -> { sagerWeatherCaster.setRaining(newQtty.doubleValue() > 0); postNewForecast(); @@ -175,18 +165,12 @@ public void handleCommand(ChannelUID channelUID, Command command) { .toUnit(HECTO(SIUnits.PASCAL)); if (newPressure != null) { pressureCache.put(newPressure); - Optional> agedPressure = pressureCache.getAgedValue(); - if (agedPressure.isPresent()) { - scheduler.submit(() -> { - sagerWeatherCaster.setPressure(newPressure.doubleValue(), - agedPressure.get().doubleValue()); - updateChannelString(GROUP_OUTPUT, CHANNEL_PRESSURETREND, - String.valueOf(sagerWeatherCaster.getPressureEvolution())); - postNewForecast(); - }); - } else { - updateChannelString(GROUP_OUTPUT, CHANNEL_FORECAST, FORECAST_PENDING); - } + pressureCache.getAgedValue().ifPresentOrElse(pressure -> scheduler.submit(() -> { + sagerWeatherCaster.setPressure(newPressure.doubleValue(), pressure.doubleValue()); + updateChannelString(GROUP_OUTPUT, CHANNEL_PRESSURETREND, + String.valueOf(sagerWeatherCaster.getPressureEvolution())); + postNewForecast(); + }), () -> updateChannelString(GROUP_OUTPUT, CHANNEL_FORECAST, FORECAST_PENDING)); } } break; @@ -200,12 +184,12 @@ public void handleCommand(ChannelUID channelUID, Command command) { temperatureCache.put(newTemperature); currentTemp = newTemperature.intValue(); Optional> agedTemperature = temperatureCache.getAgedValue(); - if (agedTemperature.isPresent()) { - double delta = newTemperature.doubleValue() - agedTemperature.get().doubleValue(); + agedTemperature.ifPresent(temperature -> { + double delta = newTemperature.doubleValue() - temperature.doubleValue(); String trend = (delta > 3) ? "1" : (delta > 0.3) ? "2" : (delta > -0.3) ? "3" : (delta > -3) ? "4" : "5"; updateChannelString(GROUP_OUTPUT, CHANNEL_TEMPERATURETREND, trend); - } + }); } } break; @@ -216,14 +200,14 @@ public void handleCommand(ChannelUID channelUID, Command command) { QuantityType newAngle = (QuantityType) command; bearingCache.put(newAngle); Optional> agedAngle = bearingCache.getAgedValue(); - if (agedAngle.isPresent()) { + agedAngle.ifPresent(angle -> { scheduler.submit(() -> { - sagerWeatherCaster.setBearing(newAngle.intValue(), agedAngle.get().intValue()); + sagerWeatherCaster.setBearing(newAngle.intValue(), angle.intValue()); updateChannelString(GROUP_OUTPUT, CHANNEL_WINDEVOLUTION, String.valueOf(sagerWeatherCaster.getWindEvolution())); postNewForecast(); }); - } + }); } break; default: @@ -270,14 +254,14 @@ private void postNewForecast() { updateChannelDecimal(GROUP_OUTPUT, CHANNEL_VELOCITY_BEAUFORT, predictedBeaufort); } - protected void updateChannelString(String group, String channelId, String value) { + private void updateChannelString(String group, String channelId, String value) { ChannelUID id = new ChannelUID(getThing().getUID(), group, channelId); if (isLinked(id)) { updateState(id, new StringType(value)); } } - protected void updateChannelDecimal(String group, String channelId, int value) { + private void updateChannelDecimal(String group, String channelId, int value) { ChannelUID id = new ChannelUID(getThing().getUID(), group, channelId); if (isLinked(id)) { updateState(id, new DecimalType(value)); diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/binding/binding.xml b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/binding/binding.xml index 072559afa3b4d..b243cddfacba9 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/binding/binding.xml +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/binding/binding.xml @@ -3,7 +3,7 @@ xmlns:binding="https://openhab.org/schemas/binding/v1.0.0" xsi:schemaLocation="https://openhab.org/schemas/binding/v1.0.0 https://openhab.org/schemas/binding-1.0.0.xsd"> - SagerCaster Binding - The Sager Weathercaster is a scientific instrument for accurate prediction of the weather. + @text/bindingName + @text/bindingDescription diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties new file mode 100644 index 0000000000000..fe742fe60f492 --- /dev/null +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties @@ -0,0 +1,106 @@ +# binding +bindingName = SagerCaster Binding +bindingDescription = The Sager Weathercaster is a scientific instrument for accurate prediction of the weather. + +# thing +sagercasterLabel = SagerCaster Thing +sagercasterDescription = This thing represents a forecast for a given location. + +# ting configuration +locationLabel = Location +locationDescription = Your geo coordinates separated with comma (e.g. "37.8,-122.4"). +observationLabel = Observation Period +observationDescription = SagerWeatherCaster needs a minimum representative period of time to produce meaningfull results (defaults to 6 hours). + +# channel groups +inputLabel = Inputs +inputDescription = The channels used to build the forecast results +outputLabel = Results +outputDescription = Results of the Sager Weathercaster algorithm + +# channels +windVelocity = Wind Velocity +windFrom = Wind from +windTo = Wind to +pressureTrendLabel = Pressure Trend +pressureTrendDescription = Pressure Evolution trend over observation delay +tempTrendLabel = Temperature Trend +tempTrendDescription = Temperature Evolution trend over observation delay +forecastLabel = Weather Forecast +windDirectionLabel = Wind Direction +windEvolutionLabel = Wind Evolution +windEvolutionDescription = Wind bearing evolution trend over observation delay +trendLabel = Measure Trend +trendDescription = Measure evolution trend over observation delay +timestampLabel = Calculation Time +timestampDescription = Weather forecast calculation date and time +cloudinessLabel = Cloudiness +cloudinessDescription = Current cloudiness. +rainQttyLabel = Rain Quantity +rainQttyDescription = Current rain quantity +rainingLabel = Raining +rainingDescription = Is it currently raining ? +beaufortLabel = Beaufort +beaufortDescription = Wind speed using Beaufort Scale +pressureDescription = Barometric pressure at sea level. + +# channel options +forecast0 = Not enough historic data to study pressure evolution, wait a bit ... +forecastA = Fair +forecastB = Fair and warmer +forecastC = Fair and cooler +forecastD = Unsettled +forecastE = Unsettled and warmer +forecastF = Unsettled and cooler +forecastG = Increasing cloudiness or overcast followed by Precipitation or showers/Flurries +forecastG1 = Increasing cloudiness or overcast followed by Precipitation or showers +forecastG2 = Increasing cloudiness or overcast followed by Precipitation or Flurries +forecastH = Increasing cloudiness or overcast followed by Precipitation or showers and warmer +forecastJ = Showers +forecastK = Showers/Flurries and warmer +forecastK1 = Showers and warmer +forecastK2 = Flurries and warmer +forecastL = Showers/Flurries and cooler +forecastL1 = Showers and cooler +forecastL2 = Flurries and cooler +forecastM = Precipitation +forecastN = Precipitation and warmer +forecastP = Precipitation and turning cooler; then improvement likely in 24 hours +forecastR = Precipitation or showers/Flurries followed by improvement (within 12 hours) +forecastR1 = Precipitation or showers followed by improvement (within 12 hours) +forecastR2 = Precipitation or flurries followed by improvement (within 12 hours) +forecastS = Precipitation or showers/Flurries followed by improvement (within 12 hours) and becoming cooler +forecastS1 = Precipitation or showers followed by improvement (within 12 hours) and becoming cooler +forecastS2 = Precipitation or flurries followed by improvement (within 12 hours) and becoming cooler +forecastT = Precipitation or showers/Flurries followed by improvement early in period (within 6 hours) +forecastT1 = Precipitation or showers followed by improvement early in period (within 6 hours) +forecastT2 = Precipitation or flurries followed by improvement early in period (within 6 hours) +forecastU = Precipitation or showers/Flurries by improvement early in period (within 6 hours) and becoming cooler +forecastU1 = Precipitation or showers by improvement early in period (within 6 hours) and becoming cooler +forecastU2 = Precipitation or flurries by improvement early in period (within 6 hours) and becoming cooler +forecastW = Precipitation or showers/Flurries followed by fair early in period (within 6 hours) and becoming cooler +forecastW1 = Precipitation or showers followed by fair early in period (within 6 hours) and becoming cooler +forecastW2 = Precipitation or flurries followed by fair early in period (within 6 hours) and becoming cooler +forecastX = Unsettled followed by fair +forecastY = Unsettled followed by fair early in period (within 6 hours) and becoming cooler + +velocityN = Probably increasing +velocityF = Moderate to fresh +velocityS = Strong winds may precede gales over open water +velocityG = Gale +velocityW = Dangerous gale (whole gale) +velocityH = Hurricane +velocityD = Diminishing, or moderating somewhat if current winds are of fresh to strong velocity +velocityU = No important change. Some tendency for slight increase in winds during day, diminishing in evening + +evolution1 = Steady +evolution2 = Veering +evolution3 = Backing + +trend1 = Rising Rapidly +trend2 = Rising Slowly +trend3 = Normal +trend4 = Decreasing Slowly +trend5 = Decreasing Rapidly + + diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties index c7981e9fcb8e5..82d35cf231b4f 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties @@ -1,63 +1,67 @@ # binding -binding.sagercaster.name = SagerCaster Binding -binding.sagercaster.description = Die SagerCaster-Erweiterung wird zur Erstellung von Wettervorhersagen verwendet. +bindingName = SagerCaster Binding +bindingDescription = Die SagerCaster-Erweiterung wird zur Erstellung von Wettervorhersagen verwendet. + +# thing +sagercasterLabel = SagerCaster Thing +sagercasterDescription = Dieses Thing stellt eine Vorhersage für einen bestimmten Standort dar. # channel types -channel-type.sagercaster.forecast.state.option.0 = Warten Sie etwas länger auf eine Vorhersage -channel-type.sagercaster.forecast.state.option.A = Gutes Wetter -channel-type.sagercaster.forecast.state.option.B = Gutes Wetter und Erwärmung -channel-type.sagercaster.forecast.state.option.C = Gutes Wetter und Abkühlung -channel-type.sagercaster.forecast.state.option.D = Instabil -channel-type.sagercaster.forecast.state.option.E = Instabil und Erwärmung -channel-type.sagercaster.forecast.state.option.F = Instabil und Abkühlung -channel-type.sagercaster.forecast.state.option.G = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schauern / Schnee -channel-type.sagercaster.forecast.state.option.G1 = Zunehmende oder sehr trübe Bewölkung, gefolgt von Niederschlag oder Schauern -channel-type.sagercaster.forecast.state.option.G2 = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schnee -channel-type.sagercaster.forecast.state.option.H = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schauern und Erwärmung -channel-type.sagercaster.forecast.state.option.J = Regengüsse -channel-type.sagercaster.forecast.state.option.K = Regengüsse / Schnee und Erwärmung -channel-type.sagercaster.forecast.state.option.K1 = Regengüsse und Erwärmung -channel-type.sagercaster.forecast.state.option.K2 = Schnee und Erwärmung -channel-type.sagercaster.forecast.state.option.L = Regengüsse / Schnee und Abkühlung -channel-type.sagercaster.forecast.state.option.L1 = Regengüsse und Abkühlung -channel-type.sagercaster.forecast.state.option.L2 = Regengüsse und Abkühlung -channel-type.sagercaster.forecast.state.option.M = Niederschlag -channel-type.sagercaster.forecast.state.option.N = Niederschlag und Erwärmung -channel-type.sagercaster.forecast.state.option.P = Niederschlag und Abkühlung dann wahrscheinliche Besserung innerhalb von 24 Stunden -channel-type.sagercaster.forecast.state.option.R = Niederschlag oder Schauer / Schnee und Besserung innerhalb von 12 Stunden -channel-type.sagercaster.forecast.state.option.R1 = Niederschlag oder Schauer und Besserung innerhalb von 12 Stunden -channel-type.sagercaster.forecast.state.option.R2 = Niederschlag oder Schnee und Besserung innerhalb von 12 Stunden -channel-type.sagercaster.forecast.state.option.S = Niederschlag oder Schauer / Schnee und Verbesserung innerhalb von 12 Stunden und Abkühlung -channel-type.sagercaster.forecast.state.option.S1 = Niederschlag oder Regengüsse und Besserung innerhalb von 12 Stunden und Erfrischung -channel-type.sagercaster.forecast.state.option.S2 = Niederschlag oder Schnee und Verbesserung innerhalb von 12 Stunden und Abkühlung -channel-type.sagercaster.forecast.state.option.T = Niederschlag oder Schauer / Schnee und schnelle Besserung innerhalb von 6 Stunden -channel-type.sagercaster.forecast.state.option.T1 = Niederschlag oder Schauer und schnelle Besserung innerhalb von 6 Stunden -channel-type.sagercaster.forecast.state.option.T2 = Niederschlag oder Schnee und schnelle Besserung innerhalb von 6 Stunden -channel-type.sagercaster.forecast.state.option.U = Niederschlag oder Schauer / Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung -channel-type.sagercaster.forecast.state.option.U1 = Niederschlag oder Schauer und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung -channel-type.sagercaster.forecast.state.option.U2 = Niederschlag oder Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung -channel-type.sagercaster.forecast.state.option.W = Niederschlag oder Schauer / Schnee, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung -channel-type.sagercaster.forecast.state.option.W1 = Niederschlag oder Schauer, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung -channel-type.sagercaster.forecast.state.option.W2 = Niederschlag oder Schnee, gefolgt von gutem Wetter innerhalb von 6 Stunden und Abkühlung -channel-type.sagercaster.forecast.state.option.X = Instabil, gefolgt von gutem Wetter -channel-type.sagercaster.forecast.state.option.Y = Instabil, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung +forecast0 = Warten Sie etwas länger auf eine Vorhersage +forecastA = Gutes Wetter +forecastB = Gutes Wetter und Erwärmung +forecastC = Gutes Wetter und Abkühlung +forecastD = Instabil +forecastE = Instabil und Erwärmung +forecastF = Instabil und Abkühlung +forecastG = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schauern / Schnee +forecastG1 = Zunehmende oder sehr trübe Bewölkung, gefolgt von Niederschlag oder Schauern +forecastG2 = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schnee +forecastH = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schauern und Erwärmung +forecastJ = Regengüsse +forecastK = Regengüsse / Schnee und Erwärmung +forecastK1 = Regengüsse und Erwärmung +forecastK2 = Schnee und Erwärmung +forecastL = Regengüsse / Schnee und Abkühlung +forecastL1 = Regengüsse und Abkühlung +forecastL2 = Regengüsse und Abkühlung +forecastM = Niederschlag +forecastN = Niederschlag und Erwärmung +forecastP = Niederschlag und Abkühlung dann wahrscheinliche Besserung innerhalb von 24 Stunden +forecastR = Niederschlag oder Schauer / Schnee und Besserung innerhalb von 12 Stunden +forecastR1 = Niederschlag oder Schauer und Besserung innerhalb von 12 Stunden +forecastR2 = Niederschlag oder Schnee und Besserung innerhalb von 12 Stunden +forecastS = Niederschlag oder Schauer / Schnee und Verbesserung innerhalb von 12 Stunden und Abkühlung +forecastS1 = Niederschlag oder Regengüsse und Besserung innerhalb von 12 Stunden und Erfrischung +forecastS2 = Niederschlag oder Schnee und Verbesserung innerhalb von 12 Stunden und Abkühlung +forecastT = Niederschlag oder Schauer / Schnee und schnelle Besserung innerhalb von 6 Stunden +forecastT1 = Niederschlag oder Schauer und schnelle Besserung innerhalb von 6 Stunden +forecastT2 = Niederschlag oder Schnee und schnelle Besserung innerhalb von 6 Stunden +forecastU = Niederschlag oder Schauer / Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung +forecastU1 = Niederschlag oder Schauer und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung +forecastU2 = Niederschlag oder Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung +forecastW = Niederschlag oder Schauer / Schnee, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung +forecastW1 = Niederschlag oder Schauer, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung +forecastW2 = Niederschlag oder Schnee, gefolgt von gutem Wetter innerhalb von 6 Stunden und Abkühlung +forecastX = Instabil, gefolgt von gutem Wetter +forecastY = Instabil, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung -channel-type.sagercaster.velocity.state.option.N = Wahrscheinlich steigend -channel-type.sagercaster.velocity.state.option.F = Mäßig bis frisch -channel-type.sagercaster.velocity.state.option.S = Starke Winde können dem Sturm im offenen Raum vorausgehen -channel-type.sagercaster.velocity.state.option.G = Sturm -channel-type.sagercaster.velocity.state.option.W = Gefährlicher Sturm -channel-type.sagercaster.velocity.state.option.H = Orkan -channel-type.sagercaster.velocity.state.option.D = Abkühlend oder moderat, wenn die aktuellen Winde kühl oder stark sind -channel-type.sagercaster.velocity.state.option.U = Keine wesentliche Änderung. Tendenz zur Zunahme während des Tages, Abnahme am Abend. +velocityN = Wahrscheinlich steigend +velocityF = Mäßig bis frisch +velocityS = Starke Winde können dem Sturm im offenen Raum vorausgehen +velocityG = Sturm +velocityW = Gefährlicher Sturm +velocityH = Orkan +velocityD = Abkühlend oder moderat, wenn die aktuellen Winde kühl oder stark sind +velocityU = Keine wesentliche Änderung. Tendenz zur Zunahme während des Tages, Abnahme am Abend. -channel-type.sagercaster.wind-evolution.state.option.1 = Stabil -channel-type.sagercaster.wind-evolution.state.option.2 = Stätig -channel-type.sagercaster.wind-evolution.state.option.3 = Variabel +evolution1 = Stabil +evolution2 = Stätig +evolution3 = Variabel -channel-type.sagercaster.trend.state.option.1 = Schneller Anstieg -channel-type.sagercaster.trend.state.option.2 = Langsamer Anstieg -channel-type.sagercaster.trend.state.option.3 = Stabil -channel-type.sagercaster.trend.state.option.4 = Mäßiger Rückgang -channel-type.sagercaster.trend.state.option.5 = Schneller Rückgang +trend1 = Schneller Anstieg +trend2 = Langsamer Anstieg +trend3 = Stabil +trend4 = Mäßiger Rückgang +trend5 = Schneller Rückgang diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties index 95f24796ba411..90ef8c10b03cb 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties @@ -1,64 +1,106 @@ # binding -binding.sagercaster.name = Extension SagerCaster -binding.sagercaster.description = L'extension SagerCaster permet d'établir des prévisions météo. +bindingName = Extension SagerCaster +bindingDescription = L'extension SagerCaster permet d'établir des prévisions météo. + +# thing +sagercasterLabel = SagerCaster Thing +sagercasterDescription = Représente la prévision pour une localisation donnée. + +# ting configuration +locationLabel = Emplacement +locationDescription = Vos coordonnées géographiques séparées par une virgule (p.e. "37.8,-122.4"). +observationLabel = Période d'observation +observationDescription = SagerWeatherCaster nécessite une période d'observation minimale pour produire des résultats significatifs (6 heures par défault). + +# channel groups +inputLabel = Entrées +inputDescription = Canaux utilisées pour produire des résultats de prévisions +outputLabel = Résultats +outputDescription = Résultats produits par l'algorithme Sager Weathercaster + +# channels +windVelocity = Force du Vent +windFrom = Vent de +windTo = Vent vers +pressureTrendLabel = Tendance Pression +pressureTrendDescription = Evolution de la pression au cours de la période d'observation +tempTrendLabel = Tendance Température +tempTrendDescription = Evolution de la température au cours de la période d'observation +forecastLabel = Prévision Météo +windDirectionLabel = Direction du Vent +windEvolutionLabel = Evolution du Vent +windEvolutionDescription = Tendance de l'évolution du vent au cours de la période d'observation +trendLabel = Tendance +trendDescription = Evolution de la mesure au cours de la période d'observation +timestampLabel = Horodatage de la Prévision +timestampDescription = Date et heure de calcul de la prévision météo. +cloudinessLabel = Nébulosité +cloudinessDescription = Qualification de la couverture nuageuse. +rainQttyLabel = Quantité de pluie +rainQttyDescription = Quantité d'eau tombée +rainingLabel = Pluie +rainingDescription = Pleut-il actuellement ? +beaufortLabel = Beaufort +beaufortDescription = Force du vent mesurée sur l'échelle Beaufort +pressureDescription = Pression barométrique au niveau de la mer. # channel types -channel-type.sagercaster.forecast.state.option.0 = Patientez encore un peu pour une prédiction -channel-type.sagercaster.forecast.state.option.A = Beau-temps -channel-type.sagercaster.forecast.state.option.B = Beau-temps et réchauffement -channel-type.sagercaster.forecast.state.option.C = Beau-temps et rafraichissement -channel-type.sagercaster.forecast.state.option.D = Instable -channel-type.sagercaster.forecast.state.option.E = Instable et réchauffement -channel-type.sagercaster.forecast.state.option.F = Instable et rafraichissement -channel-type.sagercaster.forecast.state.option.G = Nébulosité croissante ou très nuageux suivi de précititations ou averses / neige -channel-type.sagercaster.forecast.state.option.G1 = Nébulosité croissante ou très nuageux suivi de précititations ou averses -channel-type.sagercaster.forecast.state.option.G2 = Nébulosité croissante ou très nuageux suivi de précititations ou neige -channel-type.sagercaster.forecast.state.option.H = Nébulosité croissante ou très nuageux suivi de précititations ou averses et réchauffement -channel-type.sagercaster.forecast.state.option.J = Averses -channel-type.sagercaster.forecast.state.option.K = Averses / neige et réchauffement -channel-type.sagercaster.forecast.state.option.K1 = Averses et réchauffement -channel-type.sagercaster.forecast.state.option.K2 = Neige et réchauffement -channel-type.sagercaster.forecast.state.option.L = Averses / neige et rafraichissement -channel-type.sagercaster.forecast.state.option.L1 = Averses et rafraichissement -channel-type.sagercaster.forecast.state.option.L2 = Neige et rafraichissement -channel-type.sagercaster.forecast.state.option.M = Précipitations -channel-type.sagercaster.forecast.state.option.N = Précipitations et réchauffement -channel-type.sagercaster.forecast.state.option.P = Précipitations et rafraichissement puis amélioration probable dans les 24 heures -channel-type.sagercaster.forecast.state.option.R = Précipitations ou averses / neige et amélioration dans les 12 heures -channel-type.sagercaster.forecast.state.option.R1 = Précipitations ou averses et amélioration dans les 12 heures -channel-type.sagercaster.forecast.state.option.R2 = Précipitations ou neige et amélioration dans les 12 heures -channel-type.sagercaster.forecast.state.option.S = Précipitations ou averses / neige et amélioration dans les 12 heures et rafraichissement -channel-type.sagercaster.forecast.state.option.S1 = Précipitations ou averses et amélioration dans les 12 heures et rafraichissement -channel-type.sagercaster.forecast.state.option.S2 = Précipitations ou neige et amélioration dans les 12 heures et rafraichissement -channel-type.sagercaster.forecast.state.option.T = Précipitations ou averses / neige et amélioration rapide dans les 6 heures -channel-type.sagercaster.forecast.state.option.T1 = Précipitations ou averses et amélioration rapide dans les 6 heures -channel-type.sagercaster.forecast.state.option.T2 = Précipitations ou neige et amélioration rapide dans les 6 heures -channel-type.sagercaster.forecast.state.option.U = Précipitations ou averses / neige et amélioration rapide dans les 6 heures puis rafraichissement -channel-type.sagercaster.forecast.state.option.U1 = Précipitations ou averses et amélioration rapide dans les 6 heures puis rafraichissement -channel-type.sagercaster.forecast.state.option.U2 = Précipitations ou neige et amélioration rapide dans les 6 heures puis rafraichissement -channel-type.sagercaster.forecast.state.option.W = Précipitations ou averses / neige suivi de beau temps rapide dans les 6 heures et rafraichissement -channel-type.sagercaster.forecast.state.option.W1 = Précipitations ou averses suivi de beau temps rapide dans les 6 heures et rafraichissement -channel-type.sagercaster.forecast.state.option.W2 = Précipitations ou neige suivi de beau temps rapide dans les 6 heures et rafraichissement -channel-type.sagercaster.forecast.state.option.X = Instable suivi de beau temps -channel-type.sagercaster.forecast.state.option.Y = Instable suivi de beau temps rapide dans les 6 heures et rafraichissement +forecast0 = Patientez encore un peu pour une prédiction +forecastA = Beau-temps +forecastB = Beau-temps et réchauffement +forecastC = Beau-temps et rafraichissement +forecastD = Instable +forecastE = Instable et réchauffement +forecastF = Instable et rafraichissement +forecastG = Nébulosité croissante ou très nuageux suivi de précititations ou averses / neige +forecastG1 = Nébulosité croissante ou très nuageux suivi de précititations ou averses +forecastG2 = Nébulosité croissante ou très nuageux suivi de précititations ou neige +forecastH = Nébulosité croissante ou très nuageux suivi de précititations ou averses et réchauffement +forecastJ = Averses +forecastK = Averses / neige et réchauffement +forecastK1 = Averses et réchauffement +forecastK2 = Neige et réchauffement +forecastL = Averses / neige et rafraichissement +forecastL1 = Averses et rafraichissement +forecastL2 = Neige et rafraichissement +forecastM = Précipitations +forecastN = Précipitations et réchauffement +forecastP = Précipitations et rafraichissement puis amélioration probable dans les 24 heures +forecastR = Précipitations ou averses / neige et amélioration dans les 12 heures +forecastR1 = Précipitations ou averses et amélioration dans les 12 heures +forecastR2 = Précipitations ou neige et amélioration dans les 12 heures +forecastS = Précipitations ou averses / neige et amélioration dans les 12 heures et rafraichissement +forecastS1 = Précipitations ou averses et amélioration dans les 12 heures et rafraichissement +forecastS2 = Précipitations ou neige et amélioration dans les 12 heures et rafraichissement +forecastT = Précipitations ou averses / neige et amélioration rapide dans les 6 heures +forecastT1 = Précipitations ou averses et amélioration rapide dans les 6 heures +forecastT2 = Précipitations ou neige et amélioration rapide dans les 6 heures +forecastU = Précipitations ou averses / neige et amélioration rapide dans les 6 heures puis rafraichissement +forecastU1 = Précipitations ou averses et amélioration rapide dans les 6 heures puis rafraichissement +forecastU2 = Précipitations ou neige et amélioration rapide dans les 6 heures puis rafraichissement +forecastW = Précipitations ou averses / neige suivi de beau temps rapide dans les 6 heures et rafraichissement +forecastW1 = Précipitations ou averses suivi de beau temps rapide dans les 6 heures et rafraichissement +forecastW2 = Précipitations ou neige suivi de beau temps rapide dans les 6 heures et rafraichissement +forecastX = Instable suivi de beau temps +forecastY = Instable suivi de beau temps rapide dans les 6 heures et rafraichissement -channel-type.sagercaster.velocity.state.option.N = Probablement en augmentation -channel-type.sagercaster.velocity.state.option.F = Modéré à frais -channel-type.sagercaster.velocity.state.option.S = Vents forts pouvant précéder tempête en espace ouvert -channel-type.sagercaster.velocity.state.option.G = Tempête -channel-type.sagercaster.velocity.state.option.W = Tempête dangereuse -channel-type.sagercaster.velocity.state.option.H = Ouragan -channel-type.sagercaster.velocity.state.option.D = Décroissant ou en modération si les vents actuels sont frais ou forts -channel-type.sagercaster.velocity.state.option.U = Pas de changement notable. Tendance pour augmentation progressive dans la journée, diminution dans la soirée. +velocityN = Probablement en augmentation +velocityF = Modéré à frais +velocityS = Vents forts pouvant précéder tempête en espace ouvert +velocityG = Tempête +velocityW = Tempête dangereuse +velocityH = Ouragan +velocityD = Décroissant ou en modération si les vents actuels sont frais ou forts +velocityU = Pas de changement notable. Tendance pour augmentation progressive dans la journée, diminution dans la soirée. -channel-type.sagercaster.wind-evolution.state.option.1 = Stable -channel-type.sagercaster.wind-evolution.state.option.2 = Horaire -channel-type.sagercaster.wind-evolution.state.option.3 = Anti-horaire +evolution1 = Stable +evolution2 = Horaire +evolution3 = Anti-horaire -channel-type.sagercaster.trend.state.option.1 = Augmentation rapide -channel-type.sagercaster.trend.state.option.2 = Augmentation lente -channel-type.sagercaster.trend.state.option.3 = Stable -channel-type.sagercaster.trend.state.option.4 = Baisse modérée -channel-type.sagercaster.trend.state.option.5 = Baisse rapide +trend1 = Augmentation rapide +trend2 = Augmentation lente +trend3 = Stable +trend4 = Baisse modérée +trend5 = Baisse rapide diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml index dcebb004ee516..5be85e6626be1 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml @@ -5,9 +5,8 @@ xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd"> - - This thing represents a forecast for a given location - + + @text/sagercasterDescription @@ -19,226 +18,214 @@ - + location - Your geo coordinates separated with comma (e.g. "37.8,-122.4"). + @text/locationDescription - - SagerWeatherCaster needs a minimum representative period of time to produce meaningfull results. - Defaults to 6 hours + + @text/observationDescription 6 - - - The channels used to build the forecast results + + @text/inputDescription - - - + + + + + - - Results of the Sager Weathercaster algorithm + + @text/outputDescription - + - + - + - - Pressure Evolution trend over observation delay + + @text/pressureTrendDescription - - Temperature Evolution trend over observation delay + + @text/tempTrendDescription String - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String - + - - - - - - - - + + + + + + + + String - - Wind direction + Wind - - Number:Angle - - Wind Angle - Wind - - - String - - Wind bearing evolution trend over observation delay + + @text/windEvolutionDescription - - - + + + String - - Measure evolution trend over observation delay + + @text/trendDescription - - - - - + + + + + DateTime - - Weather forecast calculation date and time + + @text/timestampDescription Observation time Number:Dimensionless - - Current cloudiness. + + @text/cloudinessDescription Clouds + + Measurement + Number - - Current rain quantity + + @text/rainQttyDescription Rain + + Measurement + Rain + Switch - - Is it currently raining ? + + @text/rainingDescription Rain + + Status + Rain + Number - - Wind speed using Beaufort Scale + + @text/beaufortDescription Wind + + Measurement + Wind + - - Number:Pressure - - Sea Level Pressure - Pressure - - - - - Number:Temperature - - Current temperature - Temperature - - From 79e09ded557f38ba3ceee935a7d01a48b2877bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20L=27hopital?= Date: Sun, 10 Oct 2021 14:15:17 +0200 Subject: [PATCH 2/8] Update sagercaster_fr.properties --- .../src/main/resources/OH-INF/i18n/sagercaster_fr.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties index 9f6221498ed72..12cf64381a4a9 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties @@ -26,7 +26,7 @@ pressureTrendLabel = Tendance Pression pressureTrendDescription = Evolution de la pression au cours de la période d'observation tempTrendLabel = Tendance Température tempTrendDescription = Evolution de la température au cours de la période d'observation -forecastLabel = Prévision M�téo +forecastLabel = Prévision Météo windDirectionLabel = Direction du Vent windEvolutionLabel = Evolution du Vent windEvolutionDescription = Tendance de l'évolution du vent au cours de la période d'observation From 45ed81bfe8df4f2fb56e511b3e3168165e14f05a Mon Sep 17 00:00:00 2001 From: clinique Date: Sun, 10 Oct 2021 14:30:21 +0200 Subject: [PATCH 3/8] Correcting encoding for DE resource file. Signed-off-by: clinique --- .../OH-INF/i18n/sagercaster_de.properties | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties index 502cf33fc6f33..7df1835da03ef 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_de.properties @@ -4,63 +4,63 @@ bindingDescription = Die SagerCaster-Erweiterung wird zur Erstellung von Wetterv # thing sagercasterLabel = SagerCaster Thing -sagercasterDescription = Dieses Thing stellt eine Vorhersage f�r einen bestimmten Standort dar. +sagercasterDescription = Dieses Thing stellt eine Vorhersage für einen bestimmten Standort dar. # channel types -forecast0 = Warten Sie etwas l�nger auf eine Vorhersage +forecast0 = Warten Sie etwas länger auf eine Vorhersage forecastA = Gutes Wetter -forecastB = Gutes Wetter und Erw�rmung -forecastC = Gutes Wetter und Abk�hlung +forecastB = Gutes Wetter und Erwärmung +forecastC = Gutes Wetter und Abkühlung forecastD = Instabil -forecastE = Instabil und Erw�rmung -forecastF = Instabil und Abk�hlung -forecastG = Zunehmende Bew�lkung oder sehr bew�lkt, gefolgt von Niederschlag oder Schauern / Schnee -forecastG1 = Zunehmende oder sehr tr�be Bew�lkung, gefolgt von Niederschlag oder Schauern -forecastG2 = Zunehmende Bew�lkung oder sehr bew�lkt, gefolgt von Niederschlag oder Schnee -forecastH = Zunehmende Bew�lkung oder sehr bew�lkt, gefolgt von Niederschlag oder Schauern und Erw�rmung -forecastJ = Regeng�sse -forecastK = Regeng�sse / Schnee und Erw�rmung -forecastK1 = Regeng�sse und Erw�rmung -forecastK2 = Schnee und Erw�rmung -forecastL = Regeng�sse / Schnee und Abk�hlung -forecastL1 = Regeng�sse und Abk�hlung -forecastL2 = Regeng�sse und Abk�hlung +forecastE = Instabil und Erwärmung +forecastF = Instabil und Abkühlung +forecastG = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schauern / Schnee +forecastG1 = Zunehmende oder sehr trübe Bewölkung, gefolgt von Niederschlag oder Schauern +forecastG2 = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schnee +forecastH = Zunehmende Bewölkung oder sehr bewölkt, gefolgt von Niederschlag oder Schauern und Erwärmung +forecastJ = Regengüsse +forecastK = Regengüsse / Schnee und Erwärmung +forecastK1 = Regengüsse und Erwärmung +forecastK2 = Schnee und Erwärmung +forecastL = Regengüsse / Schnee und Abkühlung +forecastL1 = Regengüsse und Abkühlung +forecastL2 = Regengüsse und Abkühlung forecastM = Niederschlag -forecastN = Niederschlag und Erw�rmung -forecastP = Niederschlag und Abk�hlung dann wahrscheinliche Besserung innerhalb von 24 Stunden +forecastN = Niederschlag und Erwärmung +forecastP = Niederschlag und Abkühlung dann wahrscheinliche Besserung innerhalb von 24 Stunden forecastR = Niederschlag oder Schauer / Schnee und Besserung innerhalb von 12 Stunden forecastR1 = Niederschlag oder Schauer und Besserung innerhalb von 12 Stunden forecastR2 = Niederschlag oder Schnee und Besserung innerhalb von 12 Stunden -forecastS = Niederschlag oder Schauer / Schnee und Verbesserung innerhalb von 12 Stunden und Abk�hlung -forecastS1 = Niederschlag oder Regeng�sse und Besserung innerhalb von 12 Stunden und Erfrischung -forecastS2 = Niederschlag oder Schnee und Verbesserung innerhalb von 12 Stunden und Abk�hlung +forecastS = Niederschlag oder Schauer / Schnee und Verbesserung innerhalb von 12 Stunden und Abkühlung +forecastS1 = Niederschlag oder Regengüsse und Besserung innerhalb von 12 Stunden und Erfrischung +forecastS2 = Niederschlag oder Schnee und Verbesserung innerhalb von 12 Stunden und Abkühlung forecastT = Niederschlag oder Schauer / Schnee und schnelle Besserung innerhalb von 6 Stunden forecastT1 = Niederschlag oder Schauer und schnelle Besserung innerhalb von 6 Stunden forecastT2 = Niederschlag oder Schnee und schnelle Besserung innerhalb von 6 Stunden -forecastU = Niederschlag oder Schauer / Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abk�hlung -forecastU1 = Niederschlag oder Schauer und schnelle Besserung innerhalb von 6 Stunden, dann Abk�hlung -forecastU2 = Niederschlag oder Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abk�hlung +forecastU = Niederschlag oder Schauer / Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung +forecastU1 = Niederschlag oder Schauer und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung +forecastU2 = Niederschlag oder Schnee und schnelle Besserung innerhalb von 6 Stunden, dann Abkühlung forecastW = Niederschlag oder Schauer / Schnee, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung forecastW1 = Niederschlag oder Schauer, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung -forecastW2 = Niederschlag oder Schnee, gefolgt von gutem Wetter innerhalb von 6 Stunden und Abk�hlung +forecastW2 = Niederschlag oder Schnee, gefolgt von gutem Wetter innerhalb von 6 Stunden und Abkühlung forecastX = Instabil, gefolgt von gutem Wetter forecastY = Instabil, gefolgt von gutem Wetter innerhalb von 6 Stunden und Erfrischung velocityN = Wahrscheinlich steigend -velocityF = M��ig bis frisch -velocityS = Starke Winde k�nnen dem Sturm im offenen Raum vorausgehen +velocityF = Mäßig bis frisch +velocityS = Starke Winde können dem Sturm im offenen Raum vorausgehen velocityG = Sturm -velocityW = Gef�hrlicher Sturm +velocityW = Gefährlicher Sturm velocityH = Orkan -velocityD = Abk�hlend oder moderat, wenn die aktuellen Winde k�hl oder stark sind -velocityU = Keine wesentliche �nderung. Tendenz zur Zunahme w�hrend des Tages, Abnahme am Abend. +velocityD = Abkühlend oder moderat, wenn die aktuellen Winde kühl oder stark sind +velocityU = Keine wesentliche Änderung. Tendenz zur Zunahme während des Tages, Abnahme am Abend. evolution1 = Stabil -evolution2 = St�tig +evolution2 = Stätig evolution3 = Variabel trend1 = Schneller Anstieg trend2 = Langsamer Anstieg trend3 = Stabil -trend4 = M��iger R�ckgang -trend5 = Schneller R�ckgang +trend4 = Mäßiger Rückgang +trend5 = Schneller Rückgang From d0863a5968c324f4faa8a9b6c34fc1219a6f8487 Mon Sep 17 00:00:00 2001 From: clinique Date: Sun, 10 Oct 2021 17:15:23 +0200 Subject: [PATCH 4/8] Code review corrections Signed-off-by: clinique --- .../sagercaster/internal/SagerCasterBindingConstants.java | 6 +----- .../binding/sagercaster/internal/SagerWeatherCaster.java | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java index 90f576cd525d9..f4865f6121bf1 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerCasterBindingConstants.java @@ -12,9 +12,6 @@ */ package org.openhab.binding.sagercaster.internal; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -62,6 +59,5 @@ public class SagerCasterBindingConstants { // Some algorythms constants public final static String FORECAST_PENDING = "0"; - public final static Set SHOWERS = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList("G", "K", "L", "R", "S", "T", "U", "W"))); + public final static Set SHOWERS = Set.of("G", "K", "L", "R", "S", "T", "U", "W"); } diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java index 5451f7b71d8c1..dd204e06d70d7 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java @@ -154,15 +154,15 @@ public void setBeaufort(int beaufortIndex) { } public int getBeaufort() { - return this.currentBeaufort; + return currentBeaufort; } public int getWindEvolution() { - return this.windEvolution; + return windEvolution; } public int getPressureEvolution() { - return this.pressureEvolution; + return pressureEvolution; } private void sagerNubesUpdate() { From 5cc63af65dba37691513ed0fecc2f12ccc369187 Mon Sep 17 00:00:00 2001 From: clinique Date: Wed, 13 Oct 2021 13:42:17 +0200 Subject: [PATCH 5/8] Still some code refinings --- .../internal/SagerWeatherCaster.java | 74 ++++++++----------- .../SagerCasterDiscoveryService.java | 14 ++-- .../internal/handler/ExpiringMap.java | 3 +- .../internal/handler/SagerCasterHandler.java | 6 +- 4 files changed, 44 insertions(+), 53 deletions(-) diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java index dd204e06d70d7..21f05dc296a8b 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/SagerWeatherCaster.java @@ -104,9 +104,8 @@ public class SagerWeatherCaster { @Activate public SagerWeatherCaster() { - InputStream input = Thread.currentThread().getContextClassLoader() - .getResourceAsStream("/sagerForecaster.properties"); - try { + try (InputStream input = Thread.currentThread().getContextClassLoader() + .getResourceAsStream("/sagerForecaster.properties")) { forecaster.load(input); } catch (IOException e) { logger.warn("Error during Sager Forecaster startup", e); @@ -119,9 +118,9 @@ public String[] getUsedDirections() { public void setBearing(int newBearing, int oldBearing) { int windEvol = sagerWindTrend(oldBearing, newBearing); - if ((windEvol != this.windEvolution) || (newBearing != currentBearing)) { - this.currentBearing = newBearing; - this.windEvolution = windEvol; + if ((windEvol != windEvolution) || (newBearing != currentBearing)) { + currentBearing = newBearing; + windEvolution = windEvol; updatePrediction(); } } @@ -129,26 +128,26 @@ public void setBearing(int newBearing, int oldBearing) { public void setPressure(double newPressure, double oldPressure) { int newSagerPressure = sagerPressureLevel(newPressure); int pressEvol = sagerPressureTrend(newPressure, oldPressure); - if ((pressEvol != this.pressureEvolution) || (newSagerPressure != sagerPressure)) { - this.sagerPressure = newSagerPressure; - this.pressureEvolution = pressEvol; + if ((pressEvol != pressureEvolution) || (newSagerPressure != sagerPressure)) { + sagerPressure = newSagerPressure; + pressureEvolution = pressEvol; updatePrediction(); } } public void setCloudLevel(int cloudiness) { - this.cloudLevel = cloudiness; + cloudLevel = cloudiness; sagerNubesUpdate(); } - public void setRaining(boolean raining) { - this.raining = raining; + public void setRaining(boolean isRaining) { + raining = isRaining; sagerNubesUpdate(); } public void setBeaufort(int beaufortIndex) { if (currentBeaufort != beaufortIndex) { - this.currentBeaufort = beaufortIndex; + currentBeaufort = beaufortIndex; updatePrediction(); } } @@ -181,50 +180,43 @@ private void sagerNubesUpdate() { result = 5; // raining } if (result != nubes) { - this.nubes = result; + nubes = result; updatePrediction(); } } private static int sagerPressureLevel(double current) { - int result = 1; if (current > 1029.46) { - result = 1; + return 1; } else if (current > 1019.3) { - result = 2; + return 2; } else if (current > 1012.53) { - result = 3; + return 3; } else if (current > 1005.76) { - result = 4; + return 4; } else if (current > 999) { - result = 5; + return 5; } else if (current > 988.8) { - result = 6; + return 6; } else if (current > 975.28) { - result = 7; - } else { - result = 8; + return 7; } - return result; + return 8; } private static int sagerPressureTrend(double current, double historic) { double evol = current - historic; - int result = 0; if (evol > 1.4) { - result = 1; // Rising Rapidly + return 1; // Rising Rapidly } else if (evol > 0.68) { - result = 2; // Rising Slowly + return 2; // Rising Slowly } else if (evol > -0.68) { - result = 3; // Normal + return 3; // Normal } else if (evol > -1.4) { - result = 4; // Decreasing Slowly - } else { - result = 5; // Decreasing Rapidly + return 4; // Decreasing Slowly } - - return result; + return 5; // Decreasing Rapidly } private static int sagerWindTrend(double historic, double position) { @@ -240,7 +232,7 @@ private static int sagerWindTrend(double historic, double position) { private String getCompass() { double step = 360.0 / NTZDIRECTIONS.length; - double b = Math.floor((this.currentBearing + (step / 2.0)) / step); + double b = Math.floor((currentBearing + (step / 2.0)) / step); return NTZDIRECTIONS[(int) (b % NTZDIRECTIONS.length)]; } @@ -334,36 +326,32 @@ public String getForecast() { if (prevision.isPresent()) { char forecast = prevision.get().zForecast; return Character.toString(forecast); - } else { - return "-"; } + return "-"; } public String getWindVelocity() { if (prevision.isPresent()) { char windVelocity = prevision.get().zWindVelocity; return Character.toString(windVelocity); - } else { - return "-"; } + return "-"; } public String getWindDirection() { if (prevision.isPresent()) { int direction = prevision.get().zWindDirection; return String.valueOf(direction); - } else { - return "-"; } + return "-"; } public String getWindDirection2() { if (prevision.isPresent()) { int direction = prevision.get().zWindDirection2; return String.valueOf(direction); - } else { - return "-"; } + return "-"; } public void setLatitude(double latitude) { diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java index 62ceadec34ed8..129687125b5bc 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java @@ -14,10 +14,9 @@ import static org.openhab.binding.sagercaster.internal.SagerCasterBindingConstants.*; -import java.util.Arrays; -import java.util.HashSet; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -44,21 +43,22 @@ @NonNullByDefault @Component(service = DiscoveryService.class, configurationPid = "discovery.sagercaster") public class SagerCasterDiscoveryService extends AbstractDiscoveryService { - private final Logger logger = LoggerFactory.getLogger(SagerCasterDiscoveryService.class); private static final int DISCOVER_TIMEOUT_SECONDS = 30; private static final int LOCATION_CHANGED_CHECK_INTERVAL = 60; + private static final ThingUID sagerCasterThing = new ThingUID(THING_TYPE_SAGERCASTER, LOCAL); + + private final Logger logger = LoggerFactory.getLogger(SagerCasterDiscoveryService.class); private final LocationProvider locationProvider; + private @Nullable ScheduledFuture discoveryJob; private @Nullable PointType previousLocation; - private static final ThingUID sagerCasterThing = new ThingUID(THING_TYPE_SAGERCASTER, LOCAL); - /** * Creates a SagerCasterDiscoveryService with enabled autostart. */ @Activate public SagerCasterDiscoveryService(final @Reference LocationProvider locationProvider) { - super(new HashSet<>(Arrays.asList(new ThingTypeUID(BINDING_ID, "-"))), DISCOVER_TIMEOUT_SECONDS, true); + super(Set.of(new ThingTypeUID(BINDING_ID, "-")), DISCOVER_TIMEOUT_SECONDS, true); this.locationProvider = locationProvider; } @@ -102,7 +102,7 @@ protected void startBackgroundDiscovery() { @Override protected void stopBackgroundDiscovery() { - ScheduledFuture localJob = this.discoveryJob; + ScheduledFuture localJob = discoveryJob; logger.debug("Stopping Sager Weathercaster background discovery"); if (localJob != null && !localJob.isCancelled()) { if (localJob.cancel(true)) { diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java index 73de9b823a46b..ea54fe0666adf 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/ExpiringMap.java @@ -37,8 +37,7 @@ public void setObservationPeriod(long eldestAge) { public void put(T newValue) { long now = System.currentTimeMillis(); values.put(now, newValue); - Optional eldestKey = values.keySet().stream().filter(key -> key < now - eldestAge).findFirst(); - eldestKey.ifPresent(eldest -> { + values.keySet().stream().filter(key -> key < now - eldestAge).findFirst().ifPresent(eldest -> { agedValue = Optional.ofNullable(values.get(eldest)); values.entrySet().removeIf(map -> map.getKey() <= eldest); }); diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java index b7ea1c77d8e1e..79065e6ac662b 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/handler/SagerCasterHandler.java @@ -51,15 +51,19 @@ */ @NonNullByDefault public class SagerCasterHandler extends BaseThingHandler { + private final Logger logger = LoggerFactory.getLogger(SagerCasterHandler.class); + private final SagerWeatherCaster sagerWeatherCaster; + private final WindDirectionStateDescriptionProvider stateDescriptionProvider; - private int currentTemp = 0; private final ExpiringMap> pressureCache = new ExpiringMap<>(); private final ExpiringMap> temperatureCache = new ExpiringMap<>(); private final ExpiringMap> bearingCache = new ExpiringMap<>(); + private int currentTemp = 0; + public SagerCasterHandler(Thing thing, WindDirectionStateDescriptionProvider stateDescriptionProvider, SagerWeatherCaster sagerWeatherCaster) { super(thing); From c1556a922f9e1cae389391a12d28c5d14edcd106 Mon Sep 17 00:00:00 2001 From: clinique Date: Mon, 18 Oct 2021 08:09:27 +0200 Subject: [PATCH 6/8] Corrections following lolodomo feed-backs. Signed-off-by: clinique --- .../OH-INF/i18n/sagercaster.properties | 6 +- .../OH-INF/i18n/sagercaster_fr.properties | 114 +++++++++--------- .../resources/OH-INF/thing/thing-types.xml | 5 +- 3 files changed, 61 insertions(+), 64 deletions(-) diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties index fe742fe60f492..eeafd362469d8 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties @@ -10,7 +10,7 @@ sagercasterDescription = This thing represents a forecast for a given location. locationLabel = Location locationDescription = Your geo coordinates separated with comma (e.g. "37.8,-122.4"). observationLabel = Observation Period -observationDescription = SagerWeatherCaster needs a minimum representative period of time to produce meaningfull results (defaults to 6 hours). +observationDescription = Sager WeatherCaster needs a minimum representative period of time to produce meaningfull results (defaults to 6 hours). # channel groups inputLabel = Inputs @@ -23,9 +23,9 @@ windVelocity = Wind Velocity windFrom = Wind from windTo = Wind to pressureTrendLabel = Pressure Trend -pressureTrendDescription = Pressure Evolution trend over observation delay +pressureTrendDescription = Pressure evolution trend over observation delay tempTrendLabel = Temperature Trend -tempTrendDescription = Temperature Evolution trend over observation delay +tempTrendDescription = Temperature evolution trend over observation delay forecastLabel = Weather Forecast windDirectionLabel = Wind Direction windEvolutionLabel = Wind Evolution diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties index 12cf64381a4a9..401f13365465e 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties @@ -1,97 +1,97 @@ # binding bindingName = Extension SagerCaster -bindingDescription = L'extension SagerCaster permet d'établir des prévisions météo. +bindingDescription = Sager Weathercaster est un instrument scientifique pour produire des prédicitions météo précises. # thing sagercasterLabel = SagerCaster Thing -sagercasterDescription = Représente la prévision pour une localisation donnée. +sagercasterDescription = Représente la prévision pour une localisation donnée. # ting configuration locationLabel = Emplacement -locationDescription = Vos coordonnées géographiques séparées par une virgule (p.e. "37.8,-122.4"). -observationLabel = Période d'observation -observationDescription = SagerWeatherCaster requiert une période d'observation minimale pour produire des résultats significatifs (6 heures par défault). +locationDescription = Vos coordonnées géographiques séparées par une virgule (p.e. "37.8,-122.4"). +observationLabel = Période d'observation +observationDescription = Sager WeatherCaster requiert une période d'observation minimale pour produire des résultats significatifs (6 heures par défaut). # channel groups -inputLabel = Entrées -inputDescription = Canaux utilisées pour produire des résultats de prévisions -outputLabel = Résultats -outputDescription = Résultats produits par l'algorithme Sager Weathercaster +inputLabel = Entrées +inputDescription = Canaux utilisés pour produire des résultats de prévisions +outputLabel = Résultats +outputDescription = Résultats produits par l'algorithme Sager Weathercaster # channels windVelocity = Force du Vent windFrom = Vent de windTo = Vent vers pressureTrendLabel = Tendance Pression -pressureTrendDescription = Evolution de la pression au cours de la période d'observation -tempTrendLabel = Tendance Température -tempTrendDescription = Evolution de la température au cours de la période d'observation -forecastLabel = Prévision Météo +pressureTrendDescription = Evolution de la pression au cours de la période d'observation +tempTrendLabel = Tendance température +tempTrendDescription = Evolution de la température au cours de la période d'observation +forecastLabel = Prévision météo windDirectionLabel = Direction du Vent windEvolutionLabel = Evolution du Vent -windEvolutionDescription = Tendance de l'évolution du vent au cours de la période d'observation +windEvolutionDescription = Tendance de l'évolution du vent au cours de la période d'observation trendLabel = Tendance -trendDescription = Evolution de la mesure au cours de la période d'observation -timestampLabel = Horodatage de la Prévision -timestampDescription = Date et heure de calcul de la prévision météo. -cloudinessLabel = Nébulosité +trendDescription = Evolution de la mesure au cours de la période d'observation +timestampLabel = Horodatage de la prévision +timestampDescription = Date et heure de calcul de la prévision météo. +cloudinessLabel = Nébulosité cloudinessDescription = Qualification de la couverture nuageuse. -rainQttyLabel = Quantité de pluie -rainQttyDescription = Quantité d'eau tombée +rainQttyLabel = Quantité de pluie +rainQttyDescription = Quantité d'eau tombée rainingLabel = Pluie rainingDescription = Pleut-il actuellement ? beaufortLabel = Beaufort -beaufortDescription = Force du vent mesurée sur l'échelle Beaufort -pressureDescription = Pression barométrique au niveau de la mer. +beaufortDescription = Force du vent mesurée sur l'échelle Beaufort +pressureDescription = Pression barométrique au niveau de la mer. # channel types -forecast0 = Patientez encore un peu pour une pr�diction +forecast0 = Patientez encore un peu pour une prédiction forecastA = Beau-temps -forecastB = Beau-temps et réchauffement +forecastB = Beau-temps et réchauffement forecastC = Beau-temps et rafraichissement forecastD = Instable -forecastE = Instable et réchauffement +forecastE = Instable et réchauffement forecastF = Instable et rafraichissement -forecastG = Nébulosité croissante ou très nuageux suivi de précititations ou averses / neige -forecastG1 = Nébulosité croissante ou très nuageux suivi de précititations ou averses -forecastG2 = Nébulosité croissante ou très nuageux suivi de précititations ou neige -forecastH = Nébulosité croissante ou très nuageux suivi de précititations ou averses et réchauffement +forecastG = Nébulosité croissante ou très nuageux suivi de précipitations ou averses / neige +forecastG1 = Nébulosité croissante ou très nuageux suivi de précipitations ou averses +forecastG2 = Nébulosité croissante ou très nuageux suivi de précipitations ou neige +forecastH = Nébulosité croissante ou très nuageux suivi de précipitations ou averses et réchauffement forecastJ = Averses -forecastK = Averses / neige et réchauffement -forecastK1 = Averses et réchauffement -forecastK2 = Neige et réchauffement +forecastK = Averses / neige et réchauffement +forecastK1 = Averses et réchauffement +forecastK2 = Neige et réchauffement forecastL = Averses / neige et rafraichissement forecastL1 = Averses et rafraichissement forecastL2 = Neige et rafraichissement -forecastM = Précipitations -forecastN = Précipitations et réchauffement -forecastP = Précipitations et rafraichissement puis amélioration probable dans les 24 heures -forecastR = Précipitations ou averses / neige et amélioration dans les 12 heures -forecastR1 = Précipitations ou averses et amélioration dans les 12 heures -forecastR2 = Précipitations ou neige et amélioration dans les 12 heures -forecastS = Précipitations ou averses / neige et amélioration dans les 12 heures et rafraichissement -forecastS1 = Précipitations ou averses et amélioration dans les 12 heures et rafraichissement -forecastS2 = Précipitations ou neige et amélioration dans les 12 heures et rafraichissement -forecastT = Précipitations ou averses / neige et amélioration rapide dans les 6 heures -forecastT1 = Précipitations ou averses et amélioration rapide dans les 6 heures -forecastT2 = Précipitations ou neige et amélioration rapide dans les 6 heures -forecastU = Précipitations ou averses / neige et amélioration rapide dans les 6 heures puis rafraichissement -forecastU1 = Précipitations ou averses et amélioration rapide dans les 6 heures puis rafraichissement -forecastU2 = Précipitations ou neige et amélioration rapide dans les 6 heures puis rafraichissement -forecastW = Précipitations ou averses / neige suivi de beau temps rapide dans les 6 heures et rafraichissement -forecastW1 = Précipitations ou averses suivi de beau temps rapide dans les 6 heures et rafraichissement -forecastW2 = Précipitations ou neige suivi de beau temps rapide dans les 6 heures et rafraichissement +forecastM = Précipitations +forecastN = Précipitations et réchauffement +forecastP = Précipitations et rafraichissement puis amélioration probable dans les 24 heures +forecastR = Précipitations ou averses / neige et amélioration dans les 12 heures +forecastR1 = Précipitations ou averses et amélioration dans les 12 heures +forecastR2 = Précipitations ou neige et amélioration dans les 12 heures +forecastS = Précipitations ou averses / neige et amélioration dans les 12 heures et rafraichissement +forecastS1 = Précipitations ou averses et amélioration dans les 12 heures et rafraichissement +forecastS2 = Précipitations ou neige et amélioration dans les 12 heures et rafraichissement +forecastT = Précipitations ou averses / neige et amélioration rapide dans les 6 heures +forecastT1 = Précipitations ou averses et amélioration rapide dans les 6 heures +forecastT2 = Précipitations ou neige et amélioration rapide dans les 6 heures +forecastU = Précipitations ou averses / neige et amélioration rapide dans les 6 heures puis rafraichissement +forecastU1 = Précipitations ou averses et amélioration rapide dans les 6 heures puis rafraichissement +forecastU2 = Précipitations ou neige et amélioration rapide dans les 6 heures puis rafraichissement +forecastW = Précipitations ou averses / neige suivi de beau temps rapide dans les 6 heures et rafraichissement +forecastW1 = Précipitations ou averses suivi de beau temps rapide dans les 6 heures et rafraichissement +forecastW2 = Précipitations ou neige suivi de beau temps rapide dans les 6 heures et rafraichissement forecastX = Instable suivi de beau temps forecastY = Instable suivi de beau temps rapide dans les 6 heures et rafraichissement velocityN = Probablement en augmentation -velocityF = Modéré à frais -velocityS = Vents forts pouvant précéder tempête en espace ouvert -velocityG = Tempête -velocityW = Tempête dangereuse +velocityF = Modéré à  frais +velocityS = Vents forts pouvant précéder tempête en espace ouvert +velocityG = Tempête +velocityW = Tempête dangereuse velocityH = Ouragan -velocityD = Décroissant ou en modération si les vents actuels sont frais ou forts -velocityU = Pas de changement notable. Tendance pour augmentation progressive dans la journée, diminution dans la soirée. +velocityD = Décroissant ou en modération si les vents actuels sont frais ou forts +velocityU = Pas de changement notable. Tendance pour augmentation progressive dans la journée, diminution dans la soirée. evolution1 = Stable evolution2 = Horaire @@ -100,5 +100,5 @@ evolution3 = Anti-horaire trend1 = Augmentation rapide trend2 = Augmentation lente trend3 = Stable -trend4 = Baisse modérée +trend4 = Baisse modérée trend5 = Baisse rapide diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml index 5be85e6626be1..60b0c1e7926eb 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/thing/thing-types.xml @@ -141,7 +141,7 @@ String - + Wind @@ -187,9 +187,6 @@ @text/cloudinessDescription Clouds - - Measurement - From 20b8f39e59183f20249f8be4a5bf6534952aaad7 Mon Sep 17 00:00:00 2001 From: clinique Date: Mon, 18 Oct 2021 09:18:21 +0200 Subject: [PATCH 7/8] Still some corrections Signed-off-by: clinique --- .../internal/discovery/SagerCasterDiscoveryService.java | 7 +++---- .../main/resources/OH-INF/i18n/sagercaster_fr.properties | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java index 129687125b5bc..2bb4d32a94db9 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java @@ -27,7 +27,6 @@ import org.openhab.core.config.discovery.DiscoveryService; import org.openhab.core.i18n.LocationProvider; import org.openhab.core.library.types.PointType; -import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.ThingUID; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -45,7 +44,7 @@ public class SagerCasterDiscoveryService extends AbstractDiscoveryService { private static final int DISCOVER_TIMEOUT_SECONDS = 30; private static final int LOCATION_CHANGED_CHECK_INTERVAL = 60; - private static final ThingUID sagerCasterThing = new ThingUID(THING_TYPE_SAGERCASTER, LOCAL); + private static final ThingUID SAGER_CASTER_THING = new ThingUID(THING_TYPE_SAGERCASTER, LOCAL); private final Logger logger = LoggerFactory.getLogger(SagerCasterDiscoveryService.class); private final LocationProvider locationProvider; @@ -58,7 +57,7 @@ public class SagerCasterDiscoveryService extends AbstractDiscoveryService { */ @Activate public SagerCasterDiscoveryService(final @Reference LocationProvider locationProvider) { - super(Set.of(new ThingTypeUID(BINDING_ID, "-")), DISCOVER_TIMEOUT_SECONDS, true); + super(Set.of(THING_TYPE_SAGERCASTER), DISCOVER_TIMEOUT_SECONDS, true); this.locationProvider = locationProvider; } @@ -114,7 +113,7 @@ protected void stopBackgroundDiscovery() { public void createResults(PointType location) { String propGeolocation = String.format("%s,%s", location.getLatitude(), location.getLongitude()); - thingDiscovered(DiscoveryResultBuilder.create(sagerCasterThing).withLabel("Local Weather Forecast") + thingDiscovered(DiscoveryResultBuilder.create(SAGER_CASTER_THING).withLabel("Local Weather Forecast") .withRepresentationProperty(CONFIG_LOCATION).withProperty(CONFIG_LOCATION, propGeolocation).build()); } } diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties index 401f13365465e..6c5174da7ca05 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties @@ -85,7 +85,7 @@ forecastX = Instable suivi de beau temps forecastY = Instable suivi de beau temps rapide dans les 6 heures et rafraichissement velocityN = Probablement en augmentation -velocityF = Modéré à  frais +velocityF = Modéré à frais velocityS = Vents forts pouvant précéder tempête en espace ouvert velocityG = Tempête velocityW = Tempête dangereuse From c803a69ce69b038235ae396b9d4f05e3ec80af47 Mon Sep 17 00:00:00 2001 From: clinique Date: Mon, 18 Oct 2021 11:21:41 +0200 Subject: [PATCH 8/8] Enhanced discovery Signed-off-by: clinique --- .../internal/discovery/SagerCasterDiscoveryService.java | 7 ++++++- .../src/main/resources/OH-INF/i18n/sagercaster.properties | 2 ++ .../main/resources/OH-INF/i18n/sagercaster_fr.properties | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java index 2bb4d32a94db9..f22cf1803bf87 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java +++ b/bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/discovery/SagerCasterDiscoveryService.java @@ -25,7 +25,9 @@ import org.openhab.core.config.discovery.AbstractDiscoveryService; import org.openhab.core.config.discovery.DiscoveryResultBuilder; import org.openhab.core.config.discovery.DiscoveryService; +import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.i18n.LocationProvider; +import org.openhab.core.i18n.TranslationProvider; import org.openhab.core.library.types.PointType; import org.openhab.core.thing.ThingUID; import org.osgi.service.component.annotations.Activate; @@ -56,9 +58,12 @@ public class SagerCasterDiscoveryService extends AbstractDiscoveryService { * Creates a SagerCasterDiscoveryService with enabled autostart. */ @Activate - public SagerCasterDiscoveryService(final @Reference LocationProvider locationProvider) { + public SagerCasterDiscoveryService(final @Reference LocaleProvider localeProvider, + final @Reference TranslationProvider i18nProvider, final @Reference LocationProvider locationProvider) { super(Set.of(THING_TYPE_SAGERCASTER), DISCOVER_TIMEOUT_SECONDS, true); this.locationProvider = locationProvider; + this.localeProvider = localeProvider; + this.i18nProvider = i18nProvider; } @Override diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties index eeafd362469d8..a8eb7a0716a10 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster.properties @@ -103,4 +103,6 @@ trend3 = Normal trend4 = Decreasing Slowly trend5 = Decreasing Rapidly +# Discovery result +discovery.sagercaster.sagercaster.local.label = Local Weather Forecast diff --git a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties index 6c5174da7ca05..505b2a0d4e7fb 100644 --- a/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties +++ b/bundles/org.openhab.binding.sagercaster/src/main/resources/OH-INF/i18n/sagercaster_fr.properties @@ -102,3 +102,7 @@ trend2 = Augmentation lente trend3 = Stable trend4 = Baisse modérée trend5 = Baisse rapide + +# Discovery result +discovery.sagercaster.sagercaster.local.label = Prévision Météo Locale +