panStamp support

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

Vorheriges Thema - Nächstes Thema

justme1968

guten abend,

auch wenn es noch viel zu früh und unfertig ist hier kurz ein hinweis das ich mit der integration der panStick hardware in fhem angefangen habe. falls noch jemand etwas in dieser richtung tut wäre es schön zusammen daran zu arbeiten.

mehr hier: Link

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

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

justme1968

ich habe die panStamp/panStick kombination inzwischen ohne probleme in fhem laufen.

da das modul aus einem umbenannten cul modul entstanden ist und ich versucht habe alle features wie send und receive queue, 1% check, usb device öffnen und autocreate bei unbekannten nachrichten beizubehalten ist es dem cul modul immer noch sehr ähnlich.die unterschiede sind die initialisierungs sequenz, ein anderes zeilenende zeichen, die liste der client module und natürlich die fs20 und hm besonderheiten.

alles was nicht direkt mit dem protokoll oder der hardware zu tun hat ist aber noch so ähnlich oder identisch das es fast schade ist den code zu kopieren statt gemeinsam zu verwenden.

welche meinung gibt es hierzu?

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

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

rudolfkoenig

Bevor wir CUL.pm umbauen, um ein paar Zeilen zu sparen, wuerde ich die Zeilen lieber duplizieren. Das vereifacht auch die Aenderung von CUL.pm, da nicht jeder ein panStamp zur Verfuegung hat, um damit zu testen.

justme1968

ich habe hier Link eben eine erste test version gepostet.

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

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

justme1968

bis jetzt sind die panstamp module nach dem gleichen zweistufigen modell wie die cul/fs20/hm module implementiert.

ich würde das für panstamp/swap gerne auf ein dreistufiges konzept erweitern. d.h neben dem modul das das funkmodem bedient und dem modul das das protokoll implementiert und ganz generisch mit allen swap devices umgehen kann noch eine dritte ebene mit modulen die device spezifische funktionen anbieten.

zur erklärung: die kommunikation per swap erfolgt über abstrakte 'register' die gesendet und empfangen und so gelesen und beschrieben werden können. ein register kann ein oder mehrere readings oder 'anweisungen' enthalten. mit dem swap modul ist es möglich jedes beliebige swap device über sein device description xml file in fhem einzubinden. um mit dem device zu kommunizieren stehen dann regGet und regSet kommandos auf recht niedriger ebene zur verfügung. das reicht zum beispiel völlig aus um sensor werte wie temperatur,feuchtigkeit oder luftdruck zu lesen und wie jeden anderen sosor in fhem einzubinden. auch das schalten von relais oder dem rgb led board ist so möglich.

sobald das device aber 'intelligenter' wird und z.b dim,pct oder ein äquivalent zu on-for-timer anbietet ist es nicht mehr besonders intuitiv das 'zu fuss' über die register zu machen und es wäre schön in fhem ein on-for-timer abzusetzen das dann auf die entsprechenden register im swap protokoll gemappt wird und vom swap modul dann über das panstamp modul gesendet wird. für den rückweg gilt im prinzip das gleiche. eine vom panstamp modul empfangene nachricht wird vom swap modul geparsed und aufbereitet und sollte dann je nach device z.b. als lampe oder dimmer in fhem erscheinen.

ich habe jetzt ein wenig experimentiert und es scheint z.b. so etwas möglich zu sein:

sub
SWAP_RGB_Initialize($)
{
  my ($hash) = @_;
 
  require "$attr{global}{modpath}/FHEM/34_SWAP.pm";

  $hash->{SWAP_SetFn}     = "SWAP_RGB_Set";
  $hash->{SWAP_GetFn}     = "SWAP_RGB_Get";
  $hash->{SWAP_ParseFn}  = "SWAP_RGB_Parse";

  return SWAP_Initialize($hash);
}


d.h. ein hypothetisches rgb led modul setzt seine eigenen set und get und parse methoden und ruft die initialisierung des normalen swap moduls auf. das normale swap modul ruft dann an geeigneter stelle in den normalen set, get und parse methoden zusätzlich zu den generischen auch noch die jeweils device spezifischen routinen auf. diese implementieren dann die in fhem für eine lampe vorgesehenen on/of/on-for-timer/... und setz diese auf die low level register kommandos um.

klingt das halbwegs vernünftig? ist eine solche dreiteilung langfristig vielleicht noch an anderer stelle interessant?

gruss
  andre



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

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

Tobias

eine kurze zwischenfrage: muss auf den panstamps irgendwelche firmware drauf? Muss ich da etwas selbst in bascom oder C programmieren?? Ich hoffe nicht, bin froh perl etwas zu können ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

