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; }
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; }
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; } }
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(); } }