Daten als JSON ausgeben

Hallo Zusammen,

ich weiß nicht ob es sinnvoll ist dazu noch nen Thread aufzumachen, ich vermute aber es geht sonst unter.
Das Thema betrifft ansich den Worx-Landroid S700i, aber das Problem kann losgelöst davon betrachtet werden.

Ich benötige eine JSON-Datei als Ausgabe aus IP-Symcon. (Erklärung weiter unten)

Das Format sieht ungefähr so aus:

{
  "cfg":{
    "lg":"it",
    "tm":"12:37:25",
    "dt":"18/06/2018",
    "sc":{"m":1,"p":10,"d":[
      ["09:00",690,1],
      ["09:00",630,1],
      ["09:00",630,1],
      ["09:00",630,1],
      ["09:00",630,1],
      ["09:00",630,1],
      ["09:00",690,1]]},
    "cmd":0,
    "mz":[0,0,0,0],
    "mzv":[0,0,0,0,0,0,0,0,0,0],
    "rd":90,
    "sn":"2018301878010003411D"},
  "dat":{
    "mac":"F0FE6B835F7A",
    "fw":3.45,
    "bt":{"t":30.2,"v":19.44,"p":80,"nr":94,"c":0},
    "dmp":[-1.7,12.3,301.6],
    "st":{"b":2154,"d":38618,"wt":2350},
    "ls":7,
    "le":0,
    "lz":0,
    "rsi":-71,
    "lk":0}
}

Allerdings muss, soweit ich es verstanden habe, nur der Teil von „CFG–>CMD“ (1, 2, 3) und „CFG–>RD“ (30, 60. 90, 120, 150, 180) ausgegeben werden.

Jetzt könnte man ja irgendwie mit (für mich) einigem Aufwand die Anordnung nachstellen, es müsste dann das als Datei (CmdOut.json) rauskommen:

{
  "cfg":{
    "cmd":0,
    "rd":90,}
   }

Allerdings frage ich mich, kann man nicht irgendwie mit einer Funktion von IP-Symcon oder PHP eine schicke JSON basteln? Ich habe nur Informationen zur JSON-API gefunden, aber es scheint das behandelt nur die Verbindung von IPS zu IPS. Für eine Dateiausgabe o.Ä. scheint die Funktion nicht gedacht zu sein.

Hier gehts ungefähr los im Roboter-Forum:
Entwicklungsprojekt: Landroid-S Windows App - Seite 49

Hier ist der Thread zum Landroid:
Worx Landroid CSV wie Werte in einzelne Variablen schreiben - Seite 2

Gruß;
Maeffjus

Das macht PHP mit einem Befehl:
PHP: json_encode - Manual
Michael

Hallo Maeffjus,

was hast du den vor?
Willst du Werte zum Worx senden?

Ja genau, geht jetzt über eine Datei im Ordner, CmdIn.json.
Ich habe auch soweit was fertig, ausser das schreiben der Datei. Ich weiß nämlich nicht ob das Programm die Datei wieder leert oder wie das die Sache handhabt (also nur bei Änderung etc.)

<?
$command = GetValueInteger(29053 /*[Komponenten\Landroid\Landroid-Command\Betriebsmodus Landroid]*/);
$cmd = array('cmd' => $command);
$cfg = array('cfg'=> $cmd);
echo json_encode($cfg);
?>

Meinst du das geht so einfach, nur durch ändern der Datei den Mäher zu steuern.
Meiner Meinung nach muss man das auf den Server von Worx ändern mit Curl usw.

Guck mal unter dem ersten Link in meinem ersten Post, das sollte die Frage beantworten.

@Nall-Chan:
Ich habe mir was gestrickt bekommen und der Dump des Arrays ist schick, aber die Dateiausgabe ist ziemlicher Murks…
Kannst Du helfen? Ich habe diverse Varianten von fwrite usw. probiert und bekomme einfach nichts gutes raus.

Dump:

{"cfg":{"cmd":2}}

Das steht dann in der json:

Array
(
    [cfg] => Array
        (
            [cmd] => 2
        )

)

Und hier wäre mein Skript:

$command = GetValueInteger(29053 /*[Komponenten\Landroid\Landroid-Command\Betriebsmodus Landroid]*/);
$cmd = array("cmd" => $command);
$cfg = array('cfg'=> $cmd);



$Pfad = "C://IP-symcon/Landroid_Win_v15/test.json";
  $Attribut = "ab";
   $open = fopen($Pfad,$Attribut);          //Öffnen
   fwrite($open, print_r($cfg, TRUE));
   fclose($open);                           //schließen  

Okay, ich habe nicht ganz aufgepasst…
Der Fehler war im fwrite mit print_r.
So wäre es korrekt:

fwrite($open, json_encode($cfg));