MetriBeacon
Menü
Deutsch

POST Berechnete Messreihe anlegen

/api/v1/devices/{id}/derived-series

Formeln für abgeschlossene UTC-Minuten verwenden 1–8 numerische Quellen eines Arbeitsbereichs, höchstens 64 AST-Knoten und Abhängigkeitstiefe 4. Addition und Subtraktion benötigen gleiche Einheiten. Fehlende Quellen und Division durch null bleiben Lücken. Jede neue unveränderliche Revision verbraucht das Datenkontingent des Owners; Wiederholungen sind kostenfrei. Standardmäßig gilt die Formel ab der nächsten Minute; ausdrückliche Nachberechnung umfasst höchstens 24 Stunden. Viewer dürfen lesen; Änderungen benötigen Editor, config:write und Session-CSRF. Ein optionaler Idempotency-Key schützt Wiederholungen und lehnt geänderte Nutzdaten ab. Telemetrieschlüssel dürfen keine berechneten Reihen beschreiben.

Auf dieser Seite

Zugriff und Rechte

Formeln für abgeschlossene UTC-Minuten verwenden 1–8 numerische Quellen eines Arbeitsbereichs, höchstens 64 AST-Knoten und Abhängigkeitstiefe 4. Addition und Subtraktion benötigen gleiche Einheiten. Fehlende Quellen und Division durch null bleiben Lücken. Jede neue unveränderliche Revision verbraucht das Datenkontingent des Owners; Wiederholungen sind kostenfrei. Standardmäßig gilt die Formel ab der nächsten Minute; ausdrückliche Nachberechnung umfasst höchstens 24 Stunden. Viewer dürfen lesen; Änderungen benötigen Editor, config:write und Session-CSRF. Ein optionaler Idempotency-Key schützt Wiederholungen und lehnt geänderte Nutzdaten ab. Telemetrieschlüssel dürfen keine berechneten Reihen beschreiben.

Browsersitzung: Cookie __Host-mb_session.

Maschinen-Verwaltungszugang in Authorization: Bearer. Beachten Sie die von der Operation benötigten Berechtigungen (Scopes).

Senden Sie bei einer Änderung mit Browsersitzung das aktuelle CSRF-Token in X-CSRF-Token zusammen mit dem Same-Site-Cookie. OAuth-Zustimmung verwendet ihr dokumentiertes Formularfeld.

Parameter und Header

FeldPositionTyp und GrenzenErforderlichBedeutung
idPfadstring; {"format":"uuid"}JaRessourcen-UUID aus dem Pfad. Sie muss existieren und für die handelnde Identität zugänglich sein.
X-CSRF-TokenHeaderstringNeinWert des Browser-CSRF-Cookies. Bei einem zulässigen Maschinen-Verwaltungszugang nicht erforderlich.
OriginHeaderstring; {"format":"uri"}NeinMuss, falls vorhanden, dem kanonischen HTTPS-Origin entsprechen. Sec-Fetch-Site cross-site wird abgewiesen.
Idempotency-KeyHeaderstring; {"maxLength":128,"minLength":8}NeinFormeln für abgeschlossene UTC-Minuten verwenden 1–8 numerische Quellen eines Arbeitsbereichs, höchstens 64 AST-Knoten und Abhängigkeitstiefe 4. Addition und Subtraktion benötigen gleiche Einheiten. Fehlende Quellen und Division durch null bleiben Lücken. Jede neue unveränderliche Revision verbraucht das Datenkontingent des Owners; Wiederholungen sind kostenfrei. Standardmäßig gilt die Formel ab der nächsten Minute; ausdrückliche Nachberechnung umfasst höchstens 24 Stunden. Viewer dürfen lesen; Änderungen benötigen Editor, config:write und Session-CSRF. Ein optionaler Idempotency-Key schützt Wiederholungen und lehnt geänderte Nutzdaten ab. Telemetrieschlüssel dürfen keine berechneten Reihen beschreiben.

Anfragekörper

FeldTyp und GrenzenErforderlichBedeutung
$object; {"additionalProperties":false}Ja—
$.backfill_fromstring | null; {"format":"date-time"}Nein—
$.enabledboolean; {"default":false}Nein—
$.expected_revisioninteger; {"minimum":0}Nein—
$.expressionstring; {"maxLength":1024,"minLength":1}JaBegrenzte numerische Formel: Verwenden Sie mean(alias), min(alias), max(alias), last(alias), increase(alias) oder rate(alias) mit Rechenoperationen. Bloße Aliasse wie v*2 sind ungültig; verwenden Sie mean(v)*2. increase und rate benötigen Zähler; Addition und Subtraktion benötigen gleiche Einheiten.
$.namestring; {"maxLength":128,"minLength":1}Ja—
$.sourcesobjectJa—

