Closed mschlenstedt closed 3 years ago
KOmmt ins nächste Release. Default-Einstellung ist nun "Uncached Reading".
Hier gab es zusätzlich noch folgendes Thema bei iButtons:
####### Zusätzlich habe ich noch unter Zeile 300 folgendes eingefügt, damit der Bus auf ein ungültigen Wert gesetzt wird wenn der Button nicht mehr verbunden ist. Damit ist die Auswertung in der LoxConfig einfacher. Hier kann vielleicht aber noch eine bessere Variante wie diese hier gefunden werden: if ($value eq "0") { $data{"bus"} = "-9999"; } #######
Hast du hier auch eine Änderung eingebaut?
Habe ich noch nicht eingebaut, weil mir der Sinn nicht ganz klar war. Warum nutzt du nicht die Option „Check Präsenz“ in der Device Konfigursation, um in LoxConfig auszuwerten ob der iButton am Bus ist oder nicht?
Ich verwende iButtons zum öffnen von Türen. An verschiedenen Türen ist daher ein Leser, der jeweils auf einem extra Bus hängt. Wenn jetzt ein Button erkannt wird, werte ich zusätzlich aus auf welchem Bus er erkannt wurde und öffne die Tür. Aktuell bleibt in "Bus" der zuletzt erkannte Bus stehen. Daher kann es vorkommen, dass die falsche Tür geöffnet wird. Aus meiner Sicht wäre es daher am besten wenn "Bus" auch zurück gesetzt wird sobald der Button nicht mehr verbunden ist.
Ah, verstehe. Wäre es OK wenn ich das mit "Check Präsenz" verbinde, d.h. der Bus wird nur auf "-9999" gesetzt, wenn für den iButton auch "Check Präsenz" aktiviert wurde?
Und ich wprde dann anstelle "-9999" lieber "-1" nehmen.
Ja ich denke das macht Sinn. -1 ist auch in Ordnung. Ich habe nur -9999 gewählt damit sicher Erkennbar ist, dass es durch meine Anpassung gesetzt wurde. Hab nicht den ganzen Code überblickt um eventuell andere Fälle zu sehen ;-)
Vielen Dank!
Installier mal bitte den letzten Master und schaue, ob es so funktioniert. Wenn "check present" am Device jetzt aktiviert ist und das Device ist nicht an irgendeinem Bus, wird der Bus auf -1 gesetzt.
Aktuell schreibe ich den Bus ja so: "bus.0", "bus.1" usw. Macht es Sinn das gleich ohne Text, also "0", "1" usw. zu schreiben? Dann wäre die Auswertung in LoxConfig noch einfacher.
Danke! Ich versuchs heute abend zu testen! Das mit dem Bus macht auf jeden Fall Sinn. Ich hab bisher eine Conversion dafür im MQTT Gateway... ;-)
Habs mal das preRelease instsalliert und dann die owfs2mqtt.pl ausgetauscht. Ich habe danach probleme mit meinen türen. Die Regex in Zeile 371 scheint mir immernoch falsch. Die Buttons werden nur sehr langsam erkannt. Wenn ich die Zeile wie folgt ändere passt es bei mir : ( $_ =~ /^\/(\d){2}.*$/ )
Die Anpassung für Bus = -1 hast du bei "Scan for values - default configs" gemacht. Da die Buttons aber eine CustomConfig haben muss diese zu auch zu "Scan for values - custom configs". So wie es momentan im #Publish steht funktioniert es aber bei mir auch nicht. Da die IF Abfrage nicht true wird.
Wenn du mehr infos brauchst meld dich.
Danke für's Testen!
Zum Bus = -1: Das war mein Denkfehler. Ich hab's noch einmal angepasst. So sollte es jetzt klappen. Probiere bitte noch einmal.
Zum Regex: Welche Zeile meinst Du genau? Finde in Zeile 371 nichts... Am Besten mal vorne auf die Zeilennummer klicken und Permalink auswählen und hier posten.
Aber wenn ich mich recht erinnere hatte ich doch damals etwas mit \d){2}.*, aber da werden keine Sensoren erkannt, die als Family ID z. B. "1B" haben. Verstehe auch noch nicht so ganz, warum der Regex die Erkennung verlangsamt... Das müsste ich mir noch einmal anschauen.
Jetzt sieht es gut aus. Ich kann leider erst morgen Nachmittag testen. Melde mich dann.
Sorry wegen der Regex meine ich: https://github.com/mschlenstedt/LoxBerry-Plugin-1-Wire-NG/blob/b253283eab193f94781e5dbed2b61841878b23c0/bin/owfs2mqtt.pl#L366
Da scheint es ein Problem zu geben. Muss mir aber auch nochmal genau anschauen was diese regex macht. Erinnere mich nicht mehr genau...
Das Thema mit Bus = -1 funktioniert jetzt. Vielen Dank! Cool wäre noch die Änderung, dass hier immer nur die Zahl übertragen wird und nicht Bus.1.
In der Regex ist meiner Meinung nach noch ein Fehler. Die Abfrage ist in einer for schleife, und hier werden vorher die devices aufgesplittet. Dabei steht folgendes im Array (Beispiel Daten):
/bus.4/interface /keepaliveepoch /28.12EFRG070000 /01.35HRG090000 /01.65IKL040000
Hier sollen doch die Button ID's gematcht werden oder? Deine aktuelle Regex erwartet aber "/bus.4/28.23EBEA040000" als Input damit es gematcht wird. Da aber nur z.b /01.35HRG090000 im Array steht müsste sie /^\/[0-9a-fA-F]{2}.*$/ lauten oder?
Danke für Deine Mühen! In der Variablen $devices steht eine Mischung aus dem Bus-Scan (vorher erzeugt mit $owserver->dir) und den Einträgen aus der devices.json (also den konfigurierten Devices). Das sieht dann so aus:
$VAR1 = '/bus.0/interface,/bus.0/01.67C6697351FF,/bus.0/0A.4AEC29CDBAAB,/bus.0/7E.F2FBE3467CC2,/bus.0/simultaneous,/bus.0/alarm,/01.67C6697351FF,/28.0E88F3622001,/28.F702FA622001,/0A.4AEC29CDBAAB,/keepaliveepoch,/7E.F2FBE3467CC2';
Die Einträge mit dem vorangestellten /bus.0 kommen vom Scan, die Einträge ohne Bus stammen aus der Device-Konfiguration.
Da muss ich wirklich nochmal ran.
So, Du könntest bitte noch einmal testen. Jetzt sollte es funktionieren. Wenn Du das Logging auf "Debug" stellst, bekommst Du auch Meldungen was er auf dem Bus und in der Config findet und ob er es ignoriert oder nicht.
Super, funktioniert alles :-)
Vielen Dank!!
Perfekt! Ich mach ein Release draus.
https://www.loxforum.com/forum/projektforen/loxberry/plugins/227489-plugin-1-wire-ng?p=247776#post247776