panStamp support

Begonnen von justme1968, 24 April 2013, 21:38:24

Vorheriges Thema - Nächstes Thema

rudolfkoenig

> jeder panstamp wie in einem mesh network nachrichten erneut senden kann

Dann muss mAn das Firmware solche Duplikate filtern, bei FS20 werden ja auch nicht 3 Nachrichten zu fhem weitergereicht, weder vom FHZ noch vom culfw.

> das dimup/dimdown beispiel ist mir nicht ganz klar

Ich druecke die FS20 Fernbedienung etwas laenger, dann faengt dieser an dimup mit Abstand von etwa 0.3 Sekunden zu senden. Da das nicht mehr als FS20-Wiederholung von culfw erkannt wird, werden diese Befehle an fhem weitergegeben.
Falls die gleichen Daten von einem weiterem Empfaenger (CUL/FHZ) innerhalb von 0.5 Sekunden gemeldet werden, dann werden diese von fhem unterdrueckt im CheckDuplicate()

Wenn wir nach deinem Vorschlag die Geraete-Unterscheidung in CheckDuplicate() entfernen, dann kommt beim Benutzer nur ein einziges dimup an, und man kriegt nicht mal mit, wann man mit dimup aufgehoert hat.

Wg. FS20-KnowHow in CheckDuplikate:
- Korrekterweise muessten _alle_ Module, die Daten per Dispatch liefern, auch noch mitteilen, welcher Teil dieser Daten fuer ein Duplikatspruefung relevant ist. D.h. alle Module die Dispatch verwenden (17 Stueck) anpassen.
- Das schlimme daran: das ist nicht mal das Problem, da man eigentlich die komplette Nachricht pruefen koennte. Bloss war ich im 00_CUL.pm zu faul, und habe beim Nachstellen des FHZ Formats fuer FS20 und FHT die FHZ Checksumme nicht gefaelscht, weil FS20.pm und FHT.pm es nicht braucht. Deswegen habe ich es in CheckDuplikate gefiltert (war einfacher). D.h. wenn ich die FHZ-Checksumme in 00_CUL.pm berechne, kann man die "FS20"-Zeile in CheckDuplikate entfernen.

justme1968

Zitat von: rudolfkoenig schrieb am Sa, 25 Mai 2013 18:57> jeder panstamp wie in einem mesh network nachrichten erneut senden kann

Dann muss mAn das Firmware solche Duplikate filtern, bei FS20 werden ja auch nicht 3 Nachrichten zu fhem weitergereicht, weder vom FHZ noch vom culfw.
jein. vom konzept her sind die panstamps etwas dümmer als ein cul. d.h. der host macht etwas mehr. für das 'native' protokoll sollte es aber schon so sein. zur zeit tun sie das aber leider nicht.

Zitat von: rudolfkoenig schrieb am Sa, 25 Mai 2013 18:57> das dimup/dimdown beispiel ist mir nicht ganz klar

Ich druecke die FS20 Fernbedienung etwas laenger, dann faengt dieser an dimup mit Abstand von etwa 0.3 Sekunden zu senden. Da das nicht mehr als FS20-Wiederholung von culfw erkannt wird, werden diese Befehle an fhem weitergegeben.
Falls die gleichen Daten von einem weiterem Empfaenger (CUL/FHZ) innerhalb von 0.5 Sekunden gemeldet werden, dann werden diese von fhem unterdrueckt im CheckDuplicate()

Wenn wir nach deinem Vorschlag die Geraete-Unterscheidung in CheckDuplicate() entfernen, dann kommt beim benutzer nur ein einziges dimup an, und man kriegt nicht mal mit, wann man mit dimup aufgehoert hat.
verstanden. aber einfach lösbar in dem die fingerprint funktion mit angibt ob das das IODev relevant ist oder nicht.

