Problem Json decode

Hallo!

Bin neu hier im Forum! Ich bin Programmierer im SPS Bereich und hat bis jetzt mit PHP nicht viel am Hut! Hab zwar IP Symcon schon länger zu Hause aber bin erst jetzt richtig am durchstarten!

Beim renovieren meines Hauses bin ich leider seiner Zeit in die „Somfyfall“ getappt! Hab jetzt das Modul (Tahoma) von Paresy entdeckt! Dieses habe ich auch erfolgreich eingebunden und die Instanzen zu meinen Rollläden erstellt. Jetzt wollte ich den Status der Position per Skript auslesen und scheitere am zerlegen der Struktur, Objektes (ich denke es ist ein JSON String was dazu zurück kommt)?

Anbei die erhaltene Rückmeldung:

object(stdClass)#2 (9) {
[„id“]=>
string(35) „d989dc94-637c5557-a066e719-06fa90be“
[„type“]=>
string(44) „roller_shutter_positionable_stateful_generic“
[„parent_id“]=>
string(35) „9f5fd81d-7743be59-c3134878-ecae2219“
[„categories“]=>
array(2) {
[0]=>
string(8) „actuator“
[1]=>
string(14) „roller_shutter“
}
[„states“]=>
array(1) {
[0]=>
object(stdClass)#3 (3) {
[„name“]=>
string(8) „position“
[„value“]=>
int(0)
[„type“]=>
string(7) „integer“
}
}
[„capabilities“]=>
array(5) {
[0]=>
object(stdClass)#4 (2) {
[„name“]=>
string(8) „position“
[„parameters“]=>
array(1) {
[0]=>
object(stdClass)#5 (2) {
[„name“]=>
string(8) „position“
[„type“]=>
string(7) „integer“
}
}
}
[1]=>
object(stdClass)#6 (2) {
[„name“]=>
string(5) „close“
[„parameters“]=>
array(0) {
}
}
[2]=>
object(stdClass)#7 (2) {
[„name“]=>
string(8) „identify“
[„parameters“]=>
array(0) {
}
}
[3]=>
object(stdClass)#8 (2) {
[„name“]=>
string(4) „open“
[„parameters“]=>
array(0) {
}
}
[4]=>
object(stdClass)#9 (2) {
[„name“]=>
string(4) „stop“
[„parameters“]=>
array(0) {
}
}
}
[„site_id“]=>
string(35) „0c416a06-b2b09cc4-d115a31c-dbddb4b3“
[„name“]=>
string(2) „AR“
[„available“]=>
bool(true)
}

Ich habe es mit json_decode versucht, klappt aber nicht wirklich!

$json = TAHOMA_RequestStatus(27104);
$json = json_encode($json);
SetValueInteger(54566,$json->states[0]->value);

Vielleicht kann mir wer helfen!

Danke im vorhinein!

So genau kann ich dir leider auch nicht helfen. Aber versuchs mal mit „json_decode()“.

$json = TAHOMA_RequestStatus(27104);
$json = json_decode($json);
SetValueInteger(54566,$json->states[0]->value);

PS setze die Codes in die entsprechenden Tags. Sieht dann besser aus und ist besser zu lesen.

Hallo!

Danke erstmals die Antwort! Habe das mal versucht, kommt aber leider folgender Fehler!

Trying to get property 'states' of non-object in C:\IP-Symcon\scripts\44323.ips.php on line 14

Welche Ausgabe hast du uns gezeigt?
Die von TAHOMA_RequestStatus oder von json_decode?
Kommt da vielleicht direkt das Objekt bei TAHOMA_RequestStatus raus?


$json = TAHOMA_RequestStatus(27104);

SetValueInteger(54566,$json->states[0]->value);

Michael

Hallo die vom TAHOMA_Request ist das! Lg tom

Da hast du ja die Lösung :smiley:
Michael

Hallo Michel!

Sorry das ich erst jetzt schreibe! Meine Kinder sind leider Krank, hab es am Wochenende nicht ausprobieren können! Ich weiß
nicht ob ich die falsch verstanden habe, aber so hat es leider nicht funktioniert!

$json = TAHOMA_RequestStatus(27104);

SetValueInteger(54566,$json->states[0]->value);  

Hier kommt die selbe Warnung wie unten gezeigt!

Wenn ich es wie folgt mache, kommt keine Warnung aber der Wert im Integer bleibt immer 0! Obwohl ich
in der Rückmeldung sehe das er zB 33 ist.

SetValueInteger(54566,$json->['states'][0]['value']);  

Sicher das 33 drin steht, oben im Dump ist value 0.

Unten das Ergebnis des gerade ausgeführten Skripts!

Anbei die Rückmeldung des Request:

object(stdClass)#2 (9) {
  ["id"]=>
  string(35) "67d3c529-d5878f30-791bb69e-de3340a4"
  ["type"]=>
  string(44) "roller_shutter_positionable_stateful_generic"
  ["parent_id"]=>
  string(35) "9f5fd81d-7743be59-c3134878-ecae2219"
  ["categories"]=>
  array(2) {
    [0]=>
    string(8) "actuator"
    [1]=>
    string(14) "roller_shutter"
  }
  ["states"]=>
  array(1) {
    [0]=>
    object(stdClass)#3 (3) {
      ["name"]=>
      string(8) "position"
      ["value"]=>
      int(32)
      ["type"]=>
      string(7) "integer"
    }
  }
  ["capabilities"]=>
  array(5) {
    [0]=>
    object(stdClass)#4 (2) {
      ["name"]=>
      string(8) "position"
      ["parameters"]=>
      array(1) {
        [0]=>
        object(stdClass)#5 (2) {
          ["name"]=>
          string(8) "position"
          ["type"]=>
          string(7) "integer"
        }
      }
    }
    [1]=>
    object(stdClass)#6 (2) {
      ["name"]=>
      string(5) "close"
      ["parameters"]=>
      array(0) {
      }
    }
    [2]=>
    object(stdClass)#7 (2) {
      ["name"]=>
      string(8) "identify"
      ["parameters"]=>
      array(0) {
      }
    }
    [3]=>
    object(stdClass)#8 (2) {
      ["name"]=>
      string(4) "open"
      ["parameters"]=>
      array(0) {
      }
    }
    [4]=>
    object(stdClass)#9 (2) {
      ["name"]=>
      string(4) "stop"
      ["parameters"]=>
      array(0) {
      }
    }
  }
  ["site_id"]=>
  string(35) "0c416a06-b2b09cc4-d115a31c-dbddb4b3"
  ["name"]=>
  string(2) "WC"
  ["available"]=>
  bool(true)
}

Hier steh für die Position 32 drin! Aber meine Integer bleibt auf 0!

Anbei nochmals mein verwendeter Code:

$json = TAHOMA_RequestStatus(29558);
SetValueInteger(54566,$json['states'][0]['value']);

Komisch finde ich auch das bei var_dump immer das Ergebnis „null“ erhalte!

var_dump($json);

Und wo zum Henker kommt die Ausgabe immer her, welche du uns zeigst?
Wenn TAHOMA_RequestStatus(29558) immer null zurück gibt, dann ist da auch nix enthalten was du in eine Variable schreiben kannst.
Michael

Ich tue mich da etwas schwer das Dump zu lesen, aber ist der value nicht in COLOR geschachtelt? Sieht irgendwie komisch aus :confused:

PS: Kommt das COLOR vom Editor hier im Forum :banghead:

Sorry da ist bei mir was in die Hose gegangen anbei nochmals das Ergebnis!

object(stdClass)#2 (9) {
  ["id"]=>
  string(35) "67d3c529-d5878f30-791bb69e-de3340a4"
  ["type"]=>
  string(44) "roller_shutter_positionable_stateful_generic"
  ["parent_id"]=>
  string(35) "9f5fd81d-7743be59-c3134878-ecae2219"
  ["categories"]=>
  array(2) {
    [0]=>
    string(8) "actuator"
    [1]=>
    string(14) "roller_shutter"
  }
  ["states"]=>
  array(1) {
    [0]=>
    object(stdClass)#3 (3) {
      ["name"]=>
      string(8) "position"
      ["value"]=>
      int(32)
      ["type"]=>
      string(7) "integer"
    }
  }
  ["capabilities"]=>
  array(5) {
    [0]=>
    object(stdClass)#4 (2) {
      ["name"]=>
      string(8) "position"
      ["parameters"]=>
      array(1) {
        [0]=>
        object(stdClass)#5 (2) {
          ["name"]=>
          string(8) "position"
          ["type"]=>
          string(7) "integer"
        }
      }
    }
    [1]=>
    object(stdClass)#6 (2) {
      ["name"]=>
      string(5) "close"
      ["parameters"]=>
      array(0) {
      }
    }
    [2]=>
    object(stdClass)#7 (2) {
      ["name"]=>
      string(8) "identify"
      ["parameters"]=>
      array(0) {
      }
    }
    [3]=>
    object(stdClass)#8 (2) {
      ["name"]=>
      string(4) "open"
      ["parameters"]=>
      array(0) {
      }
    }
    [4]=>
    object(stdClass)#9 (2) {
      ["name"]=>
      string(4) "stop"
      ["parameters"]=>
      array(0) {
      }
    }
  }
  ["site_id"]=>
  string(35) "0c416a06-b2b09cc4-d115a31c-dbddb4b3"
  ["name"]=>
  string(2) "WC"
  ["available"]=>
  bool(true)
}

Okay, dann bitte Michaels Frage bitte beantworten :slight_smile:

Ich habe den Status von TAHOMA_RequestStatus gezeigt!

Wie stelle ich fest ob es direkt ein Objekt ist! Wie gesagt bin leider ziemlich unerfahren in PHP!

lg tom

Noch einmal:
Wo kopierst du diese Antwort raus?
Doch nicht etwas aus dem Debug der Instanz, oder???

Michael

Anbei ein Bild wo ich diesen Text rauskopiere! Im unteren Bereich bei Ausgabe (Text)! Danke nochmals für eure
Hilfe! Hoffe ich hab es nicht falsch kopiert und eure zeit geraubt!

Da musst du dich an Paresy wenden.
Das ist so nicht korrekt.
Die Ausgabe kommt ja direkt aus dem Modul und wird nicht als Rückgabewert in $json geschrieben.
Michael

Danke nochmals für die Hilfe! Hab es jetzt verstanden! Nach dem ich festgestellt habe das man auf Github sich die Module ansehen kann ist es mir jetzt klar! Der RequestStatus ist eine Funktion ohne Rückgabewert und das was ich kopiert habe kam aus der Funktion durch var_dump!

Dank ohne euch würde ich immer noch probieren!

Die Funktion war eher zum Testen gedacht und das Modul ist auch noch nicht vollständig. Leider ist die Tahoma API auch eher rudimentär.

paresy