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. Hardware
  4. (gelöst) I2C-Drucksensor, C-Programm, Einbindung in IoBroker

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

(gelöst) I2C-Drucksensor, C-Programm, Einbindung in IoBroker

Geplant Angeheftet Gesperrt Verschoben Hardware
4 Beiträge 2 Kommentatoren 340 Aufrufe 2 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.
  • R Offline
    R Offline
    Ralf 6
    schrieb am zuletzt editiert von Ralf 6
    #1

    Die Lösung hierzu hat sich in folgendem Beitrag entwickelt:

    https://forum.iobroker.net/topic/77667/gelöst-c-programm-auf-slave-mit-rückgabewert-ausführen

    Hallo zusammen,

    Ich besitze einen I2C-Drucksensor welcher aktuell mit einem C-Programm unter Python auf einem Raspberry abgerufen wird. Das Programm funktioniert seit mehreren Jahren. Derzeit bin ich dabei auf IoBroker umzustellen und weiß nicht wie ich diesen Sensor einbinden kann.
    Das C-Programm bekam ich damals zusammen mit dem Sensor. Bin jedoch selber nicht in der Lage das Programm auf Javascript umzustellen oder das C-Programm über Blockly aufzurufen.
    Den Druckwert rufe ich aktuell nur 4x am Tag auf, da sich hier nur wenig ändert.

    Mein IoBroker besteht aus einem Nuc alsMaster und einem Raspberry als Slave. I2C habe ich als Adapter installiert und er läuft schon mit einem PWM - Modul. Die Adresse des Drucksensors mit 0x76 wird sowohl vom Raspberry wie auch vom IoBroker erkannt. Nur was ich in der Instanz unter Generic einstellen muss, weiß ich nicht.

    Mein Wunsch ist es, entweder die I2C - Instanz richtig auszufüllen, das C-Programm in Javascript umzuschreiben oder das C-Programm unter Blockly aufzurufen. Kann mir bitte jemand hierbei helfen oder die richtige Richtung zeigen. Gerne bin ich auch für andere Lösungsvorschläge offen.

    Falls es wichtig ist. Der Drucksensor hängt an einer CO2 - Flasche welche ich zur Düngung an meinem Aquarium verwende.

    Das C-Programm lautet:

    #include "stdlib.h"
    #include "stdio.h"
    #include "fcntl.h"
    #include "stdint.h"
    #include "linux/i2c-dev.h"
    
    char buf[4] = { 0, 0, 0, 0 };
    double data;
    char channel;
    uint16_t *wPtr;
    const int addr = 0x76;  //i2c address of DRTR
    int file;
    char *filename = "/dev/i2c-1";
    
    int main()
    {
       printf("Open %s\n", filename);
       if ((file = open(filename, O_RDWR)) < 0) {
          printf("Failed to open i2c");
          exit(EXIT_FAILURE);
       }
    
       printf("Ok, now try access the device..\n");
       if (ioctl(file, I2C_SLAVE, addr) < 0) {
          printf("Failed to access device\n");
          exit(EXIT_FAILURE);
       }
    
       printf("Successfull, try to read 2 bytes\n");
       wPtr = (uint16_t*)buf;
       while(1) {
       if (read(file, buf, 2) != 2) {
          printf("Failed to read from %s\n", filename);
          exit(EXIT_FAILURE);
       }
       else {
          data = 0x7FFF & (((int)buf[0]) * 256 + buf[1]);
          data = data * (100 - 0) / 0x7FFF; //0..100bar
        //  printf("Received data: %02x%02x %.2f\n", buf[0], buf[1], data);
            printf("Received data: %.2f\n",  data);
       }
          sleep(1);
       }
       exit(EXIT_SUCCESS);
    }
    
    

    Ich gehe davon aus, dass hier alle Informationen drin stehen. Nur ich finde bzw. verstehe diese nicht.

    Wenn weitere Informationen notwendig sind, kann ich die liefern.
    Viele Grüße
    Ralf

    Thomas BraunT 1 Antwort Letzte Antwort
    0
    • R Ralf 6

      Die Lösung hierzu hat sich in folgendem Beitrag entwickelt:

      https://forum.iobroker.net/topic/77667/gelöst-c-programm-auf-slave-mit-rückgabewert-ausführen

      Hallo zusammen,

      Ich besitze einen I2C-Drucksensor welcher aktuell mit einem C-Programm unter Python auf einem Raspberry abgerufen wird. Das Programm funktioniert seit mehreren Jahren. Derzeit bin ich dabei auf IoBroker umzustellen und weiß nicht wie ich diesen Sensor einbinden kann.
      Das C-Programm bekam ich damals zusammen mit dem Sensor. Bin jedoch selber nicht in der Lage das Programm auf Javascript umzustellen oder das C-Programm über Blockly aufzurufen.
      Den Druckwert rufe ich aktuell nur 4x am Tag auf, da sich hier nur wenig ändert.

      Mein IoBroker besteht aus einem Nuc alsMaster und einem Raspberry als Slave. I2C habe ich als Adapter installiert und er läuft schon mit einem PWM - Modul. Die Adresse des Drucksensors mit 0x76 wird sowohl vom Raspberry wie auch vom IoBroker erkannt. Nur was ich in der Instanz unter Generic einstellen muss, weiß ich nicht.

      Mein Wunsch ist es, entweder die I2C - Instanz richtig auszufüllen, das C-Programm in Javascript umzuschreiben oder das C-Programm unter Blockly aufzurufen. Kann mir bitte jemand hierbei helfen oder die richtige Richtung zeigen. Gerne bin ich auch für andere Lösungsvorschläge offen.

      Falls es wichtig ist. Der Drucksensor hängt an einer CO2 - Flasche welche ich zur Düngung an meinem Aquarium verwende.

      Das C-Programm lautet:

      #include "stdlib.h"
      #include "stdio.h"
      #include "fcntl.h"
      #include "stdint.h"
      #include "linux/i2c-dev.h"
      
      char buf[4] = { 0, 0, 0, 0 };
      double data;
      char channel;
      uint16_t *wPtr;
      const int addr = 0x76;  //i2c address of DRTR
      int file;
      char *filename = "/dev/i2c-1";
      
      int main()
      {
         printf("Open %s\n", filename);
         if ((file = open(filename, O_RDWR)) < 0) {
            printf("Failed to open i2c");
            exit(EXIT_FAILURE);
         }
      
         printf("Ok, now try access the device..\n");
         if (ioctl(file, I2C_SLAVE, addr) < 0) {
            printf("Failed to access device\n");
            exit(EXIT_FAILURE);
         }
      
         printf("Successfull, try to read 2 bytes\n");
         wPtr = (uint16_t*)buf;
         while(1) {
         if (read(file, buf, 2) != 2) {
            printf("Failed to read from %s\n", filename);
            exit(EXIT_FAILURE);
         }
         else {
            data = 0x7FFF & (((int)buf[0]) * 256 + buf[1]);
            data = data * (100 - 0) / 0x7FFF; //0..100bar
          //  printf("Received data: %02x%02x %.2f\n", buf[0], buf[1], data);
              printf("Received data: %.2f\n",  data);
         }
            sleep(1);
         }
         exit(EXIT_SUCCESS);
      }
      
      

      Ich gehe davon aus, dass hier alle Informationen drin stehen. Nur ich finde bzw. verstehe diese nicht.

      Wenn weitere Informationen notwendig sind, kann ich die liefern.
      Viele Grüße
      Ralf

      Thomas BraunT Online
      Thomas BraunT Online
      Thomas Braun
      Most Active
      schrieb am zuletzt editiert von Thomas Braun
      #2

      @ralf-6

      Es gibt einen i2c-Adapter. Kommst du mit dem nicht weiter?

      https://github.com/UncleSamSwiss/ioBroker.i2c

      Ist auch schon geraume Zeit stabil:

      github:	1.2.1
      latest:	1.2.1 for 36 months
      stable:	1.2.1 for 36 months
      

      Linux-Werkzeugkasten:
      https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
      NodeJS Fixer Skript:
      https://forum.iobroker.net/topic/68035/iob-node-fix-skript
      iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

      R 1 Antwort Letzte Antwort
      0
      • Thomas BraunT Thomas Braun

        @ralf-6

        Es gibt einen i2c-Adapter. Kommst du mit dem nicht weiter?

        https://github.com/UncleSamSwiss/ioBroker.i2c

        Ist auch schon geraume Zeit stabil:

        github:	1.2.1
        latest:	1.2.1 for 36 months
        stable:	1.2.1 for 36 months
        
        R Offline
        R Offline
        Ralf 6
        schrieb am zuletzt editiert von
        #3

        @thomas-braun
        Hallo,
        ja, diesen habe ich wie geschrieben mit anderer Hardware bereits am laufen.

        Wenn ich in diesem ein generisches Gerät anlege, weiß ich nicht was ich unter Register und Datentyp eintragen muss. Meine Test waren bis jetzt erfolglos.
        Gruß Ralf

        Thomas BraunT 1 Antwort Letzte Antwort
        0
        • R Ralf 6

          @thomas-braun
          Hallo,
          ja, diesen habe ich wie geschrieben mit anderer Hardware bereits am laufen.

          Wenn ich in diesem ein generisches Gerät anlege, weiß ich nicht was ich unter Register und Datentyp eintragen muss. Meine Test waren bis jetzt erfolglos.
          Gruß Ralf

          Thomas BraunT Online
          Thomas BraunT Online
          Thomas Braun
          Most Active
          schrieb am zuletzt editiert von
          #4

          @ralf-6

          Da kann ich dir nicht weiter helfen. Aber vielleicht schaut sich @UncleSam das mal an.

          Linux-Werkzeugkasten:
          https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
          NodeJS Fixer Skript:
          https://forum.iobroker.net/topic/68035/iob-node-fix-skript
          iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

          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

          821

          Online

          32.4k

          Benutzer

          81.5k

          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