Ergonomische Version von 48_HomeConnect.pm

Begonnen von Prof. Dr. Peter Henning, 11 September 2022, 09:28:52

Vorheriges Thema - Nächstes Thema

sky64

#90
So, das Programm ist mal durchgelaufen.
Diverse Readading, auch wenn man lokal oder in der App Optionen auswählt werden erstellt und aktualisiert.
Eine set-Auswahl gibt es weiterhin nicht.
Muss man selbst etwas definieren?

Ich habe mal das "set SMV6ZCX16E ZZZ_Dump" aufgerufen:
Device SMV6ZCX16E of type Dishwasher has
settings: $VAR1 = undef;

options: $VAR1 = undef;

transtable: $VAR1 = {
          'Quick45' => 'Speed 45',
          'Intensiv70' => 'Intensiv 70',
          'Kurz60' => 'Speed 60',
          'Favorite.001' => 'Favorit',
          'Auto2' => 'Auto 45-65',
          'MachineCare' => 'Maschinenpflege',
          'Eco50' => 'Eco 50',
          'GlassShine' => 'Brilliant Shine',
          'PreRinse' => 'Vorspuelen',
          'NightWash' => 'Leise'
        };

poweroff: $VAR1 = 'PowerOff';


Was sagt das aus?

Das war bevor ist das Modul noch mal gegen das letze hier getauscht habe.
Das vorgehen (ich weiß nicht wie es richtig/besser gemacht wird)
- Device gelöscht
- save config (damit gibt es auch keinen Verweise in der fhem.save mehr, richtig?)
- shutdown restart
Damit sollte fhem in einem Zustand sein, wo das Device usw. unbekannt ist.
Dann im hcconn ein scanDevices ausgelöst.
Es wird das Device neu angelegt.
Im Device ein get ... Settings hat keinen Effekt.
Verbose auf 5 gesetzt.
Ein set ... ZZZ_Dump liefert jetzt das  :(
Device SMV6ZCX16E of type  has
settings: $VAR1 = undef;

options: $VAR1 = undef;

transtable: $VAR1 = undef;

poweroff: $VAR1 = undef;

Meine Version von HomeConnectConnector ist V1.1.

Die Log-Ausgabe kommt gleich im Edit, da ich das auf dem Tablet nicht sauber kopieren kann.

So hier das Log mit Verbose 5.
--
2024.02.17 19:54:33 4: hccon: response {
  "data": {
    "homeappliances": [{
      "brand": "Bosch",
      "connected": true,
      "enumber": "SMV6ZCX16E/39",
      "haId": "013120542060006224",
      "name": "Geschirrspüler",
      "type": "Dishwasher",
      "vib": "SMV6ZCX16E"
    }]
  }
}
2024.02.17 19:54:33 1: PERL WARNING: "my" variable $HC_tt masks earlier declaration in same scope at ./FHEM/48_HomeConnect.pm line 297.
2024.02.17 19:54:33 1: PERL WARNING: "my" variable $HC_delayed_PS masks earlier declaration in same scope at ./FHEM/48_HomeConnect.pm line 298.
2024.02.17 19:54:33 1: PERL WARNING: "my" variable $pct masks earlier declaration in same scope at ./FHEM/48_HomeConnect.pm line 1715.
2024.02.17 19:54:33 1: PERL WARNING: "my" variable $tim masks earlier declaration in same scope at ./FHEM/48_HomeConnect.pm line 1721.
2024.02.17 19:55:00 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/48_HomeConnect.pm line 557.
2024.02.17 19:55:00 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/48_HomeConnect.pm line 558.
2024.02.17 19:55:00 1: PERL WARNING: Use of uninitialized value $type in pattern match (m//) at ./FHEM/48_HomeConnect.pm line 584.
2024.02.17 19:55:00 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at ./FHEM/48_HomeConnect.pm line 602.
2024.02.17 19:55:00 1: PERL WARNING: Use of uninitialized value $type in concatenation (.) or string at ./FHEM/48_HomeConnect.pm line 614.
2024.02.17 19:55:00 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:55:00 1: PERL WARNING: Use of uninitialized value $type in hash element at ./FHEM/48_HomeConnect.pm line 615.
2024.02.17 19:55:00 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:55:11 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:55:11 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:55:11 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:55:11 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:55:20 4: SMV6ZCX16E: request /api/homeappliances/013120542060006224/settings
2024.02.17 19:55:20 4: SMV6ZCX16E: no token refresh needed
2024.02.17 19:55:20 4: SMV6ZCX16E: requestAfterToken https://api.home-connect.com/api/homeappliances/013120542060006224/settings
2024.02.17 19:55:22 4: SMV6ZCX16E: response {
--
      "key": "BSH.Common.Setting.PowerState",
      "value": "BSH.Common.EnumType.PowerState.Off"
    }]
  }
}
2024.02.17 19:55:22 5: [HomeConnect_ResponseGetSettings] SMV6ZCX16E: get settings response {
--
      "key": "BSH.Common.Setting.PowerState",
      "value": "BSH.Common.EnumType.PowerState.Off"
    }]
  }
}
2024.02.17 19:55:22 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/48_HomeConnect.pm line 1503.
2024.02.17 19:55:22 1: [HomeConnect_ResponseGetSettings] SMV6ZCX16E: no settings found
2024.02.17 19:55:41 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:55:41 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:56:43 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:56:43 1: PERL WARNING: Use of uninitialized value $availableSets in string ne at ./FHEM/48_HomeConnect.pm line 674.
2024.02.17 19:56:43 3: [HomeConnect] SMV6ZCX16E: set command: ZZZ_Dump
2024.02.17 19:56:43 1: PERL WARNING: Use of uninitialized value $type in concatenation (.) or string at ./FHEM/48_HomeConnect.pm line 687.
2024.02.17 19:57:16 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
--
2024.02.17 19:57:17 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:57:56 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 19:57:56 3: [HomeConnect] SMV6ZCX16E: set command: ZZZ_Dump
--
2024.02.17 20:04:11 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:04:11 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
--
2024.02.17 20:06:37 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:06:37 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:07:04 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:07:04 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:07:22 4: SMV6ZCX16E: request /api/homeappliances/013120542060006224/settings
2024.02.17 20:07:22 4: SMV6ZCX16E: no token refresh needed
2024.02.17 20:07:22 4: SMV6ZCX16E: requestAfterToken https://api.home-connect.com/api/homeappliances/013120542060006224/settings
2024.02.17 20:07:24 4: SMV6ZCX16E: response {
--
      "key": "BSH.Common.Setting.PowerState",
      "value": "BSH.Common.EnumType.PowerState.On"
    }]
  }
}
2024.02.17 20:07:24 5: [HomeConnect_ResponseGetSettings] SMV6ZCX16E: get settings response {
--
      "key": "BSH.Common.Setting.PowerState",
      "value": "BSH.Common.EnumType.PowerState.On"
    }]
  }
}
2024.02.17 20:07:24 1: [HomeConnect_ResponseGetSettings] SMV6ZCX16E: no settings found
2024.02.17 20:07:43 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:07:43 3: [HomeConnect] SMV6ZCX16E: set command: ZZZ_Dump
2024.02.17 20:08:36 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:08:36 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type
2024.02.17 20:08:38 4: SMV6ZCX16E: request /api/homeappliances/013120542060006224/settings
2024.02.17 20:08:38 4: SMV6ZCX16E: no token refresh needed
2024.02.17 20:08:38 4: SMV6ZCX16E: requestAfterToken https://api.home-connect.com/api/homeappliances/013120542060006224/settings
2024.02.17 20:08:39 4: SMV6ZCX16E: response {
--
      "key": "BSH.Common.Setting.PowerState",
      "value": "BSH.Common.EnumType.PowerState.Off"
    }]
  }
}
2024.02.17 20:08:39 5: [HomeConnect_ResponseGetSettings] SMV6ZCX16E: get settings response {
--
      "key": "BSH.Common.Setting.PowerState",
      "value": "BSH.Common.EnumType.PowerState.Off"
    }]
  }
}
2024.02.17 20:08:39 1: [HomeConnect_ResponseGetSettings] SMV6ZCX16E: no settings found

Die PowerState.On / Off-Meldungen kommen wenn ich get ... Settings ausführe.
Ich hatte die Maschine  mal ein geschaltet um zu sehen ob wie vorher die Readings wieder kommen, tun sie nicht  :(
Ohne das ich das Device mit dem originalen HomeConnect-Modul anlege und dann das File austausche kommen keine Readings...

Es ist bestimmt nur eine Kleinigkeit die bei mir nicht stimmt, aber wenn man es woanders nicht reproduzieren kann ist die Fehlersuche schwer.

 
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

Prof. Dr. Peter Henning

#91
ZitatDas vorgehen (ich weiß nicht wie es richtig/besser gemacht wird)

Nein, bitte nicht so ! Einfach nur - nach dem Neueinspielen - reload 48_HomeConnect.pm ausführen.

An dieser Installation ist irgendetwas oberfaul, weil die richtigen Antworten vom BSH-Server kommen (das Ergebnis von get settings). Aber dann nicht im Device-Hash landen.

Ich vermute, dass bei der automatischen Erzeugung der Devices irgendetwas schief geht. Also bitte MANUELL ausführen (und zwar ohne irgendeinen Neustart

defmod SMV6ZCX16E HomeConnect <hier der Name des HomeConnectBridge-Devices> 013120542060006224

oder, falls das kein Ergebnis liefert: Device löschen, und dann manuell das oben genannte Kommando ausführen.

LG

pah

sky64

Vielen Dank für die Hilfe.

Ich war eigentlich schon dabei das ganze aufzugeben.
Weder ein Austausch des Files mit reload noch eine manuelle Defnition mit defmod brachten eine Änderung am Verhalten.

Ich habe dann einfach mal blind ein "set SMV6ZCX16E SelectedProgram Eco50" abgsetzt und endlich mal eine Reaktion gesehen.
Es wurden das Program gesetzt und außerdem die Programmoptionen abgerufen!

Ich kann auch ein "get SMV6ZCX16E programs" absetzten.
Das sieht im Log dann so aus:
2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel searching for data, fileno:"169", nfound:"1", loopCounter:"1"
2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel len:"52", received:"2e
event:KEEP-ALIVE
data:
id:013120542060006224


"
2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel unknown: 2e

2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel unknown: event:KEEP-ALIVE

2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel unknown: id:013120542060006224

2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel unknown:

2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel unknown:

2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel searching for data, fileno:"169", nfound:"0", loopCounter:"2"
2024.02.18 13:52:27 5: [HomeConnect_ReadEventChannel] SMV6ZCX16E: event channel received no more data
2024.02.18 13:52:31 4: SMV6ZCX16E: request /api/homeappliances/013120542060006224/programs/available
2024.02.18 13:52:31 4: SMV6ZCX16E: no token refresh needed
2024.02.18 13:52:31 4: SMV6ZCX16E: requestAfterToken https://api.home-connect.com/api/homeappliances/013120542060006224/programs/available
2024.02.18 13:52:31 4: SMV6ZCX16E: response {
  "data": {
    "active": {
      "constraints": {
        "access": "readWrite"
      }
    },
    "programs": [{
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Intensiv70"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Auto2"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Eco50"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Glas40"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.PreRinse"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.NightWash"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Kurz60"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.MachineCare"
    }],
    "selected": {
      "constraints": {
        "access": "readWrite"
      },
      "key": "Dishcare.Dishwasher.Program.Auto2",
      "options": [{
        "key": "BSH.Common.Option.StartInRelative",
        "value": 0,
        "unit": "seconds"
      }, {
        "key": "Dishcare.Dishwasher.Option.ExtraDry",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.HygienePlus",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.IntensivZone",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.VarioSpeedPlus",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.SilenceOnDemand",
        "value": false
      }, {
        "key": "BSH.Common.Option.RemainingProgramTime",
        "value": 8100,
        "unit": "seconds"
      }, {
        "key": "BSH.Common.Option.RemainingProgramTimeIsEstimated",
        "value": true
      }, {
        "key": "BSH.Common.Option.EnergyForecast",
        "value": 37,
        "unit": "%"
      }, {
        "key": "BSH.Common.Option.WaterForecast",
        "value": 49,
        "unit": "%"
      }]
    }
  }
}
2024.02.18 13:52:31 5: [HomeConnect_ResponseGetPrograms] SMV6ZCX16E: get programs response {
  "data": {
    "active": {
      "constraints": {
        "access": "readWrite"
      }
    },
    "programs": [{
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Intensiv70"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Auto2"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Eco50"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Glas40"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.PreRinse"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.NightWash"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.Kurz60"
    }, {
      "constraints": {
        "execution": "selectandstart"
      },
      "key": "Dishcare.Dishwasher.Program.MachineCare"
    }],
    "selected": {
      "constraints": {
        "access": "readWrite"
      },
      "key": "Dishcare.Dishwasher.Program.Auto2",
      "options": [{
        "key": "BSH.Common.Option.StartInRelative",
        "value": 0,
        "unit": "seconds"
      }, {
        "key": "Dishcare.Dishwasher.Option.ExtraDry",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.HygienePlus",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.IntensivZone",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.VarioSpeedPlus",
        "value": false
      }, {
        "key": "Dishcare.Dishwasher.Option.SilenceOnDemand",
        "value": false
      }, {
        "key": "BSH.Common.Option.RemainingProgramTime",
        "value": 8100,
        "unit": "seconds"
      }, {
        "key": "BSH.Common.Option.RemainingProgramTimeIsEstimated",
        "value": true
      }, {
        "key": "BSH.Common.Option.EnergyForecast",
        "value": 37,
        "unit": "%"
      }, {
        "key": "BSH.Common.Option.WaterForecast",
        "value": 49,
        "unit": "%"
      }]
    }
  }
}
2024.02.18 13:52:32 1: [HomeConnect_Set] SMV6ZCX16E: no settings defined, replacing by default settings for type Dishwasher

Auffällig finde ich die "event channel unknown".

Im ZZZ_Dump sieht das nun so aus:
Device SMV6ZCX16E of type Dishwasher has
settings: $VAR1 = undef;

options: $VAR1 = {
          'ExtraDry' => [
                          'Dishcare.Dishwasher.Option',
                          'Boolean',
                          bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ),
                          '',
                          bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
                          undef
                        ],
          'HygienePlus' => [
                             'Dishcare.Dishwasher.Option',
                             'Boolean',
                             $VAR1->{'ExtraDry'}[2],
                             '',
                             $VAR1->{'ExtraDry'}[4],
                             undef
                           ],
          'IntensivZone' => [
                              'Dishcare.Dishwasher.Option',
                              'Boolean',
                              $VAR1->{'ExtraDry'}[2],
                              '',
                              $VAR1->{'ExtraDry'}[4],
                              undef
                            ],
          'StartInRelative' => [
                                 'BSH.Common.Option',
                                 'Int',
                                 undef,
                                 '(0,86400)',
                                 undef,
                                 undef
                               ],
          'VarioSpeedPlus' => [
                                'Dishcare.Dishwasher.Option',
                                'Boolean',
                                $VAR1->{'ExtraDry'}[2],
                                '',
                                $VAR1->{'ExtraDry'}[4],
                                undef
                              ]
        };

transtable: $VAR1 = {
          'Favorite.001' => 'Favorit',
          'Kurz60' => 'Speed 60',
          'PreRinse' => 'Vorspülen',
          'MachineCare' => 'Maschinenpflege',
          'Intensiv70' => 'Intensiv 70',
          'Quick45' => 'Speed 45',
          'Auto2' => 'Auto 45-65',
          'Eco50' => 'Eco 50',
          'NightWash' => 'Leise',
          'GlassShine' => 'Brilliant Shine'
        };

poweroff: $VAR1 = 'PowerOff';

Ich kann die Programme und Optionen alle setzten wenn ich das in die CLI-Zeile eingeben.

Aber eine komfortable Dropdown-Bedienung (wie in im Beitrag #23) ist nicht vorhanden. Muss man die sich selbst bauen, wie?
Vermutlich müsste das settings-Array gefüllt sein. Gibt es noch einen Trick?
Eigentlich schreibt er ja "no settings defined, replacing by default settings for type Dishwasher"

Das list sieht nun so aus:
Internals:
   CFGFN     
   DEF        hccon 013120542060006224
   FUUID      65d100e9-f33f-5588-a1a2-6bd1d78622ae5034
   NAME       SMV6ZCX16E
   NR         670
   STATE      <p align="left">
Ready
<br/>Bereit
</p>
   TYPE       HomeConnect
   aliasname  Geschirrspüler
   brand      Bosch
   commandPrefix Dishcare.Dishwasher.Program.
   eventChannelTimeout 1708260467.07585
   eventCount 140
   events     SaltNearlyEmpty,RinseAidNearlyEmpty
   haId       013120542060006224
   hcconn     hccon
   options    StartInRelative,ExtraDry,HygienePlus,IntensivZone,VarioSpeedPlus
   optlist    <br/><div id="optionlist"><table>
<tr><td>StartInRelative</td><td><input type="text" id="opt0" size="4" maxlength="120" value="Int (0,86400)"/></td></tr>
<tr><td>ExtraDry</td><td><input type="checkbox" id="opt1" size="4" value="unchecked"/></td></tr>
<tr><td>HygienePlus</td><td><input type="checkbox" id="opt2" size="4" value="unchecked"/></td></tr>
<tr><td>IntensivZone</td><td><input type="checkbox" id="opt3" size="4" value="unchecked"/></td></tr>
<tr><td>VarioSpeedPlus</td><td><input type="checkbox" id="opt4" size="4" value="unchecked"/></td></tr></table></div>
   prefix     Dishcare.Dishwasher
   programs   Intensiv70,Auto2,Eco50,Glas40,PreRinse,NightWash,Kurz60,MachineCare
   retrycounter 0
   type       Dishwasher
   vib        SMV6ZCX16E
   OLDREADINGS:
   READINGS:
     2024-02-18 12:49:52   Dishcare.Dishwasher.Option.HygienePlus true
     2024-02-18 12:49:12   Dishcare.Dishwasher.Option.VarioSpeedPlus true
     2024-02-18 13:35:26   DoorState       Closed
     2024-02-18 11:35:19   ExtraDry        0
     2024-02-18 12:50:44   HygienePlus     0
     2024-02-18 11:35:29   IntensivZone    0
     2024-02-18 11:36:49   Laufzeit        02:15:00
     2024-02-18 11:25:42   OperationState  Ready
     2024-02-18 12:57:44   PowerState      Off
     2024-02-18 12:50:44   RemainingProgramTime 8100 seconds
     2024-02-18 12:50:44   RemainingProgramTimeHHMM 02:15
     2024-02-18 11:25:42   RemoteControlActive 1
     2024-02-18 11:25:42   RemoteControlStartAllowed 1
     2024-02-18 12:22:53   SelectedProgram Auto2
     2024-02-18 12:50:34   VarioSpeedPlus  0
     2024-02-18 13:35:26   state           Ready
     2024-02-18 13:35:26   tr_DoorState    Tür geschlossen
     2024-02-18 13:35:26   tr_State1       Bereit
     2024-02-18 13:35:26   tr_State2       Bereit
     2024-02-18 13:35:26   tr_State3       Bereit
   data:
     poweroff   PowerOff
     options:
       ExtraDry:
         Dishcare.Dishwasher.Option
         Boolean
         0
        
         1
         undef
       HygienePlus:
         Dishcare.Dishwasher.Option
         Boolean
         0
        
         1
         undef
       IntensivZone:
         Dishcare.Dishwasher.Option
         Boolean
         0
        
         1
         undef
       StartInRelative:
         BSH.Common.Option
         Int
         undef
         (0,86400)
         undef
         undef
       VarioSpeedPlus:
         Dishcare.Dishwasher.Option
         Boolean
         0
        
         1
         undef
     trans:
       Auto2      Auto 45-65
       Eco50      Eco 50
       Favorite.001 Favorit
       GlassShine Brilliant Shine
       Intensiv70 Intensiv 70
       Kurz60     Speed 60
       MachineCare Maschinenpflege
       NightWash  Leise
       PreRinse   Vorspülen
       Quick45    Speed 45
   hmccu:
Attributes:
   DbLogExclude .*
   alias      Geschirrspüler
   devStateIcon Offline:scene_dishwasher@red Aborting:scene_dishwasher@yellow Inactive:scene_dishwasher@black Ready:scene_dishwasher@blue Delayed.*:scene_dishwasher_delay@green Run.*:scene_dishwasher@green
   icon       scene_dishwasher
   room       Geräte,Verbrauch
   stateFormat {my $open=ReadingsVal("$name","tr_DoorState","");
sprintf("<p align=\"left\">\n%s\n<br/>%s\n%s</p>",
ReadingsVal("$name","state",""),ReadingsVal("$name","tr_State1",""),
(($open=~/offen/)?"<br/>".$open:""))}
   updateTimer 10
   verbose    5


Für die Zeitverzögerungen: wird das in den Readings irgendwo angezeigt? Ich sehe da aktuell keine Reaktion.
Auch wenn ich eine Verzögerung an der Maschine einstelle gibt es keine Reading wo das drin steht.

Wird die Maschine automatisch eingeschaltet wenn man ein Program startet oder muss man erst ein "set ... PowerOn" absetzten?
Ich habe es noch nicht getestet.

Gruß Ron
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

Prof. Dr. Peter Henning

Zitatmanuelle Defnition mit defmod brachten eine Änderung am Verhalten.

Ich habe auch nichts von "Verhaltensänderung" geschrieben. Sondern nur nach einer Möglichkeit gesucht, die offenbar beim autocreate der Devices auftretenden Fehler zu umgehen.

Betreffend die Meldungen im EventChannel: Ignorieren bitte, und verbose wieder zurücksetzen...

Betreffend die Startroutinen: Nein, noch viel kryptischer.
- Wenn die Kiste nicht "Ready" ist, muss sie mit PowerOn angeschaltet werden
- Erst wenn die Kiste "Ready" ist, kann man mit SelectedProgram ein Programm wählen
- Danach erst kann - wenn man das will - eine Verzögerung eingebaut werden. Dafür gibt es im Modul drei Möglichkeiten
-- DelayRelative - Starte in einer bestimmten Zeitspanne von jetzt an
-- DelayStartTime - Starte zu einem bestimmten Zeitpunkt ab jetzt
-- DelayEndTime - Starte so, dass die Maschine zu einem bestimmten Zeitpunkt fertig ist. Das Modul berechnet dann an Hand der bekannten Programmdauer den nötig Startzeitpunkt.
- Der Programmstart erfolgt erst mit dem Befehl StartProgram.

Um diese komplexe Sequenz, bei der man immer auch noch warten muss, bis der doofe BSH-Server das an die Maschine gemeldet hat, zu automatisieren, habe ich ein DOIF und ein dummy.

defmod Geschirrspuelen.N DOIF ## 1. Setze Phase \
([SN55ZS49CE:".*tr_State11111.*"])\
({fhem("setreading Geschirrspuelen phase ".ReadingsVal("SN55ZS49CE","tr_State1",""))},\
 {fhem90Cmd("setreading Geschirrspuelen phase ".ReadingsVal("SN55ZS49CE","tr_State1",""))})\
## 2. Finished\
DOELSEIF\
([SN55ZS49CE:".*Finished.*"] and [07:00-22:30])\
({speak("TText 238386743",":130:")},\
 {speak("Tab1.EG",":130:")},\
 setreading Geschirrspuelen event Finished,\
 {fhem90Cmd("setreading Geschirrspuelen event Finished")})\
## 3. und 4. Klarspüler\
DOELSEIF\
([SN55ZS49CE:".*RinseAidNearlyEmpty.*Present.*"])\
(set Geschirrspuelen event RinseAidNearlyEmpty,\
 {fhem90Cmd("set Geschirrspuelen event RinseAidNearlyEmpty")},\
 {fhem90Cmd("setreading Device.warn Appliance.nok Spülmaschine benötigt Klarspüler")})\
DOELSEIF\
([SN55ZS49CE:".*RinseAidNearlyEmpty.*Off.*"])\
({fhem90Cmd("setreading Device.warn Appliance.nok none")})\
## 5. und 6. Spülmaschinensalz\
DOELSEIF\
([SN55ZS49CE:".*SaltNearlyEmpty.*Present.*"])\
(set Geschirrspuelen event SaltNearlyEmpty,\
 {fhem90Cmd("set Geschirrspuelen event SaltNearlyEmpty")},\
 {fhem90Cmd("setreading Device.warn Appliance.nok Spülmaschine benötigt Salz")})\
DOELSEIF\
([SN55ZS49CE:".*SaltNearlyEmpty.*Off.*"])\
({fhem90Cmd("setreading Device.warn Appliance.nok none")})\
## 7. Anschalten\
DOELSEIF\
([Geschirrspuelen:".*Time.*"] and [SN55ZS49CE:state] ne "Ready")\
 (set SN55ZS49CE PowerOn,\
  {Log 1,"=======> Powering on SN55ZS49CE"},\
  setreading Geschirrspuelen event $EVENT,\
  setreading Geschirrspuelen active wait)\
DOELSEIF\
( ([Geschirrspuelen:event] =~ /RelativeTime.*/ and [Geschirrspuelen:active] ne "start" and [SN55ZS49CE:".*Ready.*"]) or ([Geschirrspuelen:".*RelativeTime.*"] and [Geschirrspuelen:active] ne "start" and [SN55ZS49CE] eq "Ready") )\
 (set SN55ZS49CE SelectedProgram Eco50,\
  {Log 1,"=======> Selecting Eco50 on SN55ZS49CE"})\
 (set SN55ZS49CE DelayRelative {(my @evt = split(/ /,ReadingsVal("Geschirrspuelen","event",""));;;;Log 1,"=======> Setting SN55ZS49CE to relative delay $evt[1]";;;;return $evt[1])} )\
 (setreading Geschirrspuelen active start)\
DOELSEIF\
(([Geschirrspuelen:event] =~ /EndTime.*/ and [Geschirrspuelen:active] ne "start" and [SN55ZS49CE:".*Ready.*"]) or ([Geschirrspuelen:".*EndTime.*"] and [Geschirrspuelen:active] ne "start" and [SN55ZS49CE] eq "Ready"))\
 (set SN55ZS49CE SelectedProgram Eco50,\
  {Log 1,"=======> Selecting Eco50 on SN55ZS49CE"})\
 (set SN55ZS49CE DelayEndTime {(my @evt = split(/ /,ReadingsVal("Geschirrspuelen","event",""));;;;Log 1,"=======> Setting SN55ZS49CE to endtime delay $evt[1]";;;;return $evt[1])} )\
 (setreading Geschirrspuelen active start)\
DOELSEIF\
(([Geschirrspuelen:event] =~ /StartTime.*/ and [Geschirrspuelen:active] ne "start" and [SN55ZS49CE:".*Ready.*"]) or ([Geschirrspuelen:".*StartTime.*"] and [Geschirrspuelen:active] ne "start" and [SN55ZS49CE] eq "Ready"))\
 (set SN55ZS49CE SelectedProgram Eco50,\
  {Log 1,"=======> Selecting Eco50 on SN55ZS49CE"})\
 (set SN55ZS49CE DelayStartTime {(my @evt = split(/ /,ReadingsVal("Geschirrspuelen","event",""));;;;Log 1,"=======> Setting SN55ZS49CE to starttime delay $evt[1]";;;;return $evt[1])} )\
 (setreading Geschirrspuelen active start)\
DOELSEIF\
([Geschirrspuelen:active] eq "start" and [SN55ZS49CE:".*StartInRelative.*"] )\
 (set SN55ZS49CE StartProgram,\
 {Log 1,"=======> Delayed start SN55ZS49CE"})\
 (setreading Geschirrspuelen event WaitForStart,\
  setreading Geschirrspuelen active no)\

attr Geschirrspuelen.N cmdpause 0:0:0:0:0:0:5:5:5:5:0
attr Geschirrspuelen.N do always
attr Geschirrspuelen.N group Waschen
attr Geschirrspuelen.N repeatsame 0:1:1:1:1:1:3:1:1:1:1
attr Geschirrspuelen.N room Kontrollraum
attr Geschirrspuelen.N sortby 0
attr Geschirrspuelen.N stateFormat {ReadingsVal("Geschirrspuelen","event","")." ==> ".ReadingsVal($name,"state","")."&nbsp;;&nbsp;;&nbsp;;".ReadingsTimestamp($name,"state","")}
attr Geschirrspuelen.N wait 0:0:0:0:0:0:0:5,10,2:5,10,2:5,10,2:0

sowie

defmod Geschirrspuelen dummy
attr Geschirrspuelen group Waschen
attr Geschirrspuelen readingList active event phase
attr Geschirrspuelen room Kontrollraum
attr Geschirrspuelen setList EndTime:time StartTime:time RelativeTime:time

Ich muss also nur noch den Befehl absetzen
Zitatset Geschirrspuelen EndTime 06:00
und die Spülmaschine wird so eingeschaltet, dass sie um 6:00 morgens fertig ist.

Übrigens kann man den komplexen mehrzeiligen Zustand der Spülmaschine mit den entsprechenden Attributen auch sehr schöne anzeigen lassen. Bei mir sieht das so aus:
defmod SN55ZS49CE HomeConnect HomeConnectBridge xxxxxxxxxxxxxxxxxxxxxx
attr SN55ZS49CE alias Spülmaschine
attr SN55ZS49CE babbleName Spülmaschine
attr SN55ZS49CE debug 1
attr SN55ZS49CE devStateIcon Offline:scene_dishwasher@red Aborting:scene_dishwasher@yellow Inactive:scene_dishwasher@black Ready:scene_dishwasher@blue Delayed.*:scene_dishwasher_delay@green Run.*:scene_dishwasher@green
attr SN55ZS49CE group Waschen
attr SN55ZS49CE room Kontrollraum :-*
attr SN55ZS49CE stateFormat {my $open=ReadingsVal("SN55ZS49CE","tr_DoorState","");; \
sprintf("<p align=\"left\">\n%s\n<br/>%s\n%s</p>",\
ReadingsVal("SN55ZS49CE","state",""),ReadingsVal("SN55ZS49CE","tr_State1",""),\
(($open=~/offen/)?"<br/>".$open:""))}
attr SN55ZS49CE updateTimer 15

Das Attribut babbleName bezieht sich auf meine Sprach-KI mit dem Babble-Modul und einem RiveScript-ChatBot. Meine Frau tippt also auf einen Button und sagt: "Lass die Spülmaschine über Nacht laufen". Die Antwort ist "OK, ich lasse die Spülmaschine laufen bis um 6 Uhr", und natürlich erfolgt das dann auch. Oder "Lass die Spülmaschine jetzt laufen". Oder weitere Varianten.

LG

pah


Prof. Dr. Peter Henning

#94
Ups. Katastrophe: Ich bekomme vom BSH-Server neuerdings eine Fehlermeldung
Zitat2024.02.18 15:49:44 1: [HomeConnect_HandleError] SN55ZS49CE: Error "Option BSH.Common.Option.StartInRelative is not selectable"

Ich habe das jetzt im Modul geändert, die Startverzögerung wird nicht unmittelbar, sondern direkt beim Startbefehl übermittelt.

Tut wieder.


LG

pah

sky64

Vielen Dank für die Korrektur und für das DoIf.

Hier habe ich aber noch ein paar Fragen.
Das ist der Inhalt von "fhem90Cmd"?

Das "Device.warn" ist vermutlich eine Device für Mitteilungen?
Eine Auswahl des Waschprogramms gibt es nicht.
(Das DoIf nimmt immer Eco50, aber das kann man ja ändern und das aktuelle Programm auslesen bzw. das set weglassen.)

Wie könnte man das Waschprogramm und die Optionen auswählbar machen?
Würde ja im eigentlichen Geschirrspüler-Device reichen.

Alternativ im Dummy, sinnvollerweise müsste man die internen Variablen "options" und "programms" auslesen können.
Da weiß ich aber nicht wie das geht.
Auch wofür man das optlist mit seiner HTML-Formatierung gebrauchen kann.

Gruß Ron
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

Prof. Dr. Peter Henning

ZitatDas ist der Inhalt von "fhem90Cmd"?
Ich habe mehrere FHEM-Server, die über FHEM2FHEM miteinander gekoppelt sind. An dem xx.xx.xx.90 hängt die Low-Level-Hardware, also z.B. HomeMatic, Zigbee etc., die FHEM-Schleife muss also möglicht schnell und ohne Verzögerungen abgearbeitet werden. Dieser Befehl führt einfach ein FHEM-Kommando auf dem anderen Server aus - in diesem Fall setzt er eine Warnungsmeldung.
ZitatDas "Device.warn" ist vermutlich eine Device für Mitteilungen?
Ja, in etwa. Siehe oben.
ZitatEine Auswahl des Waschprogramms gibt es nicht.

Das liegt daran, dass wir hauptsächlich dieses Programm nutzen. Und bei einem Sprachbefehl will meine Frau nicht erst mit der KI diskutieren, welches Programm gestartet werden soll.
ZitatWie könnte man das Waschprogramm und die Optionen auswählbar machen?
Würde ja im eigentlichen Geschirrspüler-Device reichen.
Das geht doch mit set SelectedProgram xxx, danach erst kann man die Options setzen (z.B. set BrillianceDry 1). Diese Reihenfolge ist leider von BSH so vorgesehen... ::)

ZitatAlternativ im Dummy, sinnvollerweise müsste man die internen Variablen "options" und "programms" auslesen können.
{InternalVal('SN55ZS49CE','programs','')}

ZitatAuch wofür man das optlist mit seiner HTML-Formatierung gebrauchen kann.
Noch gar nicht. Das ist experimentell, weil ich die Bedienung so machen möchte, dass man dies einfach per Checkbox in der Weboberfläche machen kann. Dafür braucht es eine ganze Menge JavaScript in einer Datei homeconnect.js. Bei mir läuft das schon...

LG

pah

Kuehnhackel

Zitat von: sky64 am 22 Februar 2024, 23:07:44Vielen Dank für die Korrektur und für das DoIf.

Hier habe ich aber noch ein paar Fragen.
Das ist der Inhalt von "fhem90Cmd"?

Das "Device.warn" ist vermutlich eine Device für Mitteilungen?
Eine Auswahl des Waschprogramms gibt es nicht.
(Das DoIf nimmt immer Eco50, aber das kann man ja ändern und das aktuelle Programm auslesen bzw. das set weglassen.)

Wie könnte man das Waschprogramm und die Optionen auswählbar machen?
Würde ja im eigentlichen Geschirrspüler-Device reichen.

Alternativ im Dummy, sinnvollerweise müsste man die internen Variablen "options" und "programms" auslesen können.
Da weiß ich aber nicht wie das geht.
Auch wofür man das optlist mit seiner HTML-Formatierung gebrauchen kann.

Gruß Ron

In der HomeConnectApp, kannst du dein Startprogramm wählen. Ich denke deswegen starte das DoIf immer mit diesem Programm, wenn nichts anderes angegeben wurde/ausgewählt wurde.

Prof. Dr. Peter Henning

#98
OK, neue Version mit ein paar Fixes. Langsam wirds.

LG

pah

Kuehnhackel

Zitat von: Prof. Dr. Peter Henning am 05 März 2024, 17:36:28OK, neue Version mit ein paar Fixes. Langsam wirds.

LG

pah
Hi PAH,

die heutige Version, funktioniert bei mir nicht.

Bei der Kaffeemaschine gibt es ein zwar ein "get", aber es kommt dann kein "set", wie bei der "deiner alten" Version

Bei der Spülmaschine gibt es "get und set", aber keine Reaktion bei "set Spülmaschine on"

Habe die vorherige Version eingespielt und nun ist alles wieder erreich- und steuerbar.

LG Ralf

Prof. Dr. Peter Henning

#100
Uff, das verblüfft mich etwas. OK, muss ich mal versuchen zu verstehen, denn ich habe nur etwas an einer kryptischen Präfix-Setzung geändert.

FHEM mal neu gestartet?

LG

pah

Edit: Bei mir funktioniert alles wie gewünscht: Kochfeld, Spülmaschine, Backofen, Waschmaschine.

Kuehnhackel

Zitat von: Prof. Dr. Peter Henning am 06 März 2024, 11:05:30Uff, das verblüfft mich etwas. OK, muss ich mal versuchen zu verstehen, den ich habe nur etwas an einer kryptischen Präfix-Setzung geändert.

FHEM mal neu gestartet?

LG

pah

Ja, klar  8)

Prof. Dr. Peter Henning

Also, "set Spülmaschine on" gibt es sowieso nicht (sollte es auch nicht). Zunächst muss mit "set Spülmaschine PowerOn" das Ding angeschaltet werden. Dann ein Programm gewählt, und dann mit "set Spülmaschine StartProgram" dieses gestartet werden. Das ist der von BSH vorgegebene Ablauf. Denn vor dem "StartProgram" können auch noch eine Verzögerungszeit und Optionen gesetzt werden.

Wenn bei der Kaffeemaschine kein "set" erscheint: Schon mal "get ... settings" ausgeführt?

LG

pah

Kuehnhackel

Zitat von: Prof. Dr. Peter Henning am 06 März 2024, 11:19:51Also, "set Spülmaschine on" gibt es sowieso nicht (sollte es auch nicht). Zunächst muss mit "set Spülmaschine PowerOn" das Ding angeschaltet werden. Dann ein Programm gewählt, und dann mit "set Spülmaschine StartProgram" dieses gestartet werden. Das ist der von BSH vorgegebene Ablauf. Denn vor dem "StartProgram" können auch noch eine Verzögerungszeit und Optionen gesetzt werden.

Wenn bei der Kaffeemaschine kein "set" erscheint: Schon mal "get ... settings" ausgeführt?

LG

pah

Bei der Spülmschine falsch ausgedrückt, es geht kein Power on

Kaffeemaschine "get settings" keine Reaktion.

Habe es gerade noch einmal die aktuelle Version eingespielt.

Veränderungen werden "registriert", wenn ich die Kaffeemaschine per HomeConnect APP bediene.

Prof. Dr. Peter Henning

#104
OK, ich denke, das war ein Fix zuviel - Fehler liegt auf meiner Seite.

Anbei die bereinigte Version, damit sollten auch diese beiden Geräte wieder laufen.

LG

pah

Edit: Unsere verehrten Freunde von BSH haben wieder mal etwas geändert. Meine Spülmaschine meldet sich jetzt auch mit "Ready", wenn sie ausgeschaltet ist. Jedenfalls habe ich jetzt noch diverse weitere Änderungen eingebaut, die kommen aber erst nach ausführlichem Testen mit meinen vier Geräten zum Download.