Ankündigung

Einklappen
Keine Ankündigung bisher.

Json URL Abfrage Fehler abfangen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Json URL Abfrage Fehler abfangen

    Hallo,

    ich nutze den LBS 19000974 der bei eine URL Abfrage durchführt und dann eine Antwort als JSON zurückgibt. Es kommt immer mal wieder vor das wohl anscheinend keine Antwort der Abfrage kommt. Ich bekommen dann folgende Fehlermeldung: Zeile: 27 | file_get_contents(http://10.10.30.1/json?cmd=status): failed to open stream: No route to host
    Ich denke man könnte dies Abfangen indem man vorher die URl überprüft ob die URL gültig ist oder nicht. Nur weiß ich nicht wie.
    Die besagten Codezeilen wären diese hier:
    Code:
    switch($vergleich){
    
    case "status":
    $json=utf8_encode((file_get_contents($url.'/json?cmd=status')));
    
    $json=json_decode($json,true);
    
    setLogicLinkAusgang($id,1,$json["successful"]);
    setLogicLinkAusgang($id,2,$json["name"]);
    setLogicLinkAusgang($id,3,$json["status"]["status"]);
    if ($json["status"]["stopped"]==true) {
    setLogicLinkAusgang($id,4,1);
    } else {
    setLogicLinkAusgang($id,4,0);
    }
    setLogicLinkAusgang($id,5,$json["status"]["duration"]);
    setLogicLinkAusgang($id,6,$json["status"]["mode"]);
    setLogicLinkAusgang($id,7,$json["status"]["battery"]);
    setLogicLinkAusgang($id,8,$json["status"]["hours"]);
    setLogicLinkAusgang($id,9,$json["timer"]["status"]);
    setLogicLinkAusgang($id,10,$json["wlan"]["signal"]);
    if (count($json)==6) {
    //Error ist dabei
    setLogicLinkAusgang($id,11,$json["error"]["error_code"]);
    setLogicLinkAusgang($id,12,$json["error"]["error_message"]);
    setLogicLinkAusgang($id,13,$json["error"]["time"]);
    setLogicLinkAusgang($id,14,$json["error"]["unix"]);
    }
    else {
    setLogicLinkAusgang($id,11,0);
    setLogicLinkAusgang($id,12,' ');
    setLogicLinkAusgang($id,13,' ');
    setLogicLinkAusgang($id,14,' ');
    }
    
    break;
    Was müsste ich also ändern damit die Abfrage vorher geprüft wird?

    Grüße
    Jascha

    #2
    Das wirst du so nicht abfangen können, denn die URL ist ja korrekt.
    Wenn du vorher die URL zum Testen aufrufst, entsteht entweder dann der Fehler oder aber nicht und trotzdem geht die nächste produktive Abfrage schief.
    Ich würde den Errorhandler überschreiben und den Fehler in das Custom Logfile schreiben, wenn es dir nur darum geht, dass kein Eintrag im Errorlog erscheint.
    Man kann dann noch nach dem json_decode abfragen, ob das json-decoding erfolgreich war, d.h. ob korrektes JSON empfangen wurde und z.B. wenn es 10 mal in Folge nicht erfolgreich war, dann ein Flag (neuer Ausgang) setzen, um diese Situation in der Logik weiter verarbeiten zu können.

    Kommentar


      #3
      Zitat von jonofe Beitrag anzeigen
      Man kann dann noch nach dem json_decode abfragen, ob das json-decoding erfolgreich war, d.h. ob korrektes JSON empfangen wurde und z.B. wenn es 10 mal in Folge nicht erfolgreich war, dann ein Flag (neuer Ausgang) setzen, um diese Situation in der Logik weiter verarbeiten zu können.
      Danke für deine Rückmeldung. Hmm daran hatte ich nicht gedacht das ja die nachfolgende Abfrage auch wieder Fehlerhaft sein könnte.
      Wie müsste es den umgebaut werden ob ein korrektes JSON empfangen wurde bzw. wenn falsch noch einmal versuchen ansonsten abbrechen und auf nächsten Trigger warten? `Hab von PHP leider kaum Ahnung.

      Grüße

      Kommentar


        #4
        Da bin ich raus, denn der LBS ist nicht von mir. Am besten mal mit dem Autor Kontakt aufnehmen.

        Kommentar

        Lädt...
        X