Ich habe den gleichen Waschtrocker, da kommen bei tatsächlicher Benutzung noch mehr Programme. Ich sammle die so ein (getriggert auf den Programm-String):
<?php
$prog_txt_ID = 12648; // Text vom HomeConnect-Modul
$prog_int_ID = 14201; // Ziel: Integer-Variable
$map_var_ID = 51436; // String-Variable für JSON-Map anlegen
$prog_txt = trim(GetValue($prog_txt_ID));
if ($prog_txt === '-' || $prog_txt === '') {
SetValueInteger($prog_int_ID, -1); // kein aktives Programm
return;
}
$key = substr($prog_txt, strrpos($prog_txt, '.') + 1);
// Initiale Standard-Map
$defaultMap = [
'Cotton' => 0,
'CottonEco' => 1,
'EasyCare' => 2,
'Mix' => 3,
'DelicatesSilk' => 4,
'Wool' => 5,
'Rinse' => 6,
'SpinDrain' => 7,
'Super15' => 8,
'Super30' => 9,
'ShirtsBlouses' => 10,
'Sportswear' => 11,
'SportFitness' => 11,
'Hygiene' => 12,
'NightWash' => 13,
'AutoDry' => 14,
'WashAndDry' => 15,
'Refresh' => 16,
'IronAssist' => 17
];
// Gespeicherte Map laden
$mapJson = GetValueString($map_var_ID);
$map = json_decode($mapJson, true);
if (!is_array($map) || empty($map)) {
$map = $defaultMap;
SetValueString($map_var_ID, json_encode($map, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
}
// Falls unbekannt: nächste freie Nummer vergeben
if (!array_key_exists($key, $map)) {
$nextValue = empty($map) ? 0 : (max($map) + 1);
$map[$key] = $nextValue;
SetValueString($map_var_ID, json_encode($map, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
IPS_LogMessage('HomeConnect', 'Neues Programm erkannt: ' . $key . ' => ' . $nextValue);
}
SetValueInteger($prog_int_ID, (int) $map[$key]);
Die Liste sieht bei mir aktuell so aus:
`{"Cotton":0,"CottonEco":1,"EasyCare":2,"Mix":3,"DelicatesSilk":4,"Wool":5,"Rinse":6,"SpinDrain":7,"Super15":8,"Super30":9,"ShirtsBlouses":10,"Sportswear":11,"SportFitness":11,"Hygiene":12,"NightWash":13,"AutoDry":14,"WashAndDry":15,"Refresh":16,"IronAssist":17,"Eco4060":19,"HHMix":20,"WD45":21,"Spin":22,"PlushToy":23,"HHSynthetics":24,"Auto30":25}`