Autor Thema: Ergonomische Version von 48_HomeConnect.pm  (Gelesen 4811 mal)

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Ergonomische Version von 48_HomeConnect.pm
« am: 11 September 2022, 09:28:52 »
Ich habe mich über die vollkommen unergonomischen Set-Befehle geärgert.

Anbei eine - vollkommen inoffizielle und nicht autorisierte - Version von 48_HomeConnect.pm, in welcher diese Befehle (zumindest in fast allen Fällen der mir zur Verfügung stehenden BSH-Geräte) solche kryptischen Kommandos wie

set <device> BSH.Common.Setting.ChildLock true

ersetzt durch

set <device> childLock on

Es fehlen noch ein paar Dinge, wie etwa das komfortable Setzen von Alarm- oder Verzögerungszeiten und die Auswahl eines Programms, das kommt noch.

Bitte mal testen und Wünsche  für Erweiterungen der Kommandos (z.B. auch für Kaffeemaschinen) hier posten.

LG

pah

Edit: Ich habe die Version noch einmal aktualisiert - jetzt können sowohl die Optionen gesetzt werden, die nur während des Programmlaufs möglich sind, als auch diejenigen, die nur vor dem Programmstart wählbar sind.
« Letzte Änderung: 28 September 2022, 17:18:13 von Prof. Dr. Peter Henning »
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline Det20

  • Sr. Member
  • ****
  • Beiträge: 934
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #1 am: 11 September 2022, 09:35:13 »
Top!

Offline Stonemuc

  • Full Member
  • ***
  • Beiträge: 499
    • Baublog WeberHaus Citylife 500
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #2 am: 15 September 2022, 00:38:02 »
Ich muss mal kurz was zu diesem ganzen unergonomischen Zeug über die BSH Api sagen....es nervt mich total.
Kann man da was bei der Waschmaschine vereinfachen?

Den Geschirrspüler kann ich z.B. mit:
set SX758X06TE startProgramstarten - der läuft dann auch in jeglicher vorher eingestellter Variation der Programme und Zusatzoptionen an.

Bei der Waschmaschine sieht das ganz anders aus, denn mit:
set WAYH2841 startProgramkommt nur die Fehlermeldung, dass ich ein Program auswählen muss...
Also gebe ich dann:
set WAYH2841 startProgram Mixein und die Maschine läuft an. Aber nur wenn auch Mix eingestellt ist am "Handrad" der Maschine.

Wenn ich da etwas automatisieren möchte per DOIF, ist das ein riesen Mist, da man dann die Programmbezeichnung splitten muss und das Programm dann erst starten kann - wenn er es zuvor denn auch richtig abgerufen hat was eingestellt ist, denn die readings aktualisieren sich auch nicht immer.

Gut wäre wenn man die Waschmaschine so wie den Geschirrspüler starten könnte...
« Letzte Änderung: 15 September 2022, 00:41:38 von Stonemuc »
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #3 am: 15 September 2022, 13:05:55 »
Das ist auch bei meiner Waschmaschine das Ziel....

Ich denke, dass dieses dauernde Abfragen der Optionen, das immer wieder alle Auswahlmöglichkeiten durcheinander wirft, als nächstes herausgeworfen wird.

Das muss einmal geholt und dann dauerhaft als Attribut gespeichert werden.

LG

pah
« Letzte Änderung: 15 September 2022, 13:08:48 von Prof. Dr. Peter Henning »

Offline Stonemuc

  • Full Member
  • ***
  • Beiträge: 499
    • Baublog WeberHaus Citylife 500
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #4 am: 16 September 2022, 12:05:20 »
Danke, dass du dich darum kümmerst. Ich werde deine Version mal testen.
Ich bin leider programmiertechnisch eine richtige Niete...hab ich schon damals gemerkt, als ich mal das Vordiplom in Elektrotechnik gemacht habe....
Nen fertigen Code kann ich teilweise umschreiben mit Mühe und viel Zeit, aber was neues implementieren geht nicht.

Ich löse das bei der Waschmaschine aktuell mit dem Splitten des Programms...

Was mir noch einfällt - die Waschmaschine zeigt immer eine Sekunde Restlaufzeit an - warum auch immer. Kann man das noch irgendwie beheben? Oder ist das ein Fehler bei BSH in der API?
« Letzte Änderung: 16 September 2022, 12:24:59 von Stonemuc »
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #5 am: 28 September 2022, 17:27:01 »
So, ich bin mal wieder etwas weiter. Programmauswahl und das Einstellen von Optionen etc. funktioniert bei der Spülmaschine schon ganz gut. Auch kann ich mit
set <Spülmaschine> selectProgram Quick45
set <Spülmaschine> delayType endtime
set <Spülmaschine> delayTime 06:00
set <Spülmaschine> startProgram
erreichen, dass die Spülmaschine mitten in der Nacht losläuft und um Punkt 06:00 in der Frühe fertig ist (andere Werte für delayType sind "relative" und "absolute". Da kann man raten, was die machen).

Beim Ofen funktioniert das Setzen des Alarms auf diese Weise schon ganz gut, auch progDuration geht zu setzen. Programmauswahl und Temperatur aber nicht :-((

Leider scheitern diese etwas komfortableren Befehle für den Ofen an "Insufficient scope" - also fehlenden Rechten von FHEM. Die 2017 mitgeteilten Ausreden von BSH, dass dieses vom Gesetzgeber nicht zugelassen sei, sind Unsinn - schließlich kann ich über die BSH  App den Ofen aus der Ferne starten.

Ich werde mich also als Nächstes der Waschmaschine widmen.

LG

pah

P.S.: Anbei die aktuelle Bastelversion des Moduls, sowie ein Icon für den verzögerten Start der Spülmaschine

EDIT: Ups, die zuerst angehängte Version hatte einen peinlichen Fehler drin, ist jetzt behoben.

« Letzte Änderung: 11 Oktober 2022, 12:21:10 von Prof. Dr. Peter Henning »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Det20

  • Sr. Member
  • ****
  • Beiträge: 934
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #6 am: 28 September 2022, 18:29:09 »
Wie geil, gerade die Endzeit ist echt sinnvoll.
Danke dir!

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #7 am: 29 September 2022, 12:37:09 »
Ein wenig kryptiscch ist das immer noch, weil mir noch die zündende Idee fehlt, das mit den relativ begrenzten Mitteln der normalen Widgets zu realisieren.

Derzeit ist der Ablauf so:

- Zuerst delayType wählen (relative, absolute oder endtime) bzw. alarmType (relative oder absolute).
- Dann delayTime bzw. alarmTime eingeben. Nur Ziffern => Anzahl der Sekunden

 -- bei delayTime hh:mm => Stunden und Minuten, sagen wir 6:00
        Wenn delayType = relative => Starte in 6 Stunden
        Wenn delayType = absolute => Starte um 6:00 in der Frühe
        Wenn delayType = endtime => Starte so, dass das gewählte Programm um 6:00 in der Frühe zu Ende ist

-- denn bei alarmTime hh:mm:ss => optional Stunden, Minuten und Sekunden, sagen wir 04:30
        Wenn alarmType = relative => Alarm in 4 Minuten 30 Sekunden
        Wenn alarmType = absolute => Alarm um 4 Minuten und 30 Sekunden nach Mitternacht - nicht um 4:30 in der Frühe, dazu müsste man 04:30:00 eingeben

LG

pah

   

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #8 am: 29 September 2022, 17:15:19 »
Die oben angehängte Version hatte noch einen neu eingebauten Fehler, den habe ich jetzt behoben.

LG

pah

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #9 am: 11 Oktober 2022, 12:20:16 »
So, ich habe da jetzt noch etwas Arbeit hineingesteckt. Insbesondere hat sich im Betrieb herausgestellt, dass die Angabe "delaytype" und "delayTime" eben nicht sehr komfortabel ist. Stattdessen kann man jetzt eines der drei Kommandos "delayRelative", "delayStartTime", "delayEndTime" oder eines des beiden Kommandos "alarmRelative", "alarmEndTime" verwenden, um den verzögerten Start des Programms oder den Ablauf des Kurzzeitweckers _in_ einer relativen Zeitspanne oder _um_ eine bestimmte Zeit einzustellen.

Dazu gibt es jetzt eine schöns Sprachsteuerung. Meine Chefin muss also nur noch sagen:

"Lass die Spülmaschine bis um 6 Uhr laufen" - und bekommt einen verzögerten Start, der morgen früh um 6:00 abläuft.

LG

pah

P.S.: Waschmaschine ist als nächstes dran. Frage in die Runde: Hat irgendjemand einen Workaround gefunden, einen Backofen doch zu steuern?

Offline Supadone

  • Full Member
  • ***
  • Beiträge: 101
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #10 am: 11 Oktober 2022, 13:49:22 »
Danke erstmal für deine Mühen :)
Falls es dir etwas hilft kann ich dir leider nur weitere Infos zu Kaffeemaschine und Dunstabzug anbieten.

Grüße

Andy

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #11 am: 13 Oktober 2022, 11:17:56 »
Die würde ich tatsächlich auch gerne "richtig" steuern mit diesem Modul.

Sehn wir mal. Aktuell bin ich durch eine fette Omikron-Infektion ziemlich geerdet.

LG

pah

Offline Det20

  • Sr. Member
  • ****
  • Beiträge: 934
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #12 am: 07 November 2022, 11:12:00 »
Hallo,

leider läuft diese neue Version noch nicht rund. Sobald ich meinen Geschirrspüler mit "set ... startProgram" anschalten will (Fernstart ist aktiv), stürzt FHEM ab. Als Meldung sehe ich im Log nur

2022.11.07 11:09:43 1: [HomeConnect] SN578S06TD: starting program Eco50
Can't use an undefined value as a HASH reference at ./FHEM/48_HomeConnect.pm line 614.

... Obwohl Debug auf 2, Verbose auf 5 ist. Soweit ich mich erinnere, lief das aber schonmal. Glaube ich zumindest.
« Letzte Änderung: 07 November 2022, 11:13:58 von Det20 »

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #13 am: 08 November 2022, 14:09:46 »
Öh, das tut mir leid - aber in meiner aktuell ganz gut laufenden Version ist in Zeile 614 ein Kommentar...

LG

pah

Offline Det20

  • Sr. Member
  • ****
  • Beiträge: 934
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #14 am: 08 November 2022, 19:16:02 »
Ok, versuche mal die von dir angehängte

Offline Det20

  • Sr. Member
  • ****
  • Beiträge: 934
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #15 am: 09 November 2022, 10:28:56 »
Hat leider nicht funktioniert, habe aber den Fehler gefunden. Folgende Readings habe ich:

BSH.Common.Setting.PowerState - BSH.Common.EnumType.PowerState.Off
BSH.Common.Status.DoorState - BSH.Common.EnumType.DoorState.Closed
BSH.Common.Status.OperationState - BSH.Common.EnumType.OperationState.Ready

Das Modul ist der Meinung, dass "PowerState" off ist (obwohl er an und Ready ist). Nachdem ich die Zeilen 575/576 sowie 714/715 auskommentiert habe, bin ich mit "startProgram" schonmal weitergekommen, allerdings musste ich noch ein Program wählen (obwohl "selectProgram" korrekt gefüllt war). Nachdem ich das mit "set ... selectProgram" gewählt habe, konnte ich den Geschirrspüler mit "startProgram" korrekt starten und es wird auch vom Modul erkannt, dass er läuft.

Wieso das Gerät als "Off" erkannt wird, konnte ich leider nicht prüfen, war dann froh, dass er an ist (bin im Büro).
« Letzte Änderung: 09 November 2022, 10:34:12 von Det20 »

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #16 am: 09 November 2022, 11:24:01 »
OK, schau ich mir mit Priorität an.

LG

pah

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #17 am: 11 November 2022, 15:50:15 »
Der Knackpunkt bei selectProgram ist, dass das Gerät das eingestellte Programm beim Abschalten vergisst - aber das Modul (noch nicht).

Einen Grund für den Crash habe ich nicht gefunden.

LG

pah

Edit: Kann es sein, dass das Modul bei Dir nicht in regelmäßigen Abständen beim Gerät anfragt? Attribut updateTimer hat welchen Wert?
« Letzte Änderung: 11 November 2022, 16:04:36 von Prof. Dr. Peter Henning »

Offline Det20

  • Sr. Member
  • ****
  • Beiträge: 934
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #18 am: 12 November 2022, 16:09:48 »
Danke. Aber wieso wird das Gerät als 'Power off' erkannt, obwohl es ready ist und sich auch (nach aus kommentieren) starten lässt?

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #19 am: 12 November 2022, 16:59:23 »
Das überprüfe ich gerade ...

LG

pah

Offline Tomhri

  • New Member
  • *
  • Beiträge: 4
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #20 am: 05 Januar 2023, 22:04:31 »
Hallo,

zur info, hatte für die Waschmaschie in  48_HomeConnect.pm

my @HomeConnect_SettablePgmOptions = (
  "BSH.Common.Option.FinishInRelative", hinzugefügt. Erste Tests waren erfolgversprechend.

Beim Geschirspüler frage ich ab ob BSH.Common.Status.RemoteControlActive gesetzt ist dan mit BSH.Common.Option.StartInRelative 60 seconds starte ich ihn (wenn genug Strom vorhanden ist).

LG
Thomas

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8618
Antw:Ergonomische Version von 48_HomeConnect.pm
« Antwort #21 am: Gestern um 05:44:47 »
So, eine Sache läuft jetzt stabil und mit sehr hohem WAF: Spülmaschine mit einem Tastendruck oder einem Sprachbefehl komplex programmieren.

Erste Komponente: Die oben gepostete "inoffizielle" Version des 48_HomeConnect.pm.

Zweite Komponente: Ein Dummy "Geschirrspuelen" mit Attributen
   defaultProgram Eco50
   readingList active
   setList    EndTime:time StartTime:time RelativeTime:time Program
   userattr   defaultProgram

Dritte Komponente: Ein DOIF mit der Definition
([SNxxx:".*BSH.Common.EnumType.OperationState.Finished.*"])
({speak("TText yyy",":130:")},
 {speak("Tab1.EG",":130:")},
 setreading SNxxx msgAll derzeit nicht)
DOELSEIF
([Geschirrspuelen:".*Time.*"] and [SNxxx] ne "Ready")
 (set SNxxx powerOn,
  {Log 1,"=======> Powering on SNxxx"},
  setreading Geschirrspuelen event $EVENT,
  setreading Geschirrspuelen active wait)
DOELSEIF
( ([Geschirrspuelen:event] =~ /RelativeTime.*/ and [SNxxx:".*Ready.*"]) or ([Geschirrspuelen:".*RelativeTime.*"] and [SNxxx] eq "Ready") )
 (set SNxxx selectProgram Eco50,
  {Log 1,"=======> Selecting Eco50 on SNxxx"})
 (set SNxxx requestProgramOptions,
  {Log 1,"=======> Requesting options from SNxxx"})
 (set SNxxx delayRelative {(my @evt = split(/ /,ReadingsVal("Geschirrspuelen","event",""));;Log 1,"=======> Setting SNxxxto relative delay $evt[1]";;return $evt[1])} )
 (setreading Geschirrspuelen active start)
DOELSEIF
(([Geschirrspuelen:event] =~ /EndTime.*/ and [Sxxx:".*Ready.*"]) or ([Geschirrspuelen:".*EndTime.*"] and [SNxxx] eq "Ready"))
 (set SNxxx selectProgram Eco50,
  {Log 1,"=======> Selecting Eco50 on SNxxx"})
 (set SNxxx requestProgramOptions,
  {Log 1,"=======> Requesting options from SNxxx"})
 (set SNxxx delayEndTime {(my @evt = split(/ /,ReadingsVal("Geschirrspuelen","event",""));;Log 1,"=======> Setting SNxxx to endtime delay $evt[1]";;return $evt[1])} )
 (setreading Geschirrspuelen active start)
DOELSEIF
(([Geschirrspuelen:event] =~ /StartTime.*/ and [SNxxx:".*Ready.*"]) or ([Geschirrspuelen:".*StartTime.*"] and [SNxxx] eq "Ready"))
 (set SNxxx selectProgram Eco50,
  {Log 1,"=======> Selecting Eco50 on SNxxx"})
 (set SNxxx requestProgramOptions,
  {Log 1,"=======> Requesting options from SNxxx"})
 (set SNxxx delayStartTime {(my @evt = split(/ /,ReadingsVal("Geschirrspuelen","event",""));;Log 1,"=======> Setting SNxxx to starttime delay $evt[1]";;return $evt[1])} )
 (setreading Geschirrspuelen active start)
DOELSEIF
([Geschirrspuelen:active] eq "start" and [Sxxx:".*BSH.Common.Option.StartInRelative.*"] )
 (set SNxxx startProgram,
 {Log 1,"=======> Delayed start SNxxx"})
 (setreading Geschirrspuelen event -,
  setreading Geschirrspuelen active no)

und Attributen
do         always
   wait       0:0:5,10,10,2:5,10,10,2:5,10,10,2:0

Mit diesen Komponenten läuft das schon so:

set Geschirrspuelen endTime 06:00 => Spülmaschine wird hochgefahren, Programm ausgewählt und die Startverzögerung so eingestellt, dass die Kiste um 6:00 in der Frühe fertig ist.

set Geschirrspuelen startTime 17:00 => Spülmaschine wird hochgefahren, Programm ausgewählt und die Startverzögerung so eingestellt, dass die Kiste um 17:00 startet

set Geschirrspuelen relativeTime 02:00 => Spülmaschine wird hochgefahren, Programm ausgewählt und die Startverzögerung so eingestellt, dass die Kiste in 2 Stunden startet.

Und sich danach mit einer Sprachausgabe meldet (:130: ist der Code für eine vor-aufgenommene Nachricht "Die Spülmaschine ist fertig"), die einmal über ein wandhängendes Tablet ausgegeben wird und zweitens meiner Chefin auch als Telegram-Nachricht gesendet wird. Der Start wird natürlich meiner Chefin auch in einem Telegram-Keyboard angeboten, so dass das mit _einem_ Knopf auf dem Handy geht.

Vierte Komponente: Ein Eintrag für den entsprechenden Dialog in meinem RiveScript-Chatbot (der Bestandteil des Moduls Babble ist):
//########################################################################################
//# Spülmaschine
//########################################################################################
 
+ (starte|schalte|mach) die spülmaschine um * uhr [an]
- OK, ich starte die Spülmaschine um <star2> Uhr 
^ <call>startdishwasher <star2></call>

+ (dass|lass|lasse) die spülmaschine laufen (bis|um) [um] * uhr
* <star2> == bis => OK, ich lasse die Spülmaschine laufen bis um <star3> 
^ <call>stopdishwasher <star3></call>
* <star2> != bis => OK, ich lasse die Spülmaschine laufen um <star3> 
^ <call>startdishwasher <star3></call>

+ (dass|lass|lasse) die spülmaschine [laufen] über nacht [laufen]
- OK, ich lasse die Spülmaschine laufen bis um 6 Uhr
^ <call>stopdishwasher 6:00</call>

+ (starte|schalte|mach) die spülmaschine (sofort|jetzt) [an]
- OK, ich starte die Spülmaschine sofort

//object for delayed start of dishwasher
> object startdishwasher perl
  my $rs = shift;
  my $st = join(" ",@_);
  $st =~ s/(\d?\d)\suhr\s(\d?\d)/$1\:$2/;
  $st =~ s/^(\d?\d)$/$1\:00/;
  main::Log 1,"[rive] startdishwasher $st";
  main::fhem("set Geschirrspuelen StartTime $st");
< object

//object for delayed stop of dishwasher
> object stopdishwasher perl
  my $rs = shift;
  my $st = join(" ",@_);
  $st =~ s/(\d?\d)\suhr\s(\d?\d)/$1\:$2/;
  $st =~ s/^(\d?\d)$/$1\:00/;
  main::Log 1,"[rive] stopdishwasher $st";
  main::fhem("set Geschirrspuelen EndTime $st");
< object

Et voilà: Mit den Sprachbefehlen
"Hallo Jeannie" <pling, Tablet wartet auf Spracheingabe>
"Lass die Spülmaschine über Nacht laufen" <Jeannie antwortet mit Sprachausgabe "OK, ich lasse die Spülmaschine laufen bis um 6 Uhr">

wird die Kiste so gestartet, dass sie um 6:00 fertig ist.

LG

pah
« Letzte Änderung: Gestern um 05:46:52 von Prof. Dr. Peter Henning »

 

decade-submarginal