USB-µPIO mit Python auslesen

Antworten
janihani
Beiträge: 2
Registriert: Samstag 3. Februar 2024, 23:53

USB-µPIO mit Python auslesen

Beitrag von janihani » Mittwoch 14. Februar 2024, 00:28

Guten Abend,
ich habe einen USB-µPIO Temp 12, und bisher lese ich diesen per Powershell zuverlässig aus und speichere die Daten in einer Sqlite Datenbank.

Code: Alles auswählen

    $COMPORT='COM9'
    $BAUDRATE=57600
    $Parity=[System.IO.Ports.Parity]::None     # System.IO.Ports.Parity
    $DataBits=8
    $StopBits=[System.IO.Ports.StopBits]::one  # System.IO.Ports.StopBits

    #Sicherstellen, dass $ComData leer ist (wenn das Script erneut ausgeführt wird)
    $ComData=""

    $port= new-Object System.IO.Ports.SerialPort $COMPORT,$BAUDRATE,$Parity,$DataBits,$StopBits
    $port.open()

    #Zwingend notwendig, erst einen Befehl zu senden, damit eine Antwort vom µPIO gesendet wird
    $port.WriteLine("Bxxxxxxxxxxxx--------")    

    #Daten vom Comport lesen
    $ComData=$port.ReadLine() 

    #Com Port schliessen
    $port.Close()

    $VLHK = $Daten[1].ToString().Trim()
    $RLHK = $Daten[3].ToString().Trim()
    $Speicher = $Daten[5].ToString().Trim()
    $WW = $Daten[7].ToString().Trim()
    $Zirku = $Daten[9].ToString().Trim()

    $Brenner = $Daten[13].ToString().Trim()
    $UP = $Daten[15].ToString().Trim()
    $Fehler = $Daten[17].ToString().Trim()
    $ZP = $Daten[19].ToString().Trim()

    $SQL = "Insert into 'Temperaturen' (Datum, Zeit, VLHK, RLHK, Speicher, WW, Zirku, Brenner, UP, Error, ZP) 
                Values ('$Datum','$Zeit','$VLHK','$RLHK','$Speicher','$WW','$Zirku','$Brenner','$Up','$Fehler', '$ZP');"

    #Insert into ausführen
    invoke-SqliteQuery -DataSource $DataSource -Query $SQL -QueryTimeout 3
    Write-Host "Daten in Tabelle Temperaturen eingefügt." -ForegroundColor Yellow
Aufgrund einer Systemumstellung möchte ich nun den Temp 12 mit Python auslesen und scheitere daran, dass mir keine Daten geliefert werden.

Code: Alles auswählen

  import serial
  serPort = serial.Serial(port='Com9', baudrate=57600, bytesize=8, timeout=3, parity='N', stopbits=1) 
  command = b'Bxxxxxxxxxxxx--------'
  #print('Sende Befehl ' + str(command) + ' zum Abacom, Länge' + str(len(command)))
  serPort.writelines(command)
  data = serPort.readline()
  print('Data read', str(data))
  serPort.close()
Als Ergebnis wird folgendes geliefert:

Code: Alles auswählen

Data read b''
Anmerkung:
Der String 'Bxxxxxxxxxxxx--------' muss als Bytes (b'Bxxxxxxxxxxxx--------') an die serielle Schnittstelle geliefert werden, da ansonsten ein Laufzeitfehler auftritt.
Fehlermeldung  µUSB.png
Fehlermeldung µUSB.png (326.42 KiB) 1726 mal betrachtet

Hat jemand eine Idee, wie das Problem gelöst werden kann?

abacom
Site Admin
Beiträge: 3949
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: USB-µPIO mit Python auslesen

Beitrag von abacom » Donnerstag 22. Februar 2024, 12:01

Vielleicht hilft dieses weiter...
https://stackoverflow.com/questions/140 ... ding-again
Everything you receive is encoded, so you do input_string.decode('encoding') to convert it to unicode.
Everything you need to output is unicode but needs to be encoded, so you do output_string.encode('encoding').
The most common encodings are cp-1252 on Windows (on US or EU systems), and utf-8 on Linux.
ABACOM support

janihani
Beiträge: 2
Registriert: Samstag 3. Februar 2024, 23:53

Re: USB-µPIO mit Python auslesen

Beitrag von janihani » Donnerstag 22. Februar 2024, 23:49

Einen kleinen Erfolg konnte ich erzielen. Nach dem ich eine Zeitverzögerung von einer Sekunde nach dem Öffnen der seriellen Schnittstelle eingefügt habe, werden mir Daten geliefert.

Code: Alles auswählen

import serial
import time as t

# Serial Port Parameter 
COMPORT='Com9'
BAUDRATE = 57600
Parity=serial.PARITY_NONE
StopBits=serial.STOPBITS_ONE
DataBits=serial.EIGHTBITS
TimeOut=1

SerialPort = serial.Serial(port=COMPORT, baudrate=BAUDRATE, bytesize=DataBits, timeout=TimeOut, parity=Parity, stopbits=StopBits) 
t.sleep(1) 

command = b'Bxxxxxxxxxxxx--------'
SerialPort.writelines(command)

data = SerialPort.readline() # kein Fehler, aber leere Rückgabe
#data = data.decode('ascii')
print('Data read', str(data))

SerialPort.close()
Aber, anstelle der korrekten Temperaturen wird 0.0 geliefert.

Code: Alles auswählen

Daten mit Python-Script:
Data read b' VLHK ;  0.0\x02; RLHK ;  0.0\x02; WWSP ;  0.0\x02; WWVL ;  0.0\x02; ZIRKU;  0.0\x02;  --  ;  --  ;BURNER;  AUS ;  UP  ;  AUS ; ERROR;  AUS ;  ZP  ;  AUS ;  --  ;  --  ;  --  ;  --  ; C0-C1;  AUS ; C0-C2;  AUS ; C0-C3;  AUS ;  --  ;  --  ;\r\n'
Ein Fehler bezüglich der Dallas Temperatursensoren kann ich ausschließen, denn wenn ich mein Powershell-Script (ein paar Sekunden später) laufen lasse, werden mir korrekte Temperaturen geliefert.

Code: Alles auswählen

Daten mit Powershell-Script:
VLHK ; 24.1; RLHK ; 23.8; WWSP ; 46.3; WWVL ; 40.5; ZIRKU; 29.6;    ;    ;BURNER;  AUS ;  UP  ;  AUS ; ERROR;  AUS ;  ZP  ;  AUS ;    ;    ;    ;    ; C0C1;  AUS ; C0C2;  AUS ; C0C3;  AUS ;    ;    ;
Bezüglich Encodings hab ich in Python verschiedene ausprobiert, jedoch bleibt das Problem, dass weiterhin falsche Temperaturwerte geliefert werden.

abacom
Site Admin
Beiträge: 3949
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: USB-µPIO mit Python auslesen

Beitrag von abacom » Dienstag 27. Februar 2024, 09:10

Versuchen Sie das Lesen bitte einmal als Schleife. Evtl. ist nur der erste Datensatz nach dem Öffnen (=Device Reset) noch ungültig.
ABACOM support

Antworten

Zurück zu „Fimware /TEMP12“