/** * Websocket interface for building control unit - telgram definition * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-01-30 */ #pragma once #include #include #include #include class QJsonObject; namespace BuildingControlUnit { namespace Json { namespace Telegrams { class BUILDINGCONTROLCOMMON_EXPORT BaseTelegram { protected: explicit BaseTelegram(const QString &telegramId) : m_telegramId(telegramId) {} public: virtual ~BaseTelegram() = default; QString telegramId() const { return m_telegramId; } virtual QByteArray toJson() const = 0; static BaseTelegram *telegramFromJson(const QByteArray &jsonMsg); protected: virtual QByteArray toJsonInternal(const QJsonObject &data) const; private: QString m_telegramId; }; class BUILDINGCONTROLCOMMON_EXPORT BaseReport : public BaseTelegram { protected: explicit BaseReport(const QString &telegramId) : BaseTelegram(telegramId) {} protected: QByteArray toJsonInternal(const QJsonObject &_data) const override; static void fromJsonInternal(const QJsonObject &data, BaseReport *tele, bool &bOk); public: qint64 timestamp = 0; }; // for debug/instrumentation purposes class BUILDINGCONTROLCOMMON_EXPORT BsmTriggerFlashlight : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("BsmTriggerFlashlight"); } BsmTriggerFlashlight() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static BsmTriggerFlashlight *fromJson(const QJsonObject &data); int sensorId = 0; int numberOfFlashes = 1; // 1..254, 255 - infinite, 0 - stop int pauseBetweenFlashesSec = 1; // 1..10 QString hostname; // either sensorId or hostname }; class BUILDINGCONTROLCOMMON_EXPORT SetDamageState : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("SetDamageState"); } explicit SetDamageState() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static SetDamageState *fromJson(const QJsonObject &data); DamageState damageState = DamageState::NoDamage; QVector roomIds; // optional int originatorId = 0; }; class BUILDINGCONTROLCOMMON_EXPORT SetContaminationState : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("SetContaminationState"); } explicit SetContaminationState() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static SetContaminationState *fromJson(const QJsonObject &data); std::vector contaminationStates; }; class BUILDINGCONTROLCOMMON_EXPORT ResetContaminationState : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("ResetContaminationState"); } explicit ResetContaminationState() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static ResetContaminationState *fromJson(const QJsonObject &data); }; class BUILDINGCONTROLCOMMON_EXPORT SetEffectStates : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("SetEffectStates"); } explicit SetEffectStates() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static SetEffectStates *fromJson(const QJsonObject &data); QString segment = QString(); QVector effectStates; }; class BUILDINGCONTROLCOMMON_EXPORT SwitchRelay : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("SwitchRelay"); } explicit SwitchRelay() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static SwitchRelay *fromJson(const QJsonObject &data); QString segment; SwitchRelayValues switchRelayValues; }; class BUILDINGCONTROLCOMMON_EXPORT RelayState : public BaseReport { public: static QString telegramId() { return QStringLiteral("RelayState"); } explicit RelayState() : BaseReport(telegramId()) {} QByteArray toJson() const override; static RelayState *fromJson(const QJsonObject &data); struct RelayStateInfo { int id = 0; bool state = false; }; QVector relayStates; QString segment = QString(); qint64 stateTime = 0; qint64 offlineTime = 0; }; class BUILDINGCONTROLCOMMON_EXPORT EffectOverride : public BaseReport { public: static QString telegramId() { return QStringLiteral("EffectOverrides"); } explicit EffectOverride() : BaseReport(telegramId()) {} QByteArray toJson() const override; static EffectOverride *fromJson(const QJsonObject &data); struct OverrideInfo { int id = 0; int effectOverride = 0; }; QVector overrides; QString segment = QString(); qint64 stateTime = 0; qint64 offlineTime = 0; }; class BUILDINGCONTROLCOMMON_EXPORT SetFortifyFactor : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("SetFortifyFactor"); } explicit SetFortifyFactor() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static SetFortifyFactor *fromJson(const QJsonObject &data); struct FortifyInfo { int roomId = 0; double fortifyFactor = 1.0; }; QVector fortifyFactors; int originatorId = 0; }; class BUILDINGCONTROLCOMMON_EXPORT CentralEffectSimulationHit : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("CentralEffectSimulationHit"); } explicit CentralEffectSimulationHit() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static CentralEffectSimulationHit *fromJson(const QJsonObject &data); qint64 effectTimeMSec = 0; int chargeTypeId = 0; // TAS Code int destructiveFactor = -1; // optional -1 = not set int penetrationFactor = -1; // optional -1 = not set int aesId = 0; struct { double x = 0; double y = 0; double z = 0; } relPosition; QString properties; }; class BUILDINGCONTROLCOMMON_EXPORT CentralEffectSimulationHit3D : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("CentralEffectSimulationHit3D"); } explicit CentralEffectSimulationHit3D() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static CentralEffectSimulationHit3D *fromJson(const QJsonObject &data); qint64 effectTimeMSec{0}; int chargeTypeId{0}; // TAS Code int destructiveFactor{-1}; // optional -1 = not set int penetrationFactor{-1}; // optional -1 = not set int aesId{0}; struct { double x{0}; double y{0}; double z{0}; } impactPosition, detonationLocation; double detonationDistance{0}; QString properties; }; class BUILDINGCONTROLCOMMON_EXPORT DebugSimulateBSMHit : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("DebugSimulateBSMHit"); } explicit DebugSimulateBSMHit() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static DebugSimulateBSMHit *fromJson(const QJsonObject &data); qint64 effectTimeMSec = 0; int sensorId = 0; int originatorId = 0; int chargeTypeId = 0; int deposition1 = 0; int deposition2 = 0; }; class BUILDINGCONTROLCOMMON_EXPORT HitResult : public BaseReport { public: static QString telegramId() { return QStringLiteral("HitResult"); } explicit HitResult() : BaseReport(telegramId()) , hitResult(HitResultInfo()) {} QByteArray toJson() const override; static HitResult *fromJson(const QJsonObject &data); struct HitRoomInfo { int roomId = 0; int damagePercent = 0; int remainingEffectPercent = 0; double fortifyFactor = 1.0; }; struct ContaminationStateInfo { int aesId = 0; std::vector rooms; }; struct HitResultInfo { int sensorId = 0; int originatorId = 0; OriginatorType originatorType = OriginatorType::Unknown; int chargeTypeId = 0; // = TAS Code int damagePercentOld = 0; int damagePercentNew = 0; int effectSoundId = 0; int hitOnRoomId = 0; // the room which was initially hit DamageState damageState = DamageState::Unknown; QVector rooms; QVector contaminations; } hitResult; }; class BUILDINGCONTROLCOMMON_EXPORT BsmState : public BaseReport { public: static QString telegramId() { return QStringLiteral("BsmState"); } explicit BsmState() : BaseReport(telegramId()) {} QByteArray toJson() const override; static BsmState *fromJson(const QJsonObject &data); struct BsmStateInfo { QString hostname; QString versionInfo; int id = 0; quint16 port; bool connected = false; }; QVector bsmStates; }; class BUILDINGCONTROLCOMMON_EXPORT GetBsmBitTimeout : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("GetBsmBitTimeout"); } explicit GetBsmBitTimeout() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static GetBsmBitTimeout *fromJson(const QJsonObject &data); int sensorId = 0; }; class BUILDINGCONTROLCOMMON_EXPORT GetBsmConfiguration : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("GetBsmConfiguration"); } explicit GetBsmConfiguration() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static GetBsmConfiguration *fromJson(const QJsonObject &data); int sensorId = 0; }; class BUILDINGCONTROLCOMMON_EXPORT GetBsmTechnicalStatus : public BaseTelegram { public: static QString telegramId() { return QStringLiteral("GetBsmTechnicalStatus"); } explicit GetBsmTechnicalStatus() : BaseTelegram(telegramId()) {} QByteArray toJson() const override; static GetBsmTechnicalStatus *fromJson(const QJsonObject &data); int sensorId = 0; }; } // namespace Telegrams } // namespace Json } // namespace BuildingControlUnit