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

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Iobroker.io / iobroker.i2c

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
                      • UncleSam
                        UncleSam Developer last edited by

                        @adarof:

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

                        Endlich sind meine MCP23017 auch China eingetroffen.

                        Die Version 0.0.3 des Adapters unterstützt nun auch diesen I/O-Expander.

                        Dokumentation habe ich noch keine geschrieben, aber ich denke die Einstellungen sind selbsterklärend.

                        /UncleSam

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

                          Hi,

                          Wie haste das denn so schnell geschafft? Deine Empfehlung zum TXS statt Relais wollt ich realisieren (weil die Relais doch mehr Strom ziehen und ich den Raspi nicht stärker als nötig belasten wollte). Jedenfalls hab ich die noch nicht… 😞

                          Den MCP23017 habe ich angeschlossen - und eine LED bekomme ich auch schon (nach etwas Hilfe von UncleSam) geschaltet.

                          Die Erweiterung scheint also wunderbar zu funtionieren.

                          DANKESCHÖN!

                          Gruss

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

                            Hallo Gemeinde.

                            Ich hätte eine Frage zu dem i2c adapter.

                            Ich würde gerne einen Analogen Temperatursensor (PT1000)über iobroker auslesen.

                            Jetzt habe ich den I2C Digital/Analog AD-Wandler PCF8591 gefunden.

                            https://www.ebay.de/itm/I2C-Digital-Ana … SwehZaD3EJ

                            Wäre es möglich diesen Wandler mit dem Adapter zu nutzen und die Temperaturwerte in meine Haussteuerung zu bekommen?

                            Vielen Dank im voraus…

                            LG

                            Jürgen

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

                              @Snoopylix:

                              Ich würde gerne einen Analogen Temperatursensor (PT1000)über iobroker auslesen. `
                              Hallo Jürgen

                              Hast du dich für einen AD-Wandler entschieden? Ich plane den ADS1115 im Adapter zu unterstützen, falls dir der etwas bringt.

                              Den aktuellen Stand zum ADS1115 siehst du unter: https://github.com/UncleSamSwiss/ioBroker.i2c/issues/13

                              Ansonsten findest du die gesamte Diskussion zum I2C-Adapter hier:

                              viewtopic.php?f=23&t=7437

                              /UncleSam

                              UncleSamSwiss created this issue in UncleSamSwiss/ioBroker.i2c

                              closed Support ADS1115 #13

                              1 Reply Last reply Reply Quote 0
                              • G
                                gery80 last edited by

                                Hallo

                                Wollte mal fragen ob es schon was neues gibt für den ads1115 würde den auch gerne in mein iobroker einbinden ohne Umweg direkt am raspi angeschlossen.

                                Über ein python script kann ich schon werte sehen leider weiß ich nicht wie ich die Werte in iobroker bekomme deswegen würde mir der i2c Adapter sicher helfen.

                                Bin Anfänger deswegen kenn ich mich nicht so gut aus

                                Lg Gery

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

                                  @gery80:

                                  Wollte mal fragen ob es schon was neues gibt für den ads1115 würde den auch gerne in mein iobroker einbinden ohne Umweg direkt am raspi angeschlossen. `

                                  Habe die Hardware erhalten, bin dran 🙂

                                  1 Reply Last reply Reply Quote 0
                                  • G
                                    gery80 last edited by

                                    Ok super danke ich glaub das hilft vielen hier weiter

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

                                      WICHTIG - bitte hier nicht mehr antworten!

                                      Die Diskussion findet nun in folgendem Thema statt:
                                      https://forum.iobroker.net/topic/7023/adapter-iobroker-i2c

                                      Bitte schreibt hier keine Beiträge mehr, danke!
                                      Ich werde nur noch Beiträge im oben genannten Thema lesen.
                                      /UncleSam

                                      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

                                      207
                                      Online

                                      31.7k
                                      Users

                                      79.8k
                                      Topics

                                      1.3m
                                      Posts

                                      8
                                      28
                                      7163
                                      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