Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Info

    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

    I
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 6
    • Best 0
    • Groups 1

    Info

    @Info

    Starter

    0
    Reputation
    14
    Profile views
    6
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Info Follow
    Starter

    Latest posts made by Info

    • RE: REST-API / Swagger UI

      Nun, ich beantworte die Frage mal selbst.
      Der Weg über PATCH ist der Falsche. Wie der Name nicht sagt, ist GET der korrekte oder ggf. auch nur ein funktionierender Weg.

      https://192.168.0.1:8093/v1/state/0_userdata.0.Folder.State?value=Test
      

      Der oben genannte Aufruf führt auf jeden Fall dazu, das der Wert in ioBroker ankommt.

      posted in ioBroker Allgemein
      I
      Info
    • REST-API / Swagger UI

      Hallo Gemeinde,
      ich möchte auf Anraten Teile meiner Kommunikation vom Simple-API-Adapter auf den REST-API-Adapter umziehen.
      Zu diesem Zweck habe ich den REST-API-Adapter in Version 1.04 installiert. Mit dem Swagger UI gibt es ja eine schöne Testumgebung.

      Leider habe ich ein entscheidendes Problem:
      Ich kann keine Werte in den Broker schreiben ... Der Einfachheit halber habe ich alles erlaubt und den Adapter auf als Admin laufen (das wird später eingeschränkt). Der GET-STATE-Aufruf funktioniert. Ich gehe davon aus, das PATCH-STATE das ehemalige SET-STATE ist. Allerdings bekomme ich immer eine - für mich - nichtssagende Fehlermeldung und ein passendes Beispiel finde ich nicht.

      Ich hoffe ich sehe den Wald vor lauter Bäumen nicht und ihr könnt mir kurz helfen. Im Folgenden die Einstellungen in Swagger UI und die Details des States.
      2022-12-29_18h46_30.png
      2022-12-29_18h46_07.png
      2022-12-29_18h45_49.png

      Vielen Dank
      Gruß Info

      posted in ioBroker Allgemein
      I
      Info
    • RE: Alexa Routinen zum Schalten von Geräten

      @dslraser ja es funktioniert wie Du sagst.
      Was ich bei Dir nicht verstehe: Du sagst also z.B. per Alexa Skill das das "Gerät" (virtuelles Gerät im IoT Adapter) Pool eingeschaltet werden soll. Den Switch triggerst Du dann, macht irgendwas (Sprachausgabe, .....) ?

      Ich möchte es gerne so natürlich wie möglich haben. Über smarte Devices zu gehen ist natürlich der einfachste Weg. Aber man kann halt nicht alles abfragen. Geschweige denn komplexe Dinge aus mehreren Status.

      posted in Blockly
      I
      Info
    • RE: Alexa Routinen zum Schalten von Geräten

      Hi, ich möchte mich hier gerne mal dranhängen. Denn quasi genau das möchte ich auch machen. Bin schon eine ganze Weile mit ioBroker am Start und habe auch schon viel umgesetzt. Aber eben Alexa einfach etwas fragen zu können und eine Antwort zu bekommen ....

      Bei mir im Sinne von:
      Alexa, wie ist der Status des Pools

      Ich lese aus dem ALEXA2 History die Anfrage mit. Trigger, Ausgabe und alles ist kein Akt.
      ABER Alexa antwortet erstmal das sie keine Ahnung hat wie der Status des Pools ist oder das sie das Gerät nicht kennt. DAS würde ich gerne unterbinden. Und am liebsten ohne etliche Skills die genau auf den Wortlaut x hören.

      Der Versuch mit einem Skill der auf "Alexa, Status" hört und einfach nur als Antwort gibt: "Sekunde, ich schaue nach" klappt. Fragt man aber nach "Alexa, Status Pool" klappt es schon nicht mehr.

      Vielleicht als Anregung

      on({id: 'alexa2.0.History.summary', change: "ne"}, function (f) { 
          var $$Device = getState('alexa2.0.History.name').val;
          var $$Sammeltext = "";
      
          // Status des Pools
         if((f.state.val).match("status pool")) {
              var $$TPool = myRound(getState('0_userdata.0.MyControllers.Pooltechnik.Values.T1').val,1);
              $$Sammeltext += " Die Wassertemperatur beträgt " + $$TPool + " Grad. "
              if(getState('0_userdata.0.MyControllers.Pooltechnik.Values.K1').val) {
                  var $$PPool = myRound(getState('shelly.0.SHPLG-S#6A5E9C#1.Relay0.Power').val,0);
                  $$Sammeltext += " Die Filteranlage ist in Betrieb, aktueller Energieverbrauch: " + $$PPool + " Watt. ";
              } else {
                  $$Sammeltext += " Die Filteranlage ist aus. ";
              }
              if(getState('0_userdata.0.MyControllers.Pooltechnik.Values.K2').val) {
                  $$Sammeltext += " Die Poolbeleuchtung ist eingeschaltet. ";
              } else {
                  $$Sammeltext += " Die Poolbeleuchtung ist aus. ";
              }
      
              Sub_AlexaTalk($$Device, $$Sammeltext,0,0);
          
          // Status der Katzenkappe
          } else if ((f.state.val).match('status katzenklappe')) {
              if(getState('0_userdata.0.Junctions.Katzenklappe.Switches.offen').val) {
                  Sub_AlexaTalk($$Device, 'Die Katzenklappe ist offen',0,0);
              } else {
                  Sub_AlexaTalk($$Device, 'Die Katzenklappe ist geschlossen',0,0);
              }
          }
      });
      

      myRound ist eine eigene Funktion zum Runden
      Sub_AlexaTalk ist eine Unterfunktion von meiner Log-Funktion, mit der ich Echos geziehl und mit eigenen Parametern (Delay, Lautstärke, Lautstärke nach Tageszeit, ....) ansprechen kann.

      posted in Blockly
      I
      Info
    • RE: Get JSON from exec in Function - Solved!

      Hi @paul53
      danke Dir für das Feedback. Dann kann ich das nicht so bauen wie ich es mir vorgestellt habe.
      Das Substr kürzt mir den eigentlichen Response des curl ein, da hier auch noch der Header mit zurückgegeben wird. Daher schneide ich den Teil bis der ersten { - also dem Begin des JSONs - ab.

      Ich habe es in der Zwischenzeit als Workarround so umgebaut, das ich mit einem 60s Trigger die Kamera auslese und dann mit dem Callback in einen State abspeichere. Wenn ich die Werte brauche, kann ich diese als JSON aus dem State lesen und den gewünschten Parameter extrahieren...

      /* =============================================================================
      >   Ließt alle Parameter einer Kamera aus und gibt sie als JSON zurück
      ==============================================================================*/
      on({id: 'VIS.82.Ticker_60s', change: "ne"}, function (f) {
          console.log("Read UniFi Video Cam's");
          
          // Kamera Flur auslesen
          var fCameraID = myVideoCamFlur;
          var fCommand = "curl -i --url 'https://" + myVideoServer + "/api/2.0/camera/" + fCameraID + "/?apiKey=" + myVideoAPIKey + "' --header 'Content-Type: application/json' --header 'Accept: application/json' --insecure -X GET";
          exec(fCommand, function(err, response, errmsg) {
              if(err) { 
                  console.log("Fehler in der Abfrage: " + errmsg); 
              } else {
                  setState('VIS.82.UniFi-Video.Flur.ParameterSet', response.substr(response.search("{"),response.length-response.search("{")));
              }
          });
      
          // Kamera Garten auslesen
          fCameraID = myVideoCamGarten;
          fCommand = "curl -i --url 'https://" + myVideoServer + "/api/2.0/camera/" + fCameraID + "/?apiKey=" + myVideoAPIKey + "' --header 'Content-Type: application/json' --header 'Accept: application/json' --insecure -X GET";
          exec(fCommand, function(err, response, errmsg) {
              if(err) { 
                  console.log("Fehler in der Abfrage: " + errmsg); 
              } else {
                  setState('VIS.82.UniFi-Video.Garten.ParameterSet', response.substr(response.search("{"),response.length-response.search("{")));
              }
          });
      
      });
      

      Auslesen kann ich dann zum Beispiel ob die Kamera gerade mit Bewegungserkennung aufnimmt mit:

      JSON.parse(getState('VIS.82.UniFi-Video.Flur.ParameterSet').val).data[0].recordingSettings.motionRecordEnabled;
      
      posted in JavaScript
      I
      Info
    • Get JSON from exec in Function - Solved!

      Hallo zusammen,
      ich verzweifle seit einiger Zeit an - wahrscheinlich - einer Kleinigkeit.

      Ich möchte mit JavaScript die Parameter meiner UniFi Kamera auslesen. Das funktioniert soweit auch ....
      Ich habe folgende Funktion geschrieben:

      // grundlegende Parameter wie Server, AppKey und KameraIDs sind in einem Global-Skript ausgelagert.
      
      function myVideoGetCamera(Name) {
          var fReturn;
          var fCameraID;
      
      // KamaraID anhand des Namens ermitteln
          switch(Name) {
              case "Flur": 
                  fCameraID = myVideoCamFlur;
                  break;
              case "Garten":
                  fCameraID = myVideoCamGarten;
                  break;
              default:
                  console.log("Kamera nicht gefunden!");
                  return "err";
          }  
      
      // Abfrage zusammensetzen
          var fCommand = "curl -i --url 'https://" + myVideoServer + "/api/2.0/camera/" + fCameraID + "/?apiKey=" + myVideoAPIKey + "' --header 'Content-Type: application/json' --header 'Accept: application/json' --insecure -X GET";
      
      // Abfrage ausführen
          fReturn = exec(fCommand, function(err, response, errmsg) {
              if(err) { 
                  console.log("Fehler in der Abfrage: " + errmsg); 
                  return "err";
              } 
              var fJSON = JSON.parse(response.substr(response.search("{"),response.length-response.search("{")));
      // PROBLEM --> An dieser Stelle kann ich mit einem Console.log(fJSON.data[0].recordingSettings.motionRecordEnabled) z. B. den Status der Aufnahme bei Bewegungserkennung auslesen. Ich erhalte also ein korrektes JSON. Dieses möchte ich nun zurückgeben an fReturn. Das funktioniert schon nicht!
              return fSJON;
          });  
      // PROBLEM --> Hier würde ich gerne das JSON Objekt aus der Funktion zurückgeben, aber ich bekomme es aus der exec-Routine nicht heraus.
          return fReturn;
      }
      

      Ich hoffe irgendwer kann mir helfen.
      Als Workarround könnte ich neben dem Namen noch den gewünschten Parameter mitgeben. Allerdings müsste das dann alles hinterlegt werden. Als Switch (Parameter) und dann jeden Parameterin einen JSON-Pfad überführen und das dann in einen State wegschreiben und anschließend wieder auslesen. Aber das kann ja nicht die Lösung sein ....

      Vielen Dank für euer Feedback!
      Gruß Info![alt text](![image url](image url))

      posted in JavaScript
      I
      Info
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo