​XXXL Konzentrator/Extension im Eigenbau 128 Eingänge günstig erweiten

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • mrkue
    Smart Home'r
    • 27.08.2015
    • 52

    #16
    Luk27
    es soll auch bald ein Update geben - zur Zeit geht meine Zeit jedoch in den Rohbau
    ich bin gerade dabei alles für den Abriss des bestehenden Daches und anschließendes betonieren der neuen Decke vorzubereiten, dies muss aufgrund der recht unsommerlichen Wetterlage zügig von statten gehen

    aber ganz kurz zum XXXL Modul:
    der Code ist auf einen Stand, welcher störungsfrei arbeitet, nur zum herstellen einer Platine für den "Produktivtest" bin ich nich nicht gekommen. Dies möchte ich machen sobald ich etwas Luft habe, dies kann aber noch 2 Wochen dauern.

    zur Anzahl der Eingänge:
    meine Idee war eigentlich ein Modularen Aufbau zu erstellen und ein Grundmodul (mit Arduino und 2x 16 Eingänge) und dann bis zu 3 Erweiterungen über I2C anzuhängen welche je weiter 2x 16 Eingänge bieten
    dies hätte auch den Vorteil in einer Erweiterten Version auch Ausgangsmodule anbinden zu können
    ebenso denke ich wird es kaum möglich sein mehr als 32 Ein-/Ausgänge sauber über Schraubklemmen in einem Gehäuse unterzubringen

    ich hoffe also ihr habe zur Zeit noch etwas Geduld mit mir - es wird Bald mehr Infos geben

    ich werde auf jeden Fall auch eure weiteren Vorschläge verfolgen und berücksichtigen.

    Kommentar


    • Luk27
      Luk27 kommentierte
      Kommentar bearbeiten
      Es ist eine gute Idee. Hast du fortschritte mit dem Modularen Aufbau gemacht?
  • hismastersvoice
    Supermoderator
    • 25.08.2015
    • 7265

    #17
    Cooles Projekt...
    Würde auch auf Ethernet setzen.

    Wenn man z. B. Finder Printsockel auflötet kann man die Relais sogar schnell wechseln.
    Kein Support per PN!

    Kommentar

    • killeriq
      Smart Home'r
      • 18.09.2015
      • 91

      #18
      Hier is so ein ding vertig mit Arduino : http://www.sedtronic.cz/en_railduino...e-v1.3,76.html

      Kommentar


      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        Was mich beim Railduino stört, so wie bei vielen dieser Projekte ist das der USB und der Ethernetanschluss immer seitlich ausgeführ wird. Das macht nicht viel Sinn in einem Schaltschrank und nimmt nur unötig viel Platz weg.

      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        Der Railduino wird jedoch über Modbus angebunden, dass heisst ja auch dass die Abfrage der Eingänge über Polling vom Modbus Master sprich MS oder Modbus Extension erfolgt, ob das ausreicht für Lichtschalter mit Doppelklick? Bzw. werden vermutlich bei vielen Eingängen und häufigen abfragen der Eingängen Performanceprobleme auftreten?

        Reinhard
    • Gast

      #19
      Klingt sehr interessant dein Projekt.
      Wäre vorallem an kostengünstigen zusätzlichen Ausgängen interessiert.

      Kommentar

      • monte
        Azubi
        • 16.11.2015
        • 4

        #20
        Wie ist der aktuelle Stand?

        Kommentar

        • Gast

          #21
          Hallo an alle.

          Ich darf mich erst mal Vorstellen.
          Mein Name ist Björn und ich bin neu hier im Forum.

          Erst einmal ein riesen Dank an den Ersteller.


          Während meiner Bauzeit habe ich nicht einemal die Zeit gehabt ans Programmieren zu denken.... RESPEKT

          Nun, ich habe das Thema interresiert verfolgt, da ich derzeit mit meinen Ardus an einer Lichtsteuerung (LED Sternenhimmel) über RS232 ansteuerung plane.
          So eine Art UCP (Universelle Controller Platiene)

          Ich favorisiere defenitiv die RS 232 Schnittstelle.

          Vorteil:
          -Einfache Verkabelung und "Weiterverkabelung bei "Zuwachs an Peripherie"
          -Bereits getestet, das es schnell genug ist um Lichtschalter Befehl zu senden und Licht über die gleiche Schnittstelle zu empfangen von dem Lox Server.
          -Simply the BEST- Prinziep nenn ich es. Einfache Befehlsweitergabe die mit zbsp ACK als Verstanden vom Empfänger quittiert werden.
          - Mit UDP hab ich noch nicht soo viel gemacht, aber dort können Datenpackete verloren gehen.

          UND für mich ganz wichtig.

          Ich kann mich mit dem PC/Notebook einfach in die Datenleitung mit reinhängen und den Ardu über RS232 abändern oder neu Programmen.
          (Ohne die Abgehangene Decke öffnen zu müssen)

          Die kosten für die RS 232 Schnittstelle (Extension) von derzeit ca 180€ ist doch fast belanglos, in Bezug auf das mann sich einen Haufen Extensions spart...


          Daher werde ich es auch definitiev Verfolgen das Thema.
          PS:
          Lass dir ruhig Zeit mit den Updates, Bau UND Familie gehen vor!!!



          Gruß Björn

          Kommentar

          • modchen
            Smart Home'r
            • 31.10.2016
            • 30

            #22
            mrkue

            hast du evtl die Schaltpläne und den Arduino Code noch und könntest diesen freundlicherweise teilen ? Leider habe ich nur Grundwissen mit Arduino, und würde mich gerne weiter bilden.

            Kommentar

            • Robert L.
              MS Profi
              • 26.08.2015
              • 922

              #23
              zum weiterbilden:


              machte schon fast das was du willst,...

              Kommentar

              • Special
                LoxBus Spammer
                • 27.08.2015
                • 437

                #24
                Schöne Idee mit RS232, ich sag dir die 5 Sec kommen xD.
                Wäre es nicht sinniger ein extra Forum für (Bastler) zu erstellen was man nicht auf Anhieb findet.
                Quasi ein Untergrund Forum um Loxone nicht zu schaden und uns nichts selbst ins Tor zu schießen ?

                Kommentar

                • Gast

                  #25
                  Gibt es mittlerweile etwas Neues? Bin sehr an der Lösung interessiert 128 Eingänge für meine pro Fenster 2 Reedkontakte zur Verfügung zu haben, würde diese Methode sehr gerne der Variante mit den 1-wire Sensoren vorziehen.

                  Gruß Pierre

                  Kommentar

                  • mrkue
                    Smart Home'r
                    • 27.08.2015
                    • 52

                    #26
                    Hallo,

                    ich habe den Code gegenüber der Version die im ersten Beitrag beschreiben hatte noch etwas verändert, es wird jetzt jeder einzelne Eingang übertragen dies macht die Einbindung deutlich einfacher.

                    Code:
                    #include <Wire.h>
                    
                    byte addr[8]= {0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27};
                    byte anzahlMCP = sizeof(addr);
                    word Register[sizeof(addr)];
                    word RegisterLast[sizeof(addr)];
                    
                    long zeit = 0;
                    unsigned long lastCheck = 0;
                    int checkIntervall = 25;
                    
                    // nach Reboot alle aktuellen Werte übertragen
                    bool check = true;
                    
                    void setup() {
                    
                    // I2C starten
                    Wire.begin();
                    
                    // Serial Komunikation zu RS232 Extension
                    Serial1.begin(115200);
                    
                    // Serial DEBUG Infos 
                    Serial.begin(115200);
                    delay(1000);
                    Serial.println("Bereit");
                    
                    Serial.print("Anzahl MCP Module: ");
                    Serial.println(anzahlMCP);
                    
                    // Einstellungen für MCP´s übertragen
                    for (int n = 0; n< anzahlMCP; n++) {
                    
                    //alle PINS mit pullup - GPPUA
                    fullwrite(addr[n], 0x0c, 0xff);
                    
                    //alle PINS invertieren - IOPOLA
                    fullwrite(addr[n], 0x02, 0xff);
                    
                    // Modulnr. und dazugehörige Adressen anzeigen
                    Serial.print("Adresse Modul Nr.: ");
                    Serial.print(n+1);
                    Serial.println(" ist :");
                    Serial.println(addr[n], HEX);
                    Serial.println(addr[n], BIN);
                    Serial.println(addr[n]);
                    Serial.println("");
                    
                    }
                    
                    for (int i = 0; i < anzahlMCP; i++){
                    RegisterLast[i] = 0xffff;
                    }
                    
                    pinMode(13,OUTPUT);
                    digitalWrite(13,LOW);
                    
                    // Testwert typ F
                    datasendF (0, 2, 100, 23.55);
                    
                    }
                    
                    void loop() {
                    
                    // MCP Stati alle X Millisekunden überprüfen
                    if ((millis() - lastCheck > checkIntervall) || check) {
                    
                    // Anzahl der Module durchlaufen und Prüfen
                    for (int i = 0; i < anzahlMCP; i++) {
                    
                    // Aktuelle Status wird in Variabele geschrieben und mit zuletzt gesendetem verglichen
                    Register[i] = fullread(addr[i], 0x12);
                    if (Register[i]!=RegisterLast[i]) {
                    
                    // Abweichungen wurden erkannt
                    // Einzele Bits werden auf Abweichung kontrolliert
                    for (byte n=0; n<16; n++) {
                    if (bitRead(Register[i], n) != bitRead(RegisterLast[i], n) || check) {
                    // Abweichender Bit gefunden - Wert wird gesendet
                    datasendB (0, 1, (i*16)+(n+1), bitRead(Register[i], n));
                    }
                    
                    }
                    
                    // Wert wird in zuletzt gesendet gespeichert
                    RegisterLast[i]=Register[i];
                    
                    }
                    
                    }
                    
                    }
                    
                    check = false;
                    
                    }
                    
                    // Abfrage der Werte nach I2C Adresse und erstem Register
                    word fullread(byte addr, byte reg) {
                    
                    byte a=0;
                    word ba=0;
                    Wire.beginTransmission(addr);
                    Wire.write(reg);
                    Wire.endTransmission();
                    Wire.requestFrom(addr, 2);
                    a=Wire.read();
                    ba=Wire.read();
                    ba <<= 8;
                    ba |= a;
                    
                    return ba;
                    }
                    
                    // Schreiben von Werten nach I2C Adresse von erstem Register und zu schreibenden Daten beide Register gleich
                    void fullwrite(byte addr, byte reg, byte data) {
                    Wire.beginTransmission (addr);
                    Wire.write (reg);
                    Wire.write (data); // port A
                    Wire.write (data); // port B
                    Wire.endTransmission ();
                    }
                    
                    // auf Serielle Daten vom Miniserver reagieren 
                    void serialEvent1(){
                    digitalWrite(13,HIGH);
                    while (Serial1.available() > 0) {
                    Serial1.read();
                    }
                    }
                    
                    // Senden von Werten 0-255 (byte)
                    void datasendB (byte addr, byte type, byte port, byte value) {
                    digitalWrite(13, HIGH);
                    Serial1.print(addr);
                    Serial1.write(124);
                    Serial1.print(type);
                    Serial1.write(124);
                    Serial1.print(port);
                    Serial1.write(123);
                    Serial1.print(value);
                    Serial1.write(125);
                    Serial1.write(10);
                    digitalWrite(13, LOW);
                    delay(5);
                    }
                    
                    // Senden von Werten als Kommazahl z.B. Temperaturen
                    void datasendF (byte addr, byte type, byte port, float value) {
                    digitalWrite(13, HIGH);
                    Serial1.print(addr);
                    Serial1.write(124);
                    Serial1.print(type);
                    Serial1.write(124);
                    Serial1.print(port);
                    Serial1.write(123);
                    Serial1.print(value);
                    Serial1.write(125);
                    digitalWrite(13, LOW);
                    Serial1.write(10);
                    }
                    es gibt bereits auch eine aus dieser Idee heraus entstandene Lösung die noch deutlich mehr kann als die 128 Eingänge, dazu kann ich zwischen den Jahren mal einen Bericht verfassen

                    und zu der "5 Sekunden Sorge": wenn Loxone die RS232 Extension nicht komplett abschafft wird das schwierig, da ja die RS232 nur empfangen muss, weiter würde diese Lösung auch an einer anderen Logik funktionieren, meine erweiterte Lösung soll dann noch Loxone unabhängiger werden

                    gruß stefan

                    Kommentar

                    • modchen
                      Smart Home'r
                      • 31.10.2016
                      • 30

                      #27
                      mrkue

                      Vielen Dank für deinen Code. Mittlerweile hatte ich mich im Internet selbst schlau gemacht, und auch ein anderes Tutorial gefunden, wo alles drin war, was ich brauchte.

                      http://tronixstuff.com/2011/08/26/tu...inos-io-ports/

                      Ich bin jetzt am testen und ausbauen deiner Idee, jedoch noch ohne Loxone, da ich noch kein Loxone habe. In meinem Schaltplan habe ich vor, die DI mit 24V zu schalten, und habe dazu einen Schaltplan mit Z-Diode und Optokoppler getestet, damit es auch erst ab 10 V eine logische 1 gibt. Das funktioniert bereits.

                      Dein Code ist auch interessant, da ich bisher nicht auf Abweichungen kontrolliert hatte, sondern nur 1 zu 1 seriell übertragen habe und nachher in Loxone oder meinem zukünftigen System dies auswerten wollte.

                      Da ich einen Arduino Mega habe, werde ich wahrscheinlich mein Setup jetzt so aufbauen, dass ich am Arduino maximal viele 24VDC Eingänge und 250V/10A NO/NC Ausgänge habe. Dies kommt alles in ein Hutschienen Gehäuse, welches ich auf der Arbeit mit unserem 3D Drucker drucke. Die MCPs werden 8 DI und 8 DO bekommen und jeweils Ihr eigenes Gehäuse für die Hutschiene, und werden über eine Brücke mit dem Arduino verbunden. Ihre I2C Addresse bekommen diese Erweiterungsmodule dann über Dip Schalter.

                      Eigentlich genau so wie du dir das auch vorgestellt hast, nur dass es bei mir auch DO geben wird, weil ich für mein Projekt 58 DI und 54 DO brauch. Sollte es irgendwann mit den DI/DO nicht mehr reichen, kommt ein zweiter Arduino. Ich werde auch alles über RS485 machen da ich dann weniger Leitungseinschränkungen habe, also mit RS232.

                      Über die 5sec mache ich mir auch keine gedanken, da bei mir nur Licht und Rollstores dran hängen. Schlimmstenfalls kommt die Logik zum reagieren mit ins Arduino, und der Arduino teilt Loxone dann nur mit, dass er was gemacht hat. Das 5sec Abfrage Problem wäre dann gelöst, und Loxone kann ja schlecht Befehle erst nach 5 Sekunden auf dem RS232/RS485 Bus ausführen, da dann diese Schnittstellen Ihren Sinn komplett verloren hätten.
                      Zuletzt geändert von modchen; 16.12.2016, 21:23.

                      Kommentar

                      • Helmut
                        Extension Master
                        • 01.10.2015
                        • 102

                        #28
                        Wie ihr vielleicht wisst habe ich eine Platine entwickelt, die 24 optoentkoppelte Eingänge und 24 ULN-Treiber Ausgänge mit/über einem Pokeys57E auswertet

                        Infos hier https://helmutspokeysseite.wordpress.com/platinen/

                        Besteht Interesse anstatt des Pokeys ein RS232-Interface dazu zu bauen?

                        Also RS232 schreibt bei Eingangs-Zustandswechsel den neuen Zustand über die RS232 Schnittstelle bzw auch auf Anforderung?

                        Sowie das Schreiben auf die Ausgangsport?
                        ZB so
                        Out 1,1 = setzt Relais 1 auf "ON"
                        In 1 = Fragt Eingang 1 ab
                        In ALL = Fragt alle Eingange ab
                        usw
                        Gruß Helmut
                        Zuletzt geändert von Helmut; 17.12.2016, 20:58. Grund: ?

                        Kommentar

                        • Gast

                          #29
                          Das wäre toll Helmut, wären auch mehr als 24 Eingänge möglich? z.B 64? 128 müssen es nicht unbedingt sein, jedoch wären 64 toll, ausgänge brauche ich eigebtlich nicht wirklich da ich diese Platine rein für Fensterkontakte einsetzen würde.

                          Gruß Pierre

                          Kommentar


                          • Helmut
                            Helmut kommentierte
                            Kommentar bearbeiten
                            mehrere RS232 sind eher schlecht, UDP bzw LAN auf RS232 hat da mehr Vorteile....;-)

                          • Gast
                            Gast kommentierte
                            Kommentar bearbeiten
                            Stimmt auch wieder, aber die Möglichkeit ohne viel Gebastel, viele DI's zu haben, wäre einfach klasse, da ist mir die Anbindung im Endeffekt egal

                          • Helmut
                            Helmut kommentierte
                            Kommentar bearbeiten
                            Melde Du Dich, und möglichst viele viele Pokeys Anwender mehr, beim Polabs Support und fordere eine Vernetzung auf RS232 Basis,
                            dann kann die Pokeys Geschichte mir allen Vorteilen wie PoBlock usw bleiben und Du nutzt es mir LAN auf RS232 Adaptern
                            Und damit sind auch Vernetzungen von Pokeysmodulen untereinander möglich und man hat mehr und schnellere Zugriffsmöglichkeiten
                        • mrkue
                          Smart Home'r
                          • 27.08.2015
                          • 52

                          #30
                          Ich arbeite an einer erweiterten Version der obigen Lösung, da ich eine in Zweifel "Loxone unabhängige" Lösung haben möchte:

                          es wäre dann so das ein Master über RS232 mit Loxone (oder IPS oder OpenHAB oder FHEM) verbunden wird, dieser steuert dann eine Vielzahl von Bus Teilnehmern an einem CAN Bus (dies ist die gleiche Technik die auch Loxone zwischen den Extensions nutzt)

                          über ein von mir angepasstes Protokoll können dann beliebige Arten von Sensoren (Digitaleingang, Temperatur, Feuchte, LUX, etc ) und auch Aktoren (Digital Analog PWM etc) angesteuert werden alle Sensoren werden von den Bus Clients überwacht und nur bei Änderung wird ein neuer Wert gesendet somit entsteht kein Bedarf das von seiten der Logik eine Abfrage durchgeführt wird und die Buslast ist möglichst gering

                          von Seiten der Software bin ich recht weit nur beim Platinen Layouten bin ich nicht der große Profi

                          Helmut vielleicht können wir hierzu mal Kontakt aufnehmen, da du in diesem Punkt ja sehr fit bist

                          mein größtes Problem ist jedoch der Zeitfaktor, da ich zur Zeit leider extrem viel um die Ohren habe und kaum an dem Projekt arbeiten kann

                          Kommentar


                          • modchen
                            modchen kommentierte
                            Kommentar bearbeiten
                            Ich bin etwas am umplanen, da mir Zeit doch wichtiger ist, als Bastelerfahrungen.

                            Ich werde bei DO wahrscheinlich nicht selbst eine Platine entwerfen, da es 16 Kanäle bereits für 18 Euro inklusive Versand gibt, in Form soeines Boards :



                            Das Board liefert mir auch zugleich die 5V fürs Arduino.

                            Für so Preiswert lohnt es sich einfach nicht, selbst zu entwerfen, noch Zeit zu investieren. Die Bauform ist auch relativ kompakt, dafür dass man 16x10A NO/NC schalten kann... Auch wenn der Selbstentwurf mal kaputt geht, bekommt man so einfacher und vor allem OHNE ARBEIT Ersatz.

                            Für DI mit 24V habe ich leider noch nichts ähnliches gefunden oder in Preisregionen von mehr als 50 Euro für 24 Kanäle und in ungeigneter Bauform für die Hutschiene. Ich komme also bisher nicht am Selbstentwurf und löten vorbei.

                            Oder kennt einer von euch einen billigen Hersteller in China der Entwürfe fertig bestückt, zu einem günstigen Preis ?

                            Aktuell bin ich deshalb am Gehäuse entwerfen für die Hutschiene, wo die oben genannte Platine fixiert werden kann und eine Etage über dem Board dann der Arduino.

                            Die "Reagierlogik" bleibt bei mir erst mal bei Loxone über RS485. Sollte der mal gedrosselt werden, kommt sie ins Arduino wie schon oben erwähnt, welcher dann auch nur mitteilt, wie er reagiert hat.

                          • Helmut
                            Helmut kommentierte
                            Kommentar bearbeiten
                            Das Modchen muß ja selber wissen was es macht, aber 230Volt über so eine Platine schalten, wo möglich mit verschiedenen Phasen, kann ich nicht empfehlen. Ich plane meine Platine so, dass sie ULN-Treiber für zugelassene Koppelrelais hat. Somit ist man(n) Versicherungskonform und ich nehme 16A zugelassene Relais, sodass ich nicht untersichern muß.

                          • modchen
                            modchen kommentierte
                            Kommentar bearbeiten
                            Helmut die Platinen schalten nachher nur 24VDC und werden an ein Eltako ES12Z-200- 8-230VUC angeschlossen...
                        Lädt...