19#ifndef SRC_SUPLA_CONTROL_ROLLER_SHUTTER_INTERFACE_H_
20#define SRC_SUPLA_CONTROL_ROLLER_SHUTTER_INTERFACE_H_
22#include "../action_handler.h"
23#include "../channel_element.h"
25#define UNKNOWN_POSITION -1
26#define STOP_POSITION -2
27#define MOVE_UP_POSITION -3
28#define MOVE_DOWN_POSITION -4
29#define STOP_REQUEST -5
30#define RS_DEFAULT_OPERATION_TIMEOUT_MS 60000
38enum class Directions : uint8_t { STOP_DIR = 0, DOWN_DIR = 1, UP_DIR = 2 };
42 uint8_t motorUpsideDown = 1;
43 uint8_t buttonsUpsideDown = 1;
44 int8_t timeMargin = -1;
48 uint8_t visualizationType = 0;
53 uint32_t tiltingTime = 0;
54 uint16_t tilt0Angle = 0;
55 uint16_t tilt100Angle = 0;
56 uint8_t tiltControlType =
57 SUPLA_TILT_CONTROL_TYPE_UNKNOWN;
133 void handleAction(
int event,
int action)
override;
136 bool local =
false)
override;
137 void fillChannelConfig(
void *channelConfig,
139 uint8_t configType)
override;
146 virtual void close();
149 virtual void moveUp();
151 virtual void moveDown();
154 virtual void setTargetPosition(
int newPosition,
155 int newTilt = UNKNOWN_POSITION);
164 void setNotCalibrated();
168 void setCalibrationOngoing(
int calibrationTime = 1);
169 void setCalibrationFinished();
209 void configComfortUpValue(uint8_t position);
210 void configComfortDownValue(uint8_t position);
211 void configComfortUpTiltValue(uint8_t position);
212 void configComfortDownTiltValue(uint8_t position);
222 uint32_t getClosingTimeMs()
const;
223 uint32_t getOpeningTimeMs()
const;
224 uint32_t getTiltingTimeMs()
const;
225 uint32_t getTiltControlType()
const;
230 virtual void triggerCalibration();
231 void setCalibrationNeeded();
232 bool isCalibrationRequested()
const;
233 bool isCalibrated()
const;
288 uint8_t getMotorUpsideDown()
const;
289 uint8_t getButtonsUpsideDown()
const;
290 int8_t getTimeMargin()
const;
292 static void setRsStorageSaveDelay(
int delayMs);
294 virtual bool inMove();
295 virtual bool isCalibrationInProgress()
const;
296 void startCalibration(uint32_t timeMs);
297 void stopCalibration();
298 bool isCalibrationFailed()
const;
299 bool isCalibrationLost()
const;
300 bool isMotorProblem()
const;
302 bool isFunctionSupported(int32_t channelFunction)
const;
303 bool isAutoCalibrationSupported()
const;
305 void setOpenCloseTime(uint32_t newClosingTimeMs, uint32_t newOpeningTimeMs);
306 void setTiltingTime(uint32_t newTiltingTimeMs,
bool local =
true);
307 void setTiltControlType(uint8_t newTiltControlType,
bool local =
true);
309 void setCalibrationFailed(
bool value);
310 void setCalibrationLost(
bool value);
311 void setMotorProblem(
bool value);
316 bool asInternal =
true;
317 bool upButton =
true;
330 bool upButton,
bool asInternal);
333 bool lastDirectionWasOpen()
const;
334 bool lastDirectionWasClose()
const;
337 bool isTimeSettingAvailable()
const;
338 bool getCalibrate()
const;
339 void setCalibrate(
bool value);
341 void printConfig()
const;
342 uint32_t getTimeMarginValue(uint32_t fullTime)
const;
346 uint8_t comfortDownValue = 20;
347 uint8_t comfortUpValue = 80;
348 uint8_t comfortUpTiltValue = 0;
349 uint8_t comfortDownTiltValue = 100;
351 Directions currentDirection = Directions::STOP_DIR;
352 Directions lastDirection = Directions::STOP_DIR;
354 int16_t currentPosition =
356 int16_t currentTilt =
359 int8_t targetPosition = STOP_POSITION;
360 int8_t targetTilt = UNKNOWN_POSITION;
361 int16_t lastPositionBeforeMovement = UNKNOWN_POSITION;
362 int16_t lastTiltBeforeMovement = UNKNOWN_POSITION;
363 bool newTargetPositionAvailable =
false;
365 RollerShutterConfig rsConfig;
366 TiltConfig tiltConfig;
370 uint32_t closingTimeMs = 0;
371 uint32_t openingTimeMs = 0;
375 uint32_t calibrationTime = 0;
376 uint32_t lastUpdateTime = 0;
378 static int16_t rsStorageSaveDelay;
RollerShutterInterface(bool tiltFunctionsEnabled=false)
Constructor.
Definition roller_shutter_interface.cpp:56
Definition SuplaDevice.h:153
bool isTiltFunctionsSupported() const
Check if tilt functions are supported.
Definition roller_shutter_interface.cpp:1340
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:628
int getTargetTilt() const
Get target tilt position.
Definition roller_shutter_interface.cpp:705
int getCurrentPosition() const
Get current roller shutter position.
Definition roller_shutter_interface.cpp:687
void setRsConfigTimeMarginEnabled(bool enable)
Enable/disable time margin configuration option.
Definition roller_shutter_interface.cpp:1138
void setRsConfigButtonsUpsideDownValue(uint8_t value)
Set buttons upside down value.
Definition roller_shutter_interface.cpp:1200
void setupButtonActions(Supla::Control::Button *button, bool upButton, bool asInternal)
Configure additional buttons for roller shutter.
Definition roller_shutter_interface.cpp:1267
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition roller_shutter_interface.cpp:138
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition roller_shutter_interface.cpp:1214
int getCurrentDirection() const
Get current roller shutter movement direction.
Definition roller_shutter_interface.cpp:712
void setRsConfigTimeMarginValue(int8_t value)
Set time margin value.
Definition roller_shutter_interface.cpp:1207
bool isTiltFunctionEnabled() const
Check if tilt function is currently enabled.
Definition roller_shutter_interface.cpp:1346
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition roller_shutter_interface.cpp:118
RollerShutterInterface(bool tiltFunctionsEnabled=false)
Constructor.
Definition roller_shutter_interface.cpp:56
bool isBottomReached() const
Check if bottom position (and tilt if applicable) is reached.
Definition roller_shutter_interface.cpp:1373
bool isTopReached() const
Check if top position (and tilt if applicable) is reached.
Definition roller_shutter_interface.cpp:1364
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition roller_shutter_interface.cpp:669
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:434
void setRsConfigMotorUpsideDownValue(uint8_t value)
Set motor upside down value.
Definition roller_shutter_interface.cpp:1193
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition roller_shutter_interface.cpp:1166
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition roller_shutter_interface.cpp:572
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:941
int getCurrentTilt() const
Get current tilt position.
Definition roller_shutter_interface.cpp:694
void setRsConfigButtonsUpsideDownEnabled(bool enable)
Enable/disable buttons upside down configuration option.
Definition roller_shutter_interface.cpp:1128
void setRsConfigMotorUpsideDownEnabled(bool enable)
Enable/disable motor upside down configuration option.
Definition roller_shutter_interface.cpp:1118
int getTargetPosition() const
Get target roller shutter position.
Definition roller_shutter_interface.cpp:701
void addTiltFunctions()
Add tilt functions (facade blinds, vertical blinds) Changing of tilt functions will breake state stor...
Definition roller_shutter_interface.cpp:1334
virtual ~RollerShutterInterface()
Destructor.
Definition roller_shutter_interface.cpp:72
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition roller_shutter_interface.cpp:771
bool isTiltConfigured() const
Check if tilting is configured (time and control modes are set and isTiltFunctionEnabled is true)
Definition roller_shutter_interface.cpp:1359
Definition roller_shutter_interface.h:41
Definition roller_shutter_interface.h:52