NEWS
PAJ GPS mit Node-Red abfragen
-
@negalein nun dann hat die Schnittstelle kein Datum bzw. nicht das erwartete Objekt zurückgegeben. insofern finde ich den Fehler wichtig, da er Dir zeigt, dass aktuell was anderes zurückgegeben wurde. Du könntest das höchstens abfangen und eine eigene Fehlermeldung ins Log schreiben, aber wenn das nur sporadisch passiert, dann ist das doch gut, dass du durch den Fehler aufmerksam wirst, dass ein Abruf nicht funktioniert hat. warum kann ich nicht sagen, vielleicht war auch einfach keine Verbindung zu der API möglich, wegen eines Netzwerkfehlers.
Wie gesagt, kannst du auch verhindern, indem du so einen fehlerhaften Abruf abfängst (kannst einfach mit einer switch node filtern, dass nur Nachrichten durchkommen, wenn payload.sucess.0.dateunix eine Zahl ist) und selbst eine Fehlermeldung ausgibst oder du den Fehler einfach abfängst und gar nichts ausgibst. Dann bekommst unter Umständen aber nicht mit, wenn der Abruf dauerhaft fehlschlägt.
Wenn du deine internetverbindung kappst, wirst du den Fehler im Log auch reproduzieren können.
Was willst du also tun?
-
@mickym sagte in PAJ GPS mit Node-Red abfragen:
(kannst einfach mit einer switch node filtern, dass nur Nachrichten durchkommen, wenn payload.sucess.0.dateunix eine Zahl ist)
Ich weiß jetzt woher der Error kommt.
Habe noch einen zusätzlichen httpRequest eingebaut (Speed Warning).
Da gibt es 0 (ungelesen) und 1 (gelesen).
Habe 0 verwendet, da mich nur aktuelle intressieren.Der NR frägt alle 10 Minuten ab. Und wenn da kein Speed Alert ist, kommt die Meldung.
Wie mach ich das mit dem Switch-Node?
-
@negalein Na Du lässt halt nur Nachrichten durch, bei der die gewünschte Eigenschaft den Datentyp number also Zahl hat.
-
mach ich das hier?
-
@negalein Nein ein switch Node, die die Nachrichten ausfiltert - also nur Nachrichten durchlässt, die das Kriterium durchlässt. Damit bekommst den Fehler weg. Im Prinzip baust Du den Filter direkt hinter den HTTP Request
-
-
@negalein Na ich denke die Nachrichteneigenschaft die geprüft werden soll ist doch
payload.success.0.dateunix
und das prüfst Du nun, ob dieses Eigenschaft einen Wert vom Typ Zahl bzw. Number hat.
Also gib
- oben in dem Switch ein, welche Nachrichteneigenschaft geprüft werden soll
- Mach eine Typ Prüfung
- auf Zahl, also Number
-
@mickym sagte in PAJ GPS mit Node-Red abfragen:
und das prüfst Du nun, ob dieses Eigenschaft einen Wert vom Typ Zahl bzw. Number hat.
so dann richtig?
-
Ok, da kommt noch immer
"Invalid JSONata expression: The left side of the "*" operator must evaluate to a number"
-
@negalein Na ist dass denn plötzlich success[5] und nicht mehr 0 - wie seht denn das Objekt aus.
Und Du willst doch prüfen, ob der Datentyp eine Zahl ist - also nicht ==, sondern "ist vom Typ " und dann vom Typ "number"
-
@mickym Also wenn Du das hast - am Besten kannst Du natürlich einmal das Objekt posten (in CodeTags), wenn ein Objekt da ist oder wenn nicht. Aber wie gesagt, Du musst ein Typprüfung auf number machen.
-
@mickym sagte in PAJ GPS mit Node-Red abfragen:
Na ist dass denn plötzlich success[5] und nicht mehr 0 - wie seht denn das Objekt aus.
Ja, beim 2. httpRequest ist es
payload.success[5].dateunix
.
Ah, hab ich übersehn, dass da mehr steht.
so schauts aus, wenn ich zB alle Speed Alerts nehme.
{"success":[{"id":180803681,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1722186881,"lat":48.4801559,"lng":13.4893332,"isread":1,"imei":null,"speed":56,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":180794125,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1722184536,"lat":48.4709358,"lng":13.532383,"isread":1,"imei":null,"speed":52,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":180269448,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1722017700,"lat":48.4809265,"lng":13.4890671,"isread":1,"imei":null,"speed":59,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":180125881,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1721993656,"lat":48.4613876,"lng":13.5360165,"isread":1,"imei":null,"speed":57,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":179922086,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1721931765,"lat":48.4804878,"lng":13.4893332,"isread":1,"imei":null,"speed":50,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":179802432,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1721911520,"lat":48.4616165,"lng":13.5359335,"isread":1,"imei":null,"speed":57,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":178551595,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1721572992,"lat":48.4611015,"lng":13.5360832,"isread":1,"imei":null,"speed":54,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":178351078,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1721496826,"lat":48.5024605,"lng":13.4803667,"isread":1,"imei":null,"speed":50,"speederlaubt":50,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":176065086,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1720886205,"lat":48.4818077,"lng":13.4579163,"isread":1,"imei":null,"speed":94,"speederlaubt":80,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":176048342,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1720882922,"lat":48.5098839,"lng":13.4779167,"isread":1,"imei":null,"speed":96,"speederlaubt":80,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":171856575,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1719768062,"lat":48.5028152,"lng":13.4802332,"isread":1,"imei":null,"speed":87,"speederlaubt":80,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null},{"id":171853651,"iddevice":1334450,"name":null,"icon":"icon-info","bezeichnung":"Geschwindigkeitsalarm","meldung":null,"meldungtyp":5,"dateunix":1719767310,"lat":48.5003777,"lng":13.5935497,"isread":1,"imei":null,"speed":87,"speederlaubt":80,"radiusin":0,"radiusout":0,"zuendon":0,"zuendoff":0,"email":null,"push":0,"suppressed":0,"deleted_at":null}],"number_of_records":12}
-
@negalein sagte in PAJ GPS mit Node-Red abfragen:
Ok das ist ein Array mit 12 Geschwindigkeitsalarmen
{ "success": [ { "id": 180803681, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1722186881, "lat": 48.4801559, "lng": 13.4893332, "isread": 1, "imei": null, "speed": 56, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 180794125, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1722184536, "lat": 48.4709358, "lng": 13.532383, "isread": 1, "imei": null, "speed": 52, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 180269448, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1722017700, "lat": 48.4809265, "lng": 13.4890671, "isread": 1, "imei": null, "speed": 59, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 180125881, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1721993656, "lat": 48.4613876, "lng": 13.5360165, "isread": 1, "imei": null, "speed": 57, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 179922086, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1721931765, "lat": 48.4804878, "lng": 13.4893332, "isread": 1, "imei": null, "speed": 50, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 179802432, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1721911520, "lat": 48.4616165, "lng": 13.5359335, "isread": 1, "imei": null, "speed": 57, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 178551595, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1721572992, "lat": 48.4611015, "lng": 13.5360832, "isread": 1, "imei": null, "speed": 54, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 178351078, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1721496826, "lat": 48.5024605, "lng": 13.4803667, "isread": 1, "imei": null, "speed": 50, "speederlaubt": 50, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 176065086, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1720886205, "lat": 48.4818077, "lng": 13.4579163, "isread": 1, "imei": null, "speed": 94, "speederlaubt": 80, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 176048342, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1720882922, "lat": 48.5098839, "lng": 13.4779167, "isread": 1, "imei": null, "speed": 96, "speederlaubt": 80, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 171856575, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1719768062, "lat": 48.5028152, "lng": 13.4802332, "isread": 1, "imei": null, "speed": 87, "speederlaubt": 80, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null }, { "id": 171853651, "iddevice": 1334450, "name": null, "icon": "icon-info", "bezeichnung": "Geschwindigkeitsalarm", "meldung": null, "meldungtyp": 5, "dateunix": 1719767310, "lat": 48.5003777, "lng": 13.5935497, "isread": 1, "imei": null, "speed": 87, "speederlaubt": 80, "radiusin": 0, "radiusout": 0, "zuendon": 0, "zuendoff": 0, "email": null, "push": 0, "suppressed": 0, "deleted_at": null } ], "number_of_records": 12 }
So Du kannst jetzt alle 12 Alarme - willst Du die nicht einzeln auswerten oder willst Du nicht alle Alarme haben?
Das ist also nicht 5 - sondern das sind 12 Einträge in einer Liste - wie Du siehst.
Das in 5 datgenpunkte zu pressen ist natürlich nicht möglich. Also es sind ja eigentlich 12 * 5 Punkte, wenn Du nur diese Daten haben willst.
Jetzt müsstest Du noch ein Objekt posten, wenn keine Alarme da sind, ist dann das Array einfach leer?
-
@mickym sagte in PAJ GPS mit Node-Red abfragen:
So Du kannst jetzt alle 12 Alarme - willst Du die nicht einzeln auswerten oder willst Du nicht alle Alarme haben?
Genau, das sind die
gelesenen/bestätigten
Alarme.Das ist der Request
https://connect.paj-gps.de/api/v1/notifications/1334450?alertType=5&isRead=1
Mit
https://connect.paj-gps.de/api/v1/notifications/1334450?alertType=5&isRead=0
bekomm ich dieungelesenen
.
Die möchte ich. Aber da kommt dann der Error, da die Dateunix nur bei Alarm übermittelt wird.Das ist also nicht 5 - sondern das sind 12 Einträge in einer Liste - wie Du siehst.
Das in 5 datgenpunkte zu pressen ist natürlich nicht möglich. Also es sind ja eigentlich 12 * 5 Punkte, wenn Du nur diese Daten haben willst.Jetzt müsstest Du noch ein Objekt posten, wenn keine Alarme da sind, ist dann das Array einfach leer?
Genau, da kommt nur
-
Für diese Zwecke empfehle ich Dir einfach meine Node zu nehmen, die alle Daten in einzelne Datenpunkte zerlegt.
-
@negalein Ja aber auch bei den ungelesenen - kann ja mehr als 1 Alarm kommen.
Nein das was Du gepostet hast - ist was aus der Node dateunix kommt. Mach ein Debug Node direkt hinter die http-request node, wenn keine ungelesenen Alarme kommen.
Ausserdem musst Du das Array mit mehreren Alarmen in einzelne Nachrichten zerlegen, das machst Du mit einer Split Node.
Ich zeig Dir das mal mit einem Flow anhand der Daten die Du gepostet hast.
-
@mickym sagte in PAJ GPS mit Node-Red abfragen:
kann ja mehr als 1 Alarm kommen.
stimmt leider
Mach ein Debug Node direkt hinter die http-request node, wenn keine ungelesenen Alarme kommen.
{"success":[],"number_of_records":0}
Ich wollte damit eigentlich bewirken, wenn ein Alert kommt, ich in VIS eine Benachrichtigung aufploppen lasse.
-
@negalein sagte in PAJ GPS mit Node-Red abfragen:
{"success":[],"number_of_records":0}
Na das ist doch SUPER. Dann kannst Du doch einen Filter davor setzen, dass die Nachrichten nur durch kommen, wenn die Anzahl records größer 0 ist.
Also machst Du direkt hinter die HTTP-request Node eine switch Node, in der Du prüfst ob die number_of_records >0 ist. Ich gehe mal davon aus, dass Du eine payload gepostet hast.
So ich simuliere mal die Ausgabe aus der HTTP Request Node:
Oben einmal mit mehren Records.
Unten wenn keine Alarme vorhanden sind.
Als erstes werden wir also filtern, dass wir nur Records brauchen, wenn die number of records >0 sind.
-
@mickym sagte in PAJ GPS mit Node-Red abfragen:
Also machst Du direkt hinter die HTTP-request Node eine switch Node, in der Du prüfst ob die number_of_records >0 ist. Ich gehe mal davon aus, dass Du eine payload gepostet hast.
so?
-
@negalein sagte in PAJ GPS mit Node-Red abfragen:
@mickym sagte in PAJ GPS mit Node-Red abfragen:
Also machst Du direkt hinter die HTTP-request Node eine switch Node, in der Du prüfst ob die number_of_records >0 ist. Ich gehe mal davon aus, dass Du eine payload gepostet hast.
so?
Ja aber die Node machen wir natürlich komplett hinter die request Nodes - weil wir GAR KEINE Nachrichten brauchen, wenn keine Records vorhanden sind.
Also trenn mal alle Kabel vor deinen Nodes auf. Ausserdem bekommst du ja eine Liste. Wenn du nur den letzten Record haben willst, dann musst du das success Array in einzelne Elemente aufspalten.
Dazu setzen wir die payload direkt auf das success Array.
So sieht das vorher aus
und nun legen wir das Success Array direkt auf die payload, dann siehst das so aus.So und wenn Dir das egal ist wieviele ungelesene Du hast, werden wir nun einfach alle durchlaufen - letztlich wird dann nur der letzte Record angezeigt.
Damit hast du nun alles in Einzelobjekten
Da kannst Du dann Deine ChangeNodes wieder dran machen - achte aber auf die PFade - da Du jetzt kein Array mehr hast.
Hier für Dich zum Import: