Problem mit eventMap

Begonnen von betateilchen, 27 August 2013, 10:20:46

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Bei "eventMap dry:0" soll bei keinem Event das 0 in dry konvertiert werden.

Ist bei mir zwar acuh nicht der Fall, aber bei betateilchen findet irgendwann/irgendwo eine "rueckkonvertierung" statt (ReplaceEventMap(*,*,0)), den wir finden sollten (meint betateilchen :)

martinp876

nun, die Stelle ist einfach:

fhem.pl, line~2500
 if(!$noreplace) {     # Backward compatibility for code without readingsUpdate
    if($attr{$dev}{eventMap}) {
      my $c = $hash->{CHANGED};
      for(my $i = 0; $i < @{$c}; $i++) {
        $c->[$i] = ReplaceEventMap($dev, $c->[$i], 1);
      }
      $hash->{STATE} = ReplaceEventMap($dev, $hash->{STATE}, 1);
    }
  }


es werden alle "changes" konvertiert, die Readings nicht.
=> wenn man den trigger weiter verarbeitet könnte es zu diesem Verhalten kommen.

mehr habe ich jetzt nicht


rudolfkoenig

>  nun, die Stelle ist einfach:

Das ist nur eine Behauptung ohne Beweise. Wie man es an dem Kommentar sieht, wird es in bestimmten Faellen verwendet. Und ich kann es nicht reparieren, wenn ich nicht weiss, warum bzw. wie HM (oder wer auch immer) sich anders verhaelt, als der Normalfall.

martinp876

Hallo Rudi,

ZitatDas ist nur eine Behauptung ohne Beweise
????
hast du nicht meinen Beweis vorneweg gesehen? Was willst du noch?

ZitatUnd ich kann es nicht reparieren, wenn ich nicht weiss, warum bzw. wie HM (oder wer auch immer) sich anders verhaelt, als der Normalfall.

kann ich auch nicht sagen
a) was der "Normalfall" ist
b) wie sich HM von einem Normalfall unterschiedet (da ich den Normalfall nicht kenne)
c) mir nicht klar ist, ob ein ersetzen hier stattfinden soll oder nicht.
d) ich erst einmal kein Problem damit habe.
e) HM in diesem Fall die "normalen" reading-update funktionen aufruft

Der Kommentar mutet etwas seltsam
Zitat# Backward compatibility for code without readingsUpdate
zumal in ~3364 der Reading-update funktion
Zitatif($dotrigger && $init_done) {
    DoTrigger($name, undef, 0) if(!$readingsUpdateDelayTrigger);
  } else {
genau der Code genutzt wird.
Nach dem Code muss es also zu einen replace kommen wenn man readingsUpdate mit option "doTrigger" ruft (ohne trigger auch kein replace im trigger...)

Also noch einmal die Frage: wie ist die "spec" von eventMap? Sollen alle Events nach der Map resetzt werden? Dann ist es doch ok.

Evtl. habe ich das Problem noch nicht erfasst, das ihr zu lösen versucht

Gruss Martin

rudolfkoenig

> d) ich erst einmal kein Problem damit habe.

Ich doch auch nicht. Nur betateilchen behauptet, er haette ein Problem :) :)
Und wir sind nett, und wollen ihm helfen. Bzw. wir wollen keine Bugs in FHEM haben.


>  Evtl. habe ich das Problem noch nicht erfasst, das ihr zu lösen versucht

attr device eventMap alt1:neu1 alt2:neu2 ...
-> d.h. in Events von device soll alt1 nach neu1 konvertiert werden. Beim betateilchen wurde aber im Event neu1 nach alt1 konvertiert, also falschrum. Sein eventmap ist dry:0, weil er aus dry ein Zero machen will. Aber keineswegs will er alle Nullen zu dry konvertieren.

Das was du gefunden hast kann sehr wohl die Ursache sein, aber ich brauche diesen Code fuer die Module, die noch kein readingsUpdate verwenden. Ich muesste also ein Problemfall zum nachstellen haben, damit ich eine Loesung fuer alle Seiten finden kann. Es kann aber auch sein, dass diese Stelle gar nicht die Ursache ist.

betateilchen

Zitat von: rudolfkoenig schrieb am Fr, 06 September 2013 14:03Beim betateilchen wurde aber im Event neu1 nach alt1 konvertiert, also falschrum.

Da fehlt eigentlich ein "auch":
Zitatwurde aber im Event  auch neu1 nach alt1 konvertiert

