Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update 00_Signalduino.pm: Halbe letzte Bits bei MS rekonstruieren #491

Closed
wants to merge 2 commits into from

Conversation

MoskitoHorst
Copy link

Bei MS-Daten kann es sein, dass das letzte Bit nur teilweise in dem Datensatz repräsentiert ist. Sollte sich in diesem Fall aus dem letzten Zeichen und den Protokolldefinitionen One und Zero eine eindeutige Zuordnung ergeben, so wird diese Zuordnung dekodiert

  • Please check if the PR fulfills these requirements
  • Tests for the changes have been added / modified (needed for for bug fixes / features)
  • commandref has been added / updated (needed for bug fixes / features)
  • CHANGED has been updated (needed for bug fixes / features)
  • What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

  • What is the current behavior? (You can also link to an open issue here)

  • What is the new behavior (if this is a feature change)?

  • Does this PR introduce a breaking change? (What changes might users need to make in their application due to this PR?)

  • Other information:

Bei MS-Daten kann es sein, dass das letzte Bit nur teilweise in dem Datensatz repräsentiert ist. Sollte sich in diesem Fall aus dem letzten Zeichen und den Protokolldefinitionen One und Zero eine eindeutige Zuordnung ergeben, so wird diese Zuordnung dekodiert
@sidey79
Copy link
Contributor

sidey79 commented Jan 19, 2019

Danke für den PR. Ich schau ihn mir an und werde bei Fragen etwas kommentieren

@sidey79 sidey79 self-requested a review January 19, 2019 21:28
FHEM/00_SIGNALduino.pm Outdated Show resolved Hide resolved
$endPatternLookupHash{substr($pstr,0,length($pstr)-1)}="0" ;
#SIGNALduino_Log3 $name, 4, "$name: Sync 0 ".$pstr." -> ".substr($pstr,0,length($pstr)-1)." eingetragen";
} else {
delete $endPatternLookupHash{substr($pstr,0,length($pstr)-1)};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wen 0 und 1 die gleiche Sequez bis zum vorletzten haben, dann kann man 0 bzw. 1 nicht bestimmen. Deshalb löschst Du hier den Eintrag.
Habe ich das richtig verstanden`?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Genau. Da ich in Perl nicht zu Hause bin hoffe ich, das die Lösung so ok ist. Allerdings kann ich mit dieser Methode den Zweig für float nicht lösen.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alles gut. Um float würde ich mir keine all zu großen Gedanken machen.

FHEM/00_SIGNALduino.pm Outdated Show resolved Hide resolved
@sidey79
Copy link
Contributor

sidey79 commented Jan 20, 2019

@HomeAutoUser
@Ralf9

Was meint ihr. Für mich sieht das nach eine validen Lösung aus,

@Ralf9
Copy link
Contributor

Ralf9 commented Jan 23, 2019

Welche Fälle sollen damit abgedeckt werden.
Gibt es noch andere Fälle als, daß eine MU-Nachricht falsch als MS-Nachricht erkannt wird.
Als Beispiel habe ich nur die ID 91.1 und 25 gefunden

@HomeAutoUser
Copy link
Contributor

HomeAutoUser commented Jan 24, 2019

Hallo, wir haben einen erneuten Fall von der Problematik bei dem Protokoll von Jarolift.
P87 (MS). #380 (comment)

Hier ist es auf jedenfall so, das wir das letzte Bit nicht stur setzen können auf 1 oder 0, weil es mal so mal so ist. @sidey79 hast du dir darüber schon Gedanken gemacht wie wir dies übernehmen? Diesen PR oder eine Lösung welche bei MS und bei MU "zusammen" funktioniert.

@HomeAutoUser HomeAutoUser mentioned this pull request Jan 24, 2019
@MoskitoHorst
Copy link
Author

Könnte das Verfahren nicht auch bei MU funktionieren?
Wenn beim Auswerten mit den Regex aus one/Zero/float noch Pulse über sind diese mit einem Regex um verkürzte one/Zero testen. Die Kombinationen der Verkürzten Werte one/Zero sind fast immer eindeutig und der mehrdeutige Fall sieht mir so aus, als ob da immer ein Puls als Ende kommen muss.

@sidey79
Copy link
Contributor

sidey79 commented Jan 25, 2019

Könnte das Verfahren nicht auch bei MU funktionieren?

Ich schätze es aktuell so ein, dass es dort auch funktionieren sollte. Vielleicht spielen aber ein paar Details nicht mit.

@HomeAutoUser
Copy link
Contributor

@sidey79 @Ralf9 @MoskitoHorst
Bei allen PR´s bezüglich der "Geschichte" sehe ich schon fast nicht mehr durch nun.
Wie ist der Stand bei dem last Bit MS? Wir können es nicht fest machen und hatten mal eine Lösung angesprochen.

.... oder nutzt nun jeder seine eigene Variante smile

@MoskitoHorst
Copy link
Author

Ich brauche "meine" Lösung nicht. Bin schon stolz, dass mein erster Versuch in Perl so weit gekommen ist und gehe auf eure Lösung, sobald die ins Update kommt. Wie man bei Git dann den PR wieder zurückzieht muss ich erst lernen.

@sidey79
Copy link
Contributor

sidey79 commented Jan 29, 2019

@MoskitoHorst

Wie auch immer das ganze ausgeht. Du hast uns einen guten Hinweis geliefert. Deine Lösung ist auf jeden Fall irgendwie enthalten. Eventuell nur mit anderen code Zeilen :)

sidey79 added a commit that referenced this pull request Feb 4, 2019
included PR #491 from MoskitoHorst
@sidey79
Copy link
Contributor

sidey79 commented Feb 10, 2019

Ich habe deine Anpassungen in #494 eingebaut. Daher schließe ich diesen PR. Deine commits bleiben dadurch erhalten.

@sidey79 sidey79 closed this Feb 10, 2019
sidey79 added a commit that referenced this pull request Feb 24, 2019
* Update 00_Signalduino.pm: 

Bei MS-Daten kann es sein, dass das letzte Bit nur teilweise in dem Datensatz repräsentiert ist. Sollte sich in diesem Fall aus dem letzten Zeichen und den Protokolldefinitionen One und Zero eine eindeutige Zuordnung ergeben, so wird diese Zuordnung dekodiert

Bei MU-Nachrichten kann es vorkommen, daß die zweite Hälfte des letzten Bits fehlt.
Wenn in der Protokolldefinition "reconstructBit => 1" steht, dann wird das letzte Bit rekonstruiert.


new sub SIGNALduino_FillPatternLookupTable to fill lookup tables


Parse_MS optimized:

Längenprüfung optimiert. 
- Die Prüfung auf length_min am Anfang ist nun einfacher und genauer.
- Die Längenprüfung ist nun vor dem padding.
debug und log Ausgaben ergänzt.

modulematch replaced with sub SIGNALduino_moduleMatch 

included PR #491 from MoskitoHorst

* test/test_MS_1-definition.txt

added Tests with and withoud reconsruct bit


* test/test_MS_2-definition.txt

- Load test Data from test/test_loadprotohash-ok.hash
- Read test input and results from hash
- test min, max length with and without reconstructBit

changed substr to much faster chop and replace length min/max check with SIGNALduino_TestLength
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants