コード例 #1
0
ファイル: ToonThermostat.cpp プロジェクト: sbouchex/domoticz
void CToonThermostat::Do_Work()
{
	_log.Log(LOG_STATUS,"ToonThermostat: Worker started...");
	int sec_counter = 1;
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		m_poll_counter--;
		sec_counter++;
		if (sec_counter % 12 == 0) {
			mytime(&m_LastHeartbeat);
		}
		if (m_poll_counter<=0)
		{
			m_poll_counter = TOON_POLL_INTERVAL;
			GetMeterDetails();
			if (m_retry_counter >= 3)
			{
				m_bDoLogin = true;
				m_retry_counter = 0;
				_log.Log(LOG_ERROR, "ToonThermostat: retrieveToonState request not successful, restarting..!");
			}
		}
	}
	_log.Log(LOG_STATUS,"ToonThermostat: Worker stopped...");
}
コード例 #2
0
ファイル: AnnaThermostat.cpp プロジェクト: karekaa/domoticz
CAnnaThermostat::CAnnaThermostat(const int ID, const std::string &IPAddress, const unsigned short usIPPort, const std::string &Username, const std::string &Password) :
m_IPAddress(IPAddress),
m_IPPort(usIPPort),
m_UserName(CURLEncode::URLEncode(Username)),
m_Password(CURLEncode::URLEncode(Password))
{
	m_HwdID=ID;
	m_ThermostatID = "";
	Init();
	GetMeterDetails();
}
コード例 #3
0
ファイル: Wunderground.cpp プロジェクト: G3ronim0/domoticz
void CWunderground::Do_Work()
{
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		time_t atime=mytime(NULL);
		struct tm ltime;
		localtime_r(&atime,&ltime);
		if ((ltime.tm_min/10!=m_LastMinute))
		{
			GetMeterDetails();
			m_LastMinute=ltime.tm_min/10;
		}
	}
	_log.Log(LOG_NORM,"Wunderground Worker stopped...");
}
コード例 #4
0
ファイル: Wunderground.cpp プロジェクト: remb0/domoticz
void CWunderground::Do_Work()
{
	int sec_counter = 590;
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 10 == 0) {
			m_LastHeartbeat=mytime(NULL);
		}
		if (sec_counter % 600 == 0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"Wunderground: Worker stopped...");
}
コード例 #5
0
ファイル: Nest.cpp プロジェクト: AbsolutK/domoticz
void CNest::SetSetpoint(const int idx, const float temp)
{
	if (m_UserName.size() == 0)
		return;
	if (m_Password.size() == 0)
		return;

	if (m_bDoLogin == true)
	{
		if (!Login())
			return;
	}
	size_t iThermostat = (idx - 1) / 3;
	if (iThermostat > m_thermostats.size())
		return;

	std::vector<std::string> ExtraHeaders;

	ExtraHeaders.push_back("user-agent:Nest/1.1.0.10 CFNetwork/548.0.4");
	ExtraHeaders.push_back("Authorization:Basic " + m_AccessToken);
	ExtraHeaders.push_back("X-nl-protocol-version:1");

	float tempDest = temp;
	unsigned char tSign = m_sql.m_tempsign[0];
	if (tSign == 'F')
	{
		//Maybe this should be done in the main app, so all other devices will also do this
		//Convert to Celsius
		tempDest = (tempDest - 32.0f) / 1.8f;
	}

	Json::Value root;
	root["target_change_pending"] = true;
	root["target_temperature"] = tempDest;

	std::string sResult;

	std::string sURL = m_TransportURL + NEST_SET_SHARED + m_thermostats[iThermostat].Serial;
	if (!HTTPClient::POST(sURL, root.toStyledString(), ExtraHeaders, sResult))
	{
		_log.Log(LOG_ERROR, "Nest: Error setting setpoint!");
		m_bDoLogin = true;
		return;
	}
	GetMeterDetails();
}
コード例 #6
0
ファイル: AnnaThermostat.cpp プロジェクト: karekaa/domoticz
void CAnnaThermostat::SetSetpoint(const int idx, const float temp)
{
	if (m_UserName.size() == 0)
		return;
	if (m_Password.size() == 0)
		return;

	if (m_ThermostatID.size() == 0)
		GetMeterDetails();

	std::stringstream szURL;

	if (m_Password.empty())
	{
		szURL << "http://" << m_IPAddress << ":" << m_IPPort;
	}
	else
	{
		szURL << "http://" << m_UserName << ":" << m_Password << "@" << m_IPAddress << ":" << m_IPPort;
	}
	szURL << ANNA_GET_STATUS;
	szURL << ";id=";
	szURL << m_ThermostatID;
	szURL << "/thermostat";

	std::stringstream sPostData;
	std::vector<std::string> ExtraHeaders;
	std::string sResult;

	char szTemp[10];
	sprintf(szTemp, "%.1f", temp);

	sPostData << "<thermostat>";
	sPostData << "<setpoint>";
	sPostData << szTemp;
	sPostData << "</setpoint>";
	sPostData << "</thermostat>";

	if (!HTTPClient::PUT(szURL.str(), sPostData.str(), ExtraHeaders, sResult))
	{
		_log.Log(LOG_ERROR, "AnnaThermostat: Error getting current state!");
		return;
	}

}
コード例 #7
0
ファイル: EcoDevices.cpp プロジェクト: AbsolutK/domoticz
void CEcoDevices::Do_Work()
{
	int sec_counter = 0;
	_log.Log(LOG_STATUS,"EcoDevices: Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 12 == 0) {
			mytime(&m_LastHeartbeat);
		}
		if (sec_counter%ECODEVICES_POLL_INTERVAL == 0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"EcoDevices: Worker stopped...");
}
コード例 #8
0
void CToonThermostat::Do_Work()
{
	int sec_counter = TOON_POLL_INTERVAL-5;
	_log.Log(LOG_STATUS,"ToonThermostat: Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 12 == 0) {
			mytime(&m_LastHeartbeat);
		}
		if (sec_counter % TOON_POLL_INTERVAL == 0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"ToonThermostat: Worker stopped...");
}
コード例 #9
0
ファイル: Thermosmart.cpp プロジェクト: gergles/domoticz
void CThermosmart::Do_Work()
{
	_log.Log(LOG_STATUS,"Thermosmart: Worker started...");
	int sec_counter = THERMOSMART_POLL_INTERVAL-5;
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 12 == 0) {
			m_LastHeartbeat=mytime(NULL);
		}
		if (sec_counter % THERMOSMART_POLL_INTERVAL == 0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"Thermosmart: Worker stopped...");
}
コード例 #10
0
ファイル: YouLess.cpp プロジェクト: n326/domoticz
void CYouLess::Do_Work()
{
	int sec_counter = YOULESS_POLL_INTERVAL - 2;

	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;

		if (sec_counter % 12 == 0) {
			m_LastHeartbeat=mytime(NULL);
		}
		if (sec_counter % YOULESS_POLL_INTERVAL == 0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"YouLess: Worker stopped...");
}
コード例 #11
0
ファイル: DarkSky.cpp プロジェクト: Evsdd/domoticz
void CDarkSky::Do_Work()
{
	_log.Log(LOG_STATUS, "DarkSky: Started...");

	int sec_counter = 290;
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 12 == 0) {
			m_LastHeartbeat = mytime(NULL);
		}
		if (sec_counter % 300 == 0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"DarkSky: Worker stopped...");
}
コード例 #12
0
ファイル: KMTronicUDP.cpp プロジェクト: Evsdd/domoticz
void KMTronicUDP::Do_Work()
{
	int sec_counter = KMTRONIC_POLL_INTERVAL - 2;

	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;

		if (sec_counter % 12 == 0) {
			m_LastHeartbeat=mytime(NULL);
		}

		if (sec_counter % KMTRONIC_POLL_INTERVAL == 0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS, "KMTronic: UDP Worker stopped...");
} 
コード例 #13
0
ファイル: ICYThermostat.cpp プロジェクト: gergles/domoticz
void CICYThermostat::Do_Work()
{
	int sec_counter = 0;
	_log.Log(LOG_STATUS,"ICYThermostat: Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;

		if (sec_counter % 12 == 0)
		{
			m_LastHeartbeat = mytime(NULL);
		}
		if (sec_counter % ICY_POLL_INTERVAL ==0)
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"ICYThermostat: Worker stopped...");
}
コード例 #14
0
ファイル: EcoDevices.cpp プロジェクト: ZaaaV/domoticz
void CEcoDevices::Do_Work()
{
	int LastMinute=-1;

	_log.Log(LOG_STATUS,"EcoDevices: Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		time_t atime=mytime(NULL);
		if (atime%ECODEVICES_POLL_INTERVAL == 0)
		{
			GetMeterDetails();
		}

		if (atime % 12 == 0) {
			mytime(&m_LastHeartbeat);
		}
	}
	_log.Log(LOG_STATUS,"EcoDevices: Worker stopped...");
}
コード例 #15
0
void CNestThermostat::Do_Work()
{
	_log.Log(LOG_STATUS,"NestThermostat: Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		time_t atime=mytime(NULL);
		struct tm ltime;
		localtime_r(&atime,&ltime);
		if (ltime.tm_min/NEST_POLL_INTERVAL!=m_LastMinute)
		{
			m_LastMinute=ltime.tm_min/NEST_POLL_INTERVAL;
			GetMeterDetails();
		}

		if (ltime.tm_sec % 12 == 0) {
			mytime(&m_LastHeartbeat);
		}
	}
	_log.Log(LOG_STATUS,"NestThermostat: Worker stopped...");
}
コード例 #16
0
ファイル: Fitbit.cpp プロジェクト: Digitaldna59/domoticz
void CFitbit::Do_Work()
{
	int sec_counter = 600 - 5;
	bool bFirstTimeWS = true;
	_log.Log(LOG_STATUS, "Fitbit: Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		if (m_stoprequested)
			break;
		sec_counter++;
		if (sec_counter % 12 == 0) {
			m_LastHeartbeat = mytime(NULL);
		}

		if (!m_isLogged)
		{
			if (sec_counter % 30 == 0)
			{
				Login();
			}
		}
		if (m_isLogged)
		{
			if (RefreshToken())
			{
				if ((sec_counter % 600 == 0) || (bFirstTimeWS))
				{
					//Weather station data is updated every 10 minutes
					bFirstTimeWS = false;
					if (sec_counter % 1200 == 0)
					{
						GetMeterDetails();
					}
				}
			}
		}
	}
	_log.Log(LOG_STATUS,"Fitbit: Worker stopped...");
}
コード例 #17
0
ファイル: SBFSpot.cpp プロジェクト: AbsolutK/domoticz
void CSBFSpot::Do_Work()
{
	int LastMinute=-1;

	_log.Log(LOG_STATUS,"SBFSpot: Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		time_t atime=mytime(NULL);
		struct tm ltime;
		localtime_r(&atime,&ltime);
		if (((ltime.tm_min/SMA_POLL_INTERVAL!=LastMinute))&&(ltime.tm_sec>20))
		{
			LastMinute=ltime.tm_min/SMA_POLL_INTERVAL;
			GetMeterDetails();
		}
		if (ltime.tm_sec % 12 == 0) {
			mytime(&m_LastHeartbeat);
		}
	}
	_log.Log(LOG_STATUS,"SBFSpot: Worker stopped...");
}
コード例 #18
0
bool CNestThermostat::SetAway(const bool bIsAway)
{
	if (m_UserName.size() == 0)
		return false;
	if (m_Password.size() == 0)
		return false;

	if (m_bDoLogin == true)
	{
		if (!Login())
			return false;
	}
	if (m_StructureID.size() == 0)
		GetMeterDetails();

	std::vector<std::string> ExtraHeaders;

	ExtraHeaders.push_back("user-agent:Nest/1.1.0.10 CFNetwork/548.0.4");
	ExtraHeaders.push_back("Authorization:Basic " + m_AccessToken);
	ExtraHeaders.push_back("X-nl-protocol-version:1");

	std::stringstream sstr;
	Json::Value root;
	root["away"] = bIsAway;
	root["away_timestamp"] = (int)mytime(NULL);
	root["away_setter"] = 0;

	std::string sResult;

	std::string sURL = m_TransportURL + NEST_SET_STRUCTURE + m_StructureID;
	if (!HTTPClient::POST(sURL, root.toStyledString(), ExtraHeaders, sResult))
	{
		_log.Log(LOG_ERROR, "NestThermostat: Error setting away mode!");
		m_bDoLogin = true;
		return false;
	}
	m_LastMinute = -1;
	return true;
}
コード例 #19
0
void CPVOutputInput::Do_Work()
{
	int LastMinute=-1;
	int sec_counter = 0;
	_log.Log(LOG_STATUS,"PVOutput (Input): Worker started...");
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;

		time_t atime=mytime(NULL);
		m_LastHeartbeat = atime;
		struct tm ltime;
		localtime_r(&atime,&ltime);
		if (((ltime.tm_min/PVOUTPUT_POLL_INTERVAL!=LastMinute))&&(ltime.tm_sec>20))
		{
			LastMinute=ltime.tm_min/PVOUTPUT_POLL_INTERVAL;
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"PVOutput (Input): Worker stopped...");
}
コード例 #20
0
ファイル: AccuWeather.cpp プロジェクト: steplebr/domoticz
void CAccuWeather::Do_Work()
{
	int sec_counter = 595;
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 12 == 0) {
			m_LastHeartbeat = mytime(NULL);
		}
		if (sec_counter % 600 == 0)
		{
			if (m_LocationKey.empty())
			{
				m_LocationKey = GetLocationKey();
				if (m_LocationKey.empty())
					continue;
			}
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"AccuWeather Worker stopped...");
}
コード例 #21
0
ファイル: Wunderground.cpp プロジェクト: IgorYbema/domoticz
void CWunderground::Do_Work()
{
	int sec_counter = 590;
	_log.Log(LOG_STATUS, "Wunderground: Worker started...");

	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 10 == 0) {
			m_LastHeartbeat=mytime(NULL);
		}
