Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. (gelöst) I2C-Drucksensor, C-Programm, Einbindung in IoBroker

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      Ralf 6 last edited by 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 Braun 1 Reply Last reply Reply Quote 0
      • Thomas Braun
        Thomas Braun Most Active @Ralf 6 last edited by 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 1 Reply Last reply Reply Quote 0
        • R
          Ralf 6 @Thomas Braun last edited by

          @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 Braun 1 Reply Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @Ralf 6 last edited by

            @ralf-6

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

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

            Support us

            ioBroker
            Community Adapters
            Donate

            876
            Online

            31.7k
            Users

            79.7k
            Topics

            1.3m
            Posts

            2
            4
            168
            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