package rpc import ( "fmt" "src.dualinventive.com/go/dinet/ditime" ) // Sensor is a DI-Net sensor type Sensor struct { uid uint16 label string typeName string enum map[string]int } // GPSSensorData is the structure for sensor-type 'gps' type GPSSensorData struct { HDOP float64 `json:"hdop" msgpack:"hdop"` Latitude float64 `json:"latitude" msgpack:"latitude"` Longitude float64 `json:"longitude" msgpack:"longitude"` } // RTSDataKey returns the realtime status sensor:data key func (s *Sensor) RTSDataKey() string { return fmt.Sprintf("%s:%d:data", ClassSensor, s.UID()) } // RTSInfoKey returns the realtime status sensor:info key func (s *Sensor) RTSInfoKey() string { return fmt.Sprintf("%s:%d:info", ClassSensor, s.UID()) } // UID returns the unique identifier of a Sensor func (s *Sensor) UID() uint16 { return s.uid } // Label returns the label for a sensor func (s *Sensor) Label() string { return s.label } // Data returns a value object, optionally an alternative time can be provided func (s *Sensor) Data(val interface{}, t ...ditime.Time) *ResultValueItem { tm := ditime.Now() if len(t) > 0 { tm = t[0] } return &ResultValueItem{ UID: s.uid, Time: tm, Value: val, } } // Info returns a info object func (s *Sensor) Info() ResultInfoItem { r := ResultInfoItem{ UID: s.uid, Label: s.label, Type: s.typeName, } if len(s.enum) > 0 { r.Enum = s.enum } return r } // BatteryState is a battery state type type BatteryState int const ( // BatteryStateRemoved indicates that the battery is removed BatteryStateRemoved BatteryState = 0 // BatteryStateEmpty indicates that the battery is empty BatteryStateEmpty BatteryState = 1 // BatteryStateCritical indicates that the battery is critical BatteryStateCritical BatteryState = 2 // BatteryStateLow indicates that the battery is low BatteryStateLow BatteryState = 3 // BatteryStateHalf indicates that the battery is half full BatteryStateHalf BatteryState = 4 // BatteryStateFull indicates that the battery is full BatteryStateFull BatteryState = 5 ) //nolint: gochecknoglobals var batteryEnum = map[string]int{ "removed": int(BatteryStateRemoved), "empty": int(BatteryStateEmpty), "crit": int(BatteryStateCritical), "low": int(BatteryStateLow), "half": int(BatteryStateHalf), "full": int(BatteryStateFull), } // KeyswitchState is a keyswitch state type type KeyswitchState int const ( // KeyswitchStateUnknown indicates that the keyswitch is in an unknown position KeyswitchStateUnknown KeyswitchState = 0 // KeyswitchStateOperational indicates that the keyswitch is in the operational position KeyswitchStateOperational KeyswitchState = 1 // KeyswitchStateOn indicates that the keyswitch is in the on position KeyswitchStateOn KeyswitchState = 2 // KeyswitchStateOff indicates that the keyswitch is in the off position KeyswitchStateOff KeyswitchState = 3 ) //nolint: gochecknoglobals var keyswitchEnum = map[string]int{ "unknown": int(KeyswitchStateUnknown), "operational": int(KeyswitchStateOperational), "on": int(KeyswitchStateOn), "off": int(KeyswitchStateOff), } // ChargerState is a charger state type type ChargerState int const ( // ChargerStateDisconnected indicates that the charger is disconnected ChargerStateDisconnected ChargerState = 0 // ChargerStateConnected indicates that the charger is connected, but not charging ChargerStateConnected ChargerState = 1 // ChargerStateCharging indicates that the charger is connected and charging ChargerStateCharging ChargerState = 2 // ChargerStateError indicates that there is a charger error ChargerStateError ChargerState = 3 // ChargerStateUnknown indicates that the charger is unknown ChargerStateUnknown ChargerState = 255 ) //nolint: gochecknoglobals var chargerEnum = map[string]int{ "disconnected": int(ChargerStateDisconnected), "connected": int(ChargerStateConnected), "charging": int(ChargerStateCharging), "error": int(ChargerStateError), "unknown": int(ChargerStateUnknown), } // SectionsShort is the struct for ZKLRCSensorSectionsShort and ZKLRCSensorSectionsBattery type SectionsShort struct { // State is true when all the sections are true State bool `json:"state" msgpack:"state"` Section1 bool `json:"section_1" msgpack:"section_1"` Section2 bool `json:"section_2" msgpack:"section_2"` Section3 bool `json:"section_3" msgpack:"section_3"` Section4 bool `json:"section_4" msgpack:"section_4"` } // nolint: golint, gochecknoglobals var ( SensorBattery1Voltage = Sensor{uid: 1, label: "bat1-voltage", typeName: "number"} SensorBattery1State = Sensor{uid: 2, label: "bat1-state", typeName: "enum", enum: batteryEnum} SensorBattery2Voltage = Sensor{uid: 3, label: "bat2-voltage", typeName: "number"} SensorBattery2State = Sensor{uid: 4, label: "bat2-state", typeName: "enum", enum: batteryEnum} SensorBattery3Voltage = Sensor{uid: 5, label: "bat3-voltage", typeName: "number"} SensorBattery3State = Sensor{uid: 6, label: "bat3-state", typeName: "enum", enum: batteryEnum} SensorBattery4Voltage = Sensor{uid: 7, label: "bat4-voltage", typeName: "number"} SensorBattery4State = Sensor{uid: 8, label: "bat4-state", typeName: "enum", enum: batteryEnum} SensorCharger1Voltage = Sensor{uid: 9, label: "charger1-voltage", typeName: "number"} SensorCharger1State = Sensor{uid: 10, label: "charger1-state", typeName: "enum", enum: chargerEnum} SensorCharger2Voltage = Sensor{uid: 11, label: "charger2-voltage", typeName: "number"} SensorCharger2State = Sensor{uid: 12, label: "charger2-state", typeName: "enum", enum: chargerEnum} SensorGPS = Sensor{uid: 13, label: "gps", typeName: "gps"} SensorRSSI = Sensor{uid: 14, label: "rssi", typeName: "number"} SensorBER = Sensor{uid: 15, label: "ber", typeName: "number"} GatewaySensorTemperature1 = Sensor{uid: 100, label: "temperature1", typeName: "number"} CRMSensorTemperature1 = Sensor{uid: 100, label: "temperature1", typeName: "number"} CRMSensorTemperature2 = Sensor{uid: 101, label: "temperature2", typeName: "number"} CRMSensorAcceleration = Sensor{uid: 102, label: "acceleration", typeName: "struct"} CRMSensorCapTouch = Sensor{uid: 103, label: "cap-touch", typeName: "number"} CRTMSensorTemperature1 = Sensor{uid: 100, label: "temperature1", typeName: "number"} CRTMSensorTemperature2 = Sensor{uid: 101, label: "temperature2", typeName: "number"} CRTMSensorRailContact = Sensor{uid: 102, label: "rail-contact", typeName: "bool"} CRTMSensorRailContactSleep = Sensor{uid: 103, label: "rail-contact-sleep", typeName: "bool"} CRTMSensorAcceleration = Sensor{uid: 104, label: "acceleration", typeName: "struct"} DNCMSensorTemperature = Sensor{uid: 100, label: "dncm-temp", typeName: "number"} DUMSensorButton = Sensor{uid: 100, label: "du-manual", typeName: "number"} DUUSensorUltrasonic = Sensor{uid: 100, label: "du-ultrasonic", typeName: "number"} DUUSensorPosTilt = Sensor{uid: 101, label: "duu-pos-tilt", typeName: "struct"} WUMSensorAlarmButton = Sensor{uid: 100, label: "wu-alarm-button", typeName: "number"} ZKLSensorDetectionQuality = Sensor{uid: 100, label: "detection-quality", typeName: "number"} ZKLSensorDetection = Sensor{uid: 101, label: "detection-status", typeName: "bool"} ZKLSensorMeasurement = Sensor{uid: 102, label: "measurement", typeName: "bool"} ZKLSensorBa = Sensor{uid: 103, label: "ba", typeName: "number"} ZKLSensorFrequency = Sensor{uid: 104, label: "frequency", typeName: "number"} ZKLSensorRMS = Sensor{uid: 107, label: "rms", typeName: "number"} ZKLSensorBAAutocal = Sensor{uid: 108, label: "ba-autocal", typeName: "number"} ZKLSensorTempOnboard = Sensor{uid: 109, label: "temp-onboard", typeName: "number"} ZKLSensorTempNTC = Sensor{uid: 110, label: "temp-ntc", typeName: "number"} ZKLRCSensorSectionsShort = Sensor{uid: 105, label: "sw-short", typeName: "struct"} ZKLRCSensorSectionsBattery = Sensor{uid: 106, label: "sw-battery", typeName: "struct"} ZKLRCSensorSwitchShort = Sensor{uid: 150, label: "switch-state", typeName: "bool"} ZKLRCSensorKeySwitch = Sensor{uid: 151, label: "keyswitch", typeName: "enum", enum: keyswitchEnum} ReedSensorContactClosed = Sensor{uid: 102, label: "contact-closed", typeName: "bool"} )