CAN-Bus: Message-Daten werden nur einmal angezeigt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Speedy77
User
Beiträge: 18
Registriert: Samstag 13. März 2021, 13:14

Hallo Experten,

folgendes Problem(Falls die Vorgeschichte nicht interessiert einfach bis "Nun zum eigentlichen Problem:" gehen):

ich bin gerade dabei mir einen eigenen Heizungsregler zu basteln (parallel zu dem Vorhandenen um immer eine Rückfallebene zu haben). Dabei habe ich folgende Aufgaben bereits erledigt:

1. Raspberry Pi 3 B+ mit Standard Raspbian über Noobs in der 32bit Version und ein bisschen Löt- und Bastelarbeit
  • Alles über SSH + XRDP auf meinen Rechner gelegt wo ich Ihn dann aus der Ferne programmieren kann.
  • Die nachfolgenden Punkte mittels Klassen programmiert und mit Threads gestartet

2. Möglichkeit zum Einlesen aller Temperaturen an der Anlage mit DS18B20 1-Wire-Bus Temperatursensoren
3. Temperatursteuerung mittels PID-Regler (PID als Klasse) --> Anwendung CPU-Temperatur --> Drehzahlsteuerung um den CPU auf Wunschtemperatur zu halten
4. Auslesen der eingesetzten Regelklemmleiste https://www.moehlenhoff.de/fileadmin/us ... al_web.pdf über eine XML-Schnittstelle

Alle Werte lasse ich mir aktuell noch mittels Print ausgeben was dann so aussieht:


CPU-Temperatur: 43.5 °C / Lüfterausgang: 44.564 %
CPU-Temperatur: 44.0 °C / Lüfterausgang: 44.564 %
2023-10-24T18:13:31
1 Wohnzimmer Soll: 21.0 °C Ist: 22.1 °C Offset: 0.0 °C
2 Küche Soll: 20.0 °C Ist: 21.4 °C Offset: 0.0 °C
3 Bad Soll: 21.0 °C Ist: 21.9 °C Offset: 0.0 °C
CPU-Temperatur: 43.5 °C / Lüfterausgang: 46.04 %
CPU-Temperatur: 43.5 °C / Lüfterausgang: 47.486 %
CPU-Temperatur: 44.0 °C / Lüfterausgang: 47.486 %
CPU-Temperatur: 43.5 °C / Lüfterausgang: 48.902 %
...
CPU-Temperatur: 43.5 °C / Lüfterausgang: 57.938 %
CPU-Temperatur: 42.9 °C / Lüfterausgang: 54.278 %
S1, Temp Fühl: 31.937 °C, Offset: 0.00 K, Name: 28-3c21f648b39f, Start: 1698163410, Mintemp: 30.625, Maxtemp: 31.937
S2, Temp Fühl: 40.687 °C, Offset: 0.00 K, Name: 28-3c99f6483f05, Start: 1698163411, Mintemp: 39.125, Maxtemp: 40.687
S3, Temp Fühl: 27.125 °C, Offset: 0.00 K, Name: 28-3ca0f6480a74, Start: 1698163412, Mintemp: 27.000, Maxtemp: 27.125
S4, Temp Fühl: 51.062 °C, Offset: 0.00 K, Name: 28-3ce5f6484503, Start: 1698163413, Mintemp: 51.062, Maxtemp: 51.375
S5, Temp Fühl: 49.750 °C, Offset: 0.00 K, Name: 28-3cf9f64879c5, Start: 1698163414, Mintemp: 49.750, Maxtemp: 50.125
S6, Temp Fühl: 59.125 °C, Offset: 0.00 K, Name: 28-3c8df64870b5, Start: 1698163415, Mintemp: 59.125, Maxtemp: 59.312

Nun zum eigentlichen Problem:

Meine Heiztherme arbeitet mit CAN-Bus und bräuchte ein paar Werte für meine Berechnung. Zum Beispiel die Außentemperatur, die berechnete Vorlauftemperatur, ... usw.
Ich habe einen USBtoCAN Adapter von DSD Tech SH-SH-C30A (https://www.deshide.com/product-details ... 1671089557) mittels der CANable-Update-Seite https://canable.io/updater/canable1.html eine neue Firmware installiert (vorher hat er gar nicht auf den CAN-Bus reagiert).

Das wird im Terminal angezeigt
lsusb -v

idVendor 0x1d50 OpenMoko, Inc.
idProduct 0x606f Geschwister Schneider CAN adapter
bcdDevice 0.00
iManufacturer 1 canable.io
iProduct 2 canable gs_usb
iSerial 3 002A00455046570620333836
Nun habe ich versucht die Daten des Bus zu lesen. Schauen ob etwas da ist. Folgender Code (nur Test-Code):

Code: Alles auswählen

import gs_usb
import can
import usb
from time import sleep


dev = usb.core.find(idVendor=0x1D50, idProduct=0x606F)

with can.interface.Bus(channel="ttyAMA0",
                       interface="gs_usb",
                       bus=dev.bus,
                       address=dev.address,
                       bitrate=115200) as bus:
    try:
        i = 0
        while True:
            try:
                msg = bus.recv(0.1)
                print(msg)
            except AttributeError:
                print("Nothing received this time")
    
    except KeyboardInterrupt:
        print("Program Exited")
    except can.CanError:
        print("Message NOT sent")


zeigt nach einem Neustart des Adapters folgende Ausgabe im Terminal:
sudo nice -19 python3 /home/rp/Dokumente/Regler/Old/test.py

Timestamp: 3158.843952 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.845623 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.848792 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.850620 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.852533 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.854439 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.856260 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.857848 ID: 000c S Rx E DL:^CProgram Exited
gut... CAN-Bus da...und breche das ganze mit Strg+C ab

Das erneute Aufrufen zeigt dann:
sudo nice -19 python3 /home/rp/Dokumente/Regler/Old/test.py
None
None
None
None
None
^CProgram Exited
Was läuft da schief? Warum wird nun "None" angezeigt?
Nach einem Neustart oder dem Abziehen und wieder einstecken des Adapters funktioniert es wieder genau ein Mal.
Benutzeravatar
__blackjack__
User
Beiträge: 13268
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Speedy77: Vermutlich wird da irgendwas nicht sauber aufgeräumt, wenn das abgebrochen wird.

`gs_usb` und `sleep()` aus `time` werden importiert aber nicht verwendet. `i` wird nirgends verwendet.

`AttributeError` zu behandeln ist sehr ungewöhnlich. Das deutet auf einen Programmierfehler hin. Wie sieht denn so ein auftreten aus? Wo tritt das auf und welches Attribut betrifft das?
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Speedy77
User
Beiträge: 18
Registriert: Samstag 13. März 2021, 13:14

Hallo blackjack,

danke für die schnelle Antwort

das mit dem Aufräumen hatte ich schon versucht

bus.shutdown() ... was aber an der SItuation nichts ändert.

Zur Programmierung: Da es noch ein Test ist, habe ich noch nicht auf die Feinheiten geachtet. Wenn es dann zum richtigen Programm geht werde ich versuchen solche sachen zu vermeiden

Die nichtverwendeten Importe und die Laufvariable "i" sind Überbleibsel meiner Versuche das Problem zu lösen und "AttributeError" stammt aus einem anderen Programm-Code der Messages sendet und Attribute übergibt.

Aber diese Sachen sollten ja nicht das Problem sein... werde es mal bereinigen und Testen... Blöd ist nur, dass ich dann immer meinen Pi neu starten muss
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gibt’s denn Informationen im syslog? vielleicht stehen da Fehler oder so drin. Denn dank context manager wird da denke ich trotz aller Unzulänglichkeiten aufgeräumt im Python Code. Könnte also woanders liegen.
Speedy77
User
Beiträge: 18
Registriert: Samstag 13. März 2021, 13:14

Ok, die schau ich mir morgen mal an und melde mich...
Auf was sollte ich denn achten?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das kann ich dir nicht sagen. Den Stick mal ein/ausstecken gibt vielleicht hinweise auf welcher Art die Meldungen sind.
Speedy77
User
Beiträge: 18
Registriert: Samstag 13. März 2021, 13:14

Das ist die Ausgabe in der syslog:
20:29:04 wo es funktioniert und 20:30:04 wo es nicht funktioniert


Oct 25 20:29:04 rp kernel: [ 105.558938] usb 1-1.1.3: reset full-speed USB device number 4 using dwc_otg
Oct 25 20:29:04 rp kernel: [ 105.691186] gs_usb 1-1.1.3:1.0: Configuring for 1 interfaces
Oct 25 20:29:05 rp systemd-udevd[1791]: can0: Failed to query device driver: No such device
Oct 25 20:29:05 rp systemd-udevd[1791]: can0: Failed to get link config: No such device
Oct 25 20:29:05 rp ModemManager[481]: <info> [base-manager] port can0 released by device '/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.3'
Oct 25 20:29:05 rp ModemManager[481]: <info> [base-manager] couldn't check support for device '/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.3': Operation was cancelled

Oct 25 20:30:04 rp kernel: [ 165.008743] usb 1-1.1.3: reset full-speed USB device number 4 using dwc_otg

Hier ist sicherlich der Fehler versteckt, ich übergebe beim Starten aber den channel "ttyAMA0" ... can0 gibt es bei mir gar nicht
Das farbige wird geschrieben wenn ich das Programm abbreche...

Habt Ihr einen Ansatz für die Lösung meines Problems
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

can0 wird hinter den Kulissen angelegt. Mein beruflicher CAN-adapter benutzt dazu slcand, das geht laut https://canable.io/getting-started.html#socketcan-linux auch bei deinem. Könntest du ggf auch mal probieren, ob das was bringt.

Insgesamt ist das Thema ziemlich komplex, und hat eigentlich nicht viel mit Python zu tun. Wenn mit Python-can. Die haben ja eine recht aktive Community auf https://github.com/hardbyte/python-can/issues, da würde ich dein Problem mal beschreiben.
Speedy77
User
Beiträge: 18
Registriert: Samstag 13. März 2021, 13:14

Also kurze Rückinfo:

Es handelst sich um "CAN UDS"

Ich habe jetzt die Firmware auf "pcan Emulation " geflasht und das Open3E interface nachinstalliert.

Jetzt kann ich aktuell über die Komandozeile: mit

Code: Alles auswählen

$ python3 Open3Eclient.py -c can0 -dev vdens -r 268 -v 
(wobei 268 die Adresse darstellt [0x268]) den FLowTempSensor auslesen...

Antwort:

Code: Alles auswählen

268 FlowTemperatureSensor 39.0
nun muss ich das nur noch ins Python bringen... sollte, da es ja in Python geschrieben ist nicht das Problem sein...

Danke für eure Hilfe :D :wink:

Nachtrag: Nur falls jemand Interesse daran hat:

Ich habe versucht über einen Raspberry Pi 3 B+ mit meiner Therme Vitodens 300-W von Viessmann über CAN-Bus zu kommunizieren....
mittels: DSD Tech CAN Bus Adapter https://www.deshide.com/product-details ... 1671089557
firmware: https://canable.io/updater/canable1.html --> hier "pcan emulator"
https://github.com/abnoname/open3e

viel Erfolg denjenigen die das gleiche vor haben :o :geek: :lol:
Antworten