Example #1
0
String ProxyObject::physics() const {
    PROXY_SERIALIZED();
    if (!isPresence())
        return SequencedPresenceProperties::physics();
    SequencedPresencePropertiesPtr req = mParent->parent()->presenceRequestedLocation(getObjectReference());
    uint64 latest_epoch = mParent->parent()->presenceLatestEpoch(getObjectReference());
    if (!req || latest_epoch >= req->getUpdateSeqNo(LOC_PHYSICS_PART))
        return SequencedPresenceProperties::physics();
    return req->physics();
}
Example #2
0
bool ProxyObject::isAggregate() const {
    PROXY_SERIALIZED();
    if (!isPresence())
        return SequencedPresenceProperties::isAggregate();
    SequencedPresencePropertiesPtr req = mParent->parent()->presenceRequestedLocation(getObjectReference());
    uint64 latest_epoch = mParent->parent()->presenceLatestEpoch(getObjectReference());
    if (!req || latest_epoch >= req->getUpdateSeqNo(LOC_IS_AGG_PART))
        return SequencedPresenceProperties::isAggregate();
    return req->isAggregate();
}
Example #3
0
Transfer::URI ProxyObject::mesh() const {
    PROXY_SERIALIZED();
    if (!isPresence())
        return SequencedPresenceProperties::mesh();
    SequencedPresencePropertiesPtr req = mParent->parent()->presenceRequestedLocation(getObjectReference());
    uint64 latest_epoch = mParent->parent()->presenceLatestEpoch(getObjectReference());
    if (!req || latest_epoch >= req->getUpdateSeqNo(LOC_MESH_PART))
        return SequencedPresenceProperties::mesh();
    return req->mesh();
}
Example #4
0
TimedMotionQuaternion ProxyObject::orientation() const {
    PROXY_SERIALIZED();
    if (!isPresence())
        return SequencedPresenceProperties::orientation();
    SequencedPresencePropertiesPtr req = mParent->parent()->presenceRequestedLocation(getObjectReference());
    uint64 latest_epoch = mParent->parent()->presenceLatestEpoch(getObjectReference());
    if (!req || latest_epoch >= req->getUpdateSeqNo(LOC_ORIENT_PART))
        return SequencedPresenceProperties::orientation();
    return req->orientation();
}
Example #5
0
/*
 *	Sauna floor control procedure.
 */
int controlSaunaFloor(float currentFloorTemp, float targetFloorTemp)
{
	if (isPresence())
	{
		int floorHeatingON = currentFloorTemp < targetFloorTemp;
		setSaunaFloor(floorHeatingON);
		return floorHeatingON;
	}
	return OFF;
}
Example #6
0
/** Current target temperature, controlled by configuration */
float getTargetTemp()
{
	// -- Check precence time
	if (isPresence())
	{
		/* TMP solution for comfort sleep. Once per room valves are installed, this code should be gone
		to controlRoom() function. */
		if (checkIfNowWithinInterval(configuration.sleepModeStartHour, 0, configuration.sleepModeEndHour, 0))
			return configuration.sleepTargetTemp;
		else
			return configuration.presenceTargetTemp;
	}

	// -- If in standby, check day/night targets to save power
	if (isSaving())
	{
		return configuration.standbyTargetNightTemp;
	}

	return configuration.standbyTargetTemp;
}
Example #7
0
int main(int argc, const char** args)
{
	// -- Set confguration.ini & others directories
	setDirectories();

	// -- Check for previous fatal errors
	if (wasOverheated())
	{
		printf("Previous heater failure detected. Cannot run.\n\r");
		return EXIT_FAIL;
	}

	// -- Load settings from .ini file
	loadSettings();

	initRoomDescriptors();

//	debug stuff
//	printf("%s", asctime(&configuration.arrive));
//	printf("%s", asctime(&configuration.dep));
//	time_t tt = getHeatingStartTime();
//
//	printf("%s", ctime(&tt));
//	printf("%f\n", getTargetTemp());
//
//	printf("%f\n", configuration.tempDelta);
//	printf("%f\n", configuration.fluidPumpOffTemp);
//	return; 
// 	end of debug stuff

	// -- Measure current temperatures and set out the target
	float controlTemp = getControlTemperature();
	float outgoingFluidTemp = getT(outputSensor);
	float ingoingFluidTemp = getT(inputSensor);
	float electricHeaterTemp = getT(heaterSensor);
	float kitchenTemp = getT(kitchenSensor);
	float bathroomTemp = getT(bathRoomSensor);
	float sashaBedroomTemp = getT(childrenSmallSensor); 
	float targetTemp = getTargetTemp();
	

	// -- Control heater and pump
	int heaterState = controlHeater(controlTemp, electricHeaterTemp, outgoingFluidTemp);
	
	// -- Control sauna floor temp
	float saunaFloorTemp = getT(saunaFloorSensor);
	float saunaFloorTargetTemp = configuration.saunaFloorTemp;
	int saunaFloorHeatingState = controlSaunaFloor(saunaFloorTemp, saunaFloorTargetTemp);

	// -- Initizlize temp vector (no paritcular order)
	float tv[10];
	int tvc = 0;
	tv[tvc++] = controlTemp;
	tv[tvc++] = electricHeaterTemp;
	tv[tvc++] = ingoingFluidTemp;
	tv[tvc++] = outgoingFluidTemp;
	tv[tvc++] = bathroomTemp;
	tv[tvc++] = kitchenTemp;
	tv[tvc++] = sashaBedroomTemp;

	int pumpState = controlPump(tv, tvc);

	// -- Individual rooms control
	/* Not tested yet */
	int i;
	for (i=0; i<ROOMS_COUNT; i++)
		controlRoom(&roomControlDescriptors[i], targetTemp);

	// -- Dates: now and when to start heating next time by our arrival
	char nowStr[TBL], onStr[TBL];
	getDateTimeStr(nowStr, TBL, time(NULL));
	getDateTimeStr(onStr, TBL, getHeatingStartTime());

	printf("%s|%4.2f|%4.2f|%4.2f| %4.2f |%4.2f|%4.2f|%4.2f|%4.2f| %4.2f|%4.2f |%4.2f|%d|%d|%4.2f|%d|%c|%c|%4.1f|%4.1f|%s\r\n",
		nowStr,
		electricHeaterTemp,
		ingoingFluidTemp,
		outgoingFluidTemp,
		getT(externalSensor),
		getT(amSensor),
		getT(bedroomSensor),
		getT(cabinetSensor),
		sashaBedroomTemp,
		kitchenTemp,
		bathroomTemp,
		controlTemp,
		heaterState,
		pumpState,
		saunaFloorTemp,
		saunaFloorHeatingState,
		(isPresence() ? 'P' : 'S'),
		(isSaving() ? 'N' : 'D'),
		targetTemp,
		saunaFloorTargetTemp,
		onStr
	);

	return EXIT_OK;
}