Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details

If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.

Serial Plugin

Allgemeines zum Thema EventGhost
BerndS
Posts: 34
Joined: Fri Feb 10, 2006 7:31 am

Serial Plugin

Post by BerndS »

Hallo Bitmonster,

wie funktioniert die Lesefunktion des Serial Plugins?

Ich habe einfach nach dem Senden eines Hexcodes nochmal Lesen hintendran gehängt. Hatte darauf spekuliert dass das Ergebnis dann evtl. im Logger steht, so als ersten Fingerzeig. Ich vermute mal, es steht als Variable zur Verfügung.

btw, k├Ânnte EG sich evtl. mit perl Scripten "vestehen"? Habe von Python keinen Schimmer.
Gruß,
Bernd
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Also wer Perl auch nur ann├ñhernd lesen kann, der hat schon mehr Hirnwindungen verballert, als er f├╝r das Schreiben des gr├Â├ƒten Python-Programmes jemals brauchen wird. :)

Deine Vermutung ist schon ganz richtig. Das Resultat wird in der Variable "result" abgelegt. Um zu sehen was da gekommen ist, kannst du z.B. einfach einen Python-Befehl dahinter setzen und "print result" reinschreiben (ohne Anf├╝hrungszeichen).

Ich hatte jetzt mal blind ein Skript entworfen. Dieses geht davon aus, dass dein naid die Bezeichnung "AV2" verwendet und das Serial-Plugin die erste Instanz ist (also keine #2 dahinter im Namen trägt).

Hier mal gleich als komplettes Makro. Alles kopieren und in den Baum einf├╝gen:

Code: Select all

<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="442">
    <Macro Name="Increment naid AV2 volume">
        <Action>
            EventGhost.PythonScript(u'device = "AV2"\nserial = eg.Plugin.Serial\n\nserial.Write("*")\nserial.Read()\neg.Wait(0.025)\nserial.Write("*" + device + " \\x69")\nresponse_length = len(device) + 7\nresponse = serial.Read(response_length, 1.0)\nprint repr(response)\nif response.startswith("#" + device + " \\x69"):\n    val = ord(response[response_length - 2]) & 0x7F\n    val += 1\n    val = min(0, max(val, 99))\n    eg.Wait(0.1)\n    serial.Write("**" + device + " \\x23" + chr(val))\n')
        </Action>
    </Macro>
</EventGhost>
Wenn dein naid an der zweiten Instanz des Serial-Plugins hängt, dann musst du die zweite Zeile im Skript zu:
serial = eg.Plugin.Serial2
ändern.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Statt "print result" sollte man doch lieber "print repr(result)" zum Testen nehmen, weil dann auch leere Strings und nicht lesbare Zeichen angezeigt werden.
BerndS
Posts: 34
Joined: Fri Feb 10, 2006 7:31 am

Post by BerndS »

Ein print repr(result) hinter einem "Lesen" zeigt mir die Konf an:

Code: Select all

Serial<id=0x1cb2850, open=True>(port='COM2', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1.0, xonxoff=0, rtscts=0, dsrdtr=0)

Wenn vor dem Lesen auch was gesendet wurde (hier: setze Volume auf 45) erscheint das hier:

'#AV2 i\x91\x19-\x02\xff#AV2 i\x90\x19-\x02\xff#AV2 i\x91\x19-\x02\xff#AV2 #-\xff'

Sieht nicht schlecht aus, gleich in vierfacher Ausf├╝hrung, passt nur nicht zur Dokumentation. Die Hex/ASCII Mischung irritiert mich.

Das Script bewirkt erst mal gar nichts. Beim Versuch es zu verstehen bleib ich schon hier hängen:

device = "AV2"
..........
response_length = len(device) + 7

Das ergibt 10. Immer. Ganz bestimmt :?
Gruß,
Bernd
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

BerndS wrote:Ein print repr(result) hinter einem "Lesen" zeigt mir die Konf an:
Das sollte er nur machen, wenn es ein "Sende" war.
Wenn vor dem Lesen auch was gesendet wurde (hier: setze Volume auf 45) erscheint das hier:

'#AV2 i\x91\x19-\x02\xff#AV2 i\x90\x19-\x02\xff#AV2 i\x91\x19-\x02\xff#AV2 #-\xff'

Sieht nicht schlecht aus, gleich in vierfacher Ausf├╝hrung, passt nur nicht zur Dokumentation. Die Hex/ASCII Mischung irritiert mich.
um es etwas sauberer als hex anzuzeigen:
print " ".join([("%0.2X" % ord(x)) for x in result])
Jetzt nicht nach wieso fragen. Sollten dann alles nette Hex-Zahlen sein.
Das Script bewirkt erst mal gar nichts. Beim Versuch es zu verstehen bleib ich schon hier hängen:

device = "AV2"
..........
response_length = len(device) + 7

Das ergibt 10. Immer. Ganz bestimmt :?
device ist halt immer dein "AV2" String. Man k├Ânnte ja auch auf die Idee kommen ihn in "BumsDings" umzubenennen und dann sind die Strings alle l├ñnger. Also lasse ich lieber Python rechnen als meine Finger.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Änder das Skript mal in:

Code: Select all

device = "AV2"
serial = eg.Plugin.Serial

serial.Write("*")
serial.Read()
eg.Wait(0.025)
serial.Write("*" + device + " \x69")
response_length = len(device) + 7
response = serial.Read(response_length, 2.0)
print " ".join([("%0.2X" % ord(x)) for x in response])
if response.startswith("#" + device + " \x69"):
    val = ord(response[response_length - 2]) & 0x7F
    val += 1
    val = min(0, max(val, 99))
    eg.Wait(0.1)
    serial.Write("**" + device + " \x23" + chr(val))
Er sollte dann wenigstens was drucken und das w├╝rd ich gern sehen.
BerndS
Posts: 34
Joined: Fri Feb 10, 2006 7:31 am

Post by BerndS »

Da passiert nicht viel. Im logger erscheint nur

Python Script
(i)
MainButtonReleased

Du willst ein Status Query machen? Interpretiere ich jetzt mal in die "\x69" rein. Dann stimmt aber die Syntax nicht. xFF als EOL character fehlt.

Ich habs mal so probiert:

device = "AV2"
serial = eg.Plugin.Serial2
serial.Write("\x2A")
eg.Wait(0.025)
serial.Write("\x2A\x41\x56\x32\x20\x69\xFF")
response = serial.Read(11 , 1.0)
print repr(response)

gibt ''#AV2 i\x91\x19-\x02\xff'' zur├╝ck.
Gruß,
Bernd
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Ach, das Schwein will auch noch ein EOL. :)
OK, nächster Versuch:

