Zum Hauptinhalt springen

Custom Query

Eine Custom Query filtert Geräte nach ihren eigenen Werten, für Bedingungen, die die gewöhnlichen Filter nicht ausdrücken können - jedes Gerät, das eine Temperatur unter 15 meldet, zum Beispiel. Sie steht überall dort zur Verfügung, wo Geräte gefiltert werden: in der Geräteliste, auf der Karte, in den darauf gebauten Ansichten und in Berichten, wo sie entscheidet, welche IoT-Nodes der Bericht abdeckt.

Springen Sie zu Fertige Abfragen, wenn Sie etwas zum Kopieren und Anpassen suchen.

Wo Sie eine eingeben​

In der Geräteliste und auf der Karte​

  1. Drücken Sie Filter über der Geräteliste.
  2. Gehen Sie in der Ansicht, die sich rechts öffnet, zu Custom query und tippen Sie die Abfrage in das Feld.

So erreichen Sie das Feld für die Custom Query: die Schaltfläche Filter über der Geräteliste, und die Filteransicht, die sie öffnet, mit dem Feld Custom query unten

Das Feld trägt ein Beispiel als Platzhalter, temperature<15, und einen Link auf diese Seite. Die Abfrage wirkt als aktiver Filter neben den gewöhnlichen, sie kann also eine Auswahl weiter eingrenzen, die die anderen Filter bereits getroffen haben.

In einem Bericht​

Ein Bericht nutzt dieselbe Abfrage, um zu entscheiden, welche IoT-Nodes er abdeckt, aber sie wird in die Berichtsdefinition geschrieben statt in ein Feld getippt. Jede Quelle in der Definition hat ein query-Feld, und es nimmt genau die auf dieser Seite beschriebene Syntax:

In einer BerichtsdefinitionDer Bericht deckt ab
"query": "rssi"Jedes Gerät, das eine Signalstärke meldet
"query": "presence"Jedes Gerät, das Anwesenheit meldet
"query": "contextMap.building=='Building 2';temperature"Geräte in einem Gebäude, die eine Temperatur melden

Ein einzelner blanker Feldname ist die häufigste Form, denn ein Bericht will meist jedes Gerät, das die berichtete Größe misst. Alles andere auf dieser Seite funktioniert dort ebenfalls, und so wird ein Bericht auf ein Gebäude, ein Stockwerk oder ein Gerätemodell eingegrenzt. Siehe Berichte für den Ort der Definition.

Operatoren​

OperatorTrifft zu beiFunktioniert mitBeispiel
==Genau gleichText, Zahlen, Datumsangaben, Booleansname=='My Device'
:Dasselbe wie ==Text, Zahlen, Datumsangaben, Booleansname:'My Device'
~=Enthält, an beliebiger Stelle im WertTextname~=Strips
!=UngleichText, Zahlen, Datumsangaben, Booleansname!='My Device'
>Größer alsZahlen, Datumsangabentemperature>20
>=Größer oder gleichZahlen, Datumsangabentemperature>=20
<Kleiner alsZahlen, Datumsangabentemperature<20
<=Kleiner oder gleichZahlen, Datumsangabentemperature<=20
!Das Feld existiert nichtbeliebig!temperature
(nur der Feldname)Das Feld existiertbeliebigtemperature

Groß- und Kleinschreibung​

Die beiden verhalten sich unterschiedlich, was zu wissen sich lohnt, bevor eine Abfrage leer zurückkommt:

  • ~= ignoriert Groß- und Kleinschreibung. name~=strips findet "Strips-Guard" ebenso wie "strips-guard".
  • == und != nicht. name=='strips-guard' trifft "Strips-Guard" nicht.

~= ist daher meist der freundlichere Operator für von Hand getippte Namen.

Bedingungen kombinieren​

ZeichenBedeutungBeispiel
;UND - jede Bedingung muss geltentemperature>25;humidity<40
|ODER - eine der Bedingungen darf geltentemperature>25|humidity<40
,Eine Werteliste für ein FelddeviceModelName==strips,presence
.Ein verschachteltes FeldcontextMap.floor==3

Zwei Dinge zum Aufpassen:

  • Das Komma ist kein allgemeines ODER. Es listet alternative Werte für das davorstehende Feld auf. deviceModelName==strips,presence ist richtig; temperature<15,humidity<50 nicht, denn das sind zwei verschiedene Felder. Dafür braucht es den senkrechten Strich: temperature<15|humidity<50.
  • Verwenden Sie eine ODER-Gruppe je Abfrage. Eine Abfrage darf ; mit einer |-Gruppe mischen, wie in deviceModelName==strips;temperature>25|humidity<40. Eine zweite ODER-Gruppe ersetzt die erste, statt hinzuzukommen.

Textwerte​

Setzen Sie einen Wert in einfache Anführungszeichen, damit er eine wörtliche Zeichenkette bleibt: name=='Room 2'. Das zählt, wenn der Wert als etwas anderes gelesen werden könnte - ein Wert wie 2026-09-01 wird zu einem Datum, wenn er nicht in Anführungszeichen steht, und 0102 wird zur Zahl 102.

Anführungszeichen sind erforderlich, wenn der Wert ein Leerzeichen enthält.

Nach Datum suchen​

Jeder als ISO-8601-Datum geschriebene Wert wird von jedem Operator außer ~= als Datum behandelt. Damit funktionieren die Vergleichsoperatoren auf der Zeitachse:

AbfrageFindet
reportedAt>2026-09-01Geräte, die seit dem 1. September 2026 gemeldet haben
reportedAt<2026-09-01Geräte, deren letzte Meldung vor diesem Datum lag
reportedAt>=2026-09-01T08:00:00ZAb einem bestimmten Zeitpunkt, UTC
reportedAt>2026-09-01;reportedAt<2026-09-08In dieser Woche gemeldet - ein Bereich sind zwei Bedingungen, nicht eine
!reportedAtGeräte, die überhaupt nie gemeldet haben

Akzeptiert sind die üblichen ISO-8601-Formen: 2026-09-01, 2026-09-01T08:00:00Z, 2026-09-01T08:00:00.000Z. Ein Datum für sich ist Mitternacht zu Beginn dieses Tages.

Drei Dinge, die man wissen sollte:

  • Ein Bereich braucht zwei Bedingungen, mit ; verbunden, eine je Ende.
  • ~= funktioniert nicht mit Datumsangaben. Es behält einen datumsähnlichen Wert als wörtlichen Text, trifft also die Zeichen und nicht den Zeitpunkt.
  • Eine Jahreszahl allein ist eine Zahl, kein Datum. reportedAt>2026 vergleicht mit der Zahl 2026 und findet nichts. Schreiben Sie reportedAt>2026-01-01.

Datumsangaben sind absolut, eine gespeicherte Ansicht mit einer solchen zeigt also weiter auf denselben Zeitpunkt, während die Zeit vergeht. Für verstummte Geräte ist meist ein gleitendes Fenster das Gewünschte: der Filter Reported within der Geräteliste oder der Abschnitt Zuletzt gesehen der Karte.

Fertige Abfragen​

Kopieren Sie eine und ändern Sie Feld oder Wert.

Geräte finden​

AbfrageFindet
name~=stripsJedes Gerät mit "strips" im Namen, in beliebiger Schreibweise
name~='Room 2'Namen, die "Room 2" enthalten
deviceModelName==strips-guardEin Hardwaremodell
deviceModelName==strips-guard,strips-dripEines von zwei Modellen
!nameGeräte ohne gesetzten Namen
devEui~=0102Einen Teil einer DevEUI, nützlich vom Aufdruck

Messwerte und Schwellenwerte​

AbfrageFindet
temperature>25Zu warm
temperature<15|humidity>70Zu kalt oder zu feucht
temperature>=18;temperature<=24Innerhalb eines Komfortbereichs
temperature<0Unter dem Gefrierpunkt
humidity>70;temperature>22Warm und feucht zugleich, das Schimmelrisiko
co2>800Sehr schlechte Luftqualität
occupied==trueGerade belegt
doorOpen==true;temperature<5Eine in der Kälte offen gelassene Tür

Batterie und Zustand​

AbfrageFindet
batteryLevel<20Braucht demnächst eine Batterie
batteryLevel<5Braucht jetzt eine
!batteryLevelGeräte, die überhaupt keinen Batteriestand melden

Netzqualität​

Die Felder hinter der Karte der Netzabdeckung.

AbfrageFindet
rssi<-115Ein schwaches Signal
rssi<-124Ein gefährdetes Signal
snr<0Unter dem Rauschpegel, ohne Reserve
spreadingFactor>=11Langsam und teuer für die Batterie, unabhängig vom Signal
spreadingFactor>=11;rssi>-110Nahe am Gateway und trotzdem teuer sendend
!rssiGeräte ohne LoRa-Signal, also kein LoRaWAN

Zeit​

AbfrageFindet
reportedAt>2026-09-01In diesem Monat gemeldet
reportedAt<2026-08-01Nichts seit Juli - wahrscheinlich tot
reportedAt>2026-09-01;reportedAt<2026-09-08In einer Woche gemeldet
!reportedAtInstalliert, aber nie gehört

Metadaten​

Ihre eigenen kontextuellen Parameter - deshalb zahlt es sich aus, sie bei der Installation auszufüllen.

AbfrageFindet
contextMap.floor==3Alles auf Etage 3
contextMap.building=='Building 2'Ein Gebäude
contextMap.installer==OlofAlles, was eine bestimmte Person installiert hat
contextMap.room~=meetingRäume mit "meeting" im Namen
!contextMap.floorGeräte, bei denen niemand die Etage erfasst hat
contextMap.floor==1,2,3Etage 1, 2 oder 3

Kombiniert​

AbfrageFindet
contextMap.building=='Building 2';temperature>25Zu warm, in einem Gebäude
deviceModelName==strips-guard;batteryLevel<20Ein Modell, das eine Batterie braucht
contextMap.floor==3;rssi<-115Schwache Abdeckung auf einer Etage - die Signatur eines schlecht platzierten Gateways
temperature;!humidityGeräte, die Temperatur, aber keine Feuchte melden, meist ein Translator-Problem
contextMap.building=='Building 2';reportedAt<2026-08-01Verstummte Geräte in einem Gebäude

Wenn eine Abfrage nichts liefert​

Prüfen SieWarum
Den Feldnamen, Zeichen für ZeichenFeldnamen unterscheiden Groß- und Kleinschreibung. Kopieren Sie sie aus dem Abschnitt Data eines Geräts - siehe Data
Ob Sie == auf Text verwendet haben== ist exakt und unterscheidet Groß- und Kleinschreibung. Versuchen Sie ~=
Ob ein Wert Anführungszeichen brauchtAlles mit einem Leerzeichen braucht sie, ebenso alles, was als Zahl oder Datum gelesen werden könnte
Ob Sie Komma oder senkrechten Strich meintenEin Komma listet Werte für ein Feld; ein senkrechter Strich verknüpft zwei Bedingungen mit ODER
Ob das Feld eine Zeichenkette istEine als Text gespeicherte Zahl antwortet nicht auf > und <. Die Farbe in Data zeigt den Typ