[openweathermap] Add daily moon channels to OneCall Thing (#16350)

* [openweathermap] Add daily moon channels to OneCall Thing
This adds the daily moon data provided by the API (https://openweathermap.org/api/one-call-api#parameter) to the OneCall Thing.

Also-by: Florian Hotze <florianh_dev@icloud.com>
Signed-off-by: Erik De Boeck <deboeck.erik@gmail.com>
Signed-off-by: Ciprian Pascu <contact@ciprianpascu.ro>
This commit is contained in:
ErikDB87 2024-02-28 19:53:12 +01:00 committed by Ciprian Pascu
parent aa921731f3
commit 7f11ad1dd5
8 changed files with 118 additions and 32 deletions

View File

@ -191,39 +191,43 @@ In a future release, the `forecastHours01` to `forecastHours48` channel groups w
### Daily Forecast ### Daily Forecast
| Channel Group ID | Channel ID | Item Type | Description | | Channel Group ID | Channel ID | Item Type | Description |
|---------------------------------------------------------------------------------|----------------------|----------------------|----------------------------------------------------------------------------------| |---------------------------------------------------------------------------------|----------------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | time-stamp | DateTime | Date of data forecasted. | | forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | time-stamp | DateTime | Date of data forecasted. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | sunrise | DateTime | Time of sunrise for the given day. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | sunrise | DateTime | Time of sunrise for the given day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | sunset | DateTime | Time of sunset for the given day. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | sunset | DateTime | Time of sunset for the given day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | condition | String | Forecast weather condition. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | moonrise | DateTime | Time of moonrise for the given day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | condition-id | String | Id of the forecasted weather condition. **Advanced** | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | moonset | DateTime | Time of moonset for the given day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | icon | Image | Icon representing the forecasted weather condition. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | moon-phase | Number:Dimensionless | Moon phase for the given day. 0 and 1 are 'new moon', 0.25 is 'first quarter moon', 0.5 is 'full moon' and 0.75 is 'last quarter moon'. The periods in between are called 'waxing crescent', 'waxing gibous', 'waning gibous', and 'waning crescent', respectively. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | icon-id | String | Id of the icon representing the forecasted weather condition. **Advanced** | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | condition | String | Forecast weather condition. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | apparent-temperature | Number:Temperature | Forecasted apparent temperature. Not available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | condition-id | String | Id of the forecasted weather condition. **Advanced** |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | min-temperature | Number:Temperature | Minimum forecasted temperature of a day. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | icon | Image | Icon representing the forecasted weather condition. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | max-temperature | Number:Temperature | Maximum forecasted temperature of a day. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | icon-id | String | Id of the icon representing the forecasted weather condition. **Advanced** |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | pressure | Number:Pressure | Forecasted barometric pressure. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | apparent-temperature | Number:Temperature | Forecasted apparent temperature. Not available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | humidity | Number:Dimensionless | Forecasted atmospheric humidity. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | min-temperature | Number:Temperature | Minimum forecasted temperature of a day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | wind-speed | Number:Speed | Forecasted wind speed. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | max-temperature | Number:Temperature | Maximum forecasted temperature of a day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | wind-direction | Number:Angle | Forecasted wind direction. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | pressure | Number:Pressure | Forecasted barometric pressure. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | gust-speed | Number:Speed | Forecasted gust speed. **Advanced** | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | humidity | Number:Dimensionless | Forecasted atmospheric humidity. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | cloudiness | Number:Dimensionless | Forecasted cloudiness. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | wind-speed | Number:Speed | Forecasted wind speed. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | rain | Number:Length | Expected rain volume of a day. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | wind-direction | Number:Angle | Forecasted wind direction. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | snow | Number:Length | Expected snow volume of a day. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | gust-speed | Number:Speed | Forecasted gust speed. **Advanced** |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | dew-point | Number:Temperature | Expected dew-point. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | cloudiness | Number:Dimensionless | Forecasted cloudiness. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | uvindex | Number | Forecasted Midday UV Index. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | rain | Number:Length | Expected rain volume of a day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | precip-probability | Number:Dimensionless | Precipitation probability. | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay16 | snow | Number:Length | Expected snow volume of a day. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | morning-temperature | Number:Temperature | Expected morning temperature. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | dew-point | Number:Temperature | Expected dew-point. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | day-temperature | Number:Temperature | Expected day-temperature. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | uvindex | Number | Forecasted Midday UV Index. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | evening-temperature | Number:Temperature | Expected evening-temperature. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | precip-probability | Number:Dimensionless | Precipitation probability. |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | night-temperature | Number:Temperature | Expected night-temperature. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | morning-temperature | Number:Temperature | Expected morning temperature. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-morning | Number:Temperature | Expected apparent temperature in the morning. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | day-temperature | Number:Temperature | Expected day-temperature. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-day | Number:Temperature | Expected apparent temperature in the day. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | evening-temperature | Number:Temperature | Expected evening-temperature. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-evening | Number:Temperature | Expected apparent temperature in the evening. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | night-temperature | Number:Temperature | Expected night-temperature. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-night | Number:Temperature | Expected apparent temperature in the night. Only available in the One Call API | | forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-morning | Number:Temperature | Expected apparent temperature in the morning. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-day | Number:Temperature | Expected apparent temperature in the day. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-evening | Number:Temperature | Expected apparent temperature in the evening. Only available in the One Call API |
| forecastDaily, forecastToday, forecastTomorrow, forecastDay2, ... forecastDay7 | apparent-night | Number:Temperature | Expected apparent temperature in the night. Only available in the One Call API |
The `forecastDaily` channel group provides [time series support](#persisting-time-series). The `forecastDaily` channel group provides [time series support](#persisting-time-series).
The `moon*` channels are currently only provided by the OneCall API Weather and Forecast Thing.
In a future release, the `forecastToday` to `forecastDay7` channel groups won't be created anymore by default as usage of the time series channels instead is encouraged. In a future release, the `forecastToday` to `forecastDay7` channel groups won't be created anymore by default as usage of the time series channels instead is encouraged.

View File

@ -83,6 +83,9 @@ public class OpenWeatherMapBindingConstants {
public static final String CHANNEL_TIME_STAMP = "time-stamp"; public static final String CHANNEL_TIME_STAMP = "time-stamp";
public static final String CHANNEL_SUNRISE = "sunrise"; public static final String CHANNEL_SUNRISE = "sunrise";
public static final String CHANNEL_SUNSET = "sunset"; public static final String CHANNEL_SUNSET = "sunset";
public static final String CHANNEL_MOONRISE = "moonrise";
public static final String CHANNEL_MOONSET = "moonset";
public static final String CHANNEL_MOON_PHASE = "moon-phase";
public static final String CHANNEL_CONDITION = "condition"; public static final String CHANNEL_CONDITION = "condition";
public static final String CHANNEL_CONDITION_ID = "condition-id"; public static final String CHANNEL_CONDITION_ID = "condition-id";
public static final String CHANNEL_CONDITION_ICON = "icon"; public static final String CHANNEL_CONDITION_ICON = "icon";

View File

@ -28,6 +28,10 @@ public class Daily {
private int dt; private int dt;
private int sunrise; private int sunrise;
private int sunset; private int sunset;
private int moonrise;
private int moonset;
@SerializedName("moon_phase")
private double moonPhase;
private Temp temp; private Temp temp;
@SerializedName("feels_like") @SerializedName("feels_like")
private FeelsLikeTemp feelsLikeTemp; private FeelsLikeTemp feelsLikeTemp;
@ -61,6 +65,18 @@ public class Daily {
return sunset; return sunset;
} }
public int getMoonrise() {
return moonrise;
}
public int getMoonset() {
return moonset;
}
public double getMoonPhase() {
return moonPhase;
}
public Temp getTemp() { public Temp getTemp() {
return temp; return temp;
} }

View File

@ -666,6 +666,15 @@ public class OpenWeatherMapOneCallHandler extends AbstractOpenWeatherMapHandler
case CHANNEL_SUNSET: case CHANNEL_SUNSET:
state = getDateTimeTypeState(forecastData.getSunset()); state = getDateTimeTypeState(forecastData.getSunset());
break; break;
case CHANNEL_MOONRISE:
state = getDateTimeTypeState(forecastData.getMoonrise());
break;
case CHANNEL_MOONSET:
state = getDateTimeTypeState(forecastData.getMoonset());
break;
case CHANNEL_MOON_PHASE:
state = getDecimalTypeState(forecastData.getMoonPhase());
break;
case CHANNEL_CONDITION: case CHANNEL_CONDITION:
if (!forecastData.getWeather().isEmpty()) { if (!forecastData.getWeather().isEmpty()) {
state = getStringTypeState(forecastData.getWeather().get(0).getDescription()); state = getStringTypeState(forecastData.getWeather().get(0).getDescription());

View File

@ -287,6 +287,14 @@ channel-type.openweathermap.gust-speed.description = Current gust speed.
channel-type.openweathermap.hourly-forecast-time-stamp.label = Forecast Time channel-type.openweathermap.hourly-forecast-time-stamp.label = Forecast Time
channel-type.openweathermap.hourly-forecast-time-stamp.description = Time of data forecasted. channel-type.openweathermap.hourly-forecast-time-stamp.description = Time of data forecasted.
channel-type.openweathermap.hourly-forecast-time-stamp.state.pattern = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS channel-type.openweathermap.hourly-forecast-time-stamp.state.pattern = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS
channel-type.openweathermap.moon-phase.label = Moon Phase
channel-type.openweathermap.moon-phase.description = Moon phase for the given day. 0 and 1 are 'new moon', 0.25 is 'first quarter moon', 0.5 is 'full moon' and 0.75 is 'last quarter moon'. The periods in between are called 'waxing crescent', 'waxing gibous', 'waning gibous', and 'waning crescent', respectively.
channel-type.openweathermap.moonrise.label = Moonrise Time
channel-type.openweathermap.moonrise.description = Time of moonrise for the given day.
channel-type.openweathermap.moonrise.state.pattern = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS
channel-type.openweathermap.moonset.label = Moonset Time
channel-type.openweathermap.moonset.description = Time of moonset for the given day.
channel-type.openweathermap.moonset.state.pattern = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS
channel-type.openweathermap.morning-temperature.label = Morning Temperature channel-type.openweathermap.morning-temperature.label = Morning Temperature
channel-type.openweathermap.morning-temperature.description = Forecasted outdoor temperature for the morning. channel-type.openweathermap.morning-temperature.description = Forecasted outdoor temperature for the morning.
channel-type.openweathermap.night-temperature.label = Night Temperature channel-type.openweathermap.night-temperature.label = Night Temperature

View File

@ -223,6 +223,9 @@
<channels> <channels>
<channel id="sunrise" typeId="sunrise"/> <channel id="sunrise" typeId="sunrise"/>
<channel id="sunset" typeId="sunset"/> <channel id="sunset" typeId="sunset"/>
<channel id="moonrise" typeId="moonrise"/>
<channel id="moonset" typeId="moonset"/>
<channel id="moon-phase" typeId="moon-phase"/>
<channel id="condition" typeId="condition"/> <channel id="condition" typeId="condition"/>
<channel id="condition-id" typeId="condition-id"/> <channel id="condition-id" typeId="condition-id"/>
<channel id="icon" typeId="condition-icon"/> <channel id="icon" typeId="condition-icon"/>
@ -258,6 +261,9 @@
<channel id="time-stamp" typeId="daily-forecast-time-stamp"/> <channel id="time-stamp" typeId="daily-forecast-time-stamp"/>
<channel id="sunrise" typeId="sunrise"/> <channel id="sunrise" typeId="sunrise"/>
<channel id="sunset" typeId="sunset"/> <channel id="sunset" typeId="sunset"/>
<channel id="moonrise" typeId="moonrise"/>
<channel id="moonset" typeId="moonset"/>
<channel id="moon-phase" typeId="moon-phase"/>
<channel id="condition" typeId="condition"/> <channel id="condition" typeId="condition"/>
<channel id="condition-id" typeId="condition-id"/> <channel id="condition-id" typeId="condition-id"/>
<channel id="icon" typeId="condition-icon"/> <channel id="icon" typeId="condition-icon"/>
@ -389,6 +395,32 @@
<state readOnly="true" pattern="%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS"/> <state readOnly="true" pattern="%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS"/>
</channel-type> </channel-type>
<channel-type id="moonrise">
<item-type>DateTime</item-type>
<label>Moonrise Time</label>
<description>Time of moonrise for the given day.</description>
<category>Time</category>
<state readOnly="true" pattern="%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS"/>
</channel-type>
<channel-type id="moonset">
<item-type>DateTime</item-type>
<label>Moonset Time</label>
<description>Time of moonset for the given day.</description>
<category>Time</category>
<state readOnly="true" pattern="%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS"/>
</channel-type>
<channel-type id="moon-phase">
<item-type>Number</item-type>
<label>Moon Phase</label>
<description>Moon phase for the given day. 0 and 1 are 'new moon', 0.25 is 'first quarter moon', 0.5 is 'full moon'
and 0.75 is 'last quarter moon'. The periods in between are called 'waxing crescent', 'waxing gibous', 'waning
gibous', and 'waning crescent', respectively.</description>
<category>Moon</category>
<state readOnly="true" pattern="%.2f"/>
</channel-type>
<channel-type id="hourly-forecast-time-stamp"> <channel-type id="hourly-forecast-time-stamp">
<item-type>DateTime</item-type> <item-type>DateTime</item-type>
<label>Forecast Time</label> <label>Forecast Time</label>

View File

@ -238,7 +238,7 @@
</channel-groups> </channel-groups>
<properties> <properties>
<property name="thingTypeVersion">1</property> <property name="thingTypeVersion">2</property>
</properties> </properties>
<representation-property>location</representation-property> <representation-property>location</representation-property>

View File

@ -143,6 +143,20 @@
<type>openweathermap:snow</type> <type>openweathermap:snow</type>
</add-channel> </add-channel>
</instruction-set> </instruction-set>
<instruction-set targetVersion="2">
<add-channel id="moonrise"
groupIds="forecastDaily,forecastToday,forecastTomorrow,forecastDay2,forecastDay3,forecastDay4,forecastDay5,forecastDay6,forecastDay7">
<type>openweathermap:moonrise</type>
</add-channel>
<add-channel id="moonset"
groupIds="forecastDaily,forecastToday,forecastTomorrow,forecastDay2,forecastDay3,forecastDay4,forecastDay5,forecastDay6,forecastDay7">
<type>openweathermap:moonset</type>
</add-channel>
<add-channel id="moon-phase"
groupIds="forecastDaily,forecastToday,forecastTomorrow,forecastDay2,forecastDay3,forecastDay4,forecastDay5,forecastDay6,forecastDay7">
<type>openweathermap:moon-phase</type>
</add-channel>
</instruction-set>
</thing-type> </thing-type>
</update:update-descriptions> </update:update-descriptions>