#ifdef DEBUG_WUNDERGROUND
		if (sec_counter % 10 == 0)
#else
		if (sec_counter % 600 == 0)
#endif
		{
			GetMeterDetails();
		}
	}
	_log.Log(LOG_STATUS,"Wunderground: Worker stopped...");
}
コード例 #22
0
void CNestThermostat::SetSetpoint(const int idx, const float temp)
{
	if (m_UserName.size() == 0)
		return;
	if (m_Password.size() == 0)
		return;

	if (m_bDoLogin == true)
	{
		if (!Login())
			return;
	}
	if (m_Serial.size() == 0)
		GetMeterDetails();

	std::vector<std::string> ExtraHeaders;

	ExtraHeaders.push_back("user-agent:Nest/1.1.0.10 CFNetwork/548.0.4");
	ExtraHeaders.push_back("Authorization:Basic " + m_AccessToken);
	ExtraHeaders.push_back("X-nl-protocol-version:1");

	std::stringstream sstr;
	Json::Value root;
	root["target_change_pending"] = true;
	root["target_temperature"] = temp;

	std::string sResult;

	std::string sURL = m_TransportURL + NEST_SET_SHARED + m_Serial;
	if (!HTTPClient::POST(sURL, root.toStyledString(), ExtraHeaders, sResult))
	{
		_log.Log(LOG_ERROR, "NestThermostat: Error setting setpoint!");
		m_bDoLogin = true;
		return;
	}
	m_LastMinute = -1;
}
コード例 #23
0
ファイル: YouLess.cpp プロジェクト: ZaaaV/domoticz
void CYouLess::Do_Work()
{
	while (!m_stoprequested)
	{
		sleep_seconds(1);

		time_t atime = mytime(NULL);
		struct tm ltime;
		localtime_r(&atime, &ltime);


		if (ltime.tm_sec % 12 == 0) {
			mytime(&m_LastHeartbeat);
		}

		m_PollCounter++;
		if (m_PollCounter>=YOULESS_POLL_INTERVAL)
		{
			GetMeterDetails();
			m_PollCounter=0;
		}
	}
	_log.Log(LOG_STATUS,"YouLess: Worker stopped...");
}
コード例 #24
0
ファイル: AnnaThermostat.cpp プロジェクト: karekaa/domoticz
void CAnnaThermostat::Do_Work()
{
	bool bFirstTime = true;
	_log.Log(LOG_STATUS,"AnnaThermostat: Worker started...");
	int sec_counter = ANNA_POLL_INTERVAL-5;
	while (!m_stoprequested)
	{
		sleep_seconds(1);
		sec_counter++;
		if (sec_counter % 12 == 0)
		{
			m_LastHeartbeat = mytime(NULL);
		}

		if ((sec_counter % ANNA_POLL_INTERVAL == 0) || (bFirstTime))
		{
			sec_counter = 0;
			bFirstTime = false;
			GetMeterDetails();
		}

	}
	_log.Log(LOG_STATUS,"AnnaThermostat: Worker stopped...");
}