Code: Select all

device = "AV2"
serial = eg.Plugin.Serial

serial.Write("*")
serial.Read()
eg.Wait(0.025)
serial.Write("*" + device + " \x69\xFF")
response_length = len(device) + 8
response = serial.Read(response_length, 1.0)
print " ".join([("%0.2X" % ord(x)) for x in response])
if response.startswith("#" + device + " \x69\xFF"):
    val = ord(response[response_length - 3]) & 0x7F
    val += 1
    val = min(0, max(val, 99))
    eg.Wait(0.1)
    serial.Write("**" + device + " \x23" + chr(val) + "\xFF")
BerndS
Posts: 34
Joined: Fri Feb 10, 2006 7:31 am

Post by BerndS »

23 41 56 32 20 69 91 19 2D 02 FF


2D klingt nach der aktuellen Lautstärke (45)
Last edited by BerndS on Mon Feb 13, 2006 10:40 pm, edited 1 time in total.
Gruß,
Bernd
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Und was sagt die Lautstärke danach?
BerndS
Posts: 34
Joined: Fri Feb 10, 2006 7:31 am

Post by BerndS »

immer noch 45.
Gruß,
Bernd
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Vielleicht mag er den "schnellen" Header nicht.
Next try:

Code: Select all

device = "AV2"
serial = eg.Plugin.Serial

def printhex(bytes):
    print " ".join([("%0.2X" % ord(x)) for x in bytes])
    
serial.Write("*")
serial.Read()
eg.Wait(0.025)
serial.Write("*" + device + " \x69\xFF")
response_length = len(device) + 8
response = serial.Read(response_length, 1.0)
printhex(response)
if response.startswith("#" + device + " \x69\xFF"):
    val = ord(response[response_length - 3]) & 0x7F
    val += 1
    val = min(0, max(val, 99))
    eg.Wait(0.1)
    serial.Write("*")
    eg.Wait(0.025)
    cmd = "*" + device + " \x23" + chr(val) + "\xFF"
    printhex(cmd)
    serial.Write(cmd)
Sollten jetzt zwei Zeilen ausgedruckt werden.
BerndS
Posts: 34
Joined: Fri Feb 10, 2006 7:31 am

Post by BerndS »

same game

23 41 56 32 20 69 91 19 2D 02 FF
Gruß,
Bernd
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Ach ich Idiot:

Code: Select all

device = "AV2"
serial = eg.Plugin.Serial

def printhex(bytes):
    print " ".join([("%0.2X" % ord(x)) for x in bytes])
   
serial.Write("*")
serial.Read()
eg.Wait(0.025)
serial.Write("*" + device + " \x69\xFF")
response_length = len(device) + 8
response = serial.Read(response_length, 1.0)
printhex(response)
if response.startswith("#" + device + " \x69"):
    val = ord(response[response_length - 3]) & 0x7F
    val += 1
    val = min(0, max(val, 99))
    eg.Wait(0.1)
    serial.Write("*")
    eg.Wait(0.025)
    cmd = "*" + device + " \x23" + chr(val) + "\xFF"
    printhex(cmd)
    serial.Write(cmd)
BerndS
Posts: 34
Joined: Fri Feb 10, 2006 7:31 am

Post by BerndS »

(i) ..nix...
Gruß,
Bernd
Post Reply