FHEM Forum

FHEM => Automatisierung => Thema gestartet von: betateilchen am 01 Dezember 2024, 10:52:21

Titel: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: betateilchen am 01 Dezember 2024, 10:52:21
Moin,

der Versuch, in der Datenbank vorhandene Werte "off" durch 0 zu ersetzen

set dbrep changeValue old="off" new="0"
scheitert mit der Fehlermeldung

Both entries old="old string" new="new string" are needed.
Offenbar berücksichtigt die Fehlerbehandlung im Modul

  elsif ($opt =~ /changeValue/) {
      my ($ac, $hc) = parseParams(join ' ', @a);

      my $oldval = $hc->{old};
      my $newval = $hc->{new};

      if (!$oldval || !$newval) {
          return qq{Both entries old="old string" new="new string" are needed.};
      }

nicht, dass es durchaus einen gewünschten Wert 0 geben kann.

!$newval ergibt eben true, wenn $newval == 0

(Das gleiche Verhalten dürfte auch bei oldval == 0 auftreten)
Titel: Aw: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: DS_Starter am 01 Dezember 2024, 15:24:09
Hallo betateilchen,

danke für die Info.

Das ist natürlich so nicht gewünscht.
Ändere ich in

if (!defined $oldval || !defined $newval) {
...

Das sollte dann passen.

LG
 
Titel: Aw: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: DS_Starter am 01 Dezember 2024, 16:19:52
Ist gefixt und eingecheckt.
Titel: Aw: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: betateilchen am 01 Dezember 2024, 17:32:29
ähm... ich glaube nicht, dass die Lösung so einfach ist.

Hast Du sowas mal probiert:

set dbrep changeValue old="off" new=
Syntaktisch falsch, aber dbrep löscht damit kommentarlos die vorhandenen Werte, was ich auch nicht für richtig halte.
Titel: Aw: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: DS_Starter am 01 Dezember 2024, 19:16:35
Stimmt auch wieder...
Titel: Aw: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: DS_Starter am 01 Dezember 2024, 19:27:56
 
if ($oldval eq '' || $newval eq '') {
...

sollte es tun.
Teste gerade ein paar Szenarien.

Titel: Aw: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: DS_Starter am 01 Dezember 2024, 19:41:33
Sieht gut für mich aus.
Habe die V ins Repo gestellt. Kannst gerne von deiner Seite aus gegenchecken.
Titel: Aw: [bug] DbRep: changeValue funktioniert nicht mit Zielwert 0
Beitrag von: betateilchen am 02 Dezember 2024, 08:50:14
Kann man so machen, aber warum die Prüfung nicht einfach frühestmöglich machen?
Dein Ansatz mit defined() war ja grundsätzlich gut, nur zu spät.

  elsif ($opt =~ /changeValue/) {
      my ($ac, $hc) = parseParams(join ' ', @a);

if (!defined($hc->{old}) || !defined($hc->{new})) {
          return qq{Both entries old="old string" new="new string" are needed.};
}

      my $oldval = $hc->{old};
      my $newval = $hc->{new};