Es wird immer und alles in beide Richtungen konvertiert. Und dieses Verhalten ist mir bisher immer nur bei Homematic-Komponenten begegnet, obwohl ich mit eventMap auch bei anderen Komponenten arbeite.


Zitat von: rudolfkoenig schrieb am Fr, 06 September 2013 14:03Sein eventmap ist dry:0, weil er aus dry ein Zero machen will. Aber keineswegs will er alle Nullen zu dry konvertieren.

genau. Endlich versteht mal jemand das Problem :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

nun, das kann ich eben nicht nachstellen.

Habe es mit meinem Rollo probiert

attr RolloW eventMap off:100
set RolloW clear readings
set RolloW getConfig

=> die Readings werden nicht ersetzt
=> die events werden ersetzt, alls off (die Register) nach "100". Geht auch umgekehrt. Aber die Readings bleiben stabil.

Kommt der Fehler bei dich auch in dem Scenario wie oben oder nur bei bestimmten Readings?

Gruss Martin

betateilchen

Du kannst doch schon in meinem eingangs aufgeführten "list" sehen, dass der Fehler dort schon bei zwei Readings auftaucht.


     2013-08-08 13:53:38   R-eventFilterTime dry.5
     2013-08-25 22:21:20   lastRain        2013-08-rain


Die erste Zeile sollte 0.5 heißen, die Null wurde durch "dry" ersetzt.
In der zweiten Zeile fehlt der korrekte Timestamp weil der Tag "25" durch "rain" ersetzt wurde.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

ja,aber es passiert bei mir eben nicht.
Ich habe ein lastRain "dummy" event erzeugt und deine eventMap eingestellt - es kommt trotzdem immer der korrekte Wert.

Wie sieht das Gesamptbild aus?
werden ALLE "0" durch dry ersetzt, wenn die also "single-word" erkannt werden?
werden alle "25" durch rain ersetzt?

wie gesagt, wenn es ein einzel-wort ist, also entsprechend begrenzt mit .,- oder so.

du kannst ja ein paar versuche machen und zeigen, was ersetzt wird, was nicht und wann es ersetzt wird.

Wir gesagt, ich kann in der eventMap einstellen was ich will, bei einem getConfig - auch mit vorherigen clear Readings - wird bislang nie etwas ersetzt. wäre cool, wenn du einen entsprechenden Testfall beschreiben könntest.

Gruss Martin


betateilchen

Zitat von: martinp876 schrieb am Sa, 07 September 2013 08:26wäre cool, wenn du einen entsprechenden Testfall beschreiben könntest.

Ich habe doch den "Testfall" nun wirklich schon x-Mal hier beschrieben. Der "Testfall" ist kein Testfall, sondern ein tatsächlich existierendes Fehlverhalten im Produktivsystem. Was soll ich noch mehr beschreiben? Ich tue NICHTS um das Fehlverhalten herbeizuführen - es ist einfach da.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

> Was soll ich noch mehr beschreiben?

Nichts, wir brauchen nur eine Beschreibung, was wir nachstellen koennen, damit wir auch ein Problem haben :) Evtl. kriegst Du eine hin, indem Du deine Produktivkonfiguration nach-und nach abspeckst.

betateilchen

Zitat von: rudolfkoenig schrieb am So, 08 September 2013 08:35indem Du deine Produktivkonfiguration nach-und nach abspeckst.

das ist mir zu unspezifisch...

Zitat von: rudolfkoenig schrieb am So, 08 September 2013 08:35wir brauchen nur eine Beschreibung, was wir nachstellen koennen, damit wir auch ein Problem haben

1. Nimm den genannten Regensensor und binde ihn als HM-Device in fhem ein
2. Definiere die genannte eventMap für den Regensensor und warte
3. Bewundere das Problem

Genau diese drei Schritte sind notwendig. Nicht mehr und nicht weniger.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

gut - aber ich habe keinen regensensor - das ist nun einmal mein Problem. Ich versuche support für alle zu leisten, so gut ich kann - aber deshalb werde ich mir nicht alle Devices kaufen, die jemand hat.

Du hast das Problem auch mit anderen Aktoren? - mit welchen? Wo kannst du es noch nachstellen? Wenn ich ein solches Device habe versuche ich es.
Wie (auch schon mehrfach) erwähnt habe ich es mit meinen Devices bisher nicht geschafft, es nachzustellen. Versucht habe ich es schon, erfolglos.

Gruss Martin