Dishwasher Options

Begonnen von killah78, 03 Juni 2022, 12:51:08

Vorheriges Thema - Nächstes Thema

killah78

Hi, ich habe einen Geschirrspüler, mit welchem ich das Modul schon einige Zeit nutze.
Leider kann ich nur das Programm selbst wählen, aber keine Option setzen. Es gibt da Optionen wie VarioSpeedPlus, ExtraDry, etc.
Diese werden auch gelesen und angezeigt, aber ich kann sie im Modul nicht setzen.
Kann ich das irgendwie hinzufügen? Muss das im Modul hinzugefügt werden?

Was ich getestet habe:
per API gesendet:
"{
  "data": {
    "key": "Dishcare.Dishwasher.Option.BrillianceDry",
    "value": true
  }
}"
an: https://api.home-connect.com/api/homeappliances/{haid}/programs/selected/options/Dishcare.Dishwasher.Option.BrillianceDry

Das wird auch dann gesetzt.
Kann ich da was machen?

Edit: Was soll passieren bei "requestProgramOptions"? Wenn ich das ausführe, sehe ich mit Verbose 5, dass die Optionen zurückkommen, es wird aber kein Reading upgedatet.

Prof. Dr. Peter Henning

Das ist ganz einfach. Im Modul 48_HomeConnect.pm müssen die zusätzlichen Optionen eingetragen werden, und zwar ab Zeile 39 als

my @HomeConnect_SettablePgmOptions = (
  "BSH.Common.Option.StartInRelative",
  #-- PAH
  "Dishcare.Dishwasher.Option.BrillianceDry",
  "Dishcare.Dishwasher.Option.IntensivZone",
  "Dishcare.Dishwasher.Option.SilenceOnDemand",
  "Dishcare.Dishwasher.Option.VarioSpeedPlus",
  #-- end PAH
  "Cooking.Oven.Option.SetpointTemperature",
  "ConsumerProducts.CoffeeMaker.Option.FillQuantity",
  "ConsumerProducts.CoffeeMaker.Option.BeanAmount",
  "ConsumerProducts.CoffeeMaker.Option.CoffeeTemperature"
);


Dann einfach absetzen "set <device> Dishcare.Dishwasher.Option.SilenceOnDemand true" => schaltet die Option ein, mit "false" wird sie ausgeschaltet.

Ich hoffe, dass der Modulautor mitliest und die Zeilen zwischen "#-- PAH" und "#-- end PAH" in sein Release einbaut.

Da ich inzwischen noch mehr BSH-Geräte habe, werde ich mal sehen, dass ich auch die weiteren Optionen der anderen Geräte sammele.

LG

pah

killah78

#2
Hi,
vielen Dank. Wenn ich die Optionen hinzufüge, kann ich diese setzen, aber das starten funktioniert dann nicht mehr.
Habe auch herausgefunden woran es liegt:
beim startProgram werden auch die Optionen mit übergeben:
{"key":"Dishcare.Dishwasher.Option.BrillianceDry","value":"false"},{"key":"Dishcare.Dishwasher.Option.VarioSpeedPlus","value":"true"},{"key":"Dishcare.Dishwasher.Option.ExtraDry","value":"false"},{"key":"BSH.Common.Option.StartInRelative","value":0,"unit":"seconds"}

true/false darf aber nicht in Anführungszeichen stehen, sonst ist es ein "unexpected value". 0 und 1 funktioniert auch nicht.
true/false ohne Anführungszeichen funktioniert dagegen aber.

Hoffe das wird im Code irgendwann korrigiert.
Danke für die Lösung... :-)

Edit:
Noch was beobachtet: Scheinbar werden 0 und 1 mit true/false "vertauscht". Der korrekte Wert für diese Optionen soll true/false sein. Aus der cloud aber kommt ein 1/0 und wenn das dann wieder zum starten verwendet wird, ist es natürlich ungültig.

Ich habe den Code für mich jetzt so geändert: wenn true/false, dann ohne Anführungszeichen senden, wenn 0/1, aber keine Unit, dann wandeln in true/false. Wenn nachfolgende Unit, dann bleibt es nummerisch.


sieht im Code so aus:
PS: Bin kein programmierer, daher nur sehr quick and dirty...

    my $options="";
    foreach my $key ( @HomeConnect_SettablePgmOptions ) {
      my $optval = ReadingsVal($hash->{NAME},$key,undef);
      if (defined $optval) {
        my @a = split("[ \t][ \t]*", $optval);
        $options .= "," if (length($options)>0);

##start
##        if (looks_like_number($a[0])) {
##          $options .= "{\"key\":\"$key\",\"value\":$a[0]";
##
          if (@a[0] eq "true" || @a[0] eq "false") {
          $options .= "{\"key\":\"$key\",\"value\":$a[0]";

        } elsif (@a[0] eq "0" && @a[1] eq "") {
          $options .= "{\"key\":\"$key\",\"value\":false";
        } elsif (@a[0] eq "1" && @a[1] eq "") {
          $options .= "{\"key\":\"$key\",\"value\":true";

        } elsif (looks_like_number($a[0])) {
          $options .= "{\"key\":\"$key\",\"value\":$a[0]";
##ende

        } else {
          $options .= "{\"key\":\"$key\",\"value\":\"$a[0]\"";
        }
        $options .= ",\"unit\":\"$a[1]\"" if defined $a[1];
        $options .= "}";
      }
    }


Prof. Dr. Peter Henning

Das problem ist hier die Option "SilenceOnDemand". Wenn die beim Start mitgesendet wird, startet die Spülmaschine NICHT.

Offenbar dürfen nicht alle setzbaren Optionen beim Startbefehl mit dabei sein.

LG

pah