MQTT Array mehrdimensionalen Array

Moin,

ich habe eine Steckdosenleiste von Netio4All, mit vier Steckdosen, die man z.B. über MQTT schalten kann, die Spannung, Strom usw kann man sich auch anzeigen lassen.

Der Kanal zum schalten geht über das Thema „devices/Netio4All/messages/devicebound/“ und das lesen über das Thema „devices/Netio4All/messages/events/“,

Wird es demnächst in IPS, auch die Möglichkeit geben, das man im "MQTT-Device beides angeben kann?

Das Schalten der einzelnen Steckdosen klappt auch einwandfrei.

Nur die Werte aus dem mehrdimensionalen Array ab zuspeichern, in den einzel Variablen, damit habe ich Probleme, jede Steckdose hat eine eindeutige „ID“.

Mann kann sich einmal ein „GlobalMeasure“ Bericht senden lassen:

array(2) {
  ["GlobalMeasure"]=>
  array(7) {
    ["Voltage"]=>
    float(232,8)
    ["Frequency"]=>
    float(50)
    ["TotalCurrent"]=>
    int(747)
    ["OverallPowerFactor"]=>
    float(0,76)
    ["TotalLoad"]=>
    int(133)
    ["TotalEnergy"]=>
    int(5703)
    ["EnergyStart"]=>
    string(25) "2020-05-25T15:30:43+02:00"
  }
  ["Outputs"]=>
  array(4) {
    [0]=>
    array(9) {
      ["ID"]=>
      int(1)
      ["Name"]=>
      string(14) "USB Festplatte"
      ["State"]=>
      int(1)
      ["Action"]=>
      int(6)
      ["Delay"]=>
      int(5000)
      ["Current"]=>
      int(51)
      ["PowerFactor"]=>
      float(0,43)
      ["Load"]=>
      int(5)
      ["Energy"]=>
      int(232)
    }
    [1]=>
    array(9) {
      ["ID"]=>
      int(2)
      ["Name"]=>
      string(15) "Diskstation1618"
      ["State"]=>
      int(1)
      ["Action"]=>
      int(6)
      ["Delay"]=>
      int(5000)
      ["Current"]=>
      int(282)
      ["PowerFactor"]=>
      float(0,9)
      ["Load"]=>
      int(59)
      ["Energy"]=>
      int(2708)
    }
    [2]=>
    array(9) {
      ["ID"]=>
      int(3)
      ["Name"]=>
      string(3) "IPS"
      ["State"]=>
      int(1)
      ["Action"]=>
      int(6)
      ["Delay"]=>
      int(5000)
      ["Current"]=>
      int(124)
      ["PowerFactor"]=>
      float(0,41)
      ["Load"]=>
      int(12)
      ["Energy"]=>
      int(572)
    }
    [3]=>
    array(9) {
      ["ID"]=>
      int(4)
      ["Name"]=>
      string(6) "Server"
      ["State"]=>
      int(1)
      ["Action"]=>
      int(6)
      ["Delay"]=>
      int(5000)
      ["Current"]=>
      int(290)
      ["PowerFactor"]=>
      float(0,84)
      ["Load"]=>
      int(57)
      ["Energy"]=>
      int(2189)
    }
  }

Des weiteren wird jedesmal wenn man eine Steckdose schaltet, der Bericht „Outputs“ geschickt:

array(1) {
  ["Outputs"]=>
  array(1) {
    [0]=>
    array(7) {
      ["ID"]=>
      int(3)
      ["Name"]=>
      string(3) "IPS"
      ["State"]=>
      int(1)
      ["Current"]=>
      int(111)
      ["PowerFactor"]=>
      float(0,43)
      ["Load"]=>
      int(11)
      ["Energy"]=>
      int(573)
    }
  }
}

Und jedesmal, wenn sich ein Wert ändert bekommt man einen Bericht

array(1) {
  ["Outputs"]=>
  array(2) {
    [0]=>
    array(7) {
      ["ID"]=>
      int(2)
      ["Name"]=>
      string(15) "Diskstation1618"
      ["State"]=>
      int(1)
      ["Current"]=>
      int(282)
      ["PowerFactor"]=>
      float(0,9)
      ["Load"]=>
      int(59)
      ["Energy"]=>
      int(2716)
    }
    [1]=>
    array(7) {
      ["ID"]=>
      int(3)
      ["Name"]=>
      string(3) "IPS"
      ["State"]=>
      int(1)
      ["Current"]=>
      int(124)
      ["PowerFactor"]=>
      float(0,38)
      ["Load"]=>
      int(11)
      ["Energy"]=>
      int(574)
    }
  }
}

Und hier dran scheitere ich, denn beim Bericht „GlobalMeasure“ ist jede Steckdose im richtigen Array.

Und hier hole ich z.B. für die Steckdose 3 es so ab:

$Geraet1_3_Strom = ($json["Outputs"][2]["Current"]

Nur das funktioniert nicht mehr, wenn der Bericht „Outputs“ geschickt wird, und der sogar 1, 2 oder sogar 3 Array hat.
Dort ist die Steckdose mal unter Array [0] oder unter [3] zu erreichen.

Ich hoffe ich habe es verständlich geschrieben wo mein Problem ist, und ich würde mich freuen wenn mir jemand mir den richtigen Weg zeigen kann.

Vielen Dank schon im vorraus.

MFG Hein09

Bisher ist dort nichts geplant. Ich würde mir eher mal die Module vom KaiS ansehen und ein dann ein passendes Modul bauen, welches in einer Instanz alle Kanäle abbildet.

paresy

Kannst du mal die genaue Bezeichung oder einen Link zu der Leiste posten?
Würde die mir gerne mal anschauen.
Ev kannst ja direkt ein Modul von KaiS nutzen.

hier der Link zur Leiste:

https://www.netio-products.com/en/device/netio-4all

Ich würde mich freuen über ein Modul, oder aber auch wie man es mit ein Script lösen kann.

Hein09

Hallo,

wenn du ein wenig Geduld hast, dann schaue ich mir das mal an.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Moin,

ja klar habe ich Zeit, bin ja froh wenn mir jemand auf die Sprünge hilft.
Hein09

Moin,

ich brauche nicht unbedingt ein Modul.

Mir würde es schon reichen wenn jemand mir sagen könnte, wie ich das Problem per Script lösen kann.

Und zwar das einmal der Wert im Array 2 ist, aber beim nächsten mal im Array 0 zu finden ist.

Wie kann man dieses Problem lösen?

@KaiS natürlich freue ich mich auch noch auf Deine Rückmeldung.

Hein09