Hallo,
ich benötige nochmals Eure Hilfe für einen Perl-Anfänger in FHEM.
Ich habe schon eine Zeit lang gegoogelt jedoch immer der gleiche Fehler.
Ich möchte gerne ein Feld vorgelegen und dann darauf indiziert zugreifen:
Derzeit sieht mein Code so aus:
my @myConfigHeizung =
(\
[1, "DG.Bad",ReadingsNum("UZSU_Hzg_AbsentCtrl","AbsentTemp_DG.Bad",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_DG.Bad","Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_DG.Bad",16.0)],
[2, "DG.Sz", ReadingsNum("UZSU_Hzg_AbsentCtrl", "AbsentTemp_DG.Sz",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_DG.Sz", "Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_DG.Sz", 16.0)],
[3, "EG.Ez", ReadingsNum("UZSU_Hzg_AbsentCtrl", "AbsentTemp_EG.Ez",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_EG.Ez", "Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_EG.Ez", 16.0)],
[4, "EG.Ku", ReadingsNum("UZSU_Hzg_AbsentCtrl", "AbsentTemp_EG.Ku",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_EG.Ku", "Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_EG.Ku", 16.0)],
[5, "EG.WC", ReadingsNum("UZSU_Hzg_AbsentCtrl", "AbsentTemp_EG.WC",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_EG.WC", "Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_EG.WC", 16.0)],
[6, "EG.Wz", ReadingsNum("UZSU_Hzg_AbsentCtrl", "AbsentTemp_EG.Wz",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_EG.Wz", "Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_EG.Wz", 16.0)],
[7, "OG.AzA",ReadingsNum("UZSU_Hzg_AbsentCtrl","AbsentTemp_OG.AzA",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_EG.AzA","Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_EG.AzA",16.0)],
[8, "OG.AzS",ReadingsNum("UZSU_Hzg_AbsentCtrl","AbsentTemp_OG.AzS",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_OG.AzS","Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_OG.AzS",16.0)],
[9, "OG.Bad",ReadingsNum("UZSU_Hzg_AbsentCtrl","AbsentTemp_OG.Bad",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_OG.Bad","Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_OG.Bad",16.0)],
[10,"OG.KiA",ReadingsNum("UZSU_Hzg_AbsentCtrl","AbsentTemp_OG.KiA",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_OG.KiA","Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_OG.KiA",16.0)],
[11,"OG.KiM",ReadingsNum("UZSU_Hzg_AbsentCtrl","AbsentTemp_OG.KiM",16.0), ReadingsVal("UZSU_Hzg_AbsentCtrl", "AbsentName_OG.KiM","Aus"), ReadingsNum("myTadoAPIUtils", "DesiredTemp_OG.KiM",16.0)]
);
foreach my $row (0..11)
{
#Log 1, ($myConfigHeizung[$row][1]." ".$myConfigHeizung[$row][2]." ".$myConfigHeizung[$row][3]." ".$myConfigHeizung[$row][4]);
#absent Control switched on or off
#@{ $array1[3] }[0];
if ($myConfigHeizung[0][3] ne "Aus")
<.........>
}
meine Frage ist:
Wie greife ich auf das vorgelegte Feld zu:
Bei der if Abfrage kommt ständig der Fehler:
2019.12.02 22:00:13 1: ERROR evaluating {heatingPresenceControl()}: Not an ARRAY reference at ./FHEM/99_myUtils.pm line 2116.
Ich habe schon mehrer Zugriffsarten probiert (siehe Kommentare) jedoch ist die Fehlermeldung immer die gleiche.
Kann mir hier jemand helfen?
Danke Andreas
Nimm den Backslash weg
Hallo das wars. Das haette ich aufgrund der Fehlermeldung niemals gedacht.
Danke
Durch den Backslash war $myConfigHeizung[0] selbst kein Array
$myConfigHeizung[1], $myConfigHeizung[2], $myConfigHeizung[3] dagegen schon, und $myConfigHeizung[3][1] hätte z.B funktioniert