Skip to content

Commit cc57526

Browse files
authored
[sensibo] Fix potential API throttling at binding start (openhab#17091)
* refactor(sensibo): Utilize field selector in model refresh Utilize Sensibo's field selector to get all data for all pods in one request and avoid request rate limiting resolves openhab#17090 Signed-off-by: Zalan Meggyesi <[email protected]>
1 parent 422aaad commit cc57526

File tree

4 files changed

+521
-21
lines changed

4 files changed

+521
-21
lines changed

bundles/org.openhab.binding.sensibo/src/main/java/org/openhab/binding/sensibo/internal/dto/pods/GetPodsRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@
2323
public class GetPodsRequest extends AbstractRequest {
2424
@Override
2525
public String getRequestUrl() {
26-
return "/v2/users/me/pods";
26+
return "/v2/users/me/pods?fields=*";
2727
}
2828
}

bundles/org.openhab.binding.sensibo/src/main/java/org/openhab/binding/sensibo/internal/handler/SensiboAccountHandler.java

+4-11
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import org.openhab.binding.sensibo.internal.dto.poddetails.GetPodsDetailsRequest;
4545
import org.openhab.binding.sensibo.internal.dto.poddetails.PodDetailsDTO;
4646
import org.openhab.binding.sensibo.internal.dto.pods.GetPodsRequest;
47-
import org.openhab.binding.sensibo.internal.dto.pods.PodDTO;
4847
import org.openhab.binding.sensibo.internal.dto.setacstateproperty.SetAcStatePropertyReponse;
4948
import org.openhab.binding.sensibo.internal.dto.setacstateproperty.SetAcStatePropertyRequest;
5049
import org.openhab.binding.sensibo.internal.dto.settimer.SetTimerReponse;
@@ -184,18 +183,12 @@ protected SensiboModel refreshModel() throws SensiboException {
184183
final SensiboModel updatedModel = new SensiboModel(System.currentTimeMillis());
185184

186185
final GetPodsRequest getPodsRequest = new GetPodsRequest();
187-
final List<PodDTO> pods = sendRequest(buildRequest(getPodsRequest), getPodsRequest,
188-
new TypeToken<ArrayList<PodDTO>>() {
186+
final List<PodDetailsDTO> pods = sendRequest(buildRequest(getPodsRequest), getPodsRequest,
187+
new TypeToken<ArrayList<PodDetailsDTO>>() {
189188
}.getType());
190189

191-
for (final PodDTO pod : pods) {
192-
final GetPodsDetailsRequest getPodsDetailsRequest = new GetPodsDetailsRequest(pod.id);
193-
194-
final PodDetailsDTO podDetails = sendRequest(buildGetPodDetailsRequest(getPodsDetailsRequest),
195-
getPodsDetailsRequest, new TypeToken<PodDetailsDTO>() {
196-
}.getType());
197-
198-
updatedModel.addPod(new SensiboSky(podDetails));
190+
for (final PodDetailsDTO pod : pods) {
191+
updatedModel.addPod(new SensiboSky(pod));
199192
}
200193

201194
return updatedModel;

bundles/org.openhab.binding.sensibo/src/test/java/org/openhab/binding/sensibo/internal/handler/SensiboAccountHandlerTest.java

+1-7
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,9 @@ private void testInitialize(String podsResponse, String podDetailsResponse)
8989
// Setup initial response
9090
final String getPodsResponse = new String(getClass().getResourceAsStream(podsResponse).readAllBytes(),
9191
StandardCharsets.UTF_8);
92-
stubFor(get(urlEqualTo("/api/v2/users/me/pods?apiKey=APIKEY"))
92+
stubFor(get(urlEqualTo("/api/v2/users/me/pods?fields=*&apiKey=APIKEY"))
9393
.willReturn(aResponse().withStatus(200).withBody(getPodsResponse)));
9494

95-
// Setup 2nd response with details
96-
final String getPodDetailsResponse = new String(
97-
getClass().getResourceAsStream(podDetailsResponse).readAllBytes(), StandardCharsets.UTF_8);
98-
stubFor(get(urlEqualTo("/api/v2/pods/PODID?apiKey=APIKEY&fields=*"))
99-
.willReturn(aResponse().withStatus(200).withBody(getPodDetailsResponse)));
100-
10195
when(sensiboAccountMock.getConfiguration()).thenReturn(configuration);
10296
when(sensiboAccountMock.getUID()).thenReturn(new ThingUID("sensibo:account:thinguid"));
10397

0 commit comments

Comments
 (0)