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.
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
Serial Plugin
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.
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
Bernd
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
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:
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.
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>serial = eg.Plugin.Serial2
ändern.
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Ein print repr(result) hinter einem "Lesen" zeigt mir die Konf an:
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
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
Bernd
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Das sollte er nur machen, wenn es ein "Sende" war.BerndS wrote:Ein print repr(result) hinter einem "Lesen" zeigt mir die Konf an:
um es etwas sauberer als hex anzuzeigen: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.
print " ".join([("%0.2X" % ord(x)) for x in result])
Jetzt nicht nach wieso fragen. Sollten dann alles nette Hex-Zahlen sein.
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.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
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Änder das Skript mal in:
Er sollte dann wenigstens was drucken und das w├╝rd ich gern sehen.
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))
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.
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
Bernd
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Ach, das Schwein will auch noch ein EOL. 
OK, nächster Versuch:
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")
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Vielleicht mag er den "schnellen" Header nicht.
Next try:
Sollten jetzt zwei Zeilen ausgedruckt werden.
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)
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
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)