226 |
226 |
227 |
227 |
228 |
228 |
229 int server(void) |
229 int server(void) |
230 { |
230 { |
231 char buf[1024], *filename; |
231 char buf[1024], *filename, target[40], heater[40], cooler[40], fan[40], door[40]; |
232 time_t now, last = (time_t)0; |
232 time_t now, last = (time_t)0; |
233 w1_therm *tmp1; |
233 w1_therm *tmp1; |
234 units_list *unit; |
234 units_list *unit; |
235 int rc, run = 1, temp, seconds = 0; |
235 int rc, run = 1, temp, seconds = 0; |
236 #ifndef HAVE_WIRINGPI_H |
236 #ifdef HAVE_WIRINGPI_H |
|
237 int lcdshow = 0; |
|
238 struct tm *tm; |
|
239 #else |
237 long t = 0; |
240 long t = 0; |
238 #endif |
241 #endif |
239 |
242 |
240 if (lockprog((char *)"thermferm")) { |
243 if (lockprog((char *)"thermferm")) { |
241 syslog(LOG_NOTICE, "Can't lock"); |
244 syslog(LOG_NOTICE, "Can't lock"); |
309 tmp1->update = FALSE; |
312 tmp1->update = FALSE; |
310 lcdupdate = TRUE; |
313 lcdupdate = TRUE; |
311 } |
314 } |
312 } |
315 } |
313 |
316 |
314 #ifdef HAVE_WIRINGPI_H |
|
315 if (run && lcdupdate) { |
|
316 lcdPosition(lcdHandle, 0, 0); |
|
317 tmp1 = Config.w1therms; |
|
318 snprintf(buf, 16, "%5.2f %cC %s ", tmp1->lastval / 1000.0, 0xdf, tmp1->alias); |
|
319 mb_lcdPuts(lcdHandle, buf); |
|
320 temp = tmp1->lastval; |
|
321 tmp1 = tmp1->next; |
|
322 lcdPosition(lcdHandle, 0, 1); |
|
323 snprintf(buf, 16, "%5.2f %cC %s ", tmp1->lastval / 1000.0, 0xdf, tmp1->alias); |
|
324 mb_lcdPuts(lcdHandle, buf); |
|
325 } |
|
326 #endif |
|
327 |
|
328 /* |
317 /* |
329 * Timed schedulers |
318 * Timed schedulers |
330 */ |
319 */ |
331 now = time(NULL); |
320 now = time(NULL); |
332 if (now != last) { |
321 if (now != last) { |
333 last = now; |
322 last = now; |
334 seconds++; |
323 seconds++; |
|
324 |
|
325 #ifdef HAVE_WIRINGPI_H |
|
326 if ((seconds % 5) == 0) { |
|
327 |
|
328 if (lcdshow == 0) { |
|
329 lcdPosition(lcdHandle, 0, 0); |
|
330 snprintf(buf, 17, " ThermFerm "); |
|
331 mb_lcdPuts(lcdHandle, buf); |
|
332 lcdPosition(lcdHandle, 0, 1); |
|
333 snprintf(buf, 17, " Version %s ", VERSION); |
|
334 mb_lcdPuts(lcdHandle, buf); |
|
335 lcdshow++; |
|
336 } else if (lcdshow == 1) { |
|
337 tm = localtime(&now); |
|
338 lcdPosition(lcdHandle, 0, 0); |
|
339 snprintf(buf, 17, " %02d-%02d-%04d ", tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900); |
|
340 mb_lcdPuts(lcdHandle, buf); |
|
341 lcdPosition(lcdHandle, 0, 1); |
|
342 snprintf(buf, 17, " %02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); |
|
343 mb_lcdPuts(lcdHandle, buf); |
|
344 lcdshow++; |
|
345 } else { |
|
346 lcdPosition(lcdHandle, 0, 0); |
|
347 tmp1 = Config.w1therms; |
|
348 snprintf(buf, 17, "%5.2f %cC %s ", tmp1->lastval / 1000.0, 0xdf, tmp1->alias); |
|
349 mb_lcdPuts(lcdHandle, buf); |
|
350 temp = tmp1->lastval; |
|
351 tmp1 = tmp1->next; |
|
352 lcdPosition(lcdHandle, 0, 1); |
|
353 snprintf(buf, 17, "%5.2f %cC %s ", tmp1->lastval / 1000.0, 0xdf, tmp1->alias); |
|
354 mb_lcdPuts(lcdHandle, buf); |
|
355 lcdshow = 0; |
|
356 } |
|
357 } |
|
358 #endif |
335 |
359 |
336 if (seconds == 60) { |
360 if (seconds == 60) { |
337 seconds = 0; |
361 seconds = 0; |
338 |
362 |
339 if (Config.w1therms) { |
363 if (Config.w1therms) { |
346 } |
370 } |
347 } |
371 } |
348 |
372 |
349 for (unit = Config.units; unit; unit = unit->next) { |
373 for (unit = Config.units; unit; unit = unit->next) { |
350 if (unit->mode != UNITMODE_OFF) { |
374 if (unit->mode != UNITMODE_OFF) { |
351 snprintf(buf, 1023, "%s,%.3f,%.3f,Target,Heater,Cooler,Fan,Door", |
375 |
352 UNITMODE[unit->mode], unit->air_temperature / 1000.0, unit->beer_temperature / 1000.0); |
376 snprintf(target, 39, "NA"); |
|
377 snprintf(heater, 39, "NA"); |
|
378 snprintf(cooler, 39, "NA"); |
|
379 snprintf(fan, 39, "NA"); |
|
380 snprintf(door, 39, "NA"); |
|
381 |
|
382 if (unit->mode == UNITMODE_BEER) |
|
383 snprintf(target, 39, "%.1f", unit->beer_set); |
|
384 else if (unit->mode == UNITMODE_FRIDGE) |
|
385 snprintf(target, 39, "%.1f", unit->fridge_set); |
|
386 |
|
387 if (unit->io1_address) { |
|
388 if (unit->heater_available) { |
|
389 |
|
390 } |
|
391 if (unit->cooler_available) { |
|
392 |
|
393 } |
|
394 } |
|
395 if (unit->io2_address) { |
|
396 if (unit->fan_available) { |
|
397 |
|
398 } |
|
399 } |
|
400 |
|
401 snprintf(buf, 1023, "%s,%.3f,%.3f,%s,%s,%s,%s,%s", |
|
402 UNITMODE[unit->mode], unit->air_temperature / 1000.0, |
|
403 unit->beer_temperature / 1000.0, target, heater, cooler, fan, door); |
353 filename = xstrcpy(unit->name); |
404 filename = xstrcpy(unit->name); |
354 filename = xstrcat(filename, (char *)".log"); |
405 filename = xstrcat(filename, (char *)".log"); |
355 logger(filename, buf); |
406 logger(filename, buf); |
356 free(filename); |
407 free(filename); |
357 filename = NULL; |
408 filename = NULL; |