void C1Wire::ReportTemperatureHumidity(const std::string& deviceId,float temperature,float humidity) { if ((temperature == -1000.0) || (humidity == -1000.0)) return; unsigned char deviceIdByteArray[DEVICE_ID_SIZE]={0}; DeviceIdToByteArray(deviceId,deviceIdByteArray); RBUF tsen; memset(&tsen,0,sizeof(RBUF)); tsen.TEMP_HUM.packetlength=sizeof(tsen.TEMP_HUM)-1; tsen.TEMP_HUM.packettype=pTypeTEMP_HUM; tsen.TEMP_HUM.subtype=sTypeTH5; tsen.TEMP_HUM.battery_level=9; tsen.TEMP_HUM.rssi=12; tsen.TEMP.id1=(BYTE)deviceIdByteArray[0]; tsen.TEMP.id2=(BYTE)deviceIdByteArray[1]; tsen.TEMP_HUM.tempsign=(temperature>=0)?0:1; int at10=round(abs(temperature*10.0f)); tsen.TEMP_HUM.temperatureh=(BYTE)(at10/256); at10-=(tsen.TEMP_HUM.temperatureh*256); tsen.TEMP_HUM.temperaturel=(BYTE)(at10); tsen.TEMP_HUM.humidity=(BYTE)round(humidity); tsen.TEMP_HUM.humidity_status=Get_Humidity_Level(tsen.TEMP_HUM.humidity); sDecodeRXMessage(this, (const unsigned char *)&tsen.TEMP_HUM, NULL, 255); }
void C1Wire::ReportTemperature(const std::string& deviceId, const float temperature) { if (temperature == -1000.0) return; unsigned char deviceIdByteArray[DEVICE_ID_SIZE]={0}; DeviceIdToByteArray(deviceId,deviceIdByteArray); RBUF tsen; memset(&tsen,0,sizeof(RBUF)); tsen.TEMP.packetlength=sizeof(tsen.TEMP)-1; tsen.TEMP.packettype=pTypeTEMP; tsen.TEMP.subtype=sTypeTEMP10; tsen.TEMP.battery_level=9; tsen.TEMP.rssi=12; tsen.TEMP.id1=(BYTE)deviceIdByteArray[0]; tsen.TEMP.id2=(BYTE)deviceIdByteArray[1]; tsen.TEMP.tempsign=(temperature>=0)?0:1; int at10=round(abs(temperature*10.0f)); tsen.TEMP.temperatureh=(BYTE)(at10/256); at10-=(tsen.TEMP.temperatureh*256); tsen.TEMP.temperaturel=(BYTE)(at10); sDecodeRXMessage(this, (const unsigned char *)&tsen.TEMP, NULL, 255); }
void C1Wire::ReportTemperatureHumidity(const std::string& deviceId, const float temperature, const float humidity) { if ((temperature == -1000.0) || (humidity == -1000.0)) return; unsigned char deviceIdByteArray[DEVICE_ID_SIZE]={0}; DeviceIdToByteArray(deviceId,deviceIdByteArray); uint16_t NodeID = (deviceIdByteArray[0] << 8) | deviceIdByteArray[1]; SendTempHumSensor(NodeID, 255, temperature, round(humidity), "TempHum"); }
void C1Wire::ReportPressure(const std::string& deviceId, const float pressure) { if (pressure == -1000.0) return; unsigned char deviceIdByteArray[DEVICE_ID_SIZE] = { 0 }; DeviceIdToByteArray(deviceId, deviceIdByteArray); int lID = (deviceIdByteArray[0] << 24) + (deviceIdByteArray[1] << 16) + (deviceIdByteArray[2] << 8) + deviceIdByteArray[3]; SendPressureSensor(0, lID, 255, pressure, "Pressure"); }
void C1Wire::ReportIlluminance(const std::string& deviceId, const float illuminescence) { if (illuminescence == -1000.0) return; unsigned char deviceIdByteArray[DEVICE_ID_SIZE] = { 0 }; DeviceIdToByteArray(deviceId, deviceIdByteArray); uint8_t NodeID = deviceIdByteArray[0] ^ deviceIdByteArray[1]; SendSolarRadiationSensor(NodeID, 255, illuminescence, "Solar Radiation"); }
void C1Wire::ReportLightState(const std::string& deviceId, const int unit, const bool state) { #if defined(_DEBUG) _log.Log(LOG_STATUS, "device '%s' unit %d state is %s", deviceId.c_str(), unit, (state) ? "on" : "off"); #endif // check - is state changed ? char num[16]; sprintf(num, "%s/%d", deviceId.c_str(), unit); const std::string id(num); std::map<std::string, bool>::iterator it; it = m_LastSwitchState.find(id); if (it != m_LastSwitchState.end()) { if (m_LastSwitchState[id] == state) { return; } } #if defined(_DEBUG) _log.Log(LOG_STATUS, "device '%s' unit %d changed state to %s", deviceId.c_str(), unit, (state) ? "on" : "off"); #endif m_LastSwitchState[id] = state; unsigned char deviceIdByteArray[DEVICE_ID_SIZE]={0}; DeviceIdToByteArray(deviceId,deviceIdByteArray); RBUF tsen; memset(&tsen,0,sizeof(RBUF)); tsen.LIGHTING2.packetlength=sizeof(tsen.LIGHTING2)-1; tsen.LIGHTING2.packettype=pTypeLighting2; tsen.LIGHTING2.subtype=sTypeAC; tsen.LIGHTING2.seqnbr=0; tsen.LIGHTING2.id1=(BYTE)deviceIdByteArray[0]; tsen.LIGHTING2.id2=(BYTE)deviceIdByteArray[1]; tsen.LIGHTING2.id3=(BYTE)deviceIdByteArray[2]; tsen.LIGHTING2.id4=(BYTE)deviceIdByteArray[3]; tsen.LIGHTING2.unitcode=unit; tsen.LIGHTING2.cmnd=state?light2_sOn:light2_sOff; tsen.LIGHTING2.level=0; tsen.LIGHTING2.rssi=12; sDecodeRXMessage(this, (const unsigned char *)&tsen.LIGHTING2, NULL, 255); }
void C1Wire::ReportCounter(const std::string& deviceId,int unit,unsigned long counter) { unsigned char deviceIdByteArray[DEVICE_ID_SIZE]={0}; DeviceIdToByteArray(deviceId,deviceIdByteArray); RBUF tsen; memset(&tsen,0,sizeof(RBUF)); tsen.RFXMETER.packetlength=sizeof(tsen.RFXMETER)-1; tsen.RFXMETER.packettype=pTypeRFXMeter; tsen.RFXMETER.subtype=sTypeRFXMeterCount; tsen.RFXMETER.rssi=12; tsen.RFXMETER.id1=(BYTE)deviceIdByteArray[0]; tsen.RFXMETER.id2=(BYTE)deviceIdByteArray[1] + unit; tsen.RFXMETER.count1 = (BYTE)((counter & 0xFF000000) >> 24); tsen.RFXMETER.count2 = (BYTE)((counter & 0x00FF0000) >> 16); tsen.RFXMETER.count3 = (BYTE)((counter & 0x0000FF00) >> 8); tsen.RFXMETER.count4 = (BYTE)(counter & 0x000000FF); sDecodeRXMessage(this, (const unsigned char *)&tsen.RFXMETER, NULL, 255); }
void C1Wire::ReportHumidity(const std::string& deviceId,float humidity) { unsigned char deviceIdByteArray[DEVICE_ID_SIZE]={0}; DeviceIdToByteArray(deviceId,deviceIdByteArray); RBUF tsen; memset(&tsen,0,sizeof(RBUF)); tsen.HUM.packetlength=sizeof(tsen.HUM)-1; tsen.HUM.packettype=pTypeHUM; tsen.HUM.subtype=sTypeHUM2; tsen.HUM.battery_level=9; tsen.HUM.rssi=12; tsen.TEMP.id1=(BYTE)deviceIdByteArray[0]; tsen.TEMP.id2=(BYTE)deviceIdByteArray[1]; tsen.HUM.humidity=(BYTE)round(humidity); tsen.HUM.humidity_status=Get_Humidity_Level(tsen.HUM.humidity); sDecodeRXMessage(this, (const unsigned char *)&tsen.HUM);//decode message }
void C1Wire::ReportLightState(const std::string& deviceId,int unit,bool state) { unsigned char deviceIdByteArray[DEVICE_ID_SIZE]={0}; DeviceIdToByteArray(deviceId,deviceIdByteArray); RBUF tsen; memset(&tsen,0,sizeof(RBUF)); tsen.LIGHTING2.packetlength=sizeof(tsen.LIGHTING2)-1; tsen.LIGHTING2.packettype=pTypeLighting2; tsen.LIGHTING2.subtype=sTypeAC; tsen.LIGHTING2.seqnbr=0; tsen.LIGHTING2.id1=(BYTE)deviceIdByteArray[0]; tsen.LIGHTING2.id2=(BYTE)deviceIdByteArray[1]; tsen.LIGHTING2.id3=(BYTE)deviceIdByteArray[2]; tsen.LIGHTING2.id4=(BYTE)deviceIdByteArray[3]; tsen.LIGHTING2.unitcode=unit; tsen.LIGHTING2.cmnd=state?light2_sOn:light2_sOff; tsen.LIGHTING2.level=0; tsen.LIGHTING2.rssi=12; sDecodeRXMessage(this, (const unsigned char *)&tsen.LIGHTING2);//decode message }