ja. es muss was drauf.

es gibt aber schon diverse sketches für temperatur/luftdruck/feuctigkeit, bodenfeuchte, relais und io, 1-wire und das rgb board. selber programmieren musst du also eigentlich nur wenn du eigene/neue hardware anschliessen willst. für die 'fertige' hardware musst du nur den beispiel code drauf brennen. das geht mit einem mausklick.

ansonsten ist es c++ und viel viel einfacher als perl :)

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

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

justme1968

ich habe die idee noch etwas erweitert und jeweils eine set und get liste analog zur AttList und ähnlich wie in den SetExtensions verwendet:$hash->{SWAP_SetList}   = { on => 0, off => 0, "on-for-timer" => 1, rgb => 1, toggle => 0, };. der ansatz die 'parent' initialize funktion aufzurufen funktioniert bis jetzt ziemlich gut. eine einzige kleine unschönheit habe ich bis jetzt bemerkt: ich muss im generellen initialize vor dem aufruf von AssignIoPort den TYPE auf den type des generellen moduls setzen und danach wieder auf den des spezialisierten moduls.

wäre es denkbar AssignIoPort so zu erweitern das wenn kein direkter match auf den modul typ in der client liste gefunden die suche auf module die mit dem typ als prefix beginnen erweitert wird? so das z.b. ein modul SWAP_RGB auch bei einer client liste von nur :SWAP: matched.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Dreiteilung:
- ich habe prinzipiell nichts dagegen, obwohl dreistufig hier missversteaendlich ist: es ist entweder das generische oder das spezialisierte Modul, der die Anfragen beantwortet.
- ZWave.pm macht sowas aehnliches meiner Ansicht nach recht elegant :), auch wenn es nur zwei Ebenen verwendet: ein Geraet kann mehrere Klassen (== interfaces) haben, und je nach interface gibt es zusaetzliche Befehle bzw. Parse Funktionen. Aber wie gesagt, ich habe nichts gegen alternative Loesungesansaetze.

AssignIoPort:
- die Notwendigkeite einer Fallback auf Dateibasis verstehe ich nicht: wer soll wann wessen IoDevice sein, bzw. wo passt es jetzt nicht?
- AssignIoPort sollte nicht in Initialize sondern in define oder AttrFn durchgefuehrt werden.

justme1968

was meinst du genau mit missverständlich? so wie ich es gerade verwende ist es auf der logischen ebene tatsächlich so das beide module anfragen beantworten. das allgemeine stellt z.b. die generellen register kommandos zur verfügung und leitet die anderen kommandos an das spezielle modul weiter. aus nutzer sicht verwendet er nur das spezielle modul das die speziellen und allgemeinen kommandos bereitstellt. aus entwickler sicht 'erbt' das spezielle modul die allgemeinen kommandos. es sind also wirklich drei ebenen:
- hardware/funk (panstamp -> entspricht cul)
- protokoll und generische funktionen (swap)
- device spezifisch: licht/dimmer/...

bei fs20 ist im prinzip die 1. und 2. ebene zusammen gefasst weil an den nachrichten direkt erkenn bar ist um welches device es geht( schalter/wetter/...) bei homematic ist die 2. und 3. zusammen gefasst weil sich ein modul um alle homematic devices kümmert. bei swap geht beides nicht wirklich weil zum einen ich nicht auf ebene 1. entscheiden kann zu welchem device sie gehören und zum anderen die devices von den unterschiedlichsten 'herstellern' kommen und das gleiche register völlig unterschiedliches bedeuten kann.

zwave schaue ich mir mal an. mir geht es aber nicht nur darum das ein gerät mehrere klassen/interfaces haben kann sondern darum das der code für diese unterschiedlichen geräte zum einen nicht alle in einem file stehen müssen sondern auch von völlig unterschiedlichen entwicklern kommen können die sich nur sehr minimal abstimmen müssen.

ein konkretes beispiel ist der rgb led kontroller. der funktioniert mit dem generellen modul auf register ebene. so zu sagen zu fuss. um ihm on und off kommandos beizubringen wäre ein weg im generellen modul sonderfälle einzubauen und dann z.b. diese zusätzlichen kommandos mit anzubieten. jetzt erweitere ich aber z.b. meine rgb firmware noch um ein on-for-timer das auf dem modul selber läuft und habe noch die ir fernbedienung implementiert. das wären dann wieder noch mehr sonderfälle. das ist zwar an sich schon nicht schön (und funktioniert z.b. bei homematic nur weil alle geräte von einem hersteller kommen und ein einziger entwickler alle implementiert). es wird aber spätestens dann wirklich unhandlich wenn die geräte von unterschiedlichen 'herstellern' kommen und nicht mehr ein entwickler alles implementiert oder auch nur koodriniert. wenn jemand sein rgb modul auf andere art erweitert und dann seine Änderungen lokal einbaut und die beim nächsten update wieder flöten gehen ist es einfach nicht gut. schöner ist es wenn er ein 'abgeleitetes' modul schreiben kann das NUR die erweiterten kommandos anbietet und alles andere an das allgemeine SWAP modul delegiert. in meiner beispiel implementierung an der ich gerade arbeite schrumpft so das led modul auf ein initialize, ein set und ein get mit einer hand voll zeilen. das define, das protokoll, io und alle allgemeinen kommandos bleiben im allgemeinen modul.

