Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Remote Steuerung Pi GPIOs

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    235

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    581

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

Remote Steuerung Pi GPIOs

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
16 Beiträge 4 Kommentatoren 1.9k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Phillip89

    Hallo,

    Ich hoffe ich bin hier richtig mit dem Thema...
    Seit einigen Jahren betreibe ich IOB auf einem Pi, hab mehrere ESP32 im Einsatz, lese über MQTT Feuchtigkeitssensoren aus und steuere GPIO pins eines ESP mit Blockly über HTTP requests.
    Nun stoße ich aber an meine Grenzen:

    Für ein Bewässerungsprojekt brauche ich mehr GPIO Pins als der ESP hergibt. Daher dachte ich an einen Pi Zero den ich noch rumliegen hab.
    Jedoch suche ich seit Tagen nach einer Lösung um dessen Pins "fern zu steuern" vom IOB, da dieser an einem anderen Ort steht, aber im gleichen Netzwerk.

    Kennt jemand eine Anleitung (Englisch oder Deutsch) die genau erklärt wie man das realisieren kann?
    Ich hab einiges gefunden wo Leute schreiben sie haben das ebenfalls über MQTT geschafft mit paho mqtt oder über einen webserver der auf dem Zero läuft und wohl auch irgendwie mit Node red. Allerdings wurden wenn dann nur die Themen leicht angeschnitten oder die Anleitung war veraltet und die verwendeten Scripte gingen auf Grund veralteter Adapter nicht mehr zu implementieren.

    Prinzipiell wäre so etwas hier ausreichend, allerdings ist das auf einem pico Pi und funktioniert bei mir auf dem Zero nicht:
    https://www.youtube.com/watch?v=AK8UYh7pMGM

    Der Weg ist mir an sich egal, wichtig wäre das Ziel und dass es zuverlässlich läuft.

    Vielen Dank im Voraus!

    LG
    Phillip

    geschildG Offline
    geschildG Offline
    geschild
    schrieb am zuletzt editiert von
    #2

    @phillip89 Damit hast 16 weitere GPIO via I2C oder SPI. https://www.reichelt.de/de/de/i-c-bus-i-o-erweiterung-16bit-pdip-28-mcp23018-e-sp-p266221.html?PROVID=2788&gclid=Cj0KCQjwib2mBhDWARIsAPZUn_kPX5wZSCLgxrJKdDu6oXPpkVkr8mzsjjBynzb6qbPhYgHbLHY0ToQaAinIEALw_wcB&&r=1

    Anwendungshilfe hier: https://wolles-elektronikkiste.de/mcp23x1y-portexpander

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      Phillip89
      schrieb am zuletzt editiert von Phillip89
      #3

      @geschild Vielen Dank für den Tipp. Das hatte ich allerdings schon probiert mit einem MCP23017 und einem ESP32 ETH01 (Wegen dem Lan Anschluss) und habe es nicht zum laufen bekommen mit ESP Easy.
      Ich hab mir auch die Anleitung angeschaut die Du verlinkt hast, aber da kommen bei mir direkt diverse Fragezeichen. So weit reichen meine Kenntnisse mit dem ESP nicht um das umzusetzen geschweige denn über IOBroker dann anzusteuern :(

      Gibt es keine Möglichkeit einen Raspberry Zero zu nehmen? Dort hätte ich genug GPIOs und kann über USB einen LAN Anschluss realisieren.

      io Broker | Raspberry Pi 3 | Raspberry Pi 4 | Raspbian

      geschildG 1 Antwort Letzte Antwort
      0
      • P Phillip89

        @geschild Vielen Dank für den Tipp. Das hatte ich allerdings schon probiert mit einem MCP23017 und einem ESP32 ETH01 (Wegen dem Lan Anschluss) und habe es nicht zum laufen bekommen mit ESP Easy.
        Ich hab mir auch die Anleitung angeschaut die Du verlinkt hast, aber da kommen bei mir direkt diverse Fragezeichen. So weit reichen meine Kenntnisse mit dem ESP nicht um das umzusetzen geschweige denn über IOBroker dann anzusteuern :(

        Gibt es keine Möglichkeit einen Raspberry Zero zu nehmen? Dort hätte ich genug GPIOs und kann über USB einen LAN Anschluss realisieren.

        geschildG Offline
        geschildG Offline
        geschild
        schrieb am zuletzt editiert von
        #4

        @phillip89 said in Remote Steuerung Pi GPIOs:

        MCP23017

        Hilft das weiter: https://www.letscontrolit.com/wiki/index.php/MCP23017

        Mit Arduino könntest du dich nicht anfreunden ? Da könnte ich helfen.
        Nur aus Neugier: warum verwendet du LAN ?

        1 Antwort Letzte Antwort
        0
        • P Phillip89

          Hallo,

          Ich hoffe ich bin hier richtig mit dem Thema...
          Seit einigen Jahren betreibe ich IOB auf einem Pi, hab mehrere ESP32 im Einsatz, lese über MQTT Feuchtigkeitssensoren aus und steuere GPIO pins eines ESP mit Blockly über HTTP requests.
          Nun stoße ich aber an meine Grenzen:

          Für ein Bewässerungsprojekt brauche ich mehr GPIO Pins als der ESP hergibt. Daher dachte ich an einen Pi Zero den ich noch rumliegen hab.
          Jedoch suche ich seit Tagen nach einer Lösung um dessen Pins "fern zu steuern" vom IOB, da dieser an einem anderen Ort steht, aber im gleichen Netzwerk.

          Kennt jemand eine Anleitung (Englisch oder Deutsch) die genau erklärt wie man das realisieren kann?
          Ich hab einiges gefunden wo Leute schreiben sie haben das ebenfalls über MQTT geschafft mit paho mqtt oder über einen webserver der auf dem Zero läuft und wohl auch irgendwie mit Node red. Allerdings wurden wenn dann nur die Themen leicht angeschnitten oder die Anleitung war veraltet und die verwendeten Scripte gingen auf Grund veralteter Adapter nicht mehr zu implementieren.

          Prinzipiell wäre so etwas hier ausreichend, allerdings ist das auf einem pico Pi und funktioniert bei mir auf dem Zero nicht:
          https://www.youtube.com/watch?v=AK8UYh7pMGM

          Der Weg ist mir an sich egal, wichtig wäre das Ziel und dass es zuverlässlich läuft.

          Vielen Dank im Voraus!

          LG
          Phillip

          W Offline
          W Offline
          WolfgangFB
          schrieb am zuletzt editiert von
          #5

          @phillip89
          Ich verwende auch den MCP23017 und das ganze funktioniert recht problemlos mit dem ESPHome Adapter.
          Der MCP wird über I²C angesteuert. In ESPHome sieht das ganze dann so aus:

          i2c:
            sda: D2 # rot
            scl: D1 # blau
            scan: True
            id: bus_a
          mcp23017:
            - id: 'mcp23017_hub'
              address: 0x20
          
          binary_sensor:
            - platform: gpio
              name: "Bewegung"
              filters:
              - delayed_on_off: 100ms
              pin: 
                mcp23xxx: mcp23017_hub
                number: 03 # mit MCP 03 verbunden
                mode:
                  INPUT
              id: Bewegung
          
          
          1 Antwort Letzte Antwort
          0
          • P Phillip89

            Hallo,

            Ich hoffe ich bin hier richtig mit dem Thema...
            Seit einigen Jahren betreibe ich IOB auf einem Pi, hab mehrere ESP32 im Einsatz, lese über MQTT Feuchtigkeitssensoren aus und steuere GPIO pins eines ESP mit Blockly über HTTP requests.
            Nun stoße ich aber an meine Grenzen:

            Für ein Bewässerungsprojekt brauche ich mehr GPIO Pins als der ESP hergibt. Daher dachte ich an einen Pi Zero den ich noch rumliegen hab.
            Jedoch suche ich seit Tagen nach einer Lösung um dessen Pins "fern zu steuern" vom IOB, da dieser an einem anderen Ort steht, aber im gleichen Netzwerk.

            Kennt jemand eine Anleitung (Englisch oder Deutsch) die genau erklärt wie man das realisieren kann?
            Ich hab einiges gefunden wo Leute schreiben sie haben das ebenfalls über MQTT geschafft mit paho mqtt oder über einen webserver der auf dem Zero läuft und wohl auch irgendwie mit Node red. Allerdings wurden wenn dann nur die Themen leicht angeschnitten oder die Anleitung war veraltet und die verwendeten Scripte gingen auf Grund veralteter Adapter nicht mehr zu implementieren.

            Prinzipiell wäre so etwas hier ausreichend, allerdings ist das auf einem pico Pi und funktioniert bei mir auf dem Zero nicht:
            https://www.youtube.com/watch?v=AK8UYh7pMGM

            Der Weg ist mir an sich egal, wichtig wäre das Ziel und dass es zuverlässlich läuft.

            Vielen Dank im Voraus!

            LG
            Phillip

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von OliverIO
            #6

            @phillip89

            mit python
            https://www.bitblokes.de/pigpio-remote-gpio-raspberry-pi-pins-aus-der-ferne-steuern/

            mit node-red
            https://www.hackster.io/pitg2000/remotely-control-gpio-pins-on-the-rpizw-using-only-node-red-9ba318

            mit node (also javascript adapter)
            https://www.npmjs.com/package/pigpio-client

            auf einigen raspis ist der pigpio deamon bereits vorinstalliert.
            wenn nicht lässt es sich leicht nachinstallieren.
            mit den beispielen oben kannst du dann alles aus der ferne konfigurieren und steuern/abfragen

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              Phillip89
              schrieb am zuletzt editiert von
              #7

              @geschild
              Die Seite hatte ich auch schon aber ich bekomm den 23017 nicht zum Laufen...
              Nachdem ich es mit verschiedenen ESPs probiert habe und auch den MCP getauscht habe, hab ich es damit aufgegeben.
              Und warum ich eine LAN Verbindung benötige: Wegen der Entfernung. An der Stelle an der der entfernte Controller/RasPi platziert werden soll, ist nur ein schwaches Wlan Signal und eine Netztwerkdose ist bereits vorhanden.

              @oliverio
              Danke Dir für die verschiedenen Varianten. Die Seite in der die Vorgangsweise mit python erklärt wird hatte ich auch gesehen, jedoch verstehe ich nicht ganz wie ich das mit IObroker umsetzen kann.
              Müsste ich dann nicht für jeden Pin den ich am Pi steuern möchte je ein ON.py und OFF.py script erstellen und diese dann aus IObroker heraus starten? Ich möchte insgesamt 10 GPIO Pins auf dem Raspi2 von IOB auf Raspi1 ansteuern, sprich das wären dann 20 python Dateien?!
              Sorry das ich so doof Frage aber ich steh echt auf dem Schlauch :(

              io Broker | Raspberry Pi 3 | Raspberry Pi 4 | Raspbian

              OliverIOO 1 Antwort Letzte Antwort
              0
              • P Phillip89

                @geschild
                Die Seite hatte ich auch schon aber ich bekomm den 23017 nicht zum Laufen...
                Nachdem ich es mit verschiedenen ESPs probiert habe und auch den MCP getauscht habe, hab ich es damit aufgegeben.
                Und warum ich eine LAN Verbindung benötige: Wegen der Entfernung. An der Stelle an der der entfernte Controller/RasPi platziert werden soll, ist nur ein schwaches Wlan Signal und eine Netztwerkdose ist bereits vorhanden.

                @oliverio
                Danke Dir für die verschiedenen Varianten. Die Seite in der die Vorgangsweise mit python erklärt wird hatte ich auch gesehen, jedoch verstehe ich nicht ganz wie ich das mit IObroker umsetzen kann.
                Müsste ich dann nicht für jeden Pin den ich am Pi steuern möchte je ein ON.py und OFF.py script erstellen und diese dann aus IObroker heraus starten? Ich möchte insgesamt 10 GPIO Pins auf dem Raspi2 von IOB auf Raspi1 ansteuern, sprich das wären dann 20 python Dateien?!
                Sorry das ich so doof Frage aber ich steh echt auf dem Schlauch :(

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von OliverIO
                #8

                @phillip89

                nein, wenn dann würde ich das mit dem node beispiel machen.
                Du brauchst dann nur ein skript im javascript adapter. (die bibiothek kann man in den instanzeinstellungen hinzufügen unter "zusätzliche node-module")
                die steuerung aus dem iobroker kannst du dann ja über ein oder mehrere datenpunkte machen.

                nur nebenbei, ich kenne die bibliothek nicht und aktuell steuere ich auch keine pins.
                die erkenntnisse lese ich auch nur aus der doku hier:
                https://www.npmjs.com/package/pigpio-client

                ich kopiere hier mal das beispielskript um eine referenz mit zeilennummern zu haben

                const pigpio = require('pigpio-client').pigpio({host: 'raspberryHostIP'});  
                
                const ready = new Promise((resolve, reject) => {
                 pigpio.once('connected', resolve);
                 pigpio.once('error', reject);
                });
                
                function wait(ms) {
                 return new Promise(resolve => setTimeout(resolve, ms));
                }
                
                ready.then(async (info) => {
                 // display information on pigpio and connection status
                 console.log(JSON.stringify(info,null,2));
                
                 // get events from a button on GPIO 17
                 const button = pigpio.gpio(17);
                 await button.modeSet('input');
                 button.notify((level, tick)=> {
                   console.log(`Button changed to ${level} at ${tick} usec`)
                 });
                
                 // control an LED on GPIO 4
                 const led = pigpio.gpio(4);
                 await led.modeSet('output');
                 await led.write(1);  // turn on LED
                 await wait(500);
                 await led.write(0);  // turn off
                 await wait(500);
                
                 // use waves to blink the LED rapidly (toggle every 100ms)
                 await led.waveClear();
                 await led.waveAddPulse([[1, 0, 100000], [0, 1, 100000]]);
                 const blinkWave = await led.waveCreate();
                 led.waveChainTx([{loop: true}, {waves: [blinkWave]}, {repeat: true}]);
                
                 // wait for 10 sec, stop the waves
                 await wait(10000);
                 await led.waveTxStop();
                }).catch(console.error);
                
                


                generell kannst du in einem skript ja mehrere pins "deklarieren", vgl zeile 17 für einen button und zeile 24 für eine LED. wobei die namen relativ egal sind. es geht ja nur um den typ von pin (analog/digital) und ob da mehrere stufen von werten (0-1024) übermittelt werden können oder einfach nur an/aus high/low
                ->kleiner nachtrag, hab gerade gesehen rapsi hat kein analogen input, daher alles nur digital, also an/aus wenn mehrere stufen übermittelt werden sollen, dann per pwm in eriner bestimmten frequenz, aber das macht dann ja dein sensor

                beim button wartest du ja in zeile 19-21 darauf, das der knopf am pin gerückt wird
                dann wird der code in zeile 20 ausgeführt. hier würdest du wahrscheinlich dann den korrespondierenden datenpunkt beschreiben, bei einem button evtl 200ms auf true und dann wieder auf false.
                wenn ein sensor dranhängt, dann den gemeldeten analog oder digital wert in einen datenpunkt schreiben

                am beispiel der LED, also du steuerst aus iobroker einen pin (analog oder digital)
                siehst du in zeile 26+29 für einfach an und dann aus
                bzw Zeile 33 für eine Welle (ich nehme von dunkel auf hell und wieder zurück, hab jetzt nich nachgeschaut was die parameter im detail bedeuten.
                bzw Zeile 35, mehrere Wellen-Aktivitäten hintereinander.
                die anderen komandos sind in der hilfe erklärt.
                im verlinkten github sind noch mehr beispiele zu finden
                https://github.com/guymcswain/pigpio-client/tree/master/examples

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                P 1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @phillip89

                  nein, wenn dann würde ich das mit dem node beispiel machen.
                  Du brauchst dann nur ein skript im javascript adapter. (die bibiothek kann man in den instanzeinstellungen hinzufügen unter "zusätzliche node-module")
                  die steuerung aus dem iobroker kannst du dann ja über ein oder mehrere datenpunkte machen.

                  nur nebenbei, ich kenne die bibliothek nicht und aktuell steuere ich auch keine pins.
                  die erkenntnisse lese ich auch nur aus der doku hier:
                  https://www.npmjs.com/package/pigpio-client

                  ich kopiere hier mal das beispielskript um eine referenz mit zeilennummern zu haben

                  const pigpio = require('pigpio-client').pigpio({host: 'raspberryHostIP'});  
                  
                  const ready = new Promise((resolve, reject) => {
                   pigpio.once('connected', resolve);
                   pigpio.once('error', reject);
                  });
                  
                  function wait(ms) {
                   return new Promise(resolve => setTimeout(resolve, ms));
                  }
                  
                  ready.then(async (info) => {
                   // display information on pigpio and connection status
                   console.log(JSON.stringify(info,null,2));
                  
                   // get events from a button on GPIO 17
                   const button = pigpio.gpio(17);
                   await button.modeSet('input');
                   button.notify((level, tick)=> {
                     console.log(`Button changed to ${level} at ${tick} usec`)
                   });
                  
                   // control an LED on GPIO 4
                   const led = pigpio.gpio(4);
                   await led.modeSet('output');
                   await led.write(1);  // turn on LED
                   await wait(500);
                   await led.write(0);  // turn off
                   await wait(500);
                  
                   // use waves to blink the LED rapidly (toggle every 100ms)
                   await led.waveClear();
                   await led.waveAddPulse([[1, 0, 100000], [0, 1, 100000]]);
                   const blinkWave = await led.waveCreate();
                   led.waveChainTx([{loop: true}, {waves: [blinkWave]}, {repeat: true}]);
                  
                   // wait for 10 sec, stop the waves
                   await wait(10000);
                   await led.waveTxStop();
                  }).catch(console.error);
                  
                  


                  generell kannst du in einem skript ja mehrere pins "deklarieren", vgl zeile 17 für einen button und zeile 24 für eine LED. wobei die namen relativ egal sind. es geht ja nur um den typ von pin (analog/digital) und ob da mehrere stufen von werten (0-1024) übermittelt werden können oder einfach nur an/aus high/low
                  ->kleiner nachtrag, hab gerade gesehen rapsi hat kein analogen input, daher alles nur digital, also an/aus wenn mehrere stufen übermittelt werden sollen, dann per pwm in eriner bestimmten frequenz, aber das macht dann ja dein sensor

                  beim button wartest du ja in zeile 19-21 darauf, das der knopf am pin gerückt wird
                  dann wird der code in zeile 20 ausgeführt. hier würdest du wahrscheinlich dann den korrespondierenden datenpunkt beschreiben, bei einem button evtl 200ms auf true und dann wieder auf false.
                  wenn ein sensor dranhängt, dann den gemeldeten analog oder digital wert in einen datenpunkt schreiben

                  am beispiel der LED, also du steuerst aus iobroker einen pin (analog oder digital)
                  siehst du in zeile 26+29 für einfach an und dann aus
                  bzw Zeile 33 für eine Welle (ich nehme von dunkel auf hell und wieder zurück, hab jetzt nich nachgeschaut was die parameter im detail bedeuten.
                  bzw Zeile 35, mehrere Wellen-Aktivitäten hintereinander.
                  die anderen komandos sind in der hilfe erklärt.
                  im verlinkten github sind noch mehr beispiele zu finden
                  https://github.com/guymcswain/pigpio-client/tree/master/examples

                  P Offline
                  P Offline
                  Phillip89
                  schrieb am zuletzt editiert von
                  #9

                  @oliverio
                  Danke Dir für Deine Hilfe!
                  Ich habe mir die Seite nochmal angeschaut zusammen mit deinen Kommentaren und versuche das ganze nun zu verstehen und umzusetzen.
                  Da ich bisher bis auf ein Script (Copy-paste) nur blockly Scripte benutze, bin ich mit Javascript jedoch leider nicht so vertraut.

                  Von dem Beispielscript welches du einkopiert hast bräuchte ich Zeile 16-21 und 31-39 nicht, da ich ja nur schalten will, sprich diese lasse ich weg.
                  Und ich könnte dann zB folgendes nutzen:

                  const relais1 = pigpio.gpio(4);
                  const relais2 = pigpio.gpio(5);
                  await relais1.modeSet('output');
                  await relais2.modeSet('output');
                  //usw
                  

                  Soweit richtig?

                  Unter Objekte erstelle ich dann entsprechende Datenpunkte zu den jeweiligen Relais als boolean/state.

                  Du meintest bei Instanz zusätzliche node-module (Bei mir steht npm module) entsprechend die Bibliothek hinzufügen, sprich dort einfach "pi-gpio" eintragen? (Jedenfalls gab es keine Fehlermeldung dabei)

                  Aber wie schaffe ich es nun dass das Javascript auf eine Änderung eines Datenpunktes in IOB auf True wartet und dann das passende relais1 auf relais1.write(1) setzt?
                  Ich verstehe noch nicht ganz wo dort die Verknüpfung ist.

                  io Broker | Raspberry Pi 3 | Raspberry Pi 4 | Raspbian

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • P Phillip89

                    @oliverio
                    Danke Dir für Deine Hilfe!
                    Ich habe mir die Seite nochmal angeschaut zusammen mit deinen Kommentaren und versuche das ganze nun zu verstehen und umzusetzen.
                    Da ich bisher bis auf ein Script (Copy-paste) nur blockly Scripte benutze, bin ich mit Javascript jedoch leider nicht so vertraut.

                    Von dem Beispielscript welches du einkopiert hast bräuchte ich Zeile 16-21 und 31-39 nicht, da ich ja nur schalten will, sprich diese lasse ich weg.
                    Und ich könnte dann zB folgendes nutzen:

                    const relais1 = pigpio.gpio(4);
                    const relais2 = pigpio.gpio(5);
                    await relais1.modeSet('output');
                    await relais2.modeSet('output');
                    //usw
                    

                    Soweit richtig?

                    Unter Objekte erstelle ich dann entsprechende Datenpunkte zu den jeweiligen Relais als boolean/state.

                    Du meintest bei Instanz zusätzliche node-module (Bei mir steht npm module) entsprechend die Bibliothek hinzufügen, sprich dort einfach "pi-gpio" eintragen? (Jedenfalls gab es keine Fehlermeldung dabei)

                    Aber wie schaffe ich es nun dass das Javascript auf eine Änderung eines Datenpunktes in IOB auf True wartet und dann das passende relais1 auf relais1.write(1) setzt?
                    Ich verstehe noch nicht ganz wo dort die Verknüpfung ist.

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von
                    #10

                    @phillip89

                    ja, mit deinem code oben initialisierst du die pins und gibst die schaltrichtung vor.
                    ja das müsste passen.

                    zuvor musst du aber noch das object gpio-client laden, initialisieren und erzeugen
                    das müsste mit dieser zeile passieren

                    const pigpio = require('pigpio-client').pigpio({host: 'raspberryHostIP'});
                    

                    mit dem require befehl wird die bibliothek in das skript geladen.
                    mit dem rest dahinter wird die verbindung zu deinem remote gerät hergestellt
                    und das alles dann unter der variable pigpio verfügbar gemacht.
                    als host musst du natürlich den hostnamen oder ip adresse deines raspis eintragen den du steuern möchtest.

                    aber zu aller erst lese dir bitte den folgenden artikel durch
                    https://www.bitblokes.de/pigpio-remote-gpio-raspberry-pi-pins-aus-der-ferne-steuern/

                    nach dem musst du die fähigkeit auf deinem zusteuernden raspi erst aktivieren.
                    https://www.bitblokes.de/pigpio-remote-gpio-raspberry-pi-pins-aus-der-ferne-steuern/
                    über den befehl
                    sudo raspi-config
                    und dann die menüs
                    3 Interface Options > P8 Remote GPIO
                    müsstest du das aktivieren können

                    weiter mit deinem code oben.
                    um in einem iobroker script auf änderungen eines datenpunktes reagieren zu können, gibt es den befehl on
                    https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state
                    da stehen auch beispiele
                    bei dürfte es dann ungefähr so grob aussehen

                    on('javascript.0.relais1', function (obj) {
                        relais1.write(obj.state.val);
                    });
                    

                    das überwacht den angegebenen datenpunkt und sobald es eine änderung gibt, wird der code dazwischen aufgerufen (zeile2). dann wird der wert, den du in den datenpunkt geschrieben hast in den pin geschrieben. am besten du konfigurierst den datenpunkt als nummer mit min 0 und max 1, bool könnte auch gehen, weiß aber nicht was bei der konvertierung da passiert.
                    das musst du ausprobieren

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    P 1 Antwort Letzte Antwort
                    1
                    • OliverIOO OliverIO

                      @phillip89

                      ja, mit deinem code oben initialisierst du die pins und gibst die schaltrichtung vor.
                      ja das müsste passen.

                      zuvor musst du aber noch das object gpio-client laden, initialisieren und erzeugen
                      das müsste mit dieser zeile passieren

                      const pigpio = require('pigpio-client').pigpio({host: 'raspberryHostIP'});
                      

                      mit dem require befehl wird die bibliothek in das skript geladen.
                      mit dem rest dahinter wird die verbindung zu deinem remote gerät hergestellt
                      und das alles dann unter der variable pigpio verfügbar gemacht.
                      als host musst du natürlich den hostnamen oder ip adresse deines raspis eintragen den du steuern möchtest.

                      aber zu aller erst lese dir bitte den folgenden artikel durch
                      https://www.bitblokes.de/pigpio-remote-gpio-raspberry-pi-pins-aus-der-ferne-steuern/

                      nach dem musst du die fähigkeit auf deinem zusteuernden raspi erst aktivieren.
                      https://www.bitblokes.de/pigpio-remote-gpio-raspberry-pi-pins-aus-der-ferne-steuern/
                      über den befehl
                      sudo raspi-config
                      und dann die menüs
                      3 Interface Options > P8 Remote GPIO
                      müsstest du das aktivieren können

                      weiter mit deinem code oben.
                      um in einem iobroker script auf änderungen eines datenpunktes reagieren zu können, gibt es den befehl on
                      https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state
                      da stehen auch beispiele
                      bei dürfte es dann ungefähr so grob aussehen

                      on('javascript.0.relais1', function (obj) {
                          relais1.write(obj.state.val);
                      });
                      

                      das überwacht den angegebenen datenpunkt und sobald es eine änderung gibt, wird der code dazwischen aufgerufen (zeile2). dann wird der wert, den du in den datenpunkt geschrieben hast in den pin geschrieben. am besten du konfigurierst den datenpunkt als nummer mit min 0 und max 1, bool könnte auch gehen, weiß aber nicht was bei der konvertierung da passiert.
                      das musst du ausprobieren

                      P Offline
                      P Offline
                      Phillip89
                      schrieb am zuletzt editiert von
                      #11

                      @oliverio
                      So mit Urlaub und dann wieder zurück an die Arbeit hat es leider etwas gedauert...
                      Ich hab jetzt mal ein bissel rumgespielt und ein vorhandenes Blockly script in js umgewandelt um zu sehen wie das dann aussieht mit dem on Befehl.

                      Wäre folgendes dann richtig:

                      const pigpio = require('pigpio-client').pigpio({host: '192.168.187.105'});  
                       
                      const ready = new Promise((resolve, reject) => {
                       pigpio.once('connected', resolve);
                       pigpio.once('error', reject);
                      });
                       
                      function wait(ms) {
                       return new Promise(resolve => setTimeout(resolve, ms));
                      }
                       
                      ready.then(async (info) => {
                       // display information on pigpio and connection status
                       console.log(JSON.stringify(info,null,2));
                      
                      const relais1 = pigpio.gpio(4);
                      const relais2 = pigpio.gpio(5);
                      await relais1.modeSet('output');
                      await relais2.modeSet('output');
                      
                      on({id: '0_userdata.0.StatusRelais1', change: "ne"}, async function (obj) {
                        var value = obj.state.val;
                        var oldValue = obj.oldState.val;
                        if (getState("0_userdata.0.StatusRelais1").val == true) {
                          await relais1.write(1); // Hier stand bei blockly sonst setState("0_userdata.0.Beispiel id", 0);
                        } else if (getState("0_userdata.0.StatusRelais1").val == false) {
                          await relais1.write(0); 
                        }
                      });
                      

                      Auf dem remote Pi hab ich über raspi-config remote GPIO aktiviert.
                      Wenn ich das js Script im IOB auf meinem Host starte, bekomme ich jedoch:
                      error javascript.0 (19186) script.js.Sonstige.Remotetest compile failed: at script.js.Sonstige.Remotetest:33

                      Hab ich etwas vergessen?

                      Danke Dir!

                      io Broker | Raspberry Pi 3 | Raspberry Pi 4 | Raspbian

                      P 1 Antwort Letzte Antwort
                      0
                      • P Phillip89

                        @oliverio
                        So mit Urlaub und dann wieder zurück an die Arbeit hat es leider etwas gedauert...
                        Ich hab jetzt mal ein bissel rumgespielt und ein vorhandenes Blockly script in js umgewandelt um zu sehen wie das dann aussieht mit dem on Befehl.

                        Wäre folgendes dann richtig:

                        const pigpio = require('pigpio-client').pigpio({host: '192.168.187.105'});  
                         
                        const ready = new Promise((resolve, reject) => {
                         pigpio.once('connected', resolve);
                         pigpio.once('error', reject);
                        });
                         
                        function wait(ms) {
                         return new Promise(resolve => setTimeout(resolve, ms));
                        }
                         
                        ready.then(async (info) => {
                         // display information on pigpio and connection status
                         console.log(JSON.stringify(info,null,2));
                        
                        const relais1 = pigpio.gpio(4);
                        const relais2 = pigpio.gpio(5);
                        await relais1.modeSet('output');
                        await relais2.modeSet('output');
                        
                        on({id: '0_userdata.0.StatusRelais1', change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          if (getState("0_userdata.0.StatusRelais1").val == true) {
                            await relais1.write(1); // Hier stand bei blockly sonst setState("0_userdata.0.Beispiel id", 0);
                          } else if (getState("0_userdata.0.StatusRelais1").val == false) {
                            await relais1.write(0); 
                          }
                        });
                        

                        Auf dem remote Pi hab ich über raspi-config remote GPIO aktiviert.
                        Wenn ich das js Script im IOB auf meinem Host starte, bekomme ich jedoch:
                        error javascript.0 (19186) script.js.Sonstige.Remotetest compile failed: at script.js.Sonstige.Remotetest:33

                        Hab ich etwas vergessen?

                        Danke Dir!

                        P Offline
                        P Offline
                        Phillip89
                        schrieb am zuletzt editiert von Phillip89
                        #12

                        So nach ein wenig basteln habe ich es nun geschafft von meinem Raspberry Pi 4 mit IOBroker die GPIO Pins an einem Raspberry Pi Zero zu steuern.

                        Sollte jemand ein gleiches oder ähnliches Projekt vorhaben, dann ist hier mein Code am Beispiel von 4 relais.

                        const pigpio = require('pigpio-client').pigpio({host: '192.168.187.65'});  // Hier die host IP Adresse des zu steuernden Raspis eintragen
                         
                        const ready = new Promise((resolve, reject) => {
                         pigpio.once('connected', resolve);
                         pigpio.once('error', reject);
                        });
                         
                        function wait(ms) {
                         return new Promise(resolve => setTimeout(resolve, ms));
                        }
                         
                        ready.then(async (info) => {
                         // display information on pigpio and connection status
                         console.log(JSON.stringify(info,null,2));
                        
                        const relais1 = pigpio.gpio(2);                   // Hier die GPIO Pin Nummern eintragen
                        const relais2 = pigpio.gpio(3);
                        const relais3 = pigpio.gpio(4);
                        const relais4 = pigpio.gpio(17);
                        await relais1.modeSet('output');
                        await relais2.modeSet('output');
                        await relais3.modeSet('output');
                        await relais4.modeSet('output');
                        
                        await relais1.write(1);  // Schaltet die Relais beim Starten ab
                        await relais2.write(1); 
                        await relais3.write(1); 
                        await relais4.write(1); 
                        
                        on({id: '0_userdata.0.StatusRelais1', change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          if (getState("0_userdata.0.StatusRelais1").val == true) {
                            await relais1.write(0); 
                          } else if (getState("0_userdata.0.StatusRelais1").val == false) {
                            await relais1.write(1); 
                          }
                        })
                        on({id: '0_userdata.0.StatusRelais2', change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          if (getState("0_userdata.0.StatusRelais2").val == true) {
                            await relais2.write(0); 
                          } else if (getState("0_userdata.0.StatusRelais2").val == false) {
                            await relais2.write(1); 
                          }
                        })
                        on({id: '0_userdata.0.StatusRelais3', change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          if (getState("0_userdata.0.StatusRelais3").val == true) {
                            await relais3.write(0); 
                          } else if (getState("0_userdata.0.StatusRelais3").val == false) {
                            await relais3.write(1); 
                          }
                        })
                        on({id: '0_userdata.0.StatusRelais4', change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          if (getState("0_userdata.0.StatusRelais4").val == true) {
                            await relais4.write(0); 
                          } else if (getState("0_userdata.0.StatusRelais4").val == false) {
                            await relais4.write(1); 
                          }
                        })
                        });
                        

                        Im Javascript Adapter habe ich "pigpio-client" hinzugefügt

                        8cbe1cdb-5d53-4cb2-8cf9-ef429a8060d8-image.png

                        Auf dem Raspberry Zero habe ich folgende Befehle ausgeführt

                        sudo apt install pigpio
                        

                        Und damit der Dienst auch bei einem Neustart automatisch startet (Achtung, es können aus dem Netzwerk von allen IP Adressen die GPIOs gesteuert werden)

                        sudo systemctl enable pigpiod
                        

                        Ich für meinen Teil werde habe das ganze auf meinem Raspberry Pi Zero W mit einem Ethernet Modul realisiert um das ganze über LAN zu realisieren (https://amzn.eu/d/hx59ed6)

                        Übrigens hat es sich bei mir bewährt immer erst den Raspberry zu starten und nach einer kurzen Wartezeit das Script zu starten. Sonst hatte ich manchmal das Problem dass keine Verbindung zwischen IOB und dem Pi hergestellt wurde.

                        io Broker | Raspberry Pi 3 | Raspberry Pi 4 | Raspbian

                        OliverIOO 1 Antwort Letzte Antwort
                        0
                        • P Phillip89

                          So nach ein wenig basteln habe ich es nun geschafft von meinem Raspberry Pi 4 mit IOBroker die GPIO Pins an einem Raspberry Pi Zero zu steuern.

                          Sollte jemand ein gleiches oder ähnliches Projekt vorhaben, dann ist hier mein Code am Beispiel von 4 relais.

                          const pigpio = require('pigpio-client').pigpio({host: '192.168.187.65'});  // Hier die host IP Adresse des zu steuernden Raspis eintragen
                           
                          const ready = new Promise((resolve, reject) => {
                           pigpio.once('connected', resolve);
                           pigpio.once('error', reject);
                          });
                           
                          function wait(ms) {
                           return new Promise(resolve => setTimeout(resolve, ms));
                          }
                           
                          ready.then(async (info) => {
                           // display information on pigpio and connection status
                           console.log(JSON.stringify(info,null,2));
                          
                          const relais1 = pigpio.gpio(2);                   // Hier die GPIO Pin Nummern eintragen
                          const relais2 = pigpio.gpio(3);
                          const relais3 = pigpio.gpio(4);
                          const relais4 = pigpio.gpio(17);
                          await relais1.modeSet('output');
                          await relais2.modeSet('output');
                          await relais3.modeSet('output');
                          await relais4.modeSet('output');
                          
                          await relais1.write(1);  // Schaltet die Relais beim Starten ab
                          await relais2.write(1); 
                          await relais3.write(1); 
                          await relais4.write(1); 
                          
                          on({id: '0_userdata.0.StatusRelais1', change: "ne"}, async function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            if (getState("0_userdata.0.StatusRelais1").val == true) {
                              await relais1.write(0); 
                            } else if (getState("0_userdata.0.StatusRelais1").val == false) {
                              await relais1.write(1); 
                            }
                          })
                          on({id: '0_userdata.0.StatusRelais2', change: "ne"}, async function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            if (getState("0_userdata.0.StatusRelais2").val == true) {
                              await relais2.write(0); 
                            } else if (getState("0_userdata.0.StatusRelais2").val == false) {
                              await relais2.write(1); 
                            }
                          })
                          on({id: '0_userdata.0.StatusRelais3', change: "ne"}, async function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            if (getState("0_userdata.0.StatusRelais3").val == true) {
                              await relais3.write(0); 
                            } else if (getState("0_userdata.0.StatusRelais3").val == false) {
                              await relais3.write(1); 
                            }
                          })
                          on({id: '0_userdata.0.StatusRelais4', change: "ne"}, async function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            if (getState("0_userdata.0.StatusRelais4").val == true) {
                              await relais4.write(0); 
                            } else if (getState("0_userdata.0.StatusRelais4").val == false) {
                              await relais4.write(1); 
                            }
                          })
                          });
                          

                          Im Javascript Adapter habe ich "pigpio-client" hinzugefügt

                          8cbe1cdb-5d53-4cb2-8cf9-ef429a8060d8-image.png

                          Auf dem Raspberry Zero habe ich folgende Befehle ausgeführt

                          sudo apt install pigpio
                          

                          Und damit der Dienst auch bei einem Neustart automatisch startet (Achtung, es können aus dem Netzwerk von allen IP Adressen die GPIOs gesteuert werden)

                          sudo systemctl enable pigpiod
                          

                          Ich für meinen Teil werde habe das ganze auf meinem Raspberry Pi Zero W mit einem Ethernet Modul realisiert um das ganze über LAN zu realisieren (https://amzn.eu/d/hx59ed6)

                          Übrigens hat es sich bei mir bewährt immer erst den Raspberry zu starten und nach einer kurzen Wartezeit das Script zu starten. Sonst hatte ich manchmal das Problem dass keine Verbindung zwischen IOB und dem Pi hergestellt wurde.

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #13

                          @phillip89
                          Sorry, dass ich die letzte Mail vom 18. September nicht bemerkt habe.
                          Super, dass nun alles funktioniert.
                          Hast du noch eine Lösung für den Compile Fehler, falls andere da auch noch drauf stoßen?

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          P 1 Antwort Letzte Antwort
                          1
                          • OliverIOO OliverIO

                            @phillip89
                            Sorry, dass ich die letzte Mail vom 18. September nicht bemerkt habe.
                            Super, dass nun alles funktioniert.
                            Hast du noch eine Lösung für den Compile Fehler, falls andere da auch noch drauf stoßen?

                            P Offline
                            P Offline
                            Phillip89
                            schrieb am zuletzt editiert von
                            #14

                            @oliverio
                            Kein Problem, du bist ja nicht dazu verpflichtet mir zu helfen und ich bin sehr dankbar für die Denkanstöße von Dir die letztendlich zum Ergebnis geführt haben :-)

                            Die Lösung für den compile Fehler war einfach, es lag an den Klammern... Da ich nicht vertraut mit Javascript bin, wusste ich auch nicht was es mit den Klammern so auf sich hat. Erst mit ein bissel rumspielen hab ich es dann verstanden und gesehen dass er die zugehörigen Klammern dann auch entsprechend hervorhebt wenn man die "schließende" Klammer setzt.

                            Mein code oben ist aber bereits mit den richtig gesetzten Klammern.

                            Nun muss ich nur noch eine Sache herausfinden, evtl. hast du da noch einen Tipp.
                            Und zwar wenn ich das Script starte, springen alle Relais erstmal direkt an, sprich die Wasserventile würden direkt alle aufgehen... Gibt es eine Möglichkeit am Anfang alle Zustände beim Start des Scriptes generell erstmal auf false zu setzen??

                            Danke Dir!

                            io Broker | Raspberry Pi 3 | Raspberry Pi 4 | Raspbian

                            OliverIOO 1 Antwort Letzte Antwort
                            0
                            • P Phillip89

                              @oliverio
                              Kein Problem, du bist ja nicht dazu verpflichtet mir zu helfen und ich bin sehr dankbar für die Denkanstöße von Dir die letztendlich zum Ergebnis geführt haben :-)

                              Die Lösung für den compile Fehler war einfach, es lag an den Klammern... Da ich nicht vertraut mit Javascript bin, wusste ich auch nicht was es mit den Klammern so auf sich hat. Erst mit ein bissel rumspielen hab ich es dann verstanden und gesehen dass er die zugehörigen Klammern dann auch entsprechend hervorhebt wenn man die "schließende" Klammer setzt.

                              Mein code oben ist aber bereits mit den richtig gesetzten Klammern.

                              Nun muss ich nur noch eine Sache herausfinden, evtl. hast du da noch einen Tipp.
                              Und zwar wenn ich das Script starte, springen alle Relais erstmal direkt an, sprich die Wasserventile würden direkt alle aufgehen... Gibt es eine Möglichkeit am Anfang alle Zustände beim Start des Scriptes generell erstmal auf false zu setzen??

                              Danke Dir!

                              OliverIOO Offline
                              OliverIOO Offline
                              OliverIO
                              schrieb am zuletzt editiert von OliverIO
                              #15

                              @phillip89

                              das steht in der doku drin
                              https://www.npmjs.com/package/pigpio-client

                              mit write kannst du ja pins setzen.
                              das schreibst du einfach ab zeile 2 für alle deine pins rein

                              was da als false ankommt musst du mal probieren.
                              entweder direkt false nehmen
                              oder 0
                              auch das steht im beispiel weiter unten dran. dem ding ist ja egal ob da eine led oder ein relais dran hängt. es sind nur pins, die entweder high (voller strom) oder low (niedriger/kein strom) schalten.

                              Meine Adapter und Widgets
                              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                              Links im Profil

                              P 1 Antwort Letzte Antwort
                              1
                              • OliverIOO OliverIO

                                @phillip89

                                das steht in der doku drin
                                https://www.npmjs.com/package/pigpio-client

                                mit write kannst du ja pins setzen.
                                das schreibst du einfach ab zeile 2 für alle deine pins rein

                                was da als false ankommt musst du mal probieren.
                                entweder direkt false nehmen
                                oder 0
                                auch das steht im beispiel weiter unten dran. dem ding ist ja egal ob da eine led oder ein relais dran hängt. es sind nur pins, die entweder high (voller strom) oder low (niedriger/kein strom) schalten.

                                P Offline
                                P Offline
                                Phillip89
                                schrieb am zuletzt editiert von
                                #16

                                @oliverio
                                Perfekt, Merci!
                                Ich hab den code entsprechend angepasst und nun funktioniert es :-) Beim starten klackt alles kurz und die Relais sind aus.
                                Ich hab den Beitrag oben nochmal mit dem fertigen Code aktualisiert.

                                LG

                                io Broker | Raspberry Pi 3 | Raspberry Pi 4 | Raspbian

                                1 Antwort Letzte Antwort
                                0
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

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

                                736

                                Online

                                32.5k

                                Benutzer

                                81.9k

                                Themen

                                1.3m

                                Beiträge
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                ioBroker Community 2014-2025
                                logo
                                • Anmelden

                                • Du hast noch kein Konto? Registrieren

                                • Anmelden oder registrieren, um zu suchen
                                • Erster Beitrag
                                  Letzter Beitrag
                                0
                                • Home
                                • Aktuell
                                • Tags
                                • Ungelesen 0
                                • Kategorien
                                • Unreplied
                                • Beliebt
                                • GitHub
                                • Docu
                                • Hilfe