97_PiXtendV2.pm

Begonnen von sh25, 30 November 2020, 12:36:28

Vorheriges Thema - Nächstes Thema

sh25

Hallo Forenmitglieder,
derzeit versuche ich ein PiXtendV2-S - Modul unter fhem zum Laufen zu bekommen - leider ohne Erfolg. Basierend auf einem Basic-Image von der Herstellerhomepage und einem frisch installierten fhem laut Anleitung von den fhem-Seiten liefert mir das angelegte device den Status:Error und "Wrong model selected". Einzig ein "set pix reset" ruft eine Reaktion des Moduls hervor. Das Auslesen liefert "?" und die spi-LED wird aus fhem nicht angesteuert. Das Logfile trotz verbose 5 liefert einzig "PERL WARNING: syswrite() on closed filehandle $handler at ./FHEM/97_PiXtendV2.pm line 1281, <$fh> line 26." und "...line 1284..." was das Modul betreffen könnte. Der sehr bemühte Herstellersupport hat die Installation nachvollzogen, konnte allerdings den Fehler nicht nachstellen. Die cli-Tools pxtend und pixtendv2s wie auch ein delphi-Beispiel aus der Basisinstallation funktionieren, steuern die orange SPI-LED und auch die Baugruppen auf dem Modul erfolgreich an. Bezüglich des fhem - Zugriffs konnte mir der Support nicht weiterhelfen, da der Kontakt zum Modulentwickler wohl nicht mehr besteht.
Für weiteres Debugging fehlen mir die Kenntnisse - für Hinweise wäre ich echt dankbar.
Grüße
SH


fireballrs

Hallo,

das ist ja spannend! Gerade vor einer Woche hast du deinen Post erstellt.

Ich habe gerade das gleiche wie du versucht und stoße auf die selbe Problematik.
Neues Setup und neues Gerät.

"Wrong Model selected"...

Hast du vielleicht eine Lösung dazu gefunden?

Gruß

Dominik

fireballrs

Hallo nochmal,

also nach vielem herumprobieren habe ich erstmal eine "Lösung" gefunden.
Es liegt an den Kernel-Updates des PIs... Irgendwas ändert sich in den neuen Versionen und somit scheitert der Zugriff des 97_PiXtendV2.pm Moduls auf die SPI Schnittstelle.

Folgender Workaround funktioniert:

-> Man nehme das Basic-Image von PixTend und flashe eine SD-Karte
-> Nach dem ersten Booten setzen wir folgende Pakte auf Hold und verhindern damit, dass diese upgedatet werden:
sudo apt-mark hold raspberrypi-bootloader raspberrypi-kernel raspberrypi-sys-mods raspberrypi-ui-mods raspi-config rpi-update

--> Anschließend kann man wieder den Anleitung zur Installation von Fhem bzw. der Integration von PIxtend in Fhem folgen.

An was es genau liegt, kann ich leider nicht sagen. Dafür reicht mein gefährliches Halbwissen einfach nicht mehr aus :-)

Vielleicht löst es ja der Hersteller in der nächsten Zeit noch

PiXtend

Hallo Zusammen,

Danke an fireballrs für die Info zum raspberrypi-kernel und apt.

Ich wollte hier eine zusätzliche Rückmeldung geben wie die Meldung ,,Wrong model selected" zustande kommt und warum sich in diesem Zustand das Modul nicht wirklich verwenden lässt.
Damit man etwas mit dem Modul und dem damit verbundenen Gerät machen kann, ist eine Kommunikation über SPI zwingend erforderlich, daher lässt sich im Fehlerzustand nicht viel mit dem Modul machen.

Nach einigem Debugging hat sich gezeigt, dass nach dem Update des Raspberry Pi Kernels das PiXtend fhem Modul nicht mehr auf die SPI Hardware zugreifen kann.
Im Modul wird in Zeile 1239 die C-Funktion ,,ioctl" verwendet um die Kommunikation mit dem SPI Gerät ,,spidev0.0" auszuführen und zu steuern und dies geht nach dem Update nicht mehr. Die Funktion liefert keinen Wert bzw. False zurück und es passiert nichts. Ein Test mit der gleichen Funktion in einen C-Programm funktioniert hingegen ohne Probleme.
Warum perl nicht mehr auf den SPI Bus bzw. die ioctl Funktion verwenden kann, konnte ich bis jetzt nicht rausfinden.

Ich wollte diese Info aber als zusätzliche Rückmeldung posten, falls Jemand eine Idee oder Vorschlag hat was man da machen kann.
Wenn man den Kernel nicht aktualisiert, läuft das Modul wie es soll.

Der Hinweis von fireballrs lässt sich sogar verkürzen zu
--> sudo apt-mark hold raspberrypi-kernel

So installiert man nicht ausversehen eine neue Kernelversion, kann aber alle anderen Pakete updaten und auch zusätzliche Pakete installieren. Ich hoffe so geht es erstmal.


Gruß
Robin

sh25

Hallo PiXtend-Interessierte,
herzlichen Dank für die Lösungs-Hinweise! Dank dieser konnte ich das Basic-Image auf die verwendete Kernelversion hin checken: 4.19.66-v7+ . Mit einem "sudo rpi-update 3750f3204096f6bb365ceaf484a496584e46782b" lässt sich ein Downgrade auf diese Version durchführen und ich hatte erstmalig nach einem Reboot ein grünes Pix-Symbol und eine Funktion des Moduls!
Motiviert dadurch habe ich schrittweise Updates mit anschließendem (einfachen) Funktionstest durchgeführt:
4.19.118-v7+
5.4.40-v7+
5.4.50-v7+
Auch danach noch eine Funktion. Auf dieser Version habe ich das System dann per "sudo apt-mark hold raspberrypi-kernel" festgelegt.
Grüße
sh

PiXtend

Hallo Zusammen,

ich wollte hier nochmal einen Nachtrag zum Thema liefern.
Ich habe erneut einen Test mit der neuesten Raspberry Pi OS Version gemacht und das Problem ist immer noch da. Komischerweise tut die gleiche Funktion in C-Programmen genauso wie vorher aber in Perl nicht.

Da es so nicht geht, habe ich das fhem PiXtend V2 Modul umgebaut, so dass es jetzt das HiPi SPI Gerät zur Kommunikation verwendet anstatt direkt den Befehl ioctl. Dies schafft natürlich eine Abhängigkeit zu einem externen Modul und dass muss man manuell dazu installieren. Infos dazu stehen unten.
Ich füge das geänderte Modul diesem Post bei, falls jemand dies brauchen kann, da z.B. die neueste Kernel Version erforderlich ist. Sonst stehen die Informationen ja in den vorherigen Posts, siehe sh25 und fireballrs.

Mit folgenden Schritten kann das HiPi Modul installiert werden:

  • Über eine Konsole einloggen und fhem stoppen und HiPi installieren

  • Jetzt noch das fhem PiXtend V2 Modul in fhem ersetzen, z.B. mit dem Programm WinSCP. Die Module liegen alle unter /opt/fhem/FHEM.
  • Jetzt neustarten und danach sollte das PiXtend V2 Modul zur Verfügung stehen.

Ich werde die Augen offen halten ob es sich nicht doch noch ohne externes Modul machen lässt, aber so gibt es wenigsten eine Möglichkeit die PiXtend V2 Geräte auch mit dem neuesten Raspberry Pi OS zu nutzen und man kann alles updaten.


Gruß
Robin

peter1

Dankesehr für die obigen sehr hilfreichen Forschungsergebnisse!
Ich war ebenfalls in die Update-Falle gelaufen und konnte FHEM mit PiXtend zunächst nicht zum Laufen bringen. Dank eurer Erläuterungen war die Problematik verständlich. Die von Robin angepasste 97_PiXtendV2.pm mit HiPi funktioniert.

Gruß;
Martin

CoolTux

Zitat von: PiXtend am 05 März 2021, 14:38:33
Hallo Zusammen,

ich wollte hier nochmal einen Nachtrag zum Thema liefern.
Ich habe erneut einen Test mit der neuesten Raspberry Pi OS Version gemacht und das Problem ist immer noch da. Komischerweise tut die gleiche Funktion in C-Programmen genauso wie vorher aber in Perl nicht.

Da es so nicht geht, habe ich das fhem PiXtend V2 Modul umgebaut, so dass es jetzt das HiPi SPI Gerät zur Kommunikation verwendet anstatt direkt den Befehl ioctl. Dies schafft natürlich eine Abhängigkeit zu einem externen Modul und dass muss man manuell dazu installieren. Infos dazu stehen unten.
Ich füge das geänderte Modul diesem Post bei, falls jemand dies brauchen kann, da z.B. die neueste Kernel Version erforderlich ist. Sonst stehen die Informationen ja in den vorherigen Posts, siehe sh25 und fireballrs.

Mit folgenden Schritten kann das HiPi Modul installiert werden:

  • Über eine Konsole einloggen und fhem stoppen und HiPi installieren

  • Jetzt noch das fhem PiXtend V2 Modul in fhem ersetzen, z.B. mit dem Programm WinSCP. Die Module liegen alle unter /opt/fhem/FHEM.
  • Jetzt neustarten und danach sollte das PiXtend V2 Modul zur Verfügung stehen.

Ich werde die Augen offen halten ob es sich nicht doch noch ohne externes Modul machen lässt, aber so gibt es wenigsten eine Möglichkeit die PiXtend V2 Geräte auch mit dem neuesten Raspberry Pi OS zu nutzen und man kann alles updaten.


Gruß
Robin

Hallo Robin,

Ich habe mir Dein Modul einmal angeschaut und dabei ein, zwei Ungenauigkeiten bemerkt.
Du arbeitest komplett im main Kontext mit Deinem Modul, daher verwendest Du ja auch bei einigen Funktionsnamen PiXtendV2_ als Präfix. So ist sicher gestellt das es diesen Funktionsnamen im main Kontext nur einmal geben kann da Dein Modul ja PiXtendV2 heißt.
Leider verwendest Du aber auch sehr viele Funktionen mit einem Namen ohne das Präfix PiXtendV2_ und das kann im main Kontext dazu führen das diese überschieben werden wenn ein Entwickler auf die Idee kommt eine gleichlautende Funktion zu schreiben.
Zwei Änderungsmöglichkeiten möchte ich Dir auf zeigen.
1. bei all Deinen Funktionen den Präfix PiXtendV2_ konsequent verwenden
oder
2. mit eigenem package arbeiten.



Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PiXtend

#8
Hallo Marko,

danke für deine Hinweise, das schaue ich mir an und ändere das nach deinem Vorschlag ab.
So wie du das schreibst, macht das auf jeden Fall Sinn um Probleme und vor allem Kollisionen zu verhindern.

Gruß
Robin

PiXtend

Hallo Zusammen,

wie von Marko vorgeschlagen habe ich das Modul nochmals überarbeitet und hier alle Funktionen einen Prefix verpasst, so dass es jetzt hoffentlich keine Kollisionsgefahr mehr gibt.
Ich hoffe diese Version des Moduls ist eine Hilfe für Diejenigen, die die neueste Kernel Version nutzen möchten.

Leider geht auch mit der neuesten Kernel Version das ioctl immer noch nicht, was sehr schade ist.

Gruß
Robin