4#ifndef SRC_SUPLA_CONTROL_ROLLER_SHUTTER_INTERFACE_H_
5#define SRC_SUPLA_CONTROL_ROLLER_SHUTTER_INTERFACE_H_
7#include "../action_handler.h"
8#include "../channel_element.h"
10#define UNKNOWN_POSITION -1
11#define STOP_POSITION -2
12#define MOVE_UP_POSITION -3
13#define MOVE_DOWN_POSITION -4
14#define STOP_REQUEST -5
15#define RS_DEFAULT_OPERATION_TIMEOUT_MS 60000
16#define RS_MAX_OPERATION_TIME_MS 600000
22bool isValidTiltControlType(uint32_t type);
23constexpr uint32_t MAX_TILT_ANGLE_DEGREES = 180;
24bool isValidTiltAngle(uint32_t angle);
25bool requiresSeparateTiltPhase(uint8_t type);
26bool isValidFacadeBlindTiming(uint8_t type,
27 uint32_t openingTimeMs,
28 uint32_t closingTimeMs,
29 uint32_t tiltingTimeMs);
33enum class Directions : uint8_t { STOP_DIR = 0, DOWN_DIR = 1, UP_DIR = 2 };
37 uint8_t motorUpsideDown = 1;
38 uint8_t buttonsUpsideDown = 1;
39 int8_t timeMargin = -1;
43 uint8_t visualizationType = 0;
48 uint32_t tiltingTime = 0;
49 uint16_t tilt0Angle = 0;
50 uint16_t tilt100Angle = 0;
51 uint8_t tiltControlType =
52 SUPLA_TILT_CONTROL_TYPE_UNKNOWN;
131 void handleAction(
int event,
int action)
override;
134 bool local =
false)
override;
135 void fillChannelConfig(
void *channelConfig,
137 uint8_t configType)
override;
144 virtual void close();
147 virtual void moveUp();
149 virtual void moveDown();
152 virtual void setTargetPosition(
int newPosition,
153 int newTilt = UNKNOWN_POSITION);
162 void setNotCalibrated();
166 void setCalibrationOngoing(
int calibrationTime = 1);
167 void setCalibrationFinished();
207 void configComfortUpValue(uint8_t position);
208 void configComfortDownValue(uint8_t position);
209 void configComfortUpTiltValue(uint8_t position);
210 void configComfortDownTiltValue(uint8_t position);
220 uint32_t getClosingTimeMs()
const;
221 uint32_t getOpeningTimeMs()
const;
222 uint32_t getTiltingTimeMs()
const;
223 uint32_t getTiltControlType()
const;
228 virtual void triggerCalibration();
229 void setCalibrationNeeded();
230 bool isCalibrationRequested()
const;
231 bool isCalibrated()
const;
286 uint8_t getMotorUpsideDown()
const;
287 uint8_t getButtonsUpsideDown()
const;
288 int8_t getTimeMargin()
const;
290 static void setRsStorageSaveDelay(
int delayMs);
292 virtual bool inMove();
293 virtual bool isCalibrationInProgress()
const;
294 void startCalibration(uint32_t timeMs);
295 void stopCalibration();
296 bool isCalibrationFailed()
const;
297 bool isCalibrationLost()
const;
298 bool isMotorProblem()
const;
300 bool isFunctionSupported(int32_t channelFunction)
const;
301 bool isAutoCalibrationSupported()
const;
303 void setOpenCloseTime(uint32_t newClosingTimeMs, uint32_t newOpeningTimeMs);
304 void setTiltingTime(uint32_t newTiltingTimeMs,
bool local =
true);
305 void setTiltControlType(uint8_t newTiltControlType,
bool local =
true);
306 bool applyFacadeBlindTimingConfig(uint32_t openingTimeMs,
307 uint32_t closingTimeMs,
308 uint32_t tiltingTimeMs,
309 uint32_t tiltControlType,
312 void setCalibrationFailed(
bool value);
313 void setCalibrationLost(
bool value);
314 void setMotorProblem(
bool value);
317 void clearTiltConfig();
323 void loadRollerShutterConfigOnly();
324 void validateTiltConfigAfterLoad();
325 void purgeRollerShutterConfigOnly();
329 bool asInternal =
true;
330 bool upButton =
true;
343 bool upButton,
bool asInternal);
346 bool lastDirectionWasOpen()
const;
347 bool lastDirectionWasClose()
const;
350 bool isTimeSettingAvailable()
const;
351 bool getCalibrate()
const;
352 void setCalibrate(
bool value);
354 void printConfig()
const;
355 uint32_t getTimeMarginValue(uint32_t fullTime)
const;
356 void logIgnoredTiltOnlyCommand(
int tilt);
360 uint8_t comfortDownValue = 20;
361 uint8_t comfortUpValue = 80;
362 uint8_t comfortUpTiltValue = 0;
363 uint8_t comfortDownTiltValue = 100;
365 Directions currentDirection = Directions::STOP_DIR;
366 Directions lastDirection = Directions::STOP_DIR;
368 int16_t currentPosition =
370 int16_t currentTilt =
373 int8_t targetPosition = STOP_POSITION;
374 int8_t targetTilt = UNKNOWN_POSITION;
375 int16_t lastPositionBeforeMovement = UNKNOWN_POSITION;
376 int16_t lastTiltBeforeMovement = UNKNOWN_POSITION;
377 bool newTargetPositionAvailable =
false;
378 bool invalidTiltOnlyCommandWarningLogged =
false;
385 uint32_t closingTimeMs = 0;
386 uint32_t openingTimeMs = 0;
390 uint32_t calibrationTime = 0;
391 uint32_t lastUpdateTime = 0;
392 bool rollerShutterStateLoaded =
false;
394 static int16_t rsStorageSaveDelay;
Definition SuplaDevice.h:167
Definition action_handler.h:8
Definition channel_element.h:15
Definition roller_shutter_interface.h:58
bool isTiltFunctionsSupported() const
Check if tilt functions are supported.
Definition roller_shutter_interface.cpp:1551
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:758
int getTargetTilt() const
Get target tilt position.
Definition roller_shutter_interface.cpp:869
int getCurrentPosition() const
Get current roller shutter position.
Definition roller_shutter_interface.cpp:851
void setRsConfigTimeMarginEnabled(bool enable)
Enable/disable time margin configuration option.
Definition roller_shutter_interface.cpp:1348
void setRsConfigButtonsUpsideDownValue(uint8_t value)
Set buttons upside down value.
Definition roller_shutter_interface.cpp:1410
void setupButtonActions(Supla::Control::Button *button, bool upButton, bool asInternal)
Configure additional buttons for roller shutter.
Definition roller_shutter_interface.cpp:1481
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition roller_shutter_interface.cpp:193
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition roller_shutter_interface.cpp:1424
int getCurrentDirection() const
Get current roller shutter movement direction.
Definition roller_shutter_interface.cpp:876
void setRsConfigTimeMarginValue(int8_t value)
Set time margin value.
Definition roller_shutter_interface.cpp:1417
bool isTiltFunctionEnabled() const
Check if tilt function is currently enabled.
Definition roller_shutter_interface.cpp:1556
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition roller_shutter_interface.cpp:173
RollerShutterInterface(bool tiltFunctionsEnabled=false)
Constructor.
Definition roller_shutter_interface.cpp:94
bool canExecuteTiltOnlyCommand(int tilt) const
Check whether a tilt-only target can be executed safely.
Definition roller_shutter_interface.cpp:1579
bool isBottomReached() const
Check if bottom position (and tilt if applicable) is reached.
Definition roller_shutter_interface.cpp:1601
bool isTopReached() const
Check if top position (and tilt if applicable) is reached.
Definition roller_shutter_interface.cpp:1595
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition roller_shutter_interface.cpp:833
void setCurrentPosition(int newPosition, int newTilt=UNKNOWN_POSITION)
Set current roller shutter/facade blind position (and tilt) (0 = open; 100 = closed)
Definition roller_shutter_interface.cpp:552
void setRsConfigMotorUpsideDownValue(uint8_t value)
Set motor upside down value.
Definition roller_shutter_interface.cpp:1403
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition roller_shutter_interface.cpp:1376
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition roller_shutter_interface.cpp:702
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:1136
int getCurrentTilt() const
Get current tilt position.
Definition roller_shutter_interface.cpp:858
void setRsConfigButtonsUpsideDownEnabled(bool enable)
Enable/disable buttons upside down configuration option.
Definition roller_shutter_interface.cpp:1338
void setRsConfigMotorUpsideDownEnabled(bool enable)
Enable/disable motor upside down configuration option.
Definition roller_shutter_interface.cpp:1328
int getTargetPosition() const
Get target roller shutter position.
Definition roller_shutter_interface.cpp:865
void addTiltFunctions()
Add tilt functions (facade blinds, vertical blinds) Changing of tilt functions will breake state stor...
Definition roller_shutter_interface.cpp:1545
virtual ~RollerShutterInterface()
Destructor.
Definition roller_shutter_interface.cpp:128
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition roller_shutter_interface.cpp:935
bool isTiltConfigured() const
Check if tilting is configured (time and control modes are set and isTiltFunctionEnabled is true)
Definition roller_shutter_interface.cpp:1569
Definition roller_shutter_interface.h:36
Definition roller_shutter_interface.h:47