Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] JSON POST für Liquid-Check-Messung

    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

    [gelöst] JSON POST für Liquid-Check-Messung

    This topic has been deleted. Only users with topic management privileges can see it.
    • Q
      qwertz last edited by qwertz

      Hi !

      Als Script-Kiddy komme ich nicht weiter;

      Folgendes soll ich laut der API-Beschreibung tun um bei meiner Zisternenfüllstandsanzeige LiquidCheck eine Messung auszulösen:

      Liquid-Check Messung direkt starten
      Zum Starten der Messung einen Post mit folgendem Json Inhalt im body an die Url des Liquid-Check senden: 
      
      http://liquid-check/command 
      
      {"header":{"namespace":"Device.Control","name":"StartMeasure","messageId":"1","payloadVersion":"1"},"payload":null}
      

      Folgendes Skript funktioniert aber nicht:

      '*/60 * * * *'
      
        var request = require('request');
      
      request.post({
      
          url:     'http://10.11.12.46/command',
      
          form:    {"header":{"namespace":"Device.Control","name":"StartMeasure","messageId":"1","payloadVersion":"1"},"payload":null}
      
      }, function(error, response, body) {
      
          if (error) log(error, 'error');
      
      });
      

      Was ist gemeint mit "im Body senden"

      Besten Dank und Gruß,
      Sebastian

      paul53 3 Replies Last reply Reply Quote 0
      • paul53
        paul53 @qwertz last edited by paul53

        @qwertz sagte: Folgendes Skript funktioniert aber nicht:

        Was gibt dieses im Log aus?

        request('http://10.11.12.46/infos.json', function(error, response, body) {
            if (error) log(error, 'error');
            else log(body);
        });
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @qwertz last edited by paul53

          @qwertz
          Genügt es nicht, jede Stunde abzufragen? Etwa so

          const url = 'http://10.11.12.46/infos.json';
          const path = '0_userdata.0.Zisterne.Messung.';
          const idPegel = path + 'Pegel';
          const idVol = path + 'Volumen';
          
          schedule('7 * * * *', function() {
              request(url, function(error, response, body) {
                  if(error) log(error, 'warn');
                  else if(body) {
                      let werte = JSON.parse(body).payload.measure;
                      setState(idPegel, werte.level, true);
                      setState(idVol, werte.content, true);
                  }
              });
          });
          
          1 Reply Last reply Reply Quote 0
          • Q
            qwertz last edited by qwertz

            Hi !

            Danke für den Tip.

            Es geht aber nicht ums Auslesen der infos.json sondern um das Triggern einer neuen physischen Messung über die Command URL.

            Hintergrund: Das Gerät startet dann eine kleine Pumpe und drückt Luft in den Messschlauch.

            Das Auslesen der bestehenden Werte aus der letzten physischen Messung klappt schon mit einem anderen Skript ( s.anderer alter Beitrag https://forum.iobroker.net/post/579295)

            Besten Gruß,
            Sebastian

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @qwertz last edited by paul53

              @qwertz sagte: Was ist gemeint mit "im Body senden"

              Ersetze mal form: durch body:

              Readme von request:

              • body - entity body for PATCH, POST and PUT requests. Must be a Buffer, String or ReadStream. If json is true, then body must be a JSON-serializable object.
              Q 1 Reply Last reply Reply Quote 0
              • Q
                qwertz @paul53 last edited by

                @paul53
                Habe es so laufen lassen: Dabei crasht der komplette Adapter...

                '*/60 * * * *'
                
                 
                
                  var request = require('request');
                
                 
                
                request.post({
                
                 
                
                    url:     'http://10.11.12.46/command',
                
                 
                
                    body:    {"header":{"namespace":"Device.Control","name":"StartMeasure","messageId":"1","payloadVersion":"1"},"payload":null}
                
                 
                
                }, function(error, response, body) {
                
                 
                
                    if (error) log(error, 'error');
                
                 
                
                });
                
                2021-04-21 19:21:31.765 - error: javascript.0 (29353) script.js.Zisterne_auslesen_Trigger: {}
                2021-04-21 19:21:31.766 - info: javascript.0 (29353) script.js.Zisterne_auslesen_Trigger: registered 0 subscriptions and 0 schedules
                2021-04-21 19:21:31.840 - error: javascript.0 (29353) Request error: Error: Argument error, options.body.
                2021-04-21 19:21:31.851 - error: javascript.0 (29353) An error happened which is most likely from one of your scripts, but the originating script could not be detected.
                2021-04-21 19:21:31.852 - error: javascript.0 (29353) Error: The first argument must be of type string or an instance of Buffer. Received an instance of Object
                2021-04-21 19:21:31.853 - error: javascript.0 (29353) TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer. Received an instance of Object
                at write_ (_http_outgoing.js:653:11)
                at ClientRequest.write (_http_outgoing.js:621:15)
                at Request.write (/opt/iobroker/node_modules/request/request.js:1494:27)
                at end (/opt/iobroker/node_modules/request/request.js:549:18)
                at Immediate._onImmediate (/opt/iobroker/node_modules/request/request.js:578:7)
                at processImmediate (internal/timers.js:456:21)
                2021-04-21 19:21:32.851 - info: javascript.0 (29353) Stop script script.js.Doorbird_Klingel_an_CCU1_aus
                2021-04-21 19:21:32.924 - error: host.iobroker Caught by controller[0]: TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer. Received an instance of Object
                2021-04-21 19:21:32.926 - error: host.iobroker Caught by controller[0]: at write_ (_http_outgoing.js:653:11)
                2021-04-21 19:21:32.926 - error: host.iobroker Caught by controller[0]: at ClientRequest.write (_http_outgoing.js:621:15)
                2021-04-21 19:21:32.927 - error: host.iobroker Caught by controller[0]: at Request.write (/opt/iobroker/node_modules/request/request.js:1494:27)
                2021-04-21 19:21:32.927 - error: host.iobroker Caught by controller[0]: at end (/opt/iobroker/node_modules/request/request.js:549:18)
                2021-04-21 19:21:32.927 - error: host.iobroker Caught by controller[0]: at Immediate._onImmediate (/opt/iobroker/node_modules/request/request.js:578:7)
                2021-04-21 19:21:32.927 - error: host.iobroker Caught by controller[0]: at processImmediate (internal/timers.js:456:21)
                2021-04-21 19:21:32.928 - error: host.iobroker instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
                2021-04-21 19:21:32.928 - info: host.iobroker Restart adapter system.adapter.javascript.0 because enabled
                
                1 Reply Last reply Reply Quote 0
                • Q
                  qwertz last edited by

                  Zur Doku für andere Liquid-Check Nutzer: Habe es jetzt geschafft die Messung am zu starten mit folgendem Skript:

                  on({id: '0_userdata.0.Zisterne_Messung_Trigger', val: true}, script1);
                  
                  function script1() {
                  
                      console.log('Zisterne_Messung_gestartet_durch_Skript');
                  
                      var request = require('request');
                      var myObj = {"header":{"namespace":"Device.Control","name":"StartMeasure","messageId":"1","payloadVersion":"1"},"payload":null}
                  
                            var options = {
                            url: 'http://10.11.12.46/command',
                            method: 'POST',
                            body:JSON.stringify(myObj) 
                  };
                  
                  request(options,function (error, response, body){
                  });
                  
                  
                  }
                    
                  

                  Mit einem Bool-Schalter-Objekt wird ich das Skript getriggert.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    Matthias I @qwertz last edited by

                    @qwertz Hallo zusammen,
                    Ich bin auf der Suche nach einem verlässlichen Füllstandssensor, der nach Möglichkeit an 230V anliegt (und daher außerhalb meines Flachwassertanks zu montierten ist) und zuverlässig Änderungen des Füllstandes (am liebsten in Prozent) an den iobroker übermittelt.
                    Ist das mit dem Liquid Check so möglich?
                    Welche Lösungen verwendet ihr?
                    Um die Gartenbewässerung wirklich smart zu gestalten benötige ich hier einen zuverlässigen Sensor auf den man sich verlassen kann...
                    LG

                    Q 1 Reply Last reply Reply Quote 0
                    • Q
                      qwertz @Matthias I last edited by

                      @matthias-i
                      Hi
                      Bei LiquidCheck geht nur ein dünner Plastikschlauch in den Tank. Pneumatische Messung. Kein Strom !
                      Der Schlauch geht dann in das Messgerät, welches irgendwo in der Nähe von einer Steckdose platziert werden kann. Das Messgerät wird über USB 5V DC versorgt. WLAN-Webserver mit API.
                      Läuft seit ca. einem Jahr zuverlässig.

                      1 Reply Last reply Reply Quote 0
                      • O
                        odysseus last edited by odysseus

                        Hallo erstmal
                        Ich nutze das LiquidCheck Script von qwertz und es klappt auch super! Herzlichen Dank dafür!!!!
                        Jetz kommt aber inzwischen die Warnung von der JS Engine:
                        "request package is deprecated - please use httpGet (or a stable lib like axios) instead!"

                        Daher hier in Ergänzung der entsprechende httpPost Aufruf :

                        on({id: '0_userdata.0.Zisterne_Messung_Trigger', val: true}, script1);
                        
                        function script1() {
                        console.log('Zisterne_Messung_gestartet_durch_Skript');
                         
                         httpPost('http://10.11.12.46/command', {"header":{ "namespace" : "Device.Control" , "name" : "StartMeasure" , "messageId" : "1" , "payloadVersion" : "1" } , "payload" : null }, (error, response) => {
                             if (error) console.error('Unerwarteter Fehler - ' + error);
                         
                        });
                        } 
                        

                        LG

                        O 1 Reply Last reply Reply Quote 0
                        • O
                          odysseus @odysseus last edited by

                          @odysseus said in [gelöst] JSON POST für Liquid-Check-Messung:

                          Hallo erstmal
                          Ich nutze das LiquidCheck Script von qwertz und es klappt auch super! Herzlichen Dank dafür!!!!
                          Jetzt kommt aber inzwischen die Warnung von der JS Engine:
                          "request package is deprecated - please use httpGet (or a stable lib like axios) instead!"

                          Daher hier in Ergänzung der entsprechende httpPost Aufruf :

                          on({id: '0_userdata.0.Zisterne_Messung_Trigger', val: true}, script1);
                          
                          function script1() {
                          console.log('Zisterne_Messung_gestartet_durch_Skript');
                           
                           httpPost('http://10.11.12.46/command', {"header":{ "namespace" : "Device.Control" , "name" : "StartMeasure" , "messageId" : "1" , "payloadVersion" : "1" } , "payload" : null }, (error, response) => {
                               if (error) console.error('Unerwarteter Fehler - ' + error);
                           
                          });
                          } 
                          

                          LG

                          Q 1 Reply Last reply Reply Quote 0
                          • Q
                            qwertz @odysseus last edited by

                            @odysseus Danke dir ! Hatte die Meldung im Log auch schon gesehen, aber bisher verdrängt.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            963
                            Online

                            31.8k
                            Users

                            80.0k
                            Topics

                            1.3m
                            Posts

                            4
                            12
                            1100
                            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