Python: Skapa bytes från int och float
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Python: Skapa bytes från int och float
Hej hej,
Försöker skicka lite data via TCP med hjälp av python-biblioteket "socket", men blir inte klok på hur datan ska se ut.
Egentligen förstår jag inte så mycket av python över huvud taget.
Både när jag testar att skicka en int eller en float så får jag felmeddelandet 'int'/'float' does not support the buffer interface. Sökning på det meddelandet ger ganska mycket träffar men jag förstår fortfarande inte riktigt vad jag ska göra.
Ska jag "packa" integern till bytes(?) och sedan skicka dessa bytes? Hur gör jag då om integern är flera bytes?
Försöker skicka lite data via TCP med hjälp av python-biblioteket "socket", men blir inte klok på hur datan ska se ut.
Egentligen förstår jag inte så mycket av python över huvud taget.
Både när jag testar att skicka en int eller en float så får jag felmeddelandet 'int'/'float' does not support the buffer interface. Sökning på det meddelandet ger ganska mycket träffar men jag förstår fortfarande inte riktigt vad jag ska göra.
Ska jag "packa" integern till bytes(?) och sedan skicka dessa bytes? Hur gör jag då om integern är flera bytes?
Re: Python: Skapa bytes från int och float
> ...men jag förstår fortfarande inte riktigt vad jag ska göra.
Du kan börja med att visa en kort "reproducer" som uppvisar problemet.
Det är enklare när man har något att titta på och att eventuellt testa.
Du kan börja med att visa en kort "reproducer" som uppvisar problemet.
Det är enklare när man har något att titta på och att eventuellt testa.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Python: Skapa bytes från int och float
Har fortfarande inte lyckats klura ut hur man kopierar koden mellan min remote desktop och lokala datorn men har skrivit av den relevanta koden nedan.
Första testet går alltså ut på att skicka en etta till TCP-servern, 1 gång per sekund.
Jag får ut printen men sedan felmeddelandet enligt första inlägget (som hänvisar till sock.send()). Det är så jäkla retligt för jag finner massa information om det på nätet men får ändå inte ihop det.
Det verkar som att jag ska göra om integern till bytes och sedan "encode":a denna.
Första testet går alltså ut på att skicka en etta till TCP-servern, 1 gång per sekund.
Jag får ut printen men sedan felmeddelandet enligt första inlägget (som hänvisar till sock.send()). Det är så jäkla retligt för jag finner massa information om det på nätet men får ändå inte ihop det.
Det verkar som att jag ska göra om integern till bytes och sedan "encode":a denna.
Kod: Markera allt
from time import sleep
import struct
import socket
import sys
def sendSample(sample):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.1.8', 5004)
sock.connect(server_address)
print("Connected with %s via %s" % server_address)
sock.send(sample)
sock.close()
while True:
testsample = 1
sendSample(testsample)
sleep(1)
Re: Python: Skapa bytes från int och float
Om du vill skicka binära data så kolla in struct-modulen och funktionen pack()
Annars hade jag nog gått på att skicka data i "strängformat", t.ex. JSON eller XML eller någon eget påhittat format, det är
så oändligt mycket lättare att felsöka med sniffers o.dyl. när data är i strängform...
/j
Kod: Markera allt
import struct
i=1
bytes = struct.pack("I", i)
socket.send(bytes)
så oändligt mycket lättare att felsöka med sniffers o.dyl. när data är i strängform...
/j
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Python: Skapa bytes från int och float
Hur är du uppkopplad mot din remote desktop och vad har du för OS i värddatorn?
Om du kör ssh och Linux på värden markerar du texten och kopierar med <shift><ctl>C och klistrar in med <shift><ctl>V.
Om du kör ett terminalfönster i windows med RPi-konsolen i har jag för mig att du kan välja text genom att högerklicka i terminalfönstret och även klistra in genom att högerklicka. Men jag är inte helt säker.
Om du kör ssh och Linux på värden markerar du texten och kopierar med <shift><ctl>C och klistrar in med <shift><ctl>V.
Om du kör ett terminalfönster i windows med RPi-konsolen i har jag för mig att du kan välja text genom att högerklicka i terminalfönstret och även klistra in genom att högerklicka. Men jag är inte helt säker.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Python: Skapa bytes från int och float
Tack johano!
Nu gav det inga felmeddelanden men programmet låser sig i sändningen efter 1-4 sändningar.
Misstänker det är för att jag inte sköter socket-hanteringen korrekt, eller något sånt. Lite knepigt att det sker med olika intervall dock
Nu gav det inga felmeddelanden men programmet låser sig i sändningen efter 1-4 sändningar.
Misstänker det är för att jag inte sköter socket-hanteringen korrekt, eller något sånt. Lite knepigt att det sker med olika intervall dock
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Python: Skapa bytes från int och float
@lillahuset:
Värddatorn kör på W7 och uppkopplad mot RPi:n via TightVNC Viewer. Kom precis på att jag kan ju faktiskt öppna EF i RPi:ns browser och göra inlägget där
Värddatorn kör på W7 och uppkopplad mot RPi:n via TightVNC Viewer. Kom precis på att jag kan ju faktiskt öppna EF i RPi:ns browser och göra inlägget där
Re: Python: Skapa bytes från int och float
Jag brukar använda WinSCP (https://winscp.net/eng/index.php) för att synca och/eller kopiera filer mellan pajen o PCn.Magnus_K skrev:Har fortfarande inte lyckats klura ut hur man kopierar koden mellan min remote desktop och lokala datorn men har skrivit av den relevanta koden nedan.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Python: Skapa bytes från int och float
Ah, prefekt, tackar. Ska kika mer på lite senare.
Nu fastnar programmet i sendSample-funktionen. Ska se om jag kanske missat något vitalt.
Nu fastnar programmet i sendSample-funktionen. Ska se om jag kanske missat något vitalt.
- tecno
- Inlägg: 27039
- Blev medlem: 6 september 2004, 17:34:45
- Skype: tecnobs
- Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
- Kontakt:
Re: Python: Skapa bytes från int och float
Jag brukar använda WinSCP]janno skrev:Magnus_K skrev:Har fortfarande inte lyckats klura ut hur man kopierar koden mellan min remote desktop och lokala datorn men har skrivit av den relevanta koden nedan.
Intressant, visste inte att WinSCP funkade i RPi.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Python: Skapa bytes från int och float
Du kör WinSCP i din hjärndöda windowsburk och RPi pratar det standardiserade protokollet scp. Som vanligt alltså.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Python: Skapa bytes från int och float
Nej, det är något som "krashar" socketen, eller hur man nu bäst kan beskriva det.
När jag byter till en ny port så skickas meddelandet bara en gång och sen låser det sig under sock.connect().
Skulle någon ha ork och provköra det vore jag hemskt tacksam.
Kan också säga att jag har en netcat-server som sitter och lyssnar i andra ändan, om det spelar någon roll.
Nu är det saxat direkt ur mitt program:
När jag byter till en ny port så skickas meddelandet bara en gång och sen låser det sig under sock.connect().
Skulle någon ha ork och provköra det vore jag hemskt tacksam.
Kan också säga att jag har en netcat-server som sitter och lyssnar i andra ändan, om det spelar någon roll.
Nu är det saxat direkt ur mitt program:
Kod: Markera allt
from time import sleep
import os
import math
import struct
import socket
import sys
def sendSample(samp):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.1.8', 5003)
sock.connect(server_address)
print("Connected with: %s on %s" % server_address)
bytes = struct.pack("f", samp)
sock.send(bytes)
sock.close()
while True:
testsample = 1.5
sendSample(testsample)
sleep(1)
Re: Python: Skapa bytes från int och float
Finns det en anledning att du gör en ny socket varje gång?
Detta rullar på för mig:
Men jag skulle nog rekommendera dig att använda något beprövat för detta. t.ex HTTP eller MQTT beroende på vad du tänkt skicka för data.
Detta rullar på för mig:
Kod: Markera allt
from time import sleep
import os
import math
import struct
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.3.20', 80)
sock.connect(server_address)
print("Connected with: %s on %s" % server_address)
while True:
testsample = 1.5
bytes = struct.pack("f", testsample)
sock.send(bytes)
print("sent sample %f" % testsample)
sleep(1)
sock.close()
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Python: Skapa bytes från int och float
Det var "lösningen" maDa, klockrent.
Enda anledningen till varför jag skapade en ny socket för varje överföring var för att jag inte visste att man fick behålla den öppen, trodde den typ blockerar något i så fall.
I slutändan tänkte jag försöka få den här informationen till en app men måste först hitta en lämplig app och sedan klura ut vad för protokoll som används mest idag för liknande manövrar, sen göra om funktionen så programmet fräser ur sig sånt i stället.
Får dock hjärtsvikt bara av att tänka tanken...
Ska söka lite på vad vad HTTP och MQTT är. Tack för hjälpen och att du tog dig tid att testa
Enda anledningen till varför jag skapade en ny socket för varje överföring var för att jag inte visste att man fick behålla den öppen, trodde den typ blockerar något i så fall.
I slutändan tänkte jag försöka få den här informationen till en app men måste först hitta en lämplig app och sedan klura ut vad för protokoll som används mest idag för liknande manövrar, sen göra om funktionen så programmet fräser ur sig sånt i stället.
Får dock hjärtsvikt bara av att tänka tanken...
Ska söka lite på vad vad HTTP och MQTT är. Tack för hjälpen och att du tog dig tid att testa