Antworten

application/json

FeldTyp und GrenzenErforderlichBedeutung
$objectJa—
$.backfill_fromstring | null; {"format":"date-time"}Nein—
$.effective_fromstring; {"format":"date-time"}Nein—
$.enabledbooleanNein—
$.revisioninteger; {"minimum":1}Nein—
$.series_idstring; {"format":"uuid"}Nein—
$.unitstring; {"maxLength":32}Nein—
Stabile Fehlercodes
invalid_session

application/problem+json

FeldTyp und GrenzenErforderlichBedeutung
$ProblemJa—
$.codestringJaStabiler maschinenlesbarer Fehlercode
$.detailstringJaKurze lokalisierte Erklärung ohne interne Fehlerdaten
$.instancestringJaEinmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource
$.messagestringJaVorübergehend für bestehende Clients gleich detail
$.message_keystringJaStabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage
$.message_paramsobject; {"additionalProperties":true}JaBenannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML
$.request_idstring; {"pattern":"^[0-9a-f]{32}$"}JaVom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten.
$.statusinteger; {"maximum":599,"minimum":400}Ja—
$.titlestringJaLokalisierte HTTP-Statusbezeichnung
$.typestring; {"const":"about:blank"}Ja—
Stabile Fehlercodes
forbidden
csrf
insufficient_scope

application/problem+json

FeldTyp und GrenzenErforderlichBedeutung
$ProblemJa—
$.codestringJaStabiler maschinenlesbarer Fehlercode
$.detailstringJaKurze lokalisierte Erklärung ohne interne Fehlerdaten
$.instancestringJaEinmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource
$.messagestringJaVorübergehend für bestehende Clients gleich detail
$.message_keystringJaStabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage
$.message_paramsobject; {"additionalProperties":true}JaBenannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML
$.request_idstring; {"pattern":"^[0-9a-f]{32}$"}JaVom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten.
$.statusinteger; {"maximum":599,"minimum":400}Ja—
$.titlestringJaLokalisierte HTTP-Statusbezeichnung
$.typestring; {"const":"about:blank"}Ja—
Stabile Fehlercodes
not_found

application/problem+json

FeldTyp und GrenzenErforderlichBedeutung
$ProblemJa—
$.codestringJaStabiler maschinenlesbarer Fehlercode
$.detailstringJaKurze lokalisierte Erklärung ohne interne Fehlerdaten
$.instancestringJaEinmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource
$.messagestringJaVorübergehend für bestehende Clients gleich detail
$.message_keystringJaStabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage
$.message_paramsobject; {"additionalProperties":true}JaBenannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML
$.request_idstring; {"pattern":"^[0-9a-f]{32}$"}JaVom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten.
$.statusinteger; {"maximum":599,"minimum":400}Ja—
$.titlestringJaLokalisierte HTTP-Statusbezeichnung
$.typestring; {"const":"about:blank"}Ja—
Stabile Fehlercodes
idempotency_conflict
revision_conflict

application/problem+json

FeldTyp und GrenzenErforderlichBedeutung
$ProblemJa—
$.codestringJaStabiler maschinenlesbarer Fehlercode
$.detailstringJaKurze lokalisierte Erklärung ohne interne Fehlerdaten
$.instancestringJaEinmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource
$.messagestringJaVorübergehend für bestehende Clients gleich detail
$.message_keystringJaStabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage
$.message_paramsobject; {"additionalProperties":true}JaBenannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML
$.request_idstring; {"pattern":"^[0-9a-f]{32}$"}JaVom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten.
$.statusinteger; {"maximum":599,"minimum":400}Ja—
$.titlestringJaLokalisierte HTTP-Statusbezeichnung
$.typestring; {"const":"about:blank"}Ja—
Stabile Fehlercodes
invalid_formula
invalid_formula_units
invalid_formula_source
invalid_backfill
formula_cycle_or_depth
invalid_idempotency_key

application/problem+json

FeldTyp und GrenzenErforderlichBedeutung
$ProblemJa—
$.codestringJaStabiler maschinenlesbarer Fehlercode
$.detailstringJaKurze lokalisierte Erklärung ohne interne Fehlerdaten
$.instancestringJaEinmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource
$.messagestringJaVorübergehend für bestehende Clients gleich detail
$.message_keystringJaStabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage
$.message_paramsobject; {"additionalProperties":true}JaBenannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML
$.request_idstring; {"pattern":"^[0-9a-f]{32}$"}JaVom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten.
$.statusinteger; {"maximum":599,"minimum":400}Ja—
$.titlestringJaLokalisierte HTTP-Statusbezeichnung
$.typestring; {"const":"about:blank"}Ja—
Stabile Fehlercodes
series_limit
creation_quota

