Ich habe mittlerweile eine wunderbare Lösung nur mit AppleScript erarbeitet, siehe weiter unten.
Erst ein paar Kommentare und Bemerkungen:
Ich denke, Du benötigst eine Software über die Du mit dem Seriellen Port kommunizieren kannst.
Kermit wäre eine Möglichkeit.
Kermit kann so ziemlich alles, aber es ist nicht ganz einfach zu durchschauen.
Im Linuxbereich ist außerdem minicom weit verbreitet und unter Windows wird Hyperterminal benutzt, was aber m. W. nicht so flexibel ist.
Hmm, und ich dachte immer per Terminal geht alles - wenn man nur weiss wie...
Tönt für mich alles etwas kompliziert.
cats hab ich hier gefunden:
http://github.com/leucos/cats
lässt sich sogar auf osx kompilieren, du musst nur die zeilen 214-225 in cats.c auskommentieren (sollte die eigentliche funktion nicht beeinträchtigen).
kannste vielleicht mal berichten obs funktioniert, diese relais karte würde mich auch interessieren!
Cats hatte ich auch schon gefunden.
Mein Problem: ich habe nicht die geringste Ahnung, wie ich sowas auf Terminalebene istalliere
Wenn das einfach geht und mir jemand erklärt wie, probier ich's mal aus.
Allerdings hab ich ja jetzt eine gute Lösung per AppleScript.
Auf meiner endlosen Suche nach einer für mich guten Lösung bin ich auch immer wieder auf dieses "Screen" gestossen. Ich vermute, damit müsste es irgendwie möglich sein, aber bin auch da nicht weitergekommen. Mit weiter oben empfohlenem Befehl kann ich zwar so einen "Screen" öffnen, aber das wars dann auch schon. Eine Verbindung scheint hergestellt, jedenfalls ist der Port dann "busy", aber wie ich da jetzt Befehle schicken oder gar empfangen soll, entzieht sich meiner Kenntnis. Ich scheitere da schon beim Versuch, Screen wieder zu beenden... Sollte gem. Anleitung mit ctrl-a + ctrl-\ gehen, aber meine Tastatur hat keinen direkt ansprechbaren Backslash. Mir blieb da immer nur das Ausstöpseln des USB-Kabels, um die Screen-Session zu beenden...
Ich habe dann eine Reihe von kleinen Programmen ausprobiert, auf die ich bei der Recherche gestossen bin; ZTerm,
iTerm,
goSerial und weitere. Mit allen kann ich zwar eine Verbindung herstellen, aber Befehle senden oder empfangen ging nicht - bzw.
ich habe es nicht geschafft .
Das einzige Tool, mit dem es schliesslich geklappt hat, sowohl die Öffnen/Schliessen Kommandos zu senden als auch den Status-Befehl und die Rückgabe zu lesen war
CoolTerm Mac. Damit bekomme ich als Antwort sowas wie "00 01 00 00 00 00 00 01", was in diesem Beispiel bedeutet, dass Relais 2 und 8 (01) geschaltet sind und die anderen (00) nicht. Zumindest hat mir das gezeigt, dass der Befehl stimmt und dass das Board wirklich den Status zurückschickt. Leider hat mich das aber in Bezug auf eine Automatisierung nicht weitergebracht, da ich das Output von CoolTerm nicht weiterverarbeiten kann.
Nun zu meiner Lösung:
Ich habe mich dann wieder
SerialPort X zugewandt, das ich bereits zuvor probiert hatte, aber damit ebenfalls nicht weiterkam.
SerialPort X ist eine AppleScript Scripting-Addition für serielle Kommunikation.
Bisher scheiterte ich aber daran, damit meine Kommandos zu senden. Das Problem dabei war offenbar das Format der Kommandos, die wohl in ASCII umgewandelt werden müssen. Nach langem Try & Error hab ich die Lösung gefunden.
Das HEX Kommando FF 01 01 (Relais 1 ein) kann auch dezimal notiert werden und lautet dann 255, 1, 1. Mittels einer kleinen Routine kann ich die dezimale Notation nun in ASCII-Code umwandeln und dann klappt alles wunderbar.
Auf ähnliche Weise kann ich das Output vom Board wieder in ein für mich brauchbares Format umwandeln, mit dem ich arbeiten kann.
Hier mein Test-Code:
Code:
-- bei mehreren genutzen Ports kann der Port auch ueber eine Auswahlliste definiert werden:
-- set device to choose from list (serialport list)
-- set portRef to serialport open device
-- den seriellen Port definieren und oeffnen
set portRef to serialport open "/dev/cu.usbserial-A800dBFH"
delay 0.1
if portRef is equal to -1 then
display dialog "konnte den Port nicht oeffnen" & return & portRef
else
-- Befehl zum Schliessen von Relais 1
set myCmd to MakeString({255, 1, 1})
serialport write myCmd to portRef
delay 1
-- Befehl zum Schliessen von Relais 8
set myCmd to MakeString({255, 8, 1})
serialport write myCmd to portRef
delay 1
-- Befehl zum Oeffnen von Relais 1
set myCmd to MakeString({255, 1, 0})
serialport write myCmd to portRef
delay 1
-- Befehl zur Rueckgabe des Status
set myCmd to MakeString({255, 9, 0})
serialport write myCmd to portRef
delay 1
-- Output vom Relaisboard lesen
set x to serialport bytes available portRef
if x is greater than 0 then
set reply to serialport read portRef
delay 0.1
-- Output umwandeln
set output to TranslateString(reply)
else
display dialog "kein Output erhalten"
end if
-- den seriellen Port schliessen
serialport close portRef
return output
end if
-- Input umwandeln
on MakeString(theBytes)
set thestr to ""
repeat with i from 1 to length of theBytes
set thestr to thestr & (ASCII character (item i of theBytes))
end repeat
return thestr
end MakeString
-- Output umwandeln
on TranslateString(theReply)
set thestr to {}
repeat with i from 1 to length of theReply
set thestr to thestr & (ASCII number (item i of theReply))
end repeat
return thestr
end TranslateString
Als Output bekomme ich dann eine Liste mit z.B. folgendem Inhalt:
{0, 0, 0, 0, 0, 0, 0, 1} => Relais 8 ist ein, Rest ist aus
Damit stehen mir nun alle Wege offen, um in AppleScript (oder egal womit) damit weiterzuarbeiten.
Zu guter Letzt bin ich dann noch auf
Pashua gestossen.
Damit hab ich mir eine nette kleine GUI gebastelt, alles in AppleScript.
Das sieht dann so aus:
Beim Starten werden damit die aktuellen Zustände der Relais ausgelesen und dann im Fenster die entsprechenden Checkboxen aktiviert. Ich kann damit einzelne Relais ein-/ausschalten oder auch gleich alle ein / alle aus und sehe beim Start den aktuellen Status und bin damit jetzt völlig happy
diese relais karte würde mich auch interessieren
Die Relais-Karte als solches kann ich empfehlen.
Der Preis ist ok, die meisten vergleichbaren Karten sind teurer.
Der Versand von Bulgarien in die Schweiz dauerte nur ein paar Tage, die Versandkosten betrugen läppische 4€, das ist billiger als ein Versand innerhalb der Schweiz!
Eine Anfrage an den Support per Email wurde innert 1 h zufriedenstellend beantwortet.