Zitat von: rudolfkoenig schrieb am Sa, 25 Mai 2013 18:57Wg. FS20-KnowHow in CheckDuplikate:
- Korrekterweise muessten _alle_ Module, die Daten per Dispatch liefern, auch noch mitteilen, welcher Teil dieser Daten fuer ein Duplikatspruefung relevant ist. D.h. alle Module die Dispatch verwenden (17 Stueck) anpassen.
- Das schlimme daran: das ist nicht mal das Problem, da man eigentlich die komplette Nachricht pruefen koennte. Bloss war ich im 00_CUL.pm zu faul, und habe beim Nachstellen des FHZ Formats fuer FS20 und FHT die FHZ Checksumme nicht gefaelscht, weil FS20.pm und FHT.pm es nicht braucht. Deswegen habe ich es in CheckDuplikate gefiltert (war einfacher). D.h. wenn ich die FHZ-Checksumme in 00_CUL.pm berechne, kann man die "FS20"-Zeile in CheckDuplikate entfernen.
- ja aber eigentlich nicht (nur) die module die die daten für das dispatch liefern sondern (auch) die module die die daten per dispatch empfangen weil es vom protokoll abhängt und das IODev eigentlich nichts vom protokoll wissen sollte und auch gleichzeig mehrere protokolle (transparent) bedienen kann.

- das mit dem anpassen ist kein problem und einfach rückwärts kompatibel lösbar: wenn ein modul nichts angibt bleibt das verhalten so wie es ist und die ganze nachricht wird verwendet. man kann das sogar zweistufig machen. die fingerprint funktion kann entweder im IODev sein oder im parsenden modul.

- es ist noch nicht mal nötig die checksumme zu berechnen. es reicht wie bisher das fälschen. nur eben nicht in CheckDuplikate sondern in der fingerprint funktion im 00_CUL.

ich habe das gerade eben mal probehalber umgesetzt:
  • jedes modul das dispatch aufruft und jedes modul das parse anbietet kann optional eine fingerprint funktion haben:
sub                          
SWAP_Initialize($)            
{
...
  $hash->{FingerprintFn}   = "SWAP_Fingerprint";
...
}

sub
SWAP_Fingerprint($$$)
{
  my ($hash, $name, $msg) = @_;
 
  substr( $msg, 2, 2, "--" ); # ignore sender
  substr( $msg, 4, 1, "-" ); # ignore hop count

   # IODev is not relevant
   return ("",$msg);
}[/pre]
für CUL (IODev ebene):
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

noch etwas: das mit der regex für die client liste funktioniert leider so (noch) nicht. die client liste wird auch beim dispatch verwendet. und da werden dann die client module nicht mehr gefunden.

wie wäre es statt dessen die alternative idee zu verwenden: einen zweiten optionalen paramter für das AssignIoPort um den type anzgeben statt aus dem hash auszulesen.

ich habe meine beispiel implementierung noch mal aufgeräumt. wenn man $hash->{FingerprintFn} mit an CheckDuplicate übergibt und den fingerprint aufruf dort macht und die found behandlung in einem neuen sub zusammenfasst  wird das noch übersichtlicher und Dispatch sogar kürzer im vergleich zu jetzt.

und noch ein satz zur duplikat erkennung in der firmware: die reicht dann nicht mehr wenn mehr als ein panstamp als IODev an fhem hänget und von jedem eine nachricht mit unterschiedlich vielen hops empfangen wird. dann brauche ich wieder die fingerprint funktion um als duplikate erkennen zu können.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

hier mein vorschlag zum duplicate check noch mal als patch.

bitte schau dir auch das mit der regex für die client liste noch mal an. einen zweiten optionalen paramter für das AssignIoPort ist glaube ich die bessere lösung.

edit: der 00_CUL.pm patch war falsch. ich hatte aus versehen das swap modul kopiert. jetzt ist es die richtige version.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

>  noch etwas: das mit der regex für die client liste funktioniert leider so (noch) nicht. die client liste wird auch beim dispatch verwendet. und da werden dann die client module nicht mehr gefunden.

Das habe ich jetzt gefixed und eingecheckt. Als Seiteneffekt sollte die Suchschleife in Dispatch etwas schneller werden.

justme1968