application/problem+json

FeldTyp und GrenzenErforderlichBedeutung
$ProblemJa—
$.codestringJaStabiler maschinenlesbarer Fehlercode
$.detailstringJaKurze lokalisierte Erklärung ohne interne Fehlerdaten
$.instancestringJaEinmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource
$.messagestringJaVorübergehend für bestehende Clients gleich detail
$.message_keystringJaStabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage
$.message_paramsobject; {"additionalProperties":true}JaBenannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML
$.request_idstring; {"pattern":"^[0-9a-f]{32}$"}JaVom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten.
$.statusinteger; {"maximum":599,"minimum":400}Ja—
$.titlestringJaLokalisierte HTTP-Statusbezeichnung
$.typestring; {"const":"about:blank"}Ja—
Stabile Fehlercodes
unavailable

application/problem+json

FeldTyp und GrenzenErforderlichBedeutung
$ProblemJa—
$.codestringJaStabiler maschinenlesbarer Fehlercode
$.detailstringJaKurze lokalisierte Erklärung ohne interne Fehlerdaten
$.instancestringJaEinmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource
$.messagestringJaVorübergehend für bestehende Clients gleich detail
$.message_keystringJaStabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage
$.message_paramsobject; {"additionalProperties":true}JaBenannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML
$.request_idstring; {"pattern":"^[0-9a-f]{32}$"}JaVom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten.
$.statusinteger; {"maximum":599,"minimum":400}Ja—
$.titlestringJaLokalisierte HTTP-Statusbezeichnung
$.typestring; {"const":"about:blank"}Ja—

Wiederholungen und asynchrone Aufträge

Für diese Änderung gibt es keine allgemeine Wiederholungsgarantie. Prüfen Sie bei unklarer Antwort den betroffenen Eintrag, bevor Sie es erneut versuchen. Beachten Sie Wartezeiten aus Retry-After und fordern Sie abgelaufene Anmelde- oder Aktionscodes neu an.

Anfragebeispiele

Ersetzen Sie Demokennungen, Zeitstempel und Platzhalter durch eigene Werte. Behalten Sie bei Wiederholungen Kennungen, Zeit und Inhalt bei. Diese Beispiele führen auf der Seite keine Anfragen aus.

Halten Sie Anmeldelinks, Codes, Cookies und Schlüssel privat. Schreiben Sie sie nicht in Logs und teilen Sie sie nicht in Hilfeanfragen.

shell
curl --silent --show-error --output /dev/null --write-out "%{http_code}\n" \
  --request POST \
  --header @"$HOME/.config/metribeacon/headers.txt" \
  --header "Content-Type: application/json" \
  --data-binary '{"name":"Calculated power","expression":"mean(a)","sources":{"a":"00000000-0000-4000-8000-000000000002"},"enabled":true,"expected_revision":1}' \
  "https://metribeacon.com/api/v1/devices/00000000-0000-4000-8000-000000000001/derived-series"
python
import json
from pathlib import Path
from urllib.request import Request, HTTPRedirectHandler, build_opener
from urllib.error import HTTPError

headers = json.loads((Path.home() / ".config/metribeacon/headers.json").read_text())
headers["Content-Type"] = "application/json"
request = Request("https://metribeacon.com/api/v1/devices/00000000-0000-4000-8000-000000000001/derived-series", data="{\"name\":\"Calculated power\",\"expression\":\"mean(a)\",\"sources\":{\"a\":\"00000000-0000-4000-8000-000000000002\"},\"enabled\":true,\"expected_revision\":1}".encode("utf-8"), headers=headers, method="POST")
class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, request, fp, code, message, headers, target):
        return None

opener = build_opener(NoRedirect())
try:
    with opener.open(request, timeout=10) as response:
        print(response.status)
except HTTPError as error:
    print(error.code)
    error.close()
javascript
import { readFile } from "node:fs/promises";
import { homedir } from "node:os";
import { join } from "node:path";

const headers = JSON.parse(await readFile(join(homedir(), ".config/metribeacon/headers.json"), "utf8"));
headers["Content-Type"] = "application/json";
const response = await fetch("https://metribeacon.com/api/v1/devices/00000000-0000-4000-8000-000000000001/derived-series", {
  method: "POST", headers, redirect: "manual",
  signal: AbortSignal.timeout(10000), body: "{\"name\":\"Calculated power\",\"expression\":\"mean(a)\",\"sources\":{\"a\":\"00000000-0000-4000-8000-000000000002\"},\"enabled\":true,\"expected_revision\":1}",
});
console.log(response.status);
await response.body?.cancel();
go
package main

import (
  "fmt"
  "net/http"
  "time"
  "encoding/json"
  "os"
  "path/filepath"
  "strings"
)

func main() {
  home, err := os.UserHomeDir(); if err != nil { panic("request failed; credentials and response omitted") }
  raw, err := os.ReadFile(filepath.Join(home, ".config/metribeacon/headers.json")); if err != nil { panic("request failed; credentials and response omitted") }
  var headers map[string]string
  if json.Unmarshal(raw, &headers) != nil { panic("invalid local headers") }
  request, err := http.NewRequest("POST", "https://metribeacon.com/api/v1/devices/00000000-0000-4000-8000-000000000001/derived-series", strings.NewReader("{\"name\":\"Calculated power\",\"expression\":\"mean(a)\",\"sources\":{\"a\":\"00000000-0000-4000-8000-000000000002\"},\"enabled\":true,\"expected_revision\":1}"))
  if err != nil { panic("request failed; credentials and response omitted") }
  for name, value := range headers { request.Header.Set(name, value) }
  request.Header.Set("Content-Type", "application/json")
  client := &http.Client{Timeout: 10*time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
  response, err := client.Do(request)
  if err != nil { panic("request failed; credentials and response omitted") }
  defer response.Body.Close()
  fmt.Println(response.StatusCode)
}
  • HTTP-API, OAuth und MCP

    Finden Sie die Nutzer-API-Endpunkte mit Rechten, Feldern, Beispielen und Antwortformaten.

  • GET Berechnete Messreihen auflisten

    Formeln für abgeschlossene UTC-Minuten verwenden 1–8 numerische Quellen eines Arbeitsbereichs, höchstens 64 AST-Knoten und Abhängigkeitstiefe 4. Addition und Subtraktion benötigen gleiche Einheiten. Fehlende Quellen und Division durch null bleiben Lücken. Jede neue unveränderliche Revision verbraucht das Datenkontingent des Owners; Wiederholungen sind kostenfrei. Standardmäßig gilt die Formel ab der nächsten Minute; ausdrückliche Nachberechnung umfasst höchstens 24 Stunden. Viewer dürfen lesen; Änderungen benötigen Editor, config:write und Session-CSRF. Ein optionaler Idempotency-Key schützt Wiederholungen und lehnt geänderte Nutzdaten ab. Telemetrieschlüssel dürfen keine berechneten Reihen beschreiben.

  • PUT Formel einer berechneten Messreihe ändern

    Formeln für abgeschlossene UTC-Minuten verwenden 1–8 numerische Quellen eines Arbeitsbereichs, höchstens 64 AST-Knoten und Abhängigkeitstiefe 4. Addition und Subtraktion benötigen gleiche Einheiten. Fehlende Quellen und Division durch null bleiben Lücken. Jede neue unveränderliche Revision verbraucht das Datenkontingent des Owners; Wiederholungen sind kostenfrei. Standardmäßig gilt die Formel ab der nächsten Minute; ausdrückliche Nachberechnung umfasst höchstens 24 Stunden. Viewer dürfen lesen; Änderungen benötigen Editor, config:write und Session-CSRF. Ein optionaler Idempotency-Key schützt Wiederholungen und lehnt geänderte Nutzdaten ab. Telemetrieschlüssel dürfen keine berechneten Reihen beschreiben.

  • GET Quellen für berechnete Reihen auflisten

    Formeln für abgeschlossene UTC-Minuten verwenden 1–8 numerische Quellen eines Arbeitsbereichs, höchstens 64 AST-Knoten und Abhängigkeitstiefe 4. Addition und Subtraktion benötigen gleiche Einheiten. Fehlende Quellen und Division durch null bleiben Lücken. Jede neue unveränderliche Revision verbraucht das Datenkontingent des Owners; Wiederholungen sind kostenfrei. Standardmäßig gilt die Formel ab der nächsten Minute; ausdrückliche Nachberechnung umfasst höchstens 24 Stunden. Viewer dürfen lesen; Änderungen benötigen Editor, config:write und Session-CSRF. Ein optionaler Idempotency-Key schützt Wiederholungen und lehnt geänderte Nutzdaten ab. Telemetrieschlüssel dürfen keine berechneten Reihen beschreiben.