# Thermocouple logging

```python
#!/usr/bin/env python3
"""Log four thermocouple channels to CSV once a second."""

import csv
import datetime
import os
import time

import synergy_logic

LOG_FILE = "temperatures.csv"

base = synergy_logic.Base()
thermo = base[1]              # SLM-THM-4

new_file = not os.path.exists(LOG_FILE) or os.path.getsize(LOG_FILE) == 0

with open(LOG_FILE, "a", newline="") as fh:
    writer = csv.writer(fh)
    if new_file:
        writer.writerow(["timestamp", "tc1", "tc2", "tc3", "tc4"])

    while True:
        readings = thermo.reals
        writer.writerow([datetime.datetime.now().isoformat()] + readings)
        fh.flush()               # Python buffer -> operating system
        os.fsync(fh.fileno())    # operating system -> SD card

        for index, temp in enumerate(readings, start=1):
            print(f"TC{index}: {temp:7.2f}")
        time.sleep(1)
```

The header row is written only when the file is new, so restarting the program appends to the existing log. `flush()` passes buffered rows to the operating system, and `os.fsync()` writes them to the SD card; together they limit what a power loss can discard to the row being written.

The temperature unit (Celsius or Fahrenheit) depends on the module configuration.
