Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Datenpunktwert per JSON als HTTP Post versenden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Datenpunktwert per JSON als HTTP Post versenden

    This topic has been deleted. Only users with topic management privileges can see it.
    • Dominic Haußmann
      Dominic Haußmann last edited by

      Hallo zusammen,
      ich würde gerne bei Änderung eines Wertes von einem Datenpunkt diese Änderung gerne an ein externes System per JSON versenden.

      Per CURL wäre das einfach, ich würde es aber gerne automatisieren per JSON und JSSkript.

      curl $YOUR_HUMIO_URL/api/v1/ingest/humio-structured
      -X POST
      -H "Content-Type: application/json"
      -H "Authorization: Bearer $INGEST_TOKEN"
      -d '[{"tags": {"host":"iobroler"}, "events" : [{"timestamp": "2021-06-06T12:00:00+02:00", "attributes": {"key1":"value1"}}]}]'

      Leider bin ich in JavaScript nicht wirklich sattelfest und hoffe das mir hier jemand helfen kann, oder mir ein paar Tips geben könnte.

      Wäre klasse wenn ich ein Feedback bekommen würde.

      Besten Dank vorab.

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @Dominic Haußmann last edited by mickym

        So das dürfte funktionieren - allerdings musst Du die Variable $YOUR_HUMINO_URL noch durch eine richtige URL ersetzen:

        const request = require('axios');
        
        var url=$YOUR_HUMIO_URL/api/v1/ingest/humio-structured;
        var data = '[{"tags": {"host":"iobroler"}, "events" : [{"timestamp": "2021-06-06T12:00:00+02:00", "attributes": {"key1":"value1"}}]}]';
        var config = { headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer $INGEST_TOKEN"
                        }
        }
        request.post(url,data,config);
        

        Wenn ich als URL meinen Node-RED Test Server verwende, wird Dein JSON String in jedem Fall richtig interpretiert:

        405a8047-d8c1-407c-98a7-6f6f2b6c190e-image.png

        auch die Header scheinen richtig durchgereicht zu werden:

        d55c879f-8050-48eb-85e2-f625cc613360-image.png

        Dominic Haußmann 1 Reply Last reply Reply Quote 0
        • Dominic Haußmann
          Dominic Haußmann last edited by

          Hi,
          werde es direkt mal testen. Danke schonmal vorab.

          1 Reply Last reply Reply Quote 0
          • Dominic Haußmann
            Dominic Haußmann @mickym last edited by

            @mickym Eine Frage noch: Das Ziel ist es ja wenn sich ein Datenpunkt ändert drei Werte per JSON an die Url zu versenden: Timestamp, Datenpunktname, Wert. Den Datenpunkt setzt ich wahrscheinlich über eine Variable. Wie würde ich den Timestamp setzen ?

            Danke nochmal vorab für die Hilfe.

            mickym 2 Replies Last reply Reply Quote 0
            • mickym
              mickym Most Active @Dominic Haußmann last edited by mickym

              siehe nächsten Post - da ist die optimierte Version drin.

              1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @Dominic Haußmann last edited by mickym

                @dominic-haußmann

                Wenn Du halt mehrere Datenpuntkte überwachen willst musst halt quasi ein regex nehmen oder einzelne Datenpunkte und die events als globales Array definieren. Hier mal das Bespiel mit 2 Datenpunkten.

                const request = require('axios');
                
                var events = [];
                
                // Überwachen des Datenpunktes oder Wildcards
                // on({id: /0_userdata.0.*/, change: 'any'}, function (obj) { 
                on({id: '0_userdata.0.doorStatus', change: 'any'}, sendObj);
                on({id: '0_userdata.0.target', change: 'any'}, sendObj);
                
                
                // Versenden des JSON Strings
                function sendObj(obj){
                    
                var state = getState(obj.id)
                var date = new Date(state.ts); 
                var event = {"timestamp": date};
                
                event[obj.id] =state.val;
                events.push(event);
                
                var data = JSON.stringify([{"tags": {"host":"iobroker"}, "events" : events}]);
                
                var url='$YOUR_HUMIO_URL/api/v1/ingest/humio-structured';
                //var data = '[{"tags": {"host":"iobroler"}, "events" : [{"timestamp": "2021-06-06T12:00:00+02:00", "attributes": {"key1":"value1"}}]}]';
                
                var config = { headers: {
                    "Content-Type": "application/json",
                    "Authorization": "Bearer $INGEST_TOKEN"
                                }
                }
                request.post(url,data,config);
                }
                
                
                

                Das Ergebnis ist dann halt ein immer weiter wachsendes Array mit jeder Aktualisierung als Event:

                {"tags":{"host":"iobroker"},"events":[{"timestamp":"2022-01-22T16:20:46.811Z","0_userdata.0.target":5},{"timestamp":"2022-01-22T16:20:52.947Z","0_userdata.0.doorStatus":"40 %"},{"timestamp":"2022-01-22T16:22:44.935Z","0_userdata.0.doorStatus":"12.5 %"}]}
                

                a4e60f86-69d2-492c-b9a0-8730f0cddcc3-image.png

                EDIT: Die ID des Selectors über eine Variable zu setzen geht natürlich auch. Du musst halt bedenken, dass Du jedes Mal einen neuen Selector generierst. Also müsstest Du mit unsubscribe den erst wieder löschen Mit Wildcards habe ich es auch getestet, aber da ist mein Array im Nu sehr lang. ;). Aber ich bin kein JS Fachmann, arbeite lieber mit NR - aber für weitere Fragen ist Dir @paul53 sicher behilflich.

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                634
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                2
                6
                212
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo