User Tools

Site Tools


ionpy:hardware:junsi_icharger

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ionpy:hardware:junsi_icharger [2026/01/26 21:00] – created dominikionpy:hardware:junsi_icharger [2026/01/26 21:02] (current) dominik
Line 1: Line 1:
-Junsi iCharger 4010Duo - Linux Setup Guide (Debian/LMDE)+====== Junsi iCharger 4010Duo - Linux Setup Guide (Debian/LMDE) ======
  
-Diese Anleitung beschreibt die Einrichtung des Systems für den Zugriff auf Junsi iCharger Hardware via USBAufgrund der Composite-Bauweise (HID & Massenspeicher) wird der Zugriff über **PyUSB** anstelle von hidraw/hidapi durchgeführt.+Diese Dokumentation beschreibt die Einrichtung und Fehlerbehebung für den Zugriff auf Junsi iCharger Hardware unter Linux (getestet mit LMDE 7)Da der iCharger ein Composite-Gerät ist, wird der Zugriff über **PyUSB** anstelle von hidapi durchgeführt.
  
-## 1. Systemvoraussetzungen (Root)+===== 1. System-Voraussetzungen =====
  
-Zuerst müssen die notwendigen System-Bibliotheken für die USB-Kommunikation installiert werden:+Zuerst müssen die notwendigen System-Bibliotheken für die USB-Kommunikation und die Python-Umgebung installiert werden:
  
 <code> <code>
Line 12: Line 12:
 </code> </code>
  
-## 2. udev-Regeln konfigurieren+Innerhalb der virtuellen Umgebung (venv) des Projekts muss PyUSB installiert sein: 
 + 
 +<code> 
 +pip install pyusb 
 +</code> 
 + 
 +===== 2. USB-Architektur des iChargers ===== 
 + 
 +Der iCharger meldet sich am USB-Bus als **Composite Device** mit zwei Schnittstellen: 
 +  * [cite_start]**Interface 0 (HID):** Zuständig für die Datenübertragung (Modbus via HID). [cite: 178, 179] 
 +  * [cite_start]**Interface 1 (Mass Storage):** Stellt die SD-Karte als Laufwerk bereit. [cite: 140] 
 + 
 + 
 + 
 +===== 3. udev-Regeln konfigurieren =====
  
-Die udev-Regel erfüllt zwei Zwecke: +Um den Zugriff für Nicht-Root-Benutzer zu erlauben, muss eine udev-Regel angelegt werdenDiese sorgt dafür, dass die Gerätedatei unter ''/dev/bus/usb/'' die richtigen Rechte erhält.
-  * Gewährung von Schreibrechten für den User (via Gruppe plugdev). +
-  * Zuweisung des uaccess-Tags für die aktuelle Session.+
  
 Erstellen Sie die Datei ''/etc/udev/rules.d/99-junsi.rules'': Erstellen Sie die Datei ''/etc/udev/rules.d/99-junsi.rules'':
Line 22: Line 34:
 <code> <code>
 # Junsi iCharger 4010Duo - VID:0483 PID:5751 # Junsi iCharger 4010Duo - VID:0483 PID:5751
-# Erlaubt Zugriff auf USB-Ebene und delegiert Rechte an den User+1. Erlaubt Schreib-/Leserechte für die Gruppe plugdev 
 +# 2. Weist uaccess zu, um dem aktuellen User direkten Zugriff zu gewähren
 SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="5751", MODE="0666", GROUP="plugdev", TAG+="uaccess" SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="5751", MODE="0666", GROUP="plugdev", TAG+="uaccess"
 </code> </code>
  
-Aktivieren Sie die Regeln ohne Neustart:+Aktivieren Sie die Regeln:
 <code> <code>
 sudo udevadm control --reload-rules sudo udevadm control --reload-rules
 sudo udevadm trigger sudo udevadm trigger
 </code> </code>
-**Hinweis:** Das Gerät danach einmal physisch aus- und wieder einstecken. 
  
-## 3. Diagnose-Checkliste+===== 4. Diagnose-Verfahren =====
  
-Führen Sie diese Befehle ausum den Status der Verbindung zu prüfen:+Sollte das Gerät nicht erkannt werden, prüfen Sie die folgenden Punkte:
  
-^ Prüfung ^ Befehl ^ Erwartetes Ergebnis ^ +==== A. Kernel-Treiber Check ==== 
-| **Kernel-Treiber** | ''lsusb -t'' | Port für If 0 sollte ''Driver=[none]'' oder ''Driver=usbhid'' zeigen. | +Prüfen Sie, ob ein Treiber das Interface blockiert: 
-| **User-Berechtigung** | ''ls -l /dev/bus/usb/xxx/yyy'' | ''crw-rw-rw-'' oder ''crw-rw----+'' (Gruppe plugdev). | +<code>lsusb -t</code> 
-| **ACL Status** | ''getfacl /dev/bus/usb/xxx/yyy'' | Zeile ''user:DEINNAME:rw-'' muss vorhanden sein|+Achten Sie auf die Zeile für den iCharger. Wenn dort ''Driver=usbhid'' steht, muss der Treiber im Python-Code via ''detach_kernel_driver()'' gelöst werden.
  
 +==== B. Rechte-Check ====
 +Suchen Sie Bus und Device Nummer:
 +<code>lsusb | grep 0483</code>
 +Prüfen Sie dann die Rechte (Beispiel für Bus 002, Device 016):
 +<code>ls -l /dev/bus/usb/002/016</code>
 +**Soll-Ergebnis:** ''crw-rw-rw-'' oder ''crw-rw----+'' (ACL).
  
 +==== C. Live-Monitor ====
 +Beobachten Sie das System beim Einstecken des Geräts:
 +<code>udevadm monitor --environment --udev</code>
 +Achten Sie darauf, ob die Zeile ''TAGS=:uaccess:seat:'' erscheint.
  
-## 4Python Framework Setup+===== 5Integration im Framework =====
  
-Innerhalb der virtuellen Umgebung (venv) des Projekts muss PyUSB installiert sein:+[cite_start]Der Transport nutzt das Modbus-Protokoll über HID-Reports. [cite418, 420] 
 +  * [cite_start]**Anfrage:** Paket wird in einen 64-Byte Report verpackt. [cite: 418, 419] 
 +  * [cite_start]**Antwort:** Der Lader antwortet mit Function Codes wie 0x03 oder 0x04. [cite: 184, 203]
  
-<code> +===== 6. Troubleshooting =====
-pip install pyusb +
-</code>+
  
-Der Transport in ''hardware/transports/hid_modbus.py'' muss zwingend ''detach_kernel_driver'' nutzen, um Interface 0 (HID) exklusiv zu beanspruchen. +| Fehler | Ursache | Lösung | 
- +|---|---|---| 
-## 5. Bekannte Probleme +''Access Denied'' | udev Regel nicht aktiv | udevadm trigger ausführen & neu einstecken. | 
- +''Resource Busy'' Interface 1 (SD-Karte) wird gerade gemountet | SD-Karte entfernen oder kurz warten| 
-  * **Massenspeicher-Blockade:** Interface 1 (SD-Karte) wird oft vom Kernel als Laufwerk gebunden. Der PyUSB-Transport löst dies automatisch beim Verbindungsaufbau+| ''open failed'' | Kernel-Treiber (usbhid) blockiert | Sicherstellen, dass der Transport ''claim_interface'' nutzt
-  * **SyntaxError bei Import:** Achten Sie darauf, dass keine Citations oder Metadaten-Tags im Python-Code von ''hid_modbus.py'' enthalten sind.+</code>
ionpy/hardware/junsi_icharger.1769457653.txt.gz · Last modified: by dominik

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki