2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.touchwand.internal.dto;
15 import java.lang.reflect.Type;
16 import java.util.Map.Entry;
18 import org.openhab.binding.touchwand.internal.dto.TouchWandAlarmSensorCurrentStatus.Alarm;
19 import org.openhab.binding.touchwand.internal.dto.TouchWandAlarmSensorCurrentStatus.BinarySensor;
21 import com.google.gson.Gson;
22 import com.google.gson.GsonBuilder;
23 import com.google.gson.JsonDeserializationContext;
24 import com.google.gson.JsonDeserializer;
25 import com.google.gson.JsonElement;
26 import com.google.gson.JsonObject;
27 import com.google.gson.JsonParseException;
30 * The {@link AlarmSensorUnitDataDeserializer} implements AlarmSensorUnitData unit
33 * @author Roie Geron - Initial contribution
35 public class AlarmSensorUnitDataDeserializer implements JsonDeserializer<TouchWandUnitDataAlarmSensor> {
37 static final Gson gson = new Gson();
38 static GsonBuilder builder = new GsonBuilder();
41 public TouchWandUnitDataAlarmSensor deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
42 throws JsonParseException {
43 TouchWandUnitDataAlarmSensor touchWandUnitDataAlarmSensor = new TouchWandUnitDataAlarmSensor();
45 JsonObject jsonObject = json.getAsJsonObject();
46 touchWandUnitDataAlarmSensor.setId(jsonObject.get("id").getAsInt());
47 touchWandUnitDataAlarmSensor.setName(jsonObject.get("name").getAsString());
48 touchWandUnitDataAlarmSensor.setConnectivity(jsonObject.get("connectivity").getAsString());
49 touchWandUnitDataAlarmSensor.setType(jsonObject.get("type").getAsString());
50 touchWandUnitDataAlarmSensor.setHasBattery(jsonObject.get("hasBattery").getAsBoolean());
51 JsonElement powerMeterElement = jsonObject.get("hasPowerMeter");
52 if (powerMeterElement != null && !powerMeterElement.isJsonNull()) {
53 touchWandUnitDataAlarmSensor.setHasPowerMeter(powerMeterElement.getAsBoolean());
55 touchWandUnitDataAlarmSensor.setHasPowerMeter(false);
58 JsonElement status = jsonObject.get("status");
59 if (status != null && !status.isJsonNull()) { // Sometimes status is null
60 touchWandUnitDataAlarmSensor.setStatus(jsonObject.get("status").getAsString());
63 JsonObject currentStatusObj = builder.create().fromJson(jsonObject.get("currStatus").getAsJsonObject(),
66 if (currentStatusObj != null) {
67 TouchWandAlarmSensorCurrentStatus touchWandUnitDataAlarmSensorCurrentStatus = touchWandUnitDataAlarmSensor
70 for (Entry<String, JsonElement> entry : currentStatusObj.entrySet()) {
71 String key = entry.getKey();
72 String splits[] = key.split("_"); // the key is xxxx_n where xxx is sensor type and n is
73 String keyName = splits[0];
76 if (splits.length > 1 && !splits[1].isEmpty()) {
78 index = Integer.parseInt(splits[1]);
79 } catch (final NumberFormatException e) {
86 touchWandUnitDataAlarmSensorCurrentStatus.setBatt(entry.getValue().getAsInt());
89 Alarm alarm = gson.fromJson(entry.getValue().getAsJsonObject(), Alarm.class);
90 TouchWandAlarmSensorCurrentStatus.AlarmEvent alarmEvent = new TouchWandAlarmSensorCurrentStatus.AlarmEvent();
92 alarmEvent.alarm = alarm;
93 alarmEvent.alarmType = index;
95 touchWandUnitDataAlarmSensor.getCurrStatus().getAlarmsStatus().add(alarmEvent);
98 TouchWandAlarmSensorCurrentStatus.Sensor sensor = new TouchWandAlarmSensorCurrentStatus.Sensor();
99 sensor.value = entry.getValue().getAsFloat();
101 touchWandUnitDataAlarmSensor.getCurrStatus().getSensorsStatus().add(sensor);
104 BinarySensor bsensor = gson.fromJson(entry.getValue().getAsJsonObject(), BinarySensor.class);
105 TouchWandAlarmSensorCurrentStatus.BinarySensorEvent bsensorevent = new TouchWandAlarmSensorCurrentStatus.BinarySensorEvent();
106 if (bsensor != null) {
107 bsensorevent.sensor = bsensor;
108 bsensorevent.sensorType = index;
110 touchWandUnitDataAlarmSensor.getCurrStatus().getbSensorsStatus().add(bsensorevent);
117 return touchWandUnitDataAlarmSensor;