Temperaturen

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

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.

CollectionBerechtigungWer gemessen hat
temperature-recordstemperature-records:readEine Person, an einem Kühl- oder Gefriergerät, während einer benannten Schicht.
temperature-readingstemperature-readings:readEin Sensor, von sich aus, unbeaufsichtigt.
cooking-temperature-recordscooking-temperature-records:readEine Person, an einem Gargerät — einem Ofen, einem Warmhalteschrank.

Alle drei teilen sich den Snapshot-Umschlag: 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.

FeldTypBedeutung
timestampstring, PflichtWann gemessen wurde, als Zeichenkette mit Millisekunden seit der Epoche.
valuenumber, PflichtDie Temperatur selbst.
unitstring, PflichtIn jedem Datensatz, den wir gesehen haben, CELSIUS. Lesen Sie es, statt es anzunehmen.
shiftstring, PflichtDer Dienst, zu dem sie gehört — MORNING, EVENING. Großgeschrieben.
equipmentIdstring, PflichtDas gemessene Gerät.
correctiveActionsstring[]Was getan wurde, als die Messung außerhalb des Bereichs lag. Leer, wenn nichts nötig war.
userIdstring | nullDer Mitarbeiter, der sie erfasst hat, sofern die App einen erfasst hat.
{
  "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, 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.

FeldTypBedeutung
timestampstring, PflichtWann der Sensor gemeldet hat, als Zeichenkette mit Millisekunden seit der Epoche.
valuenumber, PflichtDie Temperatur.
unitstring, PflichtWie oben.
equipmentIdstring, PflichtDas Gerät, das der Sensor überwacht.
correctiveActionsstring[]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, 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.

FeldTypBedeutung
timestampstring, PflichtWann gemessen wurde.
valuenumber, PflichtDie Temperatur.
unitstring, PflichtWie oben.
shiftstring, PflichtDer Dienst, zu dem sie gehört.
cookingEquipmentIdstring, PflichtDas gemessene Gargerät — nicht equipmentId.
correctiveActionsstring[]Was wegen einer Messung außerhalb des Bereichs getan wurde.
userIdstring | nullWer 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:

  • Ordnen Sie nach capturedAt, nicht nach 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 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.

Zuletzt aktualisiert am 2026-09-20.