Send hex over seriel i python

Tags:    python hex seriel

Hej
Jeg sidder og leger med en Danfoss inverter og et python script til at hive data ud fra inverteren over energi produktion på solcellerne.

Jeg har skrevet lidt python kode der opretter en seriel forbindelse til inverteren hvilket skulle virke. Mit problem består i at jeg ikke helt ved hvordan jeg skal sende hex værdierne afsted, som det er nu virker det ihvertfald ikke, da struct vil have en string, og ikke værdierne som de er nu i scriptet. Men ved ikke lige hvordan jeg skal sætte den string sammen?

Nogle der har et godt bud på det?

Fold kodeboks ind/udPython kode 



Hvis i vil kigge nærmere på Danfoss/ComLynx protokollen her (side 26)
http://www.danfoss.com/NR/rdonlyres/18FA1022-2FF1-484A-8460-B6A51BE202BF/0/ComLynx_User_Guide_16_20120817_A7.pdf

På forhånd tak :)



Indlæg senest redigeret d. 26.03.2013 11:36 af Bruger #16445
3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Prøv:
Fold kodeboks ind/udPython kode 


struct.pack tager en streng som første parameter. Strengen skal indikere hvordan dataene skal formatteres, men den er nok ikke helt nødvendig her.

Du kan også bruge chr() funktionen med byteværdierne som parametre. chr() returnerer en streng indeholdende byte værdien.

Vil du bygge dataene op mere dynamisk kan du gemme dem i en liste:
Fold kodeboks ind/udPython kode 


...nu indeholder 'string' dataene som en streng.



Indlæg senest redigeret d. 26.03.2013 11:41 af Bruger #2695
Hey, det ser faktisk ud til at virke, når bare der kommer noget encoding på også (har rettet i min kode)

Endelig er der svar tilbage fra inverteren. Nu skal jeg bare have det ud som læseligt output.

Det jeg kan få ud nu en linje der siger:

b'\x00'

Det giver ikke meget mening for mig? Nogle der ved hvordan vi får det lavet om til noget foreståeligt noget?



Indlæg senest redigeret d. 26.03.2013 17:19 af Bruger #16445
Det betyder, at du fik en nul byte tilbage. Havde du forventet noget andet?
Måske du har misforstået noget i protokollen.



t