[python] Telnet command sturen

Pagina: 1
Acties:

Vraag


  • iemand-anders
  • Registratie: Januari 2016
  • Nu online
Mijn pioneer receiver verlaagt de heletijd het volume met 3 db (topic), omdat ik zelf en via het forum geen oplossing heb kunnen vinden wilde ik een workaround maken.

Pioneer heeft zelf een app waarmee je met een telefoon de versterker kan bedienen, dus na wat googlen kwam ik op deze site. Vervolgens wilde ik een automatisch script maken in python die ik dan vervolgens op mijn raspberry kan laten draaien.

Het lukt alleen niet om een command te sturen om het volume op te vragen

Mijn huidige code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import telnetlib
import sys

HOST = '192.168.0.103'

# from pudb import set_trace; set_trace()
tn = telnetlib.Telnet(HOST)
tn.set_debuglevel(100)
tn.write("?V".encode('ascii'))
data = tn.read_until("VOL".encode('ascii'), 100)
print(data)
data = data[:3].decode(sys.getdefaultencoding())
volume = data
print (volume)

while(True):
   
    data = tn.read_until(b"VOL", 100)
    data = int(data[:3].decode(sys.getdefaultencoding()))
    if(volume == data):
        for x in range(0,6):
            tn.write(b"VU")
        print("volume changed back to: ", volume)
    else:
        volume = data
        print ("volume changed to: ", volume)
tn.close()


output:

Telnet(192.168.0.103,23): send b'?V'
//Verandering volume van de versterker
Telnet(192.168.0.103,23): recv b'FL004D2E564F4C20202D31392E356442\r\n'
Telnet(192.168.0.103,23): recv b'VOL122\r\n'
b'FL004D2E564F4C20202D31392E356442\r\nVOL'
FL0
//Verandering volume van de versterker
Telnet(192.168.0.103,23): recv b'FL004D2E564F4C20202D31392E306442\r\n'
Telnet(192.168.0.103,23): recv b'VOL123\r\n'
volume changed to: 122


Telnet:

Command:?V
Antwoord: VOL126
//Verandering volume van de versterker
Antwoord: FL004D2E564F4C20202D31372E306442
Antwoord: VOL127


Bij het opvragen krijg ik niet direct een waarde terug, pas na het wijzigen van het volume. Dan krijgt ik ook de waarde FLO terug in plaats van een volume.
Zelf heb ik niet super veel ervaring met python dus ik hoopte dat iemand mij hiermee kan helpen _/-\o_

Beste antwoord (via iemand-anders op 30-09-2017 12:55)


  • Steefph
  • Registratie: Juli 2002
  • Laatst online: 23-09 12:24
Ik vermoed dat de .encode('ascii') je de das om doet.

doe dit eens
Python:
1
tn.write((cmd).encode('ascii')+'\n')

Alles is terug te redeneren naar 4

Alle reacties


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Geef je in Telnet nog een enter na "?V"?

  • iemand-anders
  • Registratie: Januari 2016
  • Nu online
GlowMouse schreef op zaterdag 30 september 2017 @ 10:31:
Geef je in Telnet nog een enter na "?V"?
Ja na de ?V geef ik een enter om het command te versturen

  • GlowMouse
  • Registratie: November 2002
  • Niet online
iemand-anders schreef op zaterdag 30 september 2017 @ 10:32:
[...]

Ja na de ?V geef ik een enter om het command te versturen
Dan moet je dat in Python ook doen :) Tn.write stuurt standaard geen enter.

  • iemand-anders
  • Registratie: Januari 2016
  • Nu online
GlowMouse schreef op zaterdag 30 september 2017 @ 10:33:
[...]

Dan moet je dat in Python ook doen :) Tn.write stuurt standaard geen enter.
Opzich logisch had alleen verwacht dat het niet nodig was.
Ik zou zeggen door \n toe te voegen dat het werkt maar dat is het helaas niet.
tn.write("?V \n".encode('ascii'))
output: Telnet(192.168.0.103,23): send b'?V\n'
Is er een speciale manier om een enter te versturen ?

[ Voor 5% gewijzigd door iemand-anders op 30-09-2017 10:58 ]


  • Steefph
  • Registratie: Juli 2002
  • Laatst online: 23-09 12:24
Ben er zelf toevallig ook mee bezig (niet voor een receiver, totaal wat anders) daar staat de code zo omschreven en dat werkt prima
Python:
1
tn.write(cmd + '\n')


Tevens kun je misschien wat aan de volgende regel hebben. Een soort halt tot je "VOL" hebt ontvangen
Python:
1
tn.read_until('VOL')


In dit stukje
Python:
1
tn.write("?V \n".encode('ascii'))

Zit een spatie tussen de V en je enter. Misschien dat de receiver dat niet leuk vindt ;)

[ Voor 55% gewijzigd door Steefph op 30-09-2017 11:29 ]

Alles is terug te redeneren naar 4


Verwijderd

Probeer '\r\n' in plaats van '\n'.

code:
1
tn.write("?V\r\n")

[ Voor 52% gewijzigd door Verwijderd op 30-09-2017 11:29 ]


  • iemand-anders
  • Registratie: Januari 2016
  • Nu online
Aangepast naar:
cmd = '?V'
tn.write((cmd+'\n').encode('ascii'))

resultaat is:
Telnet(192.168.0.103,23): send b'?V\n'

met:
tn.write((cmd+'\r\n').encode('ascii'))

krijg ik:
Telnet(192.168.0.103,23): send b'?V\r\n'
Telnet(192.168.0.103,23): recv b'E04\r\n'

E04 krijg ik in telnet bij een foutief command

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Steefph
  • Registratie: Juli 2002
  • Laatst online: 23-09 12:24
Ik vermoed dat de .encode('ascii') je de das om doet.

doe dit eens
Python:
1
tn.write((cmd).encode('ascii')+'\n')

Alles is terug te redeneren naar 4


  • iemand-anders
  • Registratie: Januari 2016
  • Nu online
Steefph schreef op zaterdag 30 september 2017 @ 12:42:
Ik vermoed dat de .encode('ascii') je de das om doet.

doe dit eens
Python:
1
tn.write((cmd).encode('ascii')+'\n')
Werkt !

bedankt allemaal voor de support _/-\o_

Acties:
  • 0 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 08-10 18:23
Maar nu de vraag: waarom en op welke manier verlaagd je versterker die 3db dan? Daar moet toch een gedachte achter zitten? Blijft dat zo totdat je uiteindelijk niks meer hoort?

Sorry ben gewoon benieuwd :+

Acties:
  • 0 Henk 'm!

  • iemand-anders
  • Registratie: Januari 2016
  • Nu online
xFeverr schreef op zondag 1 oktober 2017 @ 18:36:
Maar nu de vraag: waarom en op welke manier verlaagd je versterker die 3db dan? Daar moet toch een gedachte achter zitten? Blijft dat zo totdat je uiteindelijk niks meer hoort?

Sorry ben gewoon benieuwd :+
Ja hij blijft het volume verlagen met 3db constant elke 90 seconden, totdat het volume gewoon op --/uit staat, in de handleiding staat wel dat het volume wordt verlaagt als hij te warm wordt maar niet met hoeveel en hoe vaak. Maar het gebeurt al zelfs als ik de versterker net aanzet, tevens wordt de versterker ook niet warm.

Tot nu toe geen oplossing kunnen vinden, en dan voor nu deze workaround omdat het best vervelend is als je volume ineens heel zacht staat.

Acties:
  • 0 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 08-10 18:23
Oké dat is dus echt vaag, maar wel ontzettend vet dat je ermee kan telnetten
Pagina: 1