Beispiel #1
0
bool Device::checkCommandValue(){ 
	if (EEPROMReadInt(PARAMS(deviceIdx, 2)) != FFFF) {				// Threshold set
		if (abs(previousCommandValue - commandValue) >= (EEPROMReadInt(PARAMS(deviceIdx, 2)))) {
			previousCommandValue = commandValue;
			return true;
		}
	}
	return false;
}
Beispiel #2
0
void printPage(const byte clientsel, const byte deviceIdx) {

	// Index
	printP(clientsel, TXTIND);
	printP(clientsel, TXTCOLON);
	printV(clientsel, deviceIdx);
	printP(clientsel, ANBSP);

	// DeviceID
	printP(clientsel, TXTDEVICEID);
	printP(clientsel, TXTCOLON);
	printV(clientsel, mdevices[deviceIdx].getDeviceID());

	// Type
	printP(clientsel, ANBSP);
	if (mdevices[deviceIdx].getType() != 0) {
		printP(clientsel, TXTTYPE);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getType());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// CommandID
	printP(clientsel, TXTCOMMAND );
	printP(clientsel, TXTCOLON);
	printVstr(clientsel, mdevices[deviceIdx].getCommand());

	// Status
	printP(clientsel, ANBSP);
	printP(clientsel, TXTSTATUS );
	printP(clientsel, TXTCOLON);
	printVstr(clientsel, mdevices[deviceIdx].getStatus());

	// Value
	if (mdevices[deviceIdx].commandValue != 0) {
		printP(clientsel, ANBSP);
		printP(clientsel, TXTVALUE );
		printP(clientsel, TXTCOLON);
		printVstr(clientsel, mdevices[deviceIdx].getValue());
	}

	// ExtData
	if (printVstr(clientsel, mdevices[deviceIdx].getExtData(), true) > 0) {
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
		printP(clientsel, TXTEXTDATA );
		printP(clientsel, TXTCOLON);
		printVstr(clientsel, mdevices[deviceIdx].getExtData());
	}


	printP(clientsel, AOPEN);
	printP(clientsel, BR);
	printP(clientsel, SLASH);
	printP(clientsel, ACLOSE);
	if (EEPROMReadInt(PARAMS(deviceIdx, 1)) !=  FFFF) {
		// Parameter 1
		printP(clientsel, TXTPAR1);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 1)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 2)) !=  FFFF) {
		// Parameter 2
		printP(clientsel, TXTPAR2);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 2)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 3)) !=  FFFF) {
		// Parameter 3
		printP(clientsel, TXTPAR3);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 3)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 4)) !=  FFFF) {
		// Parameter 3
		printP(clientsel, TXTPAR4);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 4)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}
	if (EEPROMReadInt(PARAMS(deviceIdx, 5)) !=  FFFF) {
		// Parameter 5
		printP(clientsel, TXTPAR5);
		printP(clientsel, TXTCOLON);
		printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 5)));
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// In deviceIdx
	if (mdevices[deviceIdx].getInput() != 0) {
		printP(clientsel, TXTDEVIND);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getInput());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}

	// Pin
	if (mdevices[deviceIdx].getPin() != 0) {
		printP(clientsel, TXTPIN);
		printP(clientsel, TXTCOLON);
		printV(clientsel, mdevices[deviceIdx].getPin());
		printP(clientsel, AOPEN);
		printP(clientsel, BR);
		printP(clientsel, SLASH);
		printP(clientsel, ACLOSE);
	}


	if (DEBUG_WEB) dbg.println();

	return;
}
Beispiel #3
0
void Device::readInput() {
/*!
*		Reads current input value of device	
*/
	commandValue = 0;
	int prevRunning;
	
	switch (type) {
	case TYPE_DIGITAL_IO:
	case TYPE_DIGITAL_IO_NEG:
		status = digitalRead(getPin());
		break;
	case TYPE_ANALOG_IN:
	case TYPE_NTC:
		commandValue = analogRead(getPin());
		if (type == TYPE_NTC) commandValue = 1024 - commandValue;
		if (EEPROMReadInt(PARAMS(deviceIdx, 1)) == FFFF) {				// No setpoint set
			status = STATUS_UNKNOWN;
			sprintf(temp, "{\"V\":\"%i\"}", commandValue);
			setExtData(temp);
		} else {
			if (commandValue > EEPROMReadInt(PARAMS(deviceIdx, 1))) {														// Above set point
				status = STATUS_ON;
			}
			if (commandValue <= (EEPROMReadInt(PARAMS(deviceIdx, 1)) - EEPROMReadInt(PARAMS(deviceIdx, 2)))) {		// Below set point and threshold
				status = STATUS_OFF;
			}
			sprintf(temp, "{\"V\":\"%i\",\"S\":\"%u\",\"T\":\"%u\"}", commandValue, EEPROMReadInt(PARAMS(deviceIdx, 1)), EEPROMReadInt(PARAMS(deviceIdx, 2)));
			setExtData(temp);
			checkStatusOrCommandValue();
		}
		break;
	case TYPE_DHT22:
		byte chk;
		status = STATUS_ERROR;
		chk = dht.read(getPin());
		switch (chk) {
		case DHTLIB_OK:
			commandValue = ((int)dht.temperature);
			int temp1;
			int temp2;
			temp1 = abs((dht.temperature - (int)dht.temperature) * 100);
			temp2 = (dht.humidity - (int)dht.humidity) * 100;
			if (EEPROMReadInt(PARAMS(deviceIdx, 1)) == FFFF) {				// No setpoint set
				status = STATUS_UNKNOWN;
				sprintf(temp, "{\"T\":\"%0d.%d\",\"H\":\"%0d.%d\"}", (int)dht.temperature, temp1, (int)dht.humidity, temp2);
				setExtData(temp);
			} else {
				if (commandValue > EEPROMReadInt(PARAMS(deviceIdx, 1))) {												// below set point
					status = STATUS_ON;
				} 
				if (commandValue <= (EEPROMReadInt(PARAMS(deviceIdx, 1)) - EEPROMReadInt(PARAMS(deviceIdx, 2)))) {		// above set point plus threshold
					status = STATUS_OFF;
				}
				sprintf(temp, "{\"T\":\"%0d.%d\",\"H\":\"%0d.%d\",\"S\":\"%u\"}", (int)dht.temperature, temp1, (int)dht.humidity, temp2, EEPROMReadInt(PARAMS(deviceIdx, 1)));
				setExtData(temp);
				checkStatusOrCommandValue();
			}
			break;
		default:
			status= STATUS_ERROR;
			setExtData("");
			break;
		}
		break;
	case TYPE_THERMO_HEAT:
	case TYPE_THERMO_COOL:
		commandValue = readTemp(getInput());
		prevRunning = digitalRead(getPin());
		if (status) {					// Enabled or Not
			if (commandValue != ERROR) {							// Could not read temp, leave as is
				if (getType() == TYPE_THERMO_COOL) {
					if (commandValue >= EEPROMReadInt(PARAMS(deviceIdx, 1))) {						// Switch on if above set point
						digitalWrite(getPin(), HIGH);
					}
					if (commandValue <= (EEPROMReadInt(PARAMS(deviceIdx, 1)) - EEPROMReadInt(PARAMS(deviceIdx, 2)))) {	// Switch off if below threshold
						digitalWrite(getPin(), LOW);
					}
				} 
				if (getType() == TYPE_THERMO_HEAT) {
					if (commandValue <= EEPROMReadInt(PARAMS(deviceIdx, 1))) {						// 	Switch on if below set point
						digitalWrite(getPin(), HIGH);
					}
					if (commandValue >= (EEPROMReadInt(PARAMS(deviceIdx, 1)) + EEPROMReadInt(PARAMS(deviceIdx, 2)))) {	// Switch off if above threshold
						digitalWrite(getPin(), LOW);
					}
				}
			}			// If Error read fall trough
		} else {
			digitalWrite(mdevices[deviceIdx].getPin(), LOW);
		}
		sprintf(temp, "{\"V\":\"%i\",\"R\":\"%i\",\"S\":\"%u\",\"T\":\"%u\"}", commandValue, digitalRead(getPin()), EEPROMReadInt(PARAMS(deviceIdx, 1)), EEPROMReadInt(PARAMS(deviceIdx, 2)));
		setExtData(temp);
		if ((prevRunning != digitalRead(getPin())) || checkCommandValue()) {
			int previousCommandID = commandID;
			setCommand(COMMAND_SET_RESULT);
			postMessage(deviceIdx);
			commandID = previousCommandID;
		}	
		break;
	case TYPE_AUTO_DOOR:
		if (!digitalRead(TOP_SWITCH_PIN)) {
			status = STATUS_ON;
		} else if (!digitalRead(BOTTOM_SWITCH_PIN)) {
			status = STATUS_OFF;
		} else {
			status = STATUS_UNKNOWN;
		}
		
		sprintf(temp, "{\"T\":\"%i\",\"B\":\"%i\",\"P\":\"%i\",\"D\":\"%i\"}", digitalRead(TOP_SWITCH_PIN), digitalRead(BOTTOM_SWITCH_PIN), digitalRead(POWER_RELAY_PIN), digitalRead(DIRECTION_RELAY_PIN));
		setExtData(temp);
		checkStatus();
		break;
	case TYPE_ARDUINO:
		status = digitalRead(getPin());
		sprintf(temp, "{\"R\":\"%i\",\"M\":\"%lu\",\"U\":\"%lu\"}", RELEASE, check_mem(), millis()/1000);
		setExtData(temp);
		checkStatus();
		break;
	default:
		break;
	}
}
Beispiel #4
0
void RTC::set(const char* compileTimeStamp) {
    int i = 0;
//  Serial.println(compileTimeStamp);

/*--------------------DayOfWeek----------------------------*/
    char dow[4];
    for (i = 0; i < 3; i++)
        dow[i] =  compileTimeStamp[i];
    dow[i] = '\0';

    if (strcmp(dow, "Mon") == 0)
        _dayOfWeek = 1;
    else if (strcmp(dow, "Tue") == 0)
        _dayOfWeek = 2;
    else if (strcmp(dow, "Wed") == 0)
        _dayOfWeek = 3;
    else if (strcmp(dow, "Thu") == 0)
        _dayOfWeek = 4;
    else if (strcmp(dow, "Fri") == 0)
        _dayOfWeek = 5;
    else if (strcmp(dow, "Sat") == 0)
        _dayOfWeek = 6;
    else if (strcmp(dow, "Sun") == 0)
        _dayOfWeek = 7;

/*--------------------------Day----------------------------*/
    _day = ((compileTimeStamp[8] - '0') * 10 + (compileTimeStamp[9] - '0'));

/*--------------------------Month---------------------------*/
    char month[4];
    for (i = 0; i < 3; i++)
        month[i] =  compileTimeStamp[i+4];
    month[i] = '\0';

    if (strcmp(month, "Jan") == 0)
        _month = 1;
    else if (strcmp(month, "Feb") == 0)
        _month = 2;
    else if (strcmp(month, "Mar") == 0)
        _month = 3;
    else if (strcmp(month, "Apr") == 0)
        _month = 4;
    else if (strcmp(month, "May") == 0)
        _month = 5;
    else if (strcmp(month, "Jun") == 0)
        _month = 6;
    else if (strcmp(month, "Jul") == 0)
        _month = 7;
    else if (strcmp(month, "Aug") == 0)
        _month = 8;
    else if (strcmp(month, "Sep") == 0)
        _month = 9;
    else if (strcmp(month, "Oct") == 0)
        _month = 10;
    else if (strcmp(month, "Nov") == 0)
        _month = 11;
    else if (strcmp(month, "Dec") == 0)
        _month = 12;

/*--------------------------Year----------------------------*/
    _year = ((compileTimeStamp[20] - '0') * 1000
        + (compileTimeStamp[21] - '0') * 100
        + (compileTimeStamp[22] - '0') * 10
        + (compileTimeStamp[23] - '0')) - 2000;
/*--------------------------Time----------------------------*/
    _hour = ((compileTimeStamp[11] - '0') * 10
        + (compileTimeStamp[12] - '0'));

    _minute = ((compileTimeStamp[14] - '0') * 10
        + (compileTimeStamp[15] - '0'));

    _second = ((compileTimeStamp[17] - '0') * 10
        + (compileTimeStamp[18] - '0'));

    unsigned int hash =  _hour * 60 * 60 + _minute  * 60 + _second;

    if (EEPROMReadInt(0) != hash) {
        EEPROMWriteInt(0, hash);
        Wire.beginTransmission(DS1307_I2C_ADDRESS);
        Wire.write((uint8_t)0x00);
    // 0 to bit 7 starts the clock
    Wire.write(decToBcd(_second));
    Wire.write(decToBcd(_minute));
    // If you want 12 hour am/pm you need to set bit 6
    Wire.write(decToBcd(_hour));
    Wire.write(decToBcd(_dayOfWeek));
    Wire.write(decToBcd(_day));
    Wire.write(decToBcd(_month));
    Wire.write(decToBcd(_year));
    Wire.endTransmission();
}
}