Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Iobroker.io / iobroker.i2c

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Iobroker.io / iobroker.i2c

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      smiling_Jack last edited by

      Hallo

      als neues Langzeitprojekt habe ich mir vorgenommen einen neuen Adapter zu machen durch den ich meine hm wired Komponenten ersetzen kann.

      Mein Anspruch ist:

      Möglichst günstige und platzsparende fertig Module (zb. http://www.horter-shop.de/de/i2c-hutsch … 60714.html)

      das gilt auch für 0-10V in/out und echtes pwm. (gibt es auch bei horter)

      Der nächste Schrite währe dann eigene Module zu entwickeln in denen man Direktverknüfungen (innerhalb des Modules) machen kann wobei die kosten nicht größer als 30€ für 8 inputs und 8 outputs sein soll. (Als Bausatz)

      Die Firmware bei den Eigenentwicklungen soll updatebar sein.

      Module primär als Hutschienen Montage.

      Zusätzlich möchte ich eine Möglichkeit schaffen weitere i2c Module von anderen Anbietern (zb. Adafruit) einfach über ein config file einzubinden.

      Ich habe mir jetzt 3 Module bei horter bestellt und werde mal nebenbei anfangen.

      Das haltet ihr davon hättet ihr da bedarf ?

      1 Reply Last reply Reply Quote 0
      • E
        enricoh831 last edited by

        Hi,

        Warum i2c ?

        Ich baue zur Zeit auch gerade wieder an meiner hm wired Alternative.

        Ich mache das ganze über rs485 mit modbus habe gerade eine lochrasterplatine mit 3 arduinos die alle über rs485 verbunden sind gebaut.

        Jeder dieser Slave kann was anderes.

        Das Teil soll zum Testen und zeigen sein.

        Morgen Abend erstelle ich die Firmware und Versuche das dann mal in iobroker zu bekommen.

        Mit einem hat es schon sehr gut geklappt.

        Es sollen einmal Module für die einzelnen Räume werden in einer hohlwanddose.

        Dann wird es Outputs geben für die Hutschiene zum ansteuern von Finder Relais.

        Und dann gibt s ja noch diverse andere Möglichkeit was man bauen kann. Der arduino macht ja einiges möglich.

        Gesendet von meinem Pixel mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • S
          smiling_Jack last edited by

          warum nicht i2c ?

          zb. giebt es da schon fertige ic / module die man nutzen kann.

          Aber das was du vorhast klingt schon so ähnlich was ich will 😉

          1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 last edited by

            I2C hat recht kurze leitungswege ohne das man verstärken muss … zumindestens meine Erfahrung

            1 Reply Last reply Reply Quote 0
            • S
              smiling_Jack last edited by

              naja ich habe an Schaltschrankverdratung gedacht und nicht an Unterpuzdosen

              das ist zwar alt aber selbst da konnten sie sich nicht einigen was besser ist 😉

              http://www.mikrocontroller.net/topic/122084

              noch ein kleiner + Punkt der Raspberry hat von haus aus i2c

              1 Reply Last reply Reply Quote 0
              • E
                enricoh831 last edited by

                Ich wollte halt gerne auch lange Kabel Länge nehmen können und die Programmierung der Mikrocontroller sollte simpel sein. Deshalb modbus und rs485.

                Zur Zeit habe ich nen usb zu serial Stick dran und gehe mit mbusd von modbus rtu auf TCP weil ich den seriellen Anschluss in iobroker noch nicht zum laufen bekommen habe.

                Wenn mein Prototyp läuft werde ich das zu bluefox schicken dann hat er was um den Adapter zu testen.

                Leider muss man noch für jeden Slave eine eigene Instanz starten die jeweils 30 mb RAM benötigt.

                Wenn er das umbaut das man bei den Registern auch noch die jeweilige ID festlegen kann dann steht dem Bau nichts mehr im Wege und iobroker ist der Master. So wie bei hm die ccu.

                Das schöne bei modbus ist auch das es hier auch einige Geräte zu kaufen gibt.

                Z.b. Wechselrichter oder auch günstige Stromzähler für die Hutschiene aber auch io Module.

                Gruß Enrico

                Gesendet von meinem Pixel mit Tapatalk

                1 Reply Last reply Reply Quote 0
                • S
                  smiling_Jack last edited by

                  ich habe nochmal geschaut und es gib halt nicht den idealen Bus für alle

                  Ich bleib bei i2c weil einfach & am günstigsten, lange Leitungen brauch ich halt nicht.

                  (wobei 20-50m möglich sein müßten 😉 je nach Kabel und eingesetzter Spannung)

                  @enricoh831

                  wenn ich soweit bein einen Adapter zu machen kuck ich mal wie weit du bist. Vieleicht bietet sich das an beides in einem zu machen. Dann dann spart man sich die doppelte arbeit mit Direktverknüfungen/Parametern erstellen/verwalten.

                  1 Reply Last reply Reply Quote 0
                  • E
                    enricoh831 last edited by

                    So also ich habe mich heute noch mal mit der Software befasst.

                    Mit der simple modbus lib lief das ganze Recht instabil als er die 1wire Temperatur Sensor en in ein holding reg gesetzt hat.

                    Bin dann auf ne andere lib und habe dann über Eingangsregister gemacht.

                    Als jeder arduino dann Recht stabil lief habe ich beide zusammen geklemmt und jeden mit einer eigenen Instanz abgefragt. Lief ganz gut. Wenn ich es schaffe gibt es morgen noch ein arduino dazu mit einem pwm und zwei Relais Ausgängen.

                    Die anderen bekommen noch je 2 Taster und einen Reed Eingang.

                    Und wenn alles läuft gibt es Weihnachten ein Video davon.

                    Gruß Enrico

                    Gesendet von meinem Pixel mit Tapatalk

                    1 Reply Last reply Reply Quote 0
                    • E
                      enricoh831 last edited by

                      Kleines Update…

                      Die Taster Eingänge reagieren auf Einzel Klick

                      Doppel Klick

                      Gedrückt halten

                      Man kann zum Beispiel beim Druck auf Taster 1 einen Wert auf 255 setzen

                      Und beim Druck auf Taster 2 wieder auf 0

                      Hält man Taster 1 zählt der Wert langsam bis 255. Auf Taster 2 dann wieder zurück.

                      So kann man zum Beispiel Rollläden ansteuern.

                      Auf Doppel Klick könnte man dann zum Beispiel nur halb verdunkeln an fahren.

                      Habe nächste Woche wieder viel Arbeit aber versuche Abends Mal etwas weiter zu fummeln.

                      Ps: Hab gerade ne geile Idee für nen modbus smart mirror.

                      Ich muss nur Mal ein TFT besorgen.

                      Gesendet von meinem Pixel mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • UncleSam
                        UncleSam Developer last edited by

                        @smiling_Jack: wo stehst du mit diesem Adapter?

                        Leider habe ich weder auf GitHub noch NPM etwas gefunden (geschweige denn im ioBroker selber).

                        Wenn du kein Interesse oder keine Zeit mehr hast, entwickle ich den Adapter auch gerne selber weiter; ich wollte nur nicht einen neuen Adapter schreiben, wenn du schon etwas hast, wo man meine Ideen integrieren könnte:

                        • Mein Ziel ist es, mit dem RPi via I2C einige IO-Expander (wie du auch: PCF8574 und PCF8574A) anzusprechen.

                        • Der Adapter sollte verschiedene I2C-Bausteine unterstützen (sozusagen als "Plugin" innerhalb des Adapters, ähnlich wie beim Discovery Adapter)

                        • Eine Suche nach der Adresse muss im Admin möglich sein, danach muss man aber noch sagen, welche Adresse von welchem Typ ist (sofern man das aufgrund des Adressbereiches nicht herausfinden kann)

                        • Weitere Bausteine wären z.B. der DS1621 (Temperatur) oder der MCP23017 (16-Kanal IO-Expander)

                        • … weitere Ideen sind erwünscht 😉

                        Ich würde das alles auf Basis von https://www.npmjs.com/package/i2c-bus machen (ich habe schon mal eine NodeJS-App geschrieben, die das alles macht, nur noch nicht in ioBroker integriert).

                        1 Reply Last reply Reply Quote 0
                        • M
                          meifi2017 last edited by

                          Hallo zusammen,

                          gibt es bei diesem Adapter schon Neuerungen? Ich selber setze mehere Horter Module für digitale Ein und Ausgänge ein und suche eine möglichgkeit diese

                          richtig einzubinden… würde mich auch bei der Entwicklung und tests gerne beteiligen.

                          1 Reply Last reply Reply Quote 0
                          • M
                            meifi2017 last edited by

                            Hallo zusammen,

                            ich habe nun zwei Scripte mit der node erweiterung 'pcf8574' erstellt. diese funktionieren auch soweit. bei den Inputscript erhalte ich jedoch den folgenden fehler, welcher aber nicht die funktion beeinträchtigt. bei den Outputscript reagiert er nicht auf die false zustände der outputs 4-7 … hat vielleicht jemand eine idee oder verbesserungsvorschläge?

                            Inputscript:

                            ! ````
                            //******************************************
                            //Dutchman
                            //V 0.6
                            //
                            *****************************************
                            ! // define variable
                            var PCF8574 = require('pcf8574').PCF8574;
                            var i2cBus = require('i2c-bus').openSync(1);
                            ! var addr = 0x38;
                            ! var pcf = new PCF8574(i2cBus, addr, true);
                            ! // Enable interrupt detection on BCM pin 17 (which is GPIO.0)
                            //pcf.enableInterrupt(17);

                            // Alternatively you can use for example an interval for manually poll every 250ms
                            setInterval(pcf.doPoll.bind(pcf), 250);

                            ! //true for inverted inputs
                            pcf.inputPin(0, true);
                            pcf.inputPin(1, true);
                            pcf.inputPin(2, true);
                            pcf.inputPin(3, true);
                            pcf.inputPin(4, true);
                            pcf.inputPin(5, true);
                            pcf.inputPin(6, true);
                            pcf.inputPin(7, true);
                            ! createState("pcf." + addr + ".0" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! createState("pcf." + addr + ".1" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! createState("pcf." + addr + ".2" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! createState("pcf." + addr + ".3" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! createState("pcf." + addr + ".4" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! createState("pcf." + addr + ".5" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! createState("pcf." + addr + ".6" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! createState("pcf." + addr + ".7" ,{
                            name: addr + ".0",
                            type: 'boolean',
                            role: 'value'
                            });
                            ! pcf.on('input', function(data){

                            console.log("PCF" + addr + " : PIN:" + data.pin + " VAL: " + data.value);
                            setState("pcf." + addr + "." + data.pin, data.value, true);
                            // Prüfe ob ein Taster, der mit Pin 7 verbunden ist, gedrückt wurde (Signal am Pin geht auf low)
                            });

                            ! process.on('SIGINT', function(){
                            pcf.removeAllListeners();
                            pcf.disableInterrupt();
                            });

                            >! Fehler Inputscript:
                            

                            22:38:52.000 [error] javascript.2 script.js.common.i2c.i2c_input-38: ReferenceError: process is not defined at script.js.common.i2c.i2c_input-38:91:1 at ContextifyScript.Script.runInContext (vm.js:35:29)

                            
                            Outputscript:
                            
                            >! ````
                            //******************************************
                            //*****************Dutchman*****************
                            //*******************V 0.6****************** 
                            //******************************************
                            >! // define variable
                            var PCF8574 = require('pcf8574').PCF8574;
                            var i2cBus = require('i2c-bus').openSync(1);
                            >! var addr = 0x22;
                            >! var pcf = new PCF8574(i2cBus, addr, true);
                            >! // Enable interrupt detection on BCM pin 17 (which is GPIO.0) 
                            //pcf.enableInterrupt(17);
                            
                            // Alternatively you can use for example an interval for manually poll every 250ms 
                            setInterval(pcf.doPoll.bind(pcf), 250);
                            >! //true for inverted outputs 
                            pcf.outputPin(0, true, false);
                            pcf.outputPin(1, true, false);
                            pcf.outputPin(2, true, false);
                            pcf.outputPin(3, true, false);
                            pcf.outputPin(4, true, false);
                            pcf.outputPin(5, true, false);
                            pcf.outputPin(6, true, false);
                            pcf.outputPin(7, true, false);
                            >! createState("pcf." + addr + ".0" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! createState("pcf." + addr + ".1" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! createState("pcf." + addr + ".2" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! createState("pcf." + addr + ".3" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! createState("pcf." + addr + ".4" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! createState("pcf." + addr + ".5" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! createState("pcf." + addr + ".6" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! createState("pcf." + addr + ".7" ,{
                                                name: addr + ".0",
                                                type: 'boolean',
                                                role: 'value'
                                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.0', change: "ne"}, function (obj) { 
                               pcf.setPin(0, true);
                               setTimeout(function() {pcf.setPin(0, false);}, 100);
                               setState("pcf." + addr + ".0", 'false', true);
                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.1', change: "ne"}, function (obj) { 
                               pcf.setPin(1, true);
                               setTimeout(function() {pcf.setPin(1, false);}, 100);
                               setState("pcf." + addr + ".1", 'false', true);
                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.2', change: "ne"}, function (obj) { 
                               pcf.setPin(2, true);
                               setTimeout(function() {pcf.setPin(2, false);}, 100);
                               setState("pcf." + addr + ".2", 'false', true);
                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.3', change: "ne"}, function (obj) { 
                               pcf.setPin(3, true);
                               setTimeout(function() {pcf.setPin(3, false);}, 100);
                               setState("pcf." + addr + ".3", 'false', true);
                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.4', change: "ne"}, function (obj) { 
                            
                               if (getState('javascript.2.pcf.' + addr + '.4').val == true) {
                                   pcf.setPin(4, true);
                               } 
                               if (getState('javascript.2.pcf.' + addr + '.4').val == false) {
                                   pcf.setPin(4, false);
                               }
                            
                               pcf.setPin(4, true);
                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.5', change: "ne"}, function (obj) { 
                               pcf.setPin(5, true);
                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.6', change: "ne"}, function (obj) { 
                               pcf.setPin(6, true);
                            });
                            >! on({id: 'javascript.2.pcf.' + addr + '.7', change: "ne"}, function (obj) { 
                               pcf.setPin(7, true);
                            });
                            >! ````
                            
                            Viele Grüße aus Hamburg
                            
                            meifi
                            1 Reply Last reply Reply Quote 0
                            • UncleSam
                              UncleSam Developer last edited by

                              @meifi2017:

                              ich habe nun zwei Scripte mit der node erweiterung 'pcf8574' erstellt. ` Hallo meifi

                              Danke für deinen Input. Endlich bin ich dazu gekommen, den Adapter zu schreiben und auf meinem RasPi zu testen:

                              https://www.npmjs.com/package/iobroker.i2c

                              Im Moment unterstützt der Adapter nur den PCF8574 sowie den PCF8574A.

                              Die Dokumentation ist noch nicht ganz up-to-date, aber das mache ich, sobald ich noch etwas mehr entwickelt habe.

                              Kannst du bitte mal schauen, ob er das macht, was er machen sollte - und ob die Konfiguration einigermassen verständlich ist.

                              Installieren kannst du ihn einfach, indem du auf der "Adapter" Seite auf das "Katzen-Symbol" ("Install from custom URL") gehst und dort "iobroker.i2c" im Textfeld (im zweiten Reiter) eingibst.

                              Wenn du Fragen hast, bitte nicht zögern - und auch um jedes Feedback bin ich froh!

                              /UncleSam

                              1 Reply Last reply Reply Quote 0
                              • M
                                meifi2017 last edited by

                                Hallo UncleSam,

                                vielen Dank für dein Adapter. Ich werde diesen am Wochenende mal testen. Kann man in dem Adapter auch festlegen, wie in meinen Scripten, ob die Ein- / Ausgänge negiert sind und ob diese nach einem bestimten Timeout wieder zurückgesetzt werden?

                                LG meifi

                                1 Reply Last reply Reply Quote 0
                                • UncleSam
                                  UncleSam Developer last edited by

                                  @meifi2017:

                                  Kann man in dem Adapter auch festlegen, wie in meinen Scripten, ob die Ein- / Ausgänge negiert sind und ob diese nach einem bestimten Timeout wieder zurückgesetzt werden? ` Nein, das ist im Moment nicht möglich.

                                  Das Negieren könnte ich noch einbauen.

                                  Das mit dem Time-Out möchte ich lieber einem anderen Adapter überlassen, da es nicht direkt mit I2C zu tun hat; wenn du das brauchst, kannst du entweder ein (einfacheres) Skript schreiben oder zB Node Red verwenden.

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    meifi2017 last edited by

                                    Alles klar, das mit dem Reset wäre ja kein Problem via externen Script zu lösen.

                                    Das mit dem negieren wäre aber schon wichtig, gerade wenn man die I2C Module

                                    von Horter einsetzt 😉

                                    1 Reply Last reply Reply Quote 0
                                    • UncleSam
                                      UncleSam Developer last edited by

                                      @meifi2017:

                                      Das mit dem negieren wäre aber schon wichtig ` Version 0.0.2 unterstützt nun negieren von Ein- wie auch Ausgängen - ich hoffe das passt ;-).

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        meifi2017 last edited by

                                        Perfekt. Ich danke dir 🙂 werde es am Wochenende mal testen.

                                        1 Reply Last reply Reply Quote 0
                                        • A
                                          adarof last edited by

                                          Hallo,

                                          Ich möchte auch bald einen mcp23017 ansteuern. Gibts da eine Idee, wann das mit dem Adapter klappt?

                                          Usecase:

                                          Dahinter steht dann bei mir ein 8x Relais Modul, welches die umgebauten Velux-Fenerbedienungen triggert.

                                          Gruss

                                          1 Reply Last reply Reply Quote 0
                                          • UncleSam
                                            UncleSam Developer last edited by

                                            @adarof:

                                            Ich möchte auch bald einen mcp23017 ansteuern. ` Hallo Adarof,

                                            das lässt sich machen. Ich schau mir mal die Spezifikation an und versuche den MCP23017 zu integrieren.@adarof:

                                            Dahinter steht dann bei mir ein 8x Relais Modul, welches die umgebauten Velux-Fenerbedienungen triggert. ` Hast du schon mit der Umsetzung begonnen?

                                            Ich habe es bei mir etwas einfacher gelöst: einfach Outputs vom Raspberry Pi (oder via I2C und PCF8574, ähnlich MCP23017) über einen TXS0108E 8-Kanal Logic Level Converter nehmen. Die Velux-Fernbedienungen sind ganz normale Taster, die beim drücken den Input auf Ground ziehen. Da kannst du dir eigentlich die Relais sparen.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            949
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            8
                                            28
                                            7057
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo