Script zum Schalten der Conrad Relaiskarten: Bestell-Nr.: 197720 - 62 oder Bestell-Nr.: 197730 - 62

  • #1, by SpiderbyteMonday, 29. September 2014, 11:24 10 years ago
    Hallo, ich habe zusammen mit einem Freund ein Script geschrieben, dass es möglich macht die Conrad Relaiskarten mit Visionaire zu steuern.
    Das ist vielleicht für die Modellbauer unter euch interessant. Da es zu den Relaiskarten keine Software gibt, die auf die persönlichen Anforderungen eingeht, kann man sich nun auch mit Visionaire seine Steuersoftware leicht selber machen.
    Ich selber verwende es zum steuern meines Heimkinos um z.B. die Fenster-Rollos zu schließen, den Vorhang zu öffnen oder das Licht zu schalten u.s.w. Man könnte auch Abläufe programmieren, die mit einem Mausklick ausgeführt werden aber ihr kennt ja die Vielseitigkeit von Visionaire. Der Modellbahn-Besitzer könnte so z.B. in seinem Streckenplan klicken und so die Weichen stellen....

    Also, hier ist das Script mit der integrierten Beschreibung. Viel Spaß damit. wink

    -- DEFINITIONS-Script zum Schalten der Conrad Relaiskarten: Bestell-Nr.: 197720 - 62 oder Bestell-Nr.: 197730 - 62
    -- Autoren: Sven Giermann und Manuel (Spiderbyte) Hachfeld, Sept. 2014, ver. 1.0
    
    
    -- ComPort bestimmen:
    
    relaisComPort = 3
    
    
    -- Debuggen:
    
    -- Um zu prüfen, welche Daten an den ComPort gesendet werden, muss die nachfolgende Zeile auf debugLog = 1 geändert werden.
    -- Dies öffnet bei JEDEM Zugriff auf den ComPort ein Fenster, welches die gesendeten 4 Bytes anzeigt. Sollte das Spiel im
    -- Vollbild ausgeführt werden, wird dieses dabei minimiert.
    -- Man kann die Debugg-Funktion aber auch gezielt durch das jeweilige AUSFÜHRUNGS-Script einsetzen, z.B.:
    
    -- debugLog = 1
    -- senden(6, 1, 16)
    -- debugLog = 0
    
    --In dem Fall wird nur dann ein Fenster geöffnet, wenn dieses AUSFÜHRUNGS-Scrip aufgerufen wird.
    
    debugLog = 0
    
    
    -- Relais schalten:
    
    -- Um ein Relais zu schalten wird ein AUSFÜHRUNGS-Script verwendet, dass so aussehen könnte:
    
    -- senden(6, 1, 16)
    
    -- Der erste Parameter (6) steht für das Kommando. In dem Fall: einschalten
    -- Der zweite Parameter (1) steht für die Kartenadresse. In dem Fall Karte 1
    -- Der dritte Parameter (16) steht für Daten und ist die Relaisnummer auf der Karte. In dem Fall Relais Nr. 5 
    -- Die Prüfsumme wird durch das weiter unten stehende Script errechnet. Daher braucht dieser Parameter nicht angegeben werden. 
    -- Kommandos: 1 = initialisieren, 6 = einschalten, 7 = ausschalten, 8 = Umschalten (Toggle)
    -- Kartenadressen: erste Karte = 1, zweite Karte = 2, dritte Karte = 3, vierte Karte = 4..... max. 255 Karten können kaskadiert werden.
    -- Daten: Relais 1 = 1, Relais 2 = 2, Relais 3 = 4, Relais 4 = 8, Relais 5 = 16, Relais 6 = 32, Relais 7 = 64, Relais 8 = 128
    -- Beispiele:
    -- senden (6, 1, 16)  - schaltet Relais Nr. 5 auf der ersten Karte ein.
    -- senden (7, 3, 64) - schaltet Relais Nr. 7 auf der dritten Karte aus.
    -- senden (8, 2, 8) - schaltet Relais Nr. 4 auf der zweiten Karte um (von aus auf ein, oder von ein auf aus) Toggle
    
    
    -- Prüfsummenberechnung:
    
    function xor(a, b, c)
      local x = 0
      a = a or 0
      b = b or 0
      c = c or 0
      i = 0
      while i < 8 do
        local aa = a % 2^(i+1)
        local bb = b % 2^(i+1)
        local cc = c % 2^(i+1)
        x = x + ( (aa+bb+cc) % 2^(i+1) )
        a = a - aa
        b = b - bb
        c = c - cc
        i = i + 1
      end
      return x
    end
    
    
    -- Senden:
    
    -- Hier werden die Parameter aus dem AUSFÜHRUNGS-Script z.B senden(6, 1, 16) an den ComPort gesendet. Die Prüfsumme wird selbst ermittelt.
    -- Sollte debugLog auf 1 gesetzt sein, wird ein Fenster mit den gesendeten Bytes geöffnet. Sollte das Spiel im Vollbild ausgeführt werden,
    -- wird dieses minimiert.
    
    function senden(Kommando, Kartenadresse, Daten)
      Kommando = Kommando or 0
      Kartenadresse = Kartenadresse or 0
      Daten = Daten or 0
      local Pruef = xor(Kommando, Kartenadresse, Daten)
      wserial:write(string.format("%c%c%c%c", Kommando, Kartenadresse, Daten, Pruef))
      wserial:flush()
      
      if debugLog > 0 then
        os.execute( string.format("start echo Kommando: %d, Kartenadresse: %d, Daten: %d, Pruef: %d", Kommando, Kartenadresse, Daten, Pruef) )
      end
    end
    
    
    -- ComPort Einstellungen:
    
    -- Die nachfolgende Zeile (os.execute...) ändert, wenn sie nicht auskommentiert ist die Einstellungen für den Comport auf:
    -- Bits pro Sekunde: 19200
    -- Flusssteuerung (Handshake): keine
    -- Datenbits: 8
    -- Stoppbits: 1
    -- Sollte das Spiel im Vollbild ausgeführt werden, wird dieses minimiert. Sind die Einstellungen für den ComPort im Gerätemanager bereits
    -- eingetragen, kann diese Zeile auskommentiert bleiben.
    
    -- os.execute( string.format("mode COM%d:19200,n,8,1", relaisComPort) )
    
    
    -- Der ComPort wird im binary mode geöffnet
    
    wserial=io.open( string.format("COM%d", relaisComPort), "w+b" )
    
    
    -- Karten werden initialisiert:
    
    senden(1, 1, 1)      
    

    Newbie

    13 Posts


  • #2, by JackMcRipMonday, 29. September 2014, 12:17 10 years ago
    Hi,
    Danke :-)
    Sehr interessant.
    Gibt es einen Link zu der Conrad-Relaiskarte?
    Hatte schonmal über eine Verknüpfung mit Raspberry Pi oder Arduino mit Visionaire nachgedacht.

    Ich finde den Gedanken reizvoll ein Spielbrett mit einem Spiel zu verbinden.
    Am besten ein Tablet mit einem Spielbrett.
    Vielleicht eins wo man das Tablet in das Spielbrett legen kann.
    Das Spielbrett umgibt das Tablet.
    Felder auf dem realen Spielfeld werden abgefragt und ausgaben an Beleuchtung oder sowas gemacht.

    Forum Fan

    115 Posts

  • #3, by SpiderbyteMonday, 29. September 2014, 12:29 10 years ago
    Hi,
    hier die Links:
    Allerdings haben die Karten keine Eingänge, mit dem man Spielfelder abfragen könnte.

    Newbie

    13 Posts

  • #4, by JackMcRipMonday, 29. September 2014, 13:05 10 years ago
    Danke :-)

    Forum Fan

    115 Posts

  • #5, by SpiderbyteMonday, 06. October 2014, 23:21 10 years ago
    Ich habe ein kleines Beispielprogramm geschrieben und im Shop eingestellt:

    Newbie

    13 Posts

  • #6, by SpiderbyteWednesday, 08. October 2014, 00:13 10 years ago
    Ups, es war noch ein kleiner Fehler drin. Zeile 73:
    wserial:write(string.format("%c%c%c%c", Kommando, Kartenadresse, Daten, Pruef))
    

    ist Mist. So muss es aussehen:
    wserial:write(string.char(Kommando, Kartenadresse, Daten, Pruef))
    

    Newbie

    13 Posts

  • #7, by SethosFriday, 10. November 2017, 12:14 7 years ago

    Hallo zusammen. Hat vieleicht noch jemand von euch einen Downloadlink für die Vis-Projektdatei zur der Karte?

    Gruss

    Newbie

    5 Posts

  • #8, by sebastianFriday, 10. November 2017, 12:51 7 years ago
    das nicht, aber vielleicht kannst du mit dem Ersteller Kontakt aufnehmen. Wenn du ihm hier eine PN schickst, sollte er dazu auch per E-Mail kontaktiert werden.
    Ich habe anscheinend den selben Mann auch auf YouTube gefunden:
    Der Link in der Beschreibung ist leider auch nicht mehr aktuell.

    Thread Captain

    2346 Posts

  • #9, by SethosFriday, 10. November 2017, 13:02 7 years ago
    Danke für die schnelle Antwort

    Newbie

    5 Posts