Skip to content

Commit

Permalink
Common api calls
Browse files Browse the repository at this point in the history
- and again clean up
  • Loading branch information
navybk committed Jul 24, 2018
1 parent 538c58f commit a96207e
Show file tree
Hide file tree
Showing 29 changed files with 274 additions and 25 deletions.
2 changes: 1 addition & 1 deletion src/main/java/io/rudolph/netatmo/NetatmoApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import io.rudolph.netatmo.oauth2.TokenStorage
import io.rudolph.netatmo.oauth2.model.Scope
import io.rudolph.netatmo.oauth2.networkinterceptor.AuthInterceptor
import io.rudolph.netatmo.oauth2.networkinterceptor.TimeoutInterceptor
import io.rudolph.netatmo.transform.JacksonTransform
import io.rudolph.netatmo.api.common.transform.JacksonTransform
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package io.rudolph.netatmo.api.aircare

import io.rudolph.netatmo.api.aircare.model.AirCareBody
import io.rudolph.netatmo.api.aircare.service.AirCareService
import io.rudolph.netatmo.api.common.CommonConnector
import io.rudolph.netatmo.api.energy.model.TypedBaseResult
import io.rudolph.netatmo.executable.Executable
import retrofit2.Retrofit

class AirCareConnector(api: Retrofit) {
class AirCareConnector(api: Retrofit): CommonConnector(api) {

private val airCareService = api.create(AirCareService::class.java)

/**
Expand Down
61 changes: 61 additions & 0 deletions src/main/java/io/rudolph/netatmo/api/common/CommonConnector.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package io.rudolph.netatmo.api.common

import io.rudolph.netatmo.api.common.model.MeasureRequestResponse
import io.rudolph.netatmo.api.common.model.Scale
import io.rudolph.netatmo.api.common.model.ScaleType
import io.rudolph.netatmo.api.common.service.CommonService
import io.rudolph.netatmo.api.energy.model.TypedBaseResult
import io.rudolph.netatmo.executable.Executable
import io.rudolph.netatmo.oauth2.toTimestamp
import retrofit2.Retrofit
import java.time.LocalDateTime


abstract class CommonConnector(api: Retrofit) {
private val apiService = api.create(CommonService::class.java)

/**
* Retrieve data from a device or module (Weather station and Thermostat only).
*
* required scope: read_station read_thermostat
*
* @see [Netatmo Api Reference] (https://dev.netatmo.com/resources/technical/reference/common/getmeasure)
*
* @param moduleId Mac address of the module you’re interested in. If not specified, returns data of the device. If specified, returns data from the specified module.
* @param deviceId Mac address of the device (can be found via getuser)
* @param scale Timelapse between two measurements
* @param type Measures you are interested in. Data you can request depends on the scale. See full details
* @param dateBegin Timestamp of the first measure to retrieve. Default is null.
* @param dateEnd Timestamp of the last measure to retrieve (default and max are 1024). Default is null.
* @param limit Maximum number of measurements (default and max are 1024)
* @param optimize Determines the format of the answer. Default is true. For mobile apps we recommend True and False if bandwidth isn't an issue as it is easier to parse.
* @param realTime If scale different than max, timestamps are by default offset + scale/2. To get exact timestamps, use true. Default is false.
* @return an executable object to obtain the [MeasureRequestResponse]
*/
fun getMeasure(
moduleId: String,
deviceId: String,
scale: Scale,
type: ScaleType,
dateBegin: LocalDateTime? = null,
dateEnd: LocalDateTime? = null,
limit: Int? = null,
optimize: Boolean? = null,
realTime: String? = null
): Executable<TypedBaseResult<List<MeasureRequestResponse>>> {
return apiService.getMeasure(
accessToken = "empty",
moduleId = moduleId,
deviceId = deviceId,
scale = scale.value,
type = type.value,
dateBegin = dateBegin.toTimestamp(),
dateEnd = dateEnd.toTimestamp(),
limit = limit,
optimize = optimize,
realTime = realTime
).let {
Executable(it)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.rudolph.netatmo.api.misc.model
package io.rudolph.netatmo.api.common.model


enum class DeviceType(val value: String) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.rudolph.netatmo.api.common.model

import com.fasterxml.jackson.annotation.JsonProperty
import java.time.LocalDateTime

data class MeasureRequestResponse(
@JsonProperty("beg_time")
val begTime: LocalDateTime,

@JsonProperty("step_time")
val stepTime: LocalDateTime,

@JsonProperty("value")
val value: MutableList<MutableList<Float>>?= mutableListOf<MutableList<Float>>()
)
20 changes: 20 additions & 0 deletions src/main/java/io/rudolph/netatmo/api/common/model/Scale.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.rudolph.netatmo.api.common.model

enum class Scale(val value: String) {
MAX("max"),

HALFHOUR("30min"),

HOUR("1hour"),

THREEHOURS("3hours"),

DAY("1day"),

WEEK("1week"),

MONTH("1month"),

UNKNOWN("unknown")

}
32 changes: 32 additions & 0 deletions src/main/java/io/rudolph/netatmo/api/common/model/ScaleType.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.rudolph.netatmo.api.common.model

enum class ScaleType(val value: String, val unit: String = "") {
TEMPERATURE("Temperature", "°C"),
CO2("CO2 ", "ppm"),
HUMIDITY("Humidity ", "%"),
PRESSURE("Pressure ", "mbar"),
NOISE("Noise ", "db"),
RAIN("Rain ", "mm"),
WINDSTRENGTH("WindStrength ", "km/h"),
WINDANGLE("WindAngle ", "angles"),
GUSTSTRENGTH("Guststrength ", "km/h"),
GUSTANGLE("GustAngle ", "angles"),
MIN_TEMP("min_temp"),
MAX_TEMP("max_temp"),
MIN_HUM("min_hum"),
MAX_HUM("max_hum"),
MAX_PRESSURE("max_pressure"),
SUM_RAIN("sum_rain"),
DATE_MAX_HUM("date_max_hum"),
MIN_PRESSURE("min_pressure"),
DATE_MIN_PRESSURE("date_min_pressure"),
DATE_MAX_PRESSURE("date_max_pressure"),
MIN_NOISE("min_noise"),
DATE_MIN_NOISE("date_min_noise"),
MAX_NOISE("max_noise"),
DATE_MAX_NOISE("date_max_noise"),
DATE_MIN_CO2("date_min_co2"),
DATE_MAX_CO2("date_max_co2"),
DATE_MAX_GUST("date_max_gust"),
UNKNOWN("unknown")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.rudolph.netatmo.api.common.service

import io.rudolph.netatmo.api.common.model.MeasureRequestResponse
import io.rudolph.netatmo.api.energy.model.TypedBaseResult
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Headers
import retrofit2.http.Query

interface CommonService {

@Headers("Content-Type:text/plain")
@GET("getmeasure")
fun getMeasure(
@Query("access_token") accessToken: String,
@Query("device_id") deviceId: String,
@Query("module_id") moduleId: String,
@Query("scale") scale: String,
@Query("type") type: String,
@Query("date_begin") dateBegin: Long? = null,
@Query("date_end") dateEnd: Long? = null,
@Query("limit") limit: Int? = null,
@Query("optimize") optimize: Boolean? = null,
@Query("real_time") realTime: String? = null
): Call<TypedBaseResult<List<MeasureRequestResponse>>>
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.rudolph.netatmo.api.misc.transform
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import io.rudolph.netatmo.api.misc.model.DeviceType
import io.rudolph.netatmo.api.common.model.DeviceType


class DeviceTypeDeserializer : JsonDeserializer<DeviceType>() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.rudolph.netatmo.api.misc.transform
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import io.rudolph.netatmo.api.misc.model.DeviceType
import io.rudolph.netatmo.api.common.model.DeviceType


class DeviceTypeSerializer : JsonSerializer<DeviceType>() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.rudolph.netatmo.transform
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.databind.ObjectMapper
Expand All @@ -11,9 +11,9 @@ import io.rudolph.netatmo.api.energy.model.transform.TemperaturTypeDeserializer
import io.rudolph.netatmo.api.energy.model.transform.ThermModeDeserializer
import io.rudolph.netatmo.api.energy.model.transform.ZoneTypeDeserializer
import io.rudolph.netatmo.api.energy.model.transform.ZoneTypeSerializer
import io.rudolph.netatmo.api.misc.model.DeviceType
import io.rudolph.netatmo.api.misc.transform.DeviceTypeDeserializer
import io.rudolph.netatmo.api.misc.transform.DeviceTypeSerializer
import io.rudolph.netatmo.api.common.model.DeviceType
import io.rudolph.netatmo.api.common.model.Scale
import io.rudolph.netatmo.api.common.model.ScaleType
import io.rudolph.netatmo.api.weather.model.Measure
import io.rudolph.netatmo.api.weather.model.transform.MeasureDeserializer
import io.rudolph.netatmo.oauth2.model.Scope
Expand All @@ -33,10 +33,14 @@ internal object JacksonTransform {
addDeserializer(ZoneType::class.java, ZoneTypeDeserializer())
addDeserializer(LocalDateTime::class.java, LocalDateTimeDeserializer())
addDeserializer(Measure::class.java, MeasureDeserializer())
addDeserializer(Scale::class.java, ScaleDeserializer())
addDeserializer(ScaleType::class.java, ScaleTypeDeserializer())

addSerializer(DeviceType::class.java, DeviceTypeSerializer())
addSerializer(ZoneType::class.java, ZoneTypeSerializer())
addSerializer(LocalDateTime::class.java, LocalDateTimeSerializer())
addSerializer(Scale::class.java, ScaleSerializer())
addSerializer(ScaleType::class.java, ScaleTypeSerializer())

addKeyDeserializer(LocalDateTime::class.java, LocalDateTimeKeyDeserializer())

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.rudolph.netatmo.transform
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.rudolph.netatmo.transform
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.KeyDeserializer
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.rudolph.netatmo.transform
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import io.rudolph.netatmo.api.common.model.Scale


class ScaleDeserializer : JsonDeserializer<Scale>() {
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): Scale {
return p?.valueAsString?.let { name ->
Scale.values().find {
it.value == name
}
} ?: Scale.UNKNOWN
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import io.rudolph.netatmo.api.common.model.Scale


class ScaleSerializer : JsonSerializer<Scale>() {
override fun serialize(value: Scale, gen: JsonGenerator, serializers: SerializerProvider?) {
gen.writeString(value.value)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import io.rudolph.netatmo.api.common.model.ScaleType


class ScaleTypeDeserializer : JsonDeserializer<ScaleType>() {
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): ScaleType {
return p?.valueAsString?.let { name ->
ScaleType.values().find {
it.value == name
}
} ?: ScaleType.UNKNOWN
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import io.rudolph.netatmo.api.common.model.ScaleType


class ScaleTypeSerializer : JsonSerializer<ScaleType>() {
override fun serialize(value: ScaleType, gen: JsonGenerator, serializers: SerializerProvider?) {
gen.writeString(value.value)
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.rudolph.netatmo.transform
package io.rudolph.netatmo.api.common.transform

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package io.rudolph.netatmo.api.energy

import io.rudolph.netatmo.api.common.CommonConnector
import io.rudolph.netatmo.api.common.model.DeviceType
import io.rudolph.netatmo.api.energy.model.*
import io.rudolph.netatmo.api.energy.service.EnergyService
import io.rudolph.netatmo.api.misc.model.DeviceType
import io.rudolph.netatmo.executable.Executable
import io.rudolph.netatmo.oauth2.toTimestamp
import retrofit2.Retrofit
import java.time.LocalDateTime


class EnergyConnector(api: Retrofit) {
class EnergyConnector(api: Retrofit) : CommonConnector(api) {
private val energyService = api.create(EnergyService::class.java)

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.rudolph.netatmo.api.energy.model

import com.fasterxml.jackson.annotation.JsonProperty
import io.rudolph.netatmo.api.misc.model.DeviceType
import io.rudolph.netatmo.api.common.model.DeviceType

/**
* Module status definition
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.rudolph.netatmo.api.energy.model

import com.fasterxml.jackson.annotation.JsonProperty
import io.rudolph.netatmo.api.misc.model.DeviceType
import io.rudolph.netatmo.api.common.model.DeviceType
import java.time.LocalDateTime


Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package io.rudolph.netatmo.api.energy.service

import io.rudolph.netatmo.api.energy.model.*
import io.rudolph.netatmo.api.misc.model.DeviceType
import io.rudolph.netatmo.api.common.model.DeviceType
import io.rudolph.netatmo.api.common.service.CommonService
import retrofit2.Call
import retrofit2.http.*

Expand Down
Loading

0 comments on commit a96207e

Please sign in to comment.