zum AssignIoPort: die kurze antwort: natürlich wird es im initialize durchgeführt, zur zeit wird aber geprüft ob das modul exakt in der client liste ist. ich möchte aber das alle jetzigen und zukünftigen clients matchen ohne das ich die client liste jedes mal für ein neues spezialisiertes modul oder jeden anwender der sein eigenes modul schreibt erweitern muss. also wünsche ich mir ein matchen auf z.b. auf SWAP\w*.

die lange antwort: in der client liste von panStamp steht :SWAP:, das generelle modul heißt SWAP und dort im define wird das AssignIoPort aufgerufen. bis hierher noch kein problem. jetzt schreibe ich das 'erweiterete' SWAP_RGB modul. in diesem brauche ich kein define weil mir das define des allgemeinen moduls reicht. also verwende ich es in meinem initialize direkt als DefFn ohne eine eigene zu implementieren (real mache ich sogar noch weniger in dem ich auch das initialize des allgemeinen SWAP moduls verwende und so noch nicht mal etwas vom define wissen muss). jetzt ist aber der TYPE des moduls während  des define aufrufs nicht mehr SWAP sondern SWAP_RGB und das matched nicht mehr auf die client liste des panStamp moduls und ich bekomme kein IODev. zur zeit löse ich es im define des allgemeinen moduls so:  my $type = $hash->{TYPE};
  $hash->{TYPE} = "SWAP";
  AssignIoPort($hash);
  $hash->{TYPE} = $type;
das ist aber nicht sehr elegant.

schon wieder so viele worte für etwas das eigentlich ganz einfach ist wenn man es vor sich hat :). und nerven soll es auch nicht...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

wie wäre es wenn man AssignIoPort den TYPE einfach als optionalen parameter übergeben könnte?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

> was meinst du genau mit missverständlich?

Dass aus benutzersicht nicht 3 Geraete definiert werden muessen, sondern nur zwei. Das dritte Modul wird per "use" geholt, und ist nur fuer den Entwickler wichtig.


AssignIoPort: ich bin nicht ganz sicher, ob man sich mit der freien Erweiterbarkeit ein gefallen tut, aber ich habe jetzt AssignIoPort so geaendert, dass die Client Elemente als regexp (in ^$) geprueft werden. Damit sollte dein Problem auch loesbar sein.

justme1968

ich bin gerade dabei die unterstützung für den repeater mode in das swap modul einzubauen. eigentlich wäre das eine schöne anwendung für die AddDuplicate/CheckDuplicate funktionen. leider sind die aber aus zwei gründen zur zeit nicht dafür zu gebrauchen:

- es werden nur duplikate von unterschiedlichen IODevs erkannt. im repeater mode werden aber identische nachrichten vom gleichen IODev empfangen.

- es steckt 'wissen' über den aufbau einer fs20 nachricht drin bzw.  das hinzufügen und der check sind eigentlich noch zu früh weil es direkt nach dem empfang im IODev bzw im dispatch passiert. eigentlich gehört aber beides von der logik her nach das parsen weil erst dann identische nachrichten (die sich z.b. im sender, einer prüfsumme oder einem timestamp die alle durch das resend verändert werden können) wirklich unterscheiden kann.

ersteres könnte man lösen in dem man den check auf unterschiedliches IODev einfach streicht. mir fällt kein fall ein bei dem das probleme machen sollte.

das zweite könnte man lösen in dem man auf irgend eine art angeben kann welche teile einer nachricht von der prüfung ausgenommen werden sollen oder in dem man dem device dessen parse funktion aufgerufen wird eine 'fingerprint' funktion gibt die die nachricht so aufbereitet das ein einfache vergleich ausreicht:

- AddDuplicate wird nicht mehr vom IODev aufgerufen (sondern von Dispatch s.u.)
- im IODev gibt es ein flag das angibt ob der check auf duplikate durchgefürt werden soll.
- Dispatch ruft CheckDuplicate nicht mit der nachricht auf die dispatched werden soll sondern mit einer vom parsenden device aufbereiteten (dem fingerprint)
- wenn es kein duplikat ist ruft Dispatch AddDuplicate mit der aufbereitete version auf

ist so eine generelle lösung sinnvoll bzw. würdest du so etwas allgemein einbauen? oder ist dir eine lösung im device lieber?


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

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

rudolfkoenig

> es werden nur duplikate von unterschiedlichen IODevs erkannt.

Ist ja auch exakt dafuer gebaut.


> im repeater mode werden aber identische nachrichten vom gleichen IODev empfangen.

Wenn man sowas richtig loesen will, dann sollten die Repeater-Nachrichten erkennbar sein, und der Repeater als eigenstaendiges Geraet in fhem angelegt sein (wie z.Bsp. CUL_RFR), damit wuerde CheckDuplicate die doppelten Nachrichten auch filtern. Und man wuesste als Enduser, woher die Nachrichten kommen, ob der Repeater ueberhaupt was fuer sein Geld tut, usw.

Wenn das nicht geht, dann kann der Benutzer immer noch event-min-interval setzen.


> steckt 'wissen' über den aufbau einer fs20 nachricht drin

Ja, aber nicht sehr viel. Und den Aufwand fuer eine "richtige" Loesung finde ich nicht im Verhaeltnis zum Gewinn. Notfalls kann man diese Pruefung nochmals verschaerfen.


> mir fällt kein fall ein bei dem das probleme machen sollte.

Mir schon: dimup/dimdown bei FS20 Geraeten.


justme1968

der panstamp repeater mode ist kein eigenständiges device sondern die moeglichkeit das jeder panstamp wie in einem mesh network nachrichten erneut senden kann. ein eigenes device wie es fuer homematic passend wäre ist hier nicht sinnvoll. event-min-intervall ist nicht geeignet weil dann alle schnell aufeinander folgende nachrichten unterdrückt werden. wie z.b. beim rauf oder runter dimmen.

nicht viel wissen. aber genug um es nicht wiederverwendbar zu machen.

mir ist nicht ganz klar warum das verschieben und zusammenfassen jeweils genau der zwei zeilen die jetzt die nachricht für die pruefung auf aufbereiten und das kombinieren von prüfen und hinzufügen an einer zentralen stelle kein grosser aufwand im vergleich den kompletten code zu duplizieren. vielleicht irre ich mich aber die idee die mir vorschwebt ist eigenich recht einfach.

das dimup/dimdown beispiel ist mir nicht ganz klar. wenn aufeinander folgende nachrichten sich nicht anhand eines zaehlers oder timestamp unterscheiden ist die prüfung auf unterschiedliche IODev dich nur ein workaround fuer eine zeitliche schwelle.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

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.

justme1968

ich würde die files gerne zusammen halten.

trägst du bitte FHEM/lib/SWAP ein ?

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

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

rudolfkoenig


justme1968

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

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

justme1968

unter FHEM/lib/SWAP hängen noch mehrere unterverzeichnisse. kannst du du bitte auch eintragen?

brauchst du eine feste liste? falls ja trag bitte erst mal .../panStamp und .../justme ein.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

> unter FHEM/lib/SWAP hängen noch mehrere unterverzeichnisse.

Sehe ich auch gerade. Passt mir nicht wirklich, da:
- ich diese per Hand eintragen muss. Erstens ins fhemupdate (laedt die Dateien auf fhem.de aus SVN) und zweitens in controls_fhem.txt, der dem update sagt, dass es fuer jeden dieser Verzeichnisse bei jedem update ein mkdir machen soll.
- Leerzeichen im Namen sind ein NO-GO (asking for trouble)
- diese Struktur schreit danach, dass man immer neue Verzeichnisse anlegt

-> Waere es moeglich alle Dateien in das SWAP Verzeichnis zu packen? Wenn nicht, dann bitte die Leerzeichen entfernen, und ich fuege diese 7 Verzeichnisse ein.

justme1968

ohne die unterverzeichnisse geht es leider nicht weil die devices von unterschiedlichen quellen kommen und gleiche namen nicht ausgeschlossen werden können.

bitte trage erst mal nur die .../panStamp und .../justme verzeichnisse ein. das sind alle original devices von panstamp und meine speziell für fhem gemachten. die anderen sind vermutlich für die aller aller meisten (noch) nicht interessant.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

> ohne die unterverzeichnisse geht es leider nicht

Alternativ kann man ja statt Verzeichnis Dateinamen-Prefix verwenden

> bitte trage erst mal nur die .../panStamp und .../justme verzeichnisse ein.

erledigt.