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 {
44 TouchWandUnitDataAlarmSensor touchWandUnitDataAlarmSensor = new TouchWandUnitDataAlarmSensor();
46 JsonObject jsonObject = json.getAsJsonObject();
47 touchWandUnitDataAlarmSensor.setId(jsonObject.get("id").getAsInt());
48 touchWandUnitDataAlarmSensor.setName(jsonObject.get("name").getAsString());
49 touchWandUnitDataAlarmSensor.setConnectivity(jsonObject.get("connectivity").getAsString());
50 touchWandUnitDataAlarmSensor.setType(jsonObject.get("type").getAsString());
51 touchWandUnitDataAlarmSensor.setHasBattery(jsonObject.get("hasBattery").getAsBoolean());
52 JsonElement powerMeterElement = jsonObject.get("hasPowerMeter");
53 if (powerMeterElement != null && !powerMeterElement.isJsonNull()) {
54 touchWandUnitDataAlarmSensor.setHasPowerMeter(powerMeterElement.getAsBoolean());
56 touchWandUnitDataAlarmSensor.setHasPowerMeter(false);
59 JsonElement status = jsonObject.get("status");
60 if (status != null && !status.isJsonNull()) { // Sometimes status is null
61 touchWandUnitDataAlarmSensor.setStatus(jsonObject.get("status").getAsString());
64 JsonObject currentStatusObj = builder.create().fromJson(jsonObject.get("currStatus").getAsJsonObject(),
67 if (currentStatusObj != null) {
69 TouchWandAlarmSensorCurrentStatus touchWandUnitDataAlarmSensorCurrentStatus = touchWandUnitDataAlarmSensor
72 for (Entry<String, JsonElement> entry : currentStatusObj.entrySet()) {
73 String key = entry.getKey();
74 String splits[] = key.split("_"); // the key is xxxx_n where xxx is sensor type and n is
75 String keyName = splits[0];
78 if (splits.length > 1 && !splits[1].isEmpty()) {
80 index = Integer.parseInt(splits[1]);
81 } catch (final NumberFormatException e) {
88 touchWandUnitDataAlarmSensorCurrentStatus.setBatt(entry.getValue().getAsInt());
91 Alarm alarm = gson.fromJson(entry.getValue().getAsJsonObject(), Alarm.class);
92 TouchWandAlarmSensorCurrentStatus.AlarmEvent alarmEvent = new TouchWandAlarmSensorCurrentStatus.AlarmEvent();
94 alarmEvent.alarm = alarm;
95 alarmEvent.alarmType = index;
97 touchWandUnitDataAlarmSensor.getCurrStatus().getAlarmsStatus().add(alarmEvent);
100 TouchWandAlarmSensorCurrentStatus.Sensor sensor = new TouchWandAlarmSensorCurrentStatus.Sensor();
101 sensor.value = entry.getValue().getAsFloat();
103 touchWandUnitDataAlarmSensor.getCurrStatus().getSensorsStatus().add(sensor);
106 BinarySensor bsensor = gson.fromJson(entry.getValue().getAsJsonObject(), BinarySensor.class);
107 TouchWandAlarmSensorCurrentStatus.BinarySensorEvent bsensorevent = new TouchWandAlarmSensorCurrentStatus.BinarySensorEvent();
108 if (bsensor != null) {
109 bsensorevent.sensor = bsensor;
110 bsensorevent.sensorType = index;
112 touchWandUnitDataAlarmSensor.getCurrStatus().getbSensorsStatus().add(bsensorevent);
119 return touchWandUnitDataAlarmSensor;