Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Raspberry Pi fragt den aktuellen Tankfüllstand über die API ab und bekommt immer 401

Raspberry Pi fragt den aktuellen Tankfüllstand über die API ab und bekommt immer 401

Gelöst 4 3

Von English mit KI übersetzt ·

Ich bin neu im IoT-Bereich, bin Backend-Entwickler und habe das hier übernommen.Wir haben bereits einen Füllstandssensor für einen Tank, der an Hermetry meldet (Gerät „tank-01“, Schlüssel level_pct). Jemand möchte einen Pi im Büro, der einen Summer ertönen lässt, wenn der Füllstand über 90 steigt. Mein Plan war ein kleiner Python-Dienst auf dem Pi, der Hermetry alle 5 Sekunden nach dem neuesten Wert abfragt. Ich habe das Zugriffstoken von der Seite von tank-01 kopiert und Folgendes gemacht:

GET https://<host>/api/telemetry/latest?kind=iot_device&entityId=6f1c...&keys=level_pct
Authorization: Bearer <tank-01 token>
-> 401

Ich habe es mit und ohne „Bearer“ versucht, das Ergebnis ist dasselbe. Ist das Token falsch oder ist das der falsche Endpunkt?

Measure twice, poll once.
♥ 0

Von English mit KI übersetzt ·

Das ist eine Gerätezugangsdaten. Damit meldet sich ein Gerät an, es liest aber nichts für Sie aus. Die Management-API benötigt einen API-Schlüssel. Außerdem ist alle 5 Sekunden für einen Buzzer sehr oft.

Measure twice, poll once.
♥ 0

Von English mit KI übersetzt ·

Brian hat recht, und außerdem fehlt dir das Organisationspräfix. Ich habe letztes Jahr fast dasselbe für einen Kühlraum eingerichtet.1. API Keys (Developer menu) > New API Key. Unter Module permissions nur Lesezugriff auf Telemetrie vergeben, sonst nichts. Eine IP-Allowlist auf die Adresse des Büros setzen und das Ablaufdatum notieren, Standard sind 90 Tage, maximal ein Jahr. Eine Erinnerung in den Kalender eintragen, unserer ist an einem Samstag abgelaufen.2. Alle Verwaltungspfade liegen unter dem Tenant:

GET https://<host>/tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<deviceId>&keys=level_pct
Authorization: Bearer sk_live_...

Die Antwort sieht etwa so aus: {„latest“: {„level_pct“: {„ts“: …, „value“: 91.2}}}. Vergleiche den ts mit dem vorherigen Wert, damit du bei demselben Messwert nicht zweimal piepst.3. Auf 429 reagieren und die Sekunden aus Retry-After abwarten. Etwa alle 30 s abfragen, der Tank läuft nicht in 5 s voll.Der andere Weg, wenn du es sofort willst: Mach den Pi selbst zu einem Gerät, lass eine Regel am Tank ihm einen Befehl senden, wenn level_pct über 90 steigt, und der Pi wartet auf GET /api/v1/rpc mit seinem eigenen Gerätetoken. Mehr bewegliche Teile, kein Polling. Für einen Summer würde ich den API Key nehmen. Die Konventionen stehen unter REST API basics.

Akzeptierte Lösung♥ 5

Von English mit KI übersetzt ·

Das waren zwei Fehler: der Token und der fehlende Teil /tenant/<tenantId> (nachdem ich den Schlüssel hatte, kam einmal 404, dann habe ich es bemerkt). Läuft jetzt mit 30 s und einem schreibgeschützten Schlüssel, der auf unsere IP beschränkt ist. Der Summer ging heute Morgen los, als sie ihn gefüllt haben, also funktioniert es.

Measure twice, poll once.
♥ 0

Von English mit KI übersetzt ·

Speichern Sie den Schlüssel in einer nur für root zugänglichen Datei, nicht in dem Skript, das Sie irgendwann in ein Ticket einfügen.

Measure twice, poll once.
♥ 1
Ansicht von 5 Beiträgen – 1 bis 5 (von insgesamt 5)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

Mitdiskutieren

Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

Teilen