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
- Drücken Sie Filter über der Geräteliste.
- Gehen Sie in der Ansicht, die sich rechts öffnet, zu Custom query und tippen Sie die Abfrage in das Feld.

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 Berichtsdefinition | Der 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
| Operator | Trifft zu bei | Funktioniert mit | Beispiel |
|---|---|---|---|
== | Genau gleich | Text, Zahlen, Datumsangaben, Booleans | name=='My Device' |
: | Dasselbe wie == | Text, Zahlen, Datumsangaben, Booleans | name:'My Device' |
~= | Enthält, an beliebiger Stelle im Wert | Text | name~=Strips |
!= | Ungleich | Text, Zahlen, Datumsangaben, Booleans | name!='My Device' |
> | Größer als | Zahlen, Datumsangaben | temperature>20 |
>= | Größer oder gleich | Zahlen, Datumsangaben | temperature>=20 |
< | Kleiner als | Zahlen, Datumsangaben | temperature<20 |
<= | Kleiner oder gleich | Zahlen, Datumsangaben | temperature<=20 |
! | Das Feld existiert nicht | beliebig | !temperature |
| (nur der Feldname) | Das Feld existiert | beliebig | temperature |
Groß- und Kleinschreibung
Die beiden verhalten sich unterschiedlich, was zu wissen sich lohnt, bevor eine Abfrage leer zurückkommt:
~=ignoriert Groß- und Kleinschreibung.name~=stripsfindet "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
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
; | UND - jede Bedingung muss gelten | temperature>25;humidity<40 |
| | ODER - eine der Bedingungen darf gelten | temperature>25|humidity<40 |
, | Eine Werteliste für ein Feld | deviceModelName==strips,presence |
. | Ein verschachteltes Feld | contextMap.floor==3 |
Zwei Dinge zum Aufpassen:
- Das Komma ist kein allgemeines ODER. Es listet alternative Werte für das davorstehende Feld
auf.
deviceModelName==strips,presenceist richtig;temperature<15,humidity<50nicht, 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 indeviceModelName==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:
| Abfrage | Findet |
|---|---|
reportedAt>2026-09-01 | Geräte, die seit dem 1. September 2026 gemeldet haben |
reportedAt<2026-09-01 | Geräte, deren letzte Meldung vor diesem Datum lag |
reportedAt>=2026-09-01T08:00:00Z | Ab einem bestimmten Zeitpunkt, UTC |
reportedAt>2026-09-01;reportedAt<2026-09-08 | In dieser Woche gemeldet - ein Bereich sind zwei Bedingungen, nicht eine |
!reportedAt | Gerä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>2026vergleicht mit der Zahl 2026 und findet nichts. Schreiben SiereportedAt>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
| Abfrage | Findet |
|---|---|
name~=strips | Jedes Gerät mit "strips" im Namen, in beliebiger Schreibweise |
name~='Room 2' | Namen, die "Room 2" enthalten |
deviceModelName==strips-guard | Ein Hardwaremodell |
deviceModelName==strips-guard,strips-drip | Eines von zwei Modellen |
!name | Geräte ohne gesetzten Namen |
devEui~=0102 | Einen Teil einer DevEUI, nützlich vom Aufdruck |
Messwerte und Schwellenwerte
| Abfrage | Findet |
|---|---|
temperature>25 | Zu warm |
temperature<15|humidity>70 | Zu kalt oder zu feucht |
temperature>=18;temperature<=24 | Innerhalb eines Komfortbereichs |
temperature<0 | Unter dem Gefrierpunkt |
humidity>70;temperature>22 | Warm und feucht zugleich, das Schimmelrisiko |
co2>800 | Sehr schlechte Luftqualität |
occupied==true | Gerade belegt |
doorOpen==true;temperature<5 | Eine in der Kälte offen gelassene Tür |
Batterie und Zustand
| Abfrage | Findet |
|---|---|
batteryLevel<20 | Braucht demnächst eine Batterie |
batteryLevel<5 | Braucht jetzt eine |
!batteryLevel | Geräte, die überhaupt keinen Batteriestand melden |
Netzqualität
Die Felder hinter der Karte der Netzabdeckung.
| Abfrage | Findet |
|---|---|
rssi<-115 | Ein schwaches Signal |
rssi<-124 | Ein gefährdetes Signal |
snr<0 | Unter dem Rauschpegel, ohne Reserve |
spreadingFactor>=11 | Langsam und teuer für die Batterie, unabhängig vom Signal |
spreadingFactor>=11;rssi>-110 | Nahe am Gateway und trotzdem teuer sendend |
!rssi | Geräte ohne LoRa-Signal, also kein LoRaWAN |
Zeit
| Abfrage | Findet |
|---|---|
reportedAt>2026-09-01 | In diesem Monat gemeldet |
reportedAt<2026-08-01 | Nichts seit Juli - wahrscheinlich tot |
reportedAt>2026-09-01;reportedAt<2026-09-08 | In einer Woche gemeldet |
!reportedAt | Installiert, aber nie gehört |
Metadaten
Ihre eigenen kontextuellen Parameter - deshalb zahlt es sich aus, sie bei der Installation auszufüllen.
| Abfrage | Findet |
|---|---|
contextMap.floor==3 | Alles auf Etage 3 |
contextMap.building=='Building 2' | Ein Gebäude |
contextMap.installer==Olof | Alles, was eine bestimmte Person installiert hat |
contextMap.room~=meeting | Räume mit "meeting" im Namen |
!contextMap.floor | Geräte, bei denen niemand die Etage erfasst hat |
contextMap.floor==1,2,3 | Etage 1, 2 oder 3 |
Kombiniert
| Abfrage | Findet |
|---|---|
contextMap.building=='Building 2';temperature>25 | Zu warm, in einem Gebäude |
deviceModelName==strips-guard;batteryLevel<20 | Ein Modell, das eine Batterie braucht |
contextMap.floor==3;rssi<-115 | Schwache Abdeckung auf einer Etage - die Signatur eines schlecht platzierten Gateways |
temperature;!humidity | Geräte, die Temperatur, aber keine Feuchte melden, meist ein Translator-Problem |
contextMap.building=='Building 2';reportedAt<2026-08-01 | Verstummte Geräte in einem Gebäude |
Wenn eine Abfrage nichts liefert
| Prüfen Sie | Warum |
|---|---|
| Den Feldnamen, Zeichen für Zeichen | Feldnamen 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 braucht | Alles mit einem Leerzeichen braucht sie, ebenso alles, was als Zahl oder Datum gelesen werden könnte |
| Ob Sie Komma oder senkrechten Strich meinten | Ein Komma listet Werte für ein Feld; ein senkrechter Strich verknüpft zwei Bedingungen mit ODER |
| Ob das Feld eine Zeichenkette ist | Eine als Text gespeicherte Zahl antwortet nicht auf > und <. Die Farbe in Data zeigt den Typ |