Postman request send uplink


  • Dag,

    ik zou graag een Postman request willen hebben, gelijk aan de Send downlink, maar dan een uplink. Ik wil een (gesimuleerd) bericht kunnen sturen naar mijn North Application. Ik wil controleren of ik in Node Red alles goed heb staan.

    Wie kan me daarmee helpen?



  • @pieterhoenderken Hoi Pieter, als het goed is kun je hiervoor de register application API call gebruiken (in postman). Die stuurt namelijk vanaf het CDP een leeg datapakket naar je north application, voor jou dus node-RED. Als Node-RED correct geconfigureerd is zal deze een 200 (OK) response sturen naar het CDP. Een correcte connectie tussen de north application en het CDP is hiermee bevestigd.



  • Ja, dat klopt, ik zie een leeg bericht! Dank je wel.



  • @pieterhoenderken Top! Het is overigens ook mogelijk om vanaf Node-RED downlink berichten te sturen naar een device



  • Hieronder een curl voorbeeld. Ik zal later ook nog een nieuwe postman collectie delen als dat makkelijk is!

    
    0)	Register application
    
    curl -X POST \
      https://nodered.nbiot.io/main \
      -H 'Content-Type: application/text \
    
    Hier moet 200 OK op geretourneerd worden empty body
    
    
    
    1)	Registration event van een device
    
    curl -X POST \
      https://nodered.nbiot.io/main \
      -H 'Content-Type: application/json' \
      -d '{
        "reports": [],
        "registrations": [
            {
                "deviceType": "device",
                "serialNumber": "{{deviceId}}",
                "timestamp": 1524585235900,
                "make": "Generic",
                "model": "Sensor",
                "groupName": "",
                "imsi": "N/A",
                "protocol": "N/A",
                "tags": "N/A",
                "subscriptionId": "55146185-c5df-47b8-bbc5-ca66f5ecdb3c",
                "deviceProps": {
                    "device/0/endPointClientName": "deviceId",
                    "device/0/model": "Sensor",
                    "downlinkMsg/0/data": "",
                    "uplinkMsg/0/data": "aabbccdd",
                    "device/0/manufacturer": "Generic"
                }
            }
        ],
        "deregistrations": [],
        "updates": [],
        "expirations": [],
        "responses": []
    }'
    
    2)	Report event
    
    curl -X POST \
      https://nodered.nbiot.io/main \
      -H 'Content-Type: application/json' \
      -d '{
        "reports": [
            {
                "serialNumber": "IMEI:00000000000",
                "timestamp": 1524582877912,
                "subscriptionId": "55146185-c5df-47b8-bbc5-ca66f5ecdb3c",
                "resourcePath": "uplinkMsg/0/data",
                "value": "aabbccdd"
            }
        ],
        "registrations": [],
        "deregistrations": [],
        "updates": [],
        "expirations": [],
        "responses": []
    }'
    


  • @stefan-de-lange Hoe zend ik een downlink bericht vanaf Node-Red?



  • This post is deleted!


  • @pieterhoenderken said in Postman request send uplink:

    @stefan-de-lange Hoe zend ik een downlink bericht vanaf Node-Red?

    Verbind een ‘inject’ node met een ‘http request’ node en kopiëer de instellingen van de downlink postman API call 🙂



  • @stefan-de-lange dat heb ik inmiddels gedaan en ik krijg netjes het volgende terug:
    object
    requestId: "bb95d88c-58dd-4688-8387-f92b18c07010"
    msg: "Accepted"
    code: 1002
    Maar ik heb niet het idee dat het bericht ook bij mijn device aankomt, aangezien ik een confirmatiebericht terugstuur en het device maar blijft zenden ipv in slaapmodus te gaan.
    Dus de status “accepted” is volgens mij dat de CPD server de request accepteerd, maar niet de bevestiging dat het bericht daadwerkelijk via een downlink bij mijn device is aangekomen.

    Hoe kan ik dit controleren?

    Het device stuurt een telemetry packet met de volgende samenstelling:
    0x09 (telemetry packet identifier) 0x39 (number of parameters) 0x00 (parameter number) 0x04 (parameter length) 0x100e0000 (data) 0x01 (parameter number) 0x04 (parameter length) etc…
    Het antwoord van mijn Node Red server aan het device moet dan zijn 0x09 (telemetry packet confirmation) 0x0000000000 (byte stuffing) 0xF246 (CRC)



  • @pieterhoenderken

    Maar ik heb niet het idee dat het bericht ook bij mijn device aankomt, aangezien ik een confirmatiebericht terugstuur en het device maar blijft zenden ipv in slaapmodus te gaan.

    Dit begrijp ik niet. Wat bedoel je met het device ‘blijft maar zenden’?

    Dus de status “accepted” is volgens mij dat de CPD server de request accepteerd, maar niet de bevestiging dat het bericht daadwerkelijk via een downlink bij mijn device is aangekomen.

    Als het goed is betekent ‘accepted’ dat het downlink bericht ook is verstuurd naar je device. Voor mij kwam na het ‘accepted’ bericht het downlink message altijd aan op het device.

    Hoe kan ik dit controleren?

    Als je accepted ontvangt in je node-red moet je het bericht ook ontvangen op je device, een andere controle is er niet dat ik zo weet…

    Het device stuurt een telemetry packet met de volgende samenstelling:
    0x09 (telemetry packet identifier) 0x39 (number of parameters) 0x00 (parameter number) 0x04 (parameter length) 0x100e0000 (data) 0x01 (parameter number) 0x04 (parameter length) etc…
    Het antwoord van mijn Node Red server aan het device moet dan zijn 0x09 (telemetry packet confirmation) 0x0000000000 (byte stuffing) 0xF246 (CRC)

    Dit zegt mij niks. Zo ver ik weet antwoord node-red niet aan het device, alleen het t-mobile CDP communiceert met het device. Hier hoef je verder niks voor te doen op node-red…



  • @stefan-de-lange Dag,

    ik ben weer een stapje verder. Ik krijg naast een “accepted” ook een response packet terug:
    {“reports”:[],“registrations”:[],“deregistrations”:[],“updates”:[],“expirations”:[],“responses”:[{“serialNumber”:“IMEI:863703033657045”,“timestamp”:1537799413096,“requestId”:“30cbbd1d-aeec-4ac0-90b6-e8831495b926”,“creationDate”:null,“make”:null,“model”:null,“firmwareVersion”:null,“groupName”:null,“imsi”:null,“address”:null,“freeFormAddress”:null,“protocol”:“HTTP”,“resources”:[{“resourcePath”:“downlinkMsg/0/data”,“value”:null}],“result”:{“code”:9,“subCode”:null,“reason”:“Precondition failed”}}]}

    Maar wat opvalt is dat de “value”:null leeg is en result “code”:9, “reason”:“Precondition failed” geeft. Wat is de Precondition van een downlink message?



  • @pieterhoenderken Geen idee. Heb dit nog nooit gezien. Misschien weet @ericbarten het



  • @stefan-de-lange @ericbarten het is een HTTP 412 (https://tools.ietf.org/html/rfc7252).

    Het kan aan de header liggen die ik in mijn request zet. Dit zijn mijn instellingen:
    msg.headers = {
    “Content-Type”: “application/json”,
    “Authorization”: “Basic xx”,
    “Cache-Control”: “no-cache”
    };

    msg.payload = {
    resourceValue: Buffer.from(msg.payload, ‘hex’)
    };

    Dit wordt meegezonden met de PUT HTTP request:
    https://iot.netwerk.t-mobile.nl/m2m/endpoints/IMEI:863703033657045/downlinkMsg/0/data
    inclusief mijn credentials.

    Mis ik nog wat? Ik krijg dus zoals gezegd een accepted en een paar seconden later een response packet met de eerdergenoemde “Precondition Failed”.



  • @pieterhoenderken deze heb ik net beantwoord op je nieuwe thread de xx van de authorization header moet nog aangepast worden naar jouw credentials



  • @ericbarten Die xx van de authorizatiion header is natuurlijk aangepast. Dat is het dus niet.

    Zouden jullie mijn IMEI nr willen verwijderen uit de database, zodat ik een clean register kan doen? IMEI:863703033657045



  • @pieterhoenderken

    Sorry! We hadden wel je device verwijderd, maar dat vergat ik hier te melden!


 

Looks like your connection to Internet of Things was lost, please wait while we try to reconnect.