diff -r f5d85af156ab -r 5c30c8ef83a8 thermferm/devices.c --- a/thermferm/devices.c Wed May 01 14:38:37 2024 +0200 +++ b/thermferm/devices.c Thu May 02 15:49:16 2024 +0200 @@ -40,6 +40,9 @@ extern const char DEVPRESENT[4][6]; extern const char DEVDIR[7][11]; +#ifdef USE_SIMULATOR +extern int my_simulator_state; +#endif /* @@ -306,6 +309,7 @@ #ifdef USE_SIMULATOR if ((device->type == DEVTYPE_SIM) && (device->direction == DEVDIR_OUT_BIN)) { + while (my_simulator_state == THREAD_PAUSE) { mDelay(20); }; for (simulator = Config.simulators; simulator; simulator = simulator->next) { if ((strcmp(device->address, simulator->cooler_address) == 0) || (strcmp(device->address, simulator->heater_address) == 0) || @@ -715,20 +719,22 @@ #ifdef USE_SIMULATOR for (simulator = Config.simulators; simulator; simulator = simulator->next) { - for (i = 0; i < 10; i++) { + for (i = 0; i < 12; i++) { found = FALSE; for (device = Config.devices; device; device = device->next) { - if ((i == 0 && strcmp(device->address, simulator->room_tempaddress) == 0) || - (i == 1 && strcmp(device->address, simulator->air_address) == 0) || - (i == 2 && strcmp(device->address, simulator->beer_address) == 0) || - (i == 3 && strcmp(device->address, simulator->heater_address) == 0) || - (i == 4 && strcmp(device->address, simulator->cooler_address) == 0) || - (i == 5 && strcmp(device->address, simulator->room_humaddress) == 0) || - (i == 6 && strcmp(device->address, simulator->chiller_address) == 0) || - (i == 7 && strcmp(device->address, simulator->fan_address) == 0) || - (i == 8 && strcmp(device->address, simulator->light_address) == 0) || - (i == 9 && strcmp(device->address, simulator->beer_address2) == 0)) { + if ((i == 0 && strcmp(device->address, simulator->room_tempaddress) == 0) || + (i == 1 && strcmp(device->address, simulator->air_address) == 0) || + (i == 2 && strcmp(device->address, simulator->beer_address) == 0) || + (i == 3 && strcmp(device->address, simulator->heater_address) == 0) || + (i == 4 && strcmp(device->address, simulator->cooler_address) == 0) || + (i == 5 && strcmp(device->address, simulator->room_humaddress) == 0) || + (i == 6 && strcmp(device->address, simulator->chiller_address) == 0) || + (i == 7 && strcmp(device->address, simulator->fan_address) == 0) || + (i == 8 && strcmp(device->address, simulator->light_address) == 0) || + (i == 9 && strcmp(device->address, simulator->beer_address2) == 0) || + (i == 10 && strcmp(device->address, simulator->door_address) == 0) || + (i == 11 && strcmp(device->address, simulator->psu_address) == 0)) { found = TRUE; break; } @@ -800,6 +806,16 @@ ndev->description = xstrcpy((char *)"Simulated beer temperature (alt)"); ndev->present = simulator->beer_present2; break; + case 10: ndev->direction = DEVDIR_IN_BIN; + ndev->address = xstrcpy(simulator->door_address); + ndev->description = xstrcpy((char *)"Simulated fridge door"); + ndev->present = simulator->door_present; + break; + case 11: ndev->direction = DEVDIR_IN_BIN; + ndev->address = xstrcpy(simulator->psu_address); + ndev->description = xstrcpy((char *)"Simulated PSU status"); + ndev->present = simulator->psu_present; + break; } syslog(LOG_NOTICE, "New Simulator device %s, subdevice %d", ndev->address, ndev->subdevice); @@ -960,46 +976,60 @@ #endif #ifdef USE_SIMULATOR case DEVTYPE_SIM: + while (my_simulator_state == THREAD_PAUSE) { mDelay(20); }; // pthread_mutex_lock(&mutexes[LOCK_DEVICES]); - if (Config.simulators) { + for (simulator = Config.simulators; simulator; simulator = simulator->next) { int val; - simulator = Config.simulators; - if (device->subdevice == 0) { + if (strcmp(simulator->room_tempaddress, device->address) == 0) { val = (int)((int)(simulator->room_temperature * 1000) / 500) * 500; if (device->value != val) { device->value = val; device->timestamp = time(NULL); changed = true; } - } else if (device->subdevice == 1) { - val = (int)((int)(simulator->air_temperature * 1000) / 62.5) * 62.5; + } else if (strcmp(simulator->air_address, device->address) == 0) { + val = (int)((int)((simulator->air_temperature * 1000) + 31.25) / 62.5) * 62.5; if (device->value != val) { device->value = val; device->timestamp = time(NULL); changed = true; } - } else if (device->subdevice == 2) { - val = (int)((int)(simulator->beer_temperature * 1000) / 62.5) * 62.5; + } else if (strcmp(simulator->beer_address, device->address) == 0) { + val = (int)((int)((simulator->beer_temperature * 1000) + 31.25) / 62.5) * 62.5; if (device->value != val) { device->value = val; device->timestamp = time(NULL); changed = true; } - } else if (device->subdevice == 5) { + } else if (strcmp(simulator->room_humaddress, device->address) == 0) { val = (int)((int)(simulator->room_humidity * 1000) / 500) * 500; if (device->value != val) { device->value = val; device->timestamp = time(NULL); changed = true; } - } else if (device->subdevice == 6) { + } else if (strcmp(simulator->chiller_address, device->address) == 0) { val = (int)((int)(simulator->chiller_temperature * 1000) / 62.5) * 62.5; if (device->value != val) { device->value = val; device->timestamp = time(NULL); changed = true; } + } else if (strcmp(simulator->door_address, device->address) == 0) { + val = simulator->door_value; + if (device->value != val) { + device->value = val; + device->timestamp = time(NULL); + changed = true; + } + } else if (strcmp(simulator->psu_address, device->address) == 0) { + val = simulator->psu_value; + if (device->value != val) { + device->value = val; + device->timestamp = time(NULL); + changed = true; + } } } // pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);