2 * Copyright (c) 2010-2024 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.ecovacs.internal;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.openhab.binding.ecovacs.internal.api.commands.PlaySoundCommand.SoundType;
17 import org.openhab.binding.ecovacs.internal.api.model.CleanMode;
18 import org.openhab.binding.ecovacs.internal.api.model.DeviceCapability;
19 import org.openhab.binding.ecovacs.internal.api.model.MoppingWaterAmount;
20 import org.openhab.binding.ecovacs.internal.api.model.SuctionPower;
21 import org.openhab.binding.ecovacs.internal.util.StateOptionEntry;
22 import org.openhab.binding.ecovacs.internal.util.StateOptionMapping;
23 import org.openhab.core.thing.ThingTypeUID;
26 * The {@link EcovacsBindingConstants} class defines common constants, which are
27 * used across the whole binding.
29 * @author Danny Baumann - Initial contribution
32 public class EcovacsBindingConstants {
33 private static final String BINDING_ID = "ecovacs";
35 // Client keys and secrets used for API authentication (extracted from Ecovacs app)
36 public static final String CLIENT_KEY = "1520391301804";
37 public static final String CLIENT_SECRET = "6c319b2a5cd3e66e39159c2e28f2fce9";
38 public static final String AUTH_CLIENT_KEY = "1520391491841";
39 public static final String AUTH_CLIENT_SECRET = "77ef58ce3afbe337da74aa8c5ab963a9";
41 // List of all Thing Type UIDs
42 public static final ThingTypeUID THING_TYPE_API = new ThingTypeUID(BINDING_ID, "ecovacsapi");
43 public static final ThingTypeUID THING_TYPE_VACUUM = new ThingTypeUID(BINDING_ID, "vacuum");
45 // List of all channel UIDs
46 public static final String CHANNEL_ID_AUTO_EMPTY = "settings#auto-empty";
47 public static final String CHANNEL_ID_BATTERY_LEVEL = "status#battery";
48 public static final String CHANNEL_ID_CLEANING_MODE = "status#current-cleaning-mode";
49 public static final String CHANNEL_ID_CLEANING_TIME = "status#current-cleaning-time";
50 public static final String CHANNEL_ID_CLEANED_AREA = "status#current-cleaned-area";
51 public static final String CHANNEL_ID_CLEANING_PASSES = "settings#cleaning-passes";
52 public static final String CHANNEL_ID_CLEANING_SPOT_DEFINITION = "status#current-cleaning-spot-definition";
53 public static final String CHANNEL_ID_CONTINUOUS_CLEANING = "settings#continuous-cleaning";
54 public static final String CHANNEL_ID_COMMAND = "actions#command";
55 public static final String CHANNEL_ID_DUST_FILTER_LIFETIME = "consumables#dust-filter-lifetime";
56 public static final String CHANNEL_ID_ERROR_CODE = "status#error-code";
57 public static final String CHANNEL_ID_ERROR_DESCRIPTION = "status#error-description";
58 public static final String CHANNEL_ID_LAST_CLEAN_START = "last-clean#last-clean-start";
59 public static final String CHANNEL_ID_LAST_CLEAN_DURATION = "last-clean#last-clean-duration";
60 public static final String CHANNEL_ID_LAST_CLEAN_AREA = "last-clean#last-clean-area";
61 public static final String CHANNEL_ID_LAST_CLEAN_MODE = "last-clean#last-clean-mode";
62 public static final String CHANNEL_ID_LAST_CLEAN_MAP = "last-clean#last-clean-map";
63 public static final String CHANNEL_ID_MAIN_BRUSH_LIFETIME = "consumables#main-brush-lifetime";
64 public static final String CHANNEL_ID_OTHER_COMPONENT_LIFETIME = "consumables#other-component-lifetime";
65 public static final String CHANNEL_ID_SIDE_BRUSH_LIFETIME = "consumables#side-brush-lifetime";
66 public static final String CHANNEL_ID_STATE = "status#state";
67 public static final String CHANNEL_ID_SUCTION_POWER = "settings#suction-power";
68 public static final String CHANNEL_ID_TOTAL_CLEANING_TIME = "total-stats#total-cleaning-time";
69 public static final String CHANNEL_ID_TOTAL_CLEANED_AREA = "total-stats#total-cleaned-area";
70 public static final String CHANNEL_ID_TOTAL_CLEAN_RUNS = "total-stats#total-clean-runs";
71 public static final String CHANNEL_ID_TRUE_DETECT_3D = "settings#true-detect-3d";
72 public static final String CHANNEL_ID_VOICE_VOLUME = "settings#voice-volume";
73 public static final String CHANNEL_ID_WATER_PLATE_PRESENT = "status#water-system-present";
74 public static final String CHANNEL_ID_WATER_AMOUNT = "settings#water-amount";
75 public static final String CHANNEL_ID_WIFI_RSSI = "status#wifi-rssi";
77 public static final String CHANNEL_TYPE_ID_CLEAN_MODE = "current-cleaning-mode";
78 public static final String CHANNEL_TYPE_ID_LAST_CLEAN_MODE = "last-clean-mode";
80 public static final String CMD_AUTO_CLEAN = "clean";
81 public static final String CMD_PAUSE = "pause";
82 public static final String CMD_RESUME = "resume";
83 public static final String CMD_CHARGE = "charge";
84 public static final String CMD_STOP = "stop";
85 public static final String CMD_SPOT_AREA = "spotArea";
86 public static final String CMD_CUSTOM_AREA = "customArea";
88 public static final StateOptionMapping<CleanMode> CLEAN_MODE_MAPPING = StateOptionMapping.of(
89 new StateOptionEntry<>(CleanMode.AUTO, "auto"),
90 new StateOptionEntry<>(CleanMode.EDGE, "edge", DeviceCapability.EDGE_CLEANING),
91 new StateOptionEntry<>(CleanMode.SPOT, "spot", DeviceCapability.SPOT_CLEANING),
92 new StateOptionEntry<>(CleanMode.SPOT_AREA, "spotArea", DeviceCapability.SPOT_AREA_CLEANING),
93 new StateOptionEntry<>(CleanMode.CUSTOM_AREA, "customArea", DeviceCapability.CUSTOM_AREA_CLEANING),
94 new StateOptionEntry<>(CleanMode.SINGLE_ROOM, "singleRoom", DeviceCapability.SINGLE_ROOM_CLEANING),
95 new StateOptionEntry<>(CleanMode.PAUSE, "pause"), new StateOptionEntry<>(CleanMode.STOP, "stop"),
96 new StateOptionEntry<>(CleanMode.WASHING, "washing"), new StateOptionEntry<>(CleanMode.DRYING, "drying"),
97 new StateOptionEntry<>(CleanMode.RETURNING, "returning"));
99 public static final StateOptionMapping<MoppingWaterAmount> WATER_AMOUNT_MAPPING = StateOptionMapping.of(
100 new StateOptionEntry<>(MoppingWaterAmount.LOW, "low"),
101 new StateOptionEntry<>(MoppingWaterAmount.MEDIUM, "medium"),
102 new StateOptionEntry<>(MoppingWaterAmount.HIGH, "high"),
103 new StateOptionEntry<>(MoppingWaterAmount.VERY_HIGH, "veryhigh"));
105 public static final StateOptionMapping<SuctionPower> SUCTION_POWER_MAPPING = StateOptionMapping.of(
106 new StateOptionEntry<>(SuctionPower.SILENT, "silent", DeviceCapability.EXTENDED_CLEAN_SPEED_CONTROL),
107 new StateOptionEntry<>(SuctionPower.NORMAL, "normal"), new StateOptionEntry<>(SuctionPower.HIGH, "high"),
108 new StateOptionEntry<>(SuctionPower.HIGHER, "higher", DeviceCapability.EXTENDED_CLEAN_SPEED_CONTROL));
110 public static final StateOptionMapping<SoundType> SOUND_TYPE_MAPPING = StateOptionMapping.of(
111 new StateOptionEntry<>(SoundType.BEEP, "beep"), new StateOptionEntry<>(SoundType.I_AM_HERE, "iAmHere"),
112 new StateOptionEntry<>(SoundType.STARTUP, "startup"),
113 new StateOptionEntry<>(SoundType.SUSPENDED, "suspended"),
114 new StateOptionEntry<>(SoundType.BATTERY_LOW, "batteryLow"));