# Temperaturen

> Kühl- und Gartemperaturen, von einer Person gemessen oder von einem Sensor gemeldet: drei Collections und was sie voneinander unterscheidet.

Source: https://developers.backresto.com/de/docs/temperatures

Die Temperatur ist der Messwert, an dem eine Lebensmittelkontrolle hängt, und
die App erfasst sie auf drei Wegen. Sie sehen sich ähnlich und bedeuten
Verschiedenes, es lohnt sich also, den Unterschied zu klären, bevor Sie auf
einem davon aufbauen.

| Collection | Scope | Wer gemessen hat |
| --- | --- | --- |
| `temperature-records` | `temperature-records:read` | Eine Person, an einem Kühl- oder Gefriergerät, während einer benannten Schicht. |
| `temperature-readings` | `temperature-readings:read` | Ein [Sensor](https://developers.backresto.com/de/docs/facilities), von sich aus, unbeaufsichtigt. |
| `cooking-temperature-records` | `cooking-temperature-records:read` | Eine Person, an einem Gargerät: einem Ofen, einem Warmhalteschrank. |

Alle drei teilen sich den [Snapshot-Umschlag](https://developers.backresto.com/de/docs/collections): `id`,
`deleted`, `capturedAt`, `receivedAt`, `sequence` und der Rest stehen neben dem
`data`, das unten beschrieben ist.

## `temperature-records`

Eine von Hand erfasste Kontrolle an einem Gerät der Kühlkette. Ein Datensatz pro
Messung, pro Gerät, pro Schicht.

| Feld | Typ | Bedeutung |
| --- | --- | --- |
| `timestamp` | string, **Pflicht** | Wann gemessen wurde, als String mit Millisekunden seit Epoch. |
| `value` | number, **Pflicht** | Die Temperatur selbst. |
| `unit` | string, **Pflicht** | In jedem Datensatz, den wir gesehen haben, `CELSIUS`. Lesen Sie es, statt es anzunehmen. |
| `shift` | string, **Pflicht** | Der Dienst, zu dem sie gehört: `MORNING`, `EVENING`. Großgeschrieben. |
| `equipmentId` | string, **Pflicht** | Das gemessene [Gerät](https://developers.backresto.com/de/docs/facilities). |
| `correctiveActions` | string[] | Was getan wurde, als die Messung außerhalb des Bereichs lag. Leer, wenn nichts nötig war. |
| `userId` | string \| null | Der Mitarbeiter, der sie erfasst hat, sofern die App einen erfasst hat. |

```json
{
  "id": "48a30f0b-ccc0-4d18-8404-525b16ecaaa6",
  "collection": "temperature-records",
  "deleted": false,
  "capturedAt": "1789772570338",
  "receivedAt": "1789772802108",
  "sequence": "1",
  "data": {
    "timestamp": "1789768800000",
    "value": -14.4,
    "unit": "CELSIUS",
    "shift": "MORNING",
    "equipmentId": "84ce5c13-3237-40d4-901a-cbba59a6406f",
    "userId": "2774953d-8d9b-4a68-8ec4-1209edd90777"
  }
}
```

**`value` ist eine Messung, kein Urteil.** Nichts im Datensatz sagt, ob sie
zulässig war: Das hängt an `min` und `max` auf dem [Gerät](https://developers.backresto.com/de/docs/facilities),
die Sie getrennt lesen müssen und die das Restaurant ändern kann. Ein Datensatz
mit -14,4 °C ist in einem Kühlschrank ein Problem und in einem Gefriergerät
normal.

**`correctiveActions` ist Freitext**, während des Betriebs getippt, in der
Sprache des Restaurants. Zählen Sie es, wenn Sie mögen; bauen Sie kein Enum
daraus.

## `temperature-readings`

Dieselbe Messung, von einem Funkfühler gemeldet statt von einer Person.
Dieselbe Struktur, abzüglich der beiden Felder, die nur Sinn ergeben, wenn ein
Mensch beteiligt war: Es gibt kein `shift` und kein `userId`.

| Feld | Typ | Bedeutung |
| --- | --- | --- |
| `timestamp` | string, **Pflicht** | Wann der Sensor gemeldet hat, als String mit Millisekunden seit Epoch. |
| `value` | number, **Pflicht** | Die Temperatur. |
| `unit` | string, **Pflicht** | Wie oben. |
| `equipmentId` | string, **Pflicht** | Das Gerät, das der Sensor überwacht. |
| `correctiveActions` | string[] | Nachträglich von einer Person eingetragen, wenn auf einen Alarm reagiert wurde. |

Diese kommen im Takt des Sensors, ein gut besuchtes Restaurant erzeugt also weit
mehr davon als von Hand erfasste Datensätze. Richten Sie Ihre Abfragen nach der
Menge aus, nicht nach der Zahl der Mitarbeiter.

Welcher Sensor gemeldet hat, steht nicht auf der Messung. Die Verbindung liegt
in der Collection [`sensors`](https://developers.backresto.com/de/docs/facilities), deren `sensorEquipmentId`
zurück auf das Gerät zeigt. Achten Sie auf den Namen, es ist nicht
`equipmentId`.

## `cooking-temperature-records`

Eine Person misst ein Gargerät statt eines Kühlgeräts. Identisch mit
`temperature-records`, nur zeigt es auf ein
[Gargerät](https://developers.backresto.com/de/docs/facilities).

| Feld | Typ | Bedeutung |
| --- | --- | --- |
| `timestamp` | string, **Pflicht** | Wann gemessen wurde. |
| `value` | number, **Pflicht** | Die Temperatur. |
| `unit` | string, **Pflicht** | Wie oben. |
| `shift` | string, **Pflicht** | Der Dienst, zu dem sie gehört. |
| `cookingEquipmentId` | string, **Pflicht** | Das gemessene Gargerät, **nicht** `equipmentId`. |
| `correctiveActions` | string[] | Was wegen einer Messung außerhalb des Bereichs getan wurde. |
| `userId` | string \| null | Wer sie erfasst hat. |

Der Feldname ist der eine Unterschied, der weh tut: Ein Client, der hier
`equipmentId` liest, bekommt stillschweigend `undefined` und ein Diagramm ohne
Geräte darin.

## Alle drei zusammen lesen

Ein Dashboard, das die Frage „War dieser Kühlschrank heute im Bereich“
beantwortet, will `temperature-records` und `temperature-readings` über
`equipmentId` zusammengeführt haben, dazu die Schwellen aus `equipment`. Drei
Durchläufe, auf Ihrer Seite verbunden: Es gibt keinen Endpunkt, der das für Sie
tut.

Zwei Dinge, die Sie von Anfang an einbauen sollten:

- **Für Berichte `capturedAt`, für den Abgleich `receivedAt`.** Ein Tablet in
  einem Kühlraum lädt hoch, sobald es Empfang findet; der Datensatz einer
  Messung um 09:00 Uhr kann also um 14:00 Uhr ankommen.
  [Die Seite zum Umschlag](https://developers.backresto.com/de/docs/collections) erzählt die ganze Geschichte.
- **Abwesenheit beweist nichts.** Eine fehlende Messung kann heißen, dass die
  Kontrolle ausgefallen ist, oder dass das Gerät sie noch nicht hochgeladen hat.
  Drucken Sie aus dieser API keine Erfüllungsquote und nennen Sie sie
  Compliance (siehe [die Anmerkung zur Vollständigkeit](https://developers.backresto.com/de/docs/support)).