ich hab grad bemerkt das der fhem.pl.patch aus dem post weiter oben verschwunden ist und nur der 00_CUL.pl.patch noch da ist. ich weiss zwar nicht warum aber ich unterstelle jetzt mal keine absicht :)

hat du dir den patch schon mal angeschaut? oder soll ich ihn noch mal hochladen?

wenn du prinzipiell gegen eine erweiterung und verallgemeinerung von CheckDuplicate bist müsste ich selber etwas ins swap modul einbauen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

> ich weiss zwar nicht warum aber ich unterstelle jetzt mal keine absicht :)
Weder Absicht nocht Versehen, jedenfalls nicht von mir.

> hat du dir den patch schon mal angeschaut?
Nein, da ich noch nicht dazugekommen bin. Ich habe die Angewohnheit aufwendigere FHEM-Aufgaben nach hinten zu schieben.

> oder soll ich ihn noch mal hochladen?
Gerne.

justme1968

das ist gar nicht so aufwändig wie es sich anhört :)

anbei noch mal die beiden patches.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

daniel berenguer von panstamp hat angefragt ob er die panstamp fhem module offiziell ankündigen darf. mein vorschlag wäre das dann zu tun wenn sie ganz normal mit eingecheckt sind. dazu würde ich gerne einen duplikats check haben. entweder in fhem oder im swap modul.

hast du einen etwahigen zeitplan wann du dir das anschauen kannst?

spricht sonst noch etwas gegen das einchecken? fehlende doku zählt nicht. die ist fast fertig. inzwischen scheint es ausser mir noch ein paar anwender zu geben :)

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Hab die patches eingecheckt:
- fast perfekt, aber ein fingerprintfn gehoert auch ins FHZ, es geht ja darum, dass FHZ und CUL vergleichbar bleibt.
- ich vermute Du treibt irgendein Schabernack mit Fingerprintfn, da Du ioname manchmal leer haben willst, und es fuer alle logischen Geraete aufrufst. Aber "so be it".

justme1968

klasse!

- stimmt. fhz hab ich komplett vergessen mit zu posten.da ich keine hab ist es mir beim testen auf dem zweiten rechner nicht aufgefallen.

- kein schabernack :). zur erklärung: die duplikate die ich erkennen will sind die durch den repeater verursachten. dazu muss ich muss bei swap ins protokoll schauen und das macht nicht das iodev sondern erst der nächste in der kette. dafür haben die nachrichten aber alle eine eindeutige id und ich muss kein zeitfenster verwenden sondern kann duplikate auch iodev übergreifend erkennen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Zu frueh gefreut: sehe gerade, dass ich z.Zt. bei meiner Hauptinstallation damit massiv Duplikate kriege...
Muss jetzt debuggen :/

rudolfkoenig

Im RFR hat FingerprintFn gefehlt.

Da RFR sowohl Provider als auch Client ist, wird CheckDuplicate fuer die gleiche Nachricht 2-mal aufgerufen, und dann nochmal nachdem RFR die Nachricht ausgepackt hat.

Hast Du eine Idee, wie man das verhindern koennte?

Aber erstmal bleibt das ganze so.

justme1968

ich wollte mich gerade daran machen eine erste version der panstamp module einzuchecken. vorher aber noch eine frage:

zu jedem panstamp device gehört ein device description xml file das die register beschreibt.

ich habe diese xml files bei mir zur zeit unter FHEM/SWAP liegen. wäre FHEM/lib/SWAP besser geeignet ?

edit: zum mehrfach check habe ich noch keine gute idee. zumindest der 2 fach aufruf ist doof. der dritte für die ausgepackte nachricht ist aber glaube ich logisch. es soll ja auch erkannt werden wenn die per rfr weitergeleitete nachricht ein duplikat für eine direkt empfangene ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

FHEM/lib/SWAP waere mir lieber.

Noch lieber, wenn es gar keine zusaetzlichen Verzeichnisse gibt: neue Verzeichnisse werden erst nach einer manuellen Eintrag mit update verteilt. Melde Dich, falls ich was eintragen soll.