Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. EZOGateway; Watermonitoring

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    EZOGateway; Watermonitoring

    This topic has been deleted. Only users with topic management privileges can see it.
    • 100prznt
      100prznt @JohnnyBahama last edited by 100prznt

      @johnnybahama Habe die Software soweit vorbereitet, liegt vorerst in einem eigenen Branch, falls du schon testen willst.

      Im IoDispatcher wird ein readonly Array definiert, welches die GPIO Nummern der "Ausgänge" definiert.

              //GPIO pins in sequence for channel 1 to n.
              //Pin 2 and 3 are reserved for I2C communication with the EZO circuit modules.
              private readonly int[] OUT_PINS = { 5, 6, 13, 19, 26, 12 };
      

      https://github.com/100prznt/EzoGateway/blob/915775ffe9e7f52b15d0b02a984684e20d16cf16/source/EzoGateway/IoDispatcher.cs#L41

      Nach einem Systemstart werden die entsprechend definierten GPIOs initialisiert und können über die REST API bedient werden.
      Dazu gibt es im HttpServer eine neue Verzweigung:

                      else if (request.Uri.Segments.Length >= 3 && request.Uri.Segments[2].Trim('/').Equals("OUTPUT", StringComparison.OrdinalIgnoreCase))
                      {
                          if (request.Uri.Segments.Length == 3 && request.Method == HttpMethod.Get)
                          {
                              var channelDict = new Dictionary<string, IoData>();
                              for (int i = 0; i < m_Controller.Io.OutputChannelCount; i++)
                                  channelDict.Add((i + 1).ToString(), new IoData(m_Controller.Io.GetOutput(i + 1)));
      
                              return HttpResource.CreateJsonResource(channelDict);
                          }
                          else if (request.Uri.Segments.Length == 4)
                          {
                              if (Int32.TryParse(request.Uri.Segments[3].Trim('/'), out int channel))
                              {
                                  if (channel >= 1 && channel <= m_Controller.Io.OutputChannelCount)
                                  {
                                      if (request.Method == HttpMethod.Get)
                                      {
                                          var state = new Dictionary<string, string>
                                          {
                                              { "state", m_Controller.Io.GetOutput(channel).ToString() }
                                          };
                                          return HttpResource.CreateJsonResource(state);
                                      }
                                      else if (request.Method == HttpMethod.Put)
                                      {
                                          var ioData = JsonConvert.DeserializeObject<IoData>(request.Content);
                                          m_Controller.Io.SetOutput(channel, ioData.State);
      
                                          return HttpResource.CreateJsonResource(new RestStatus(OperationStatus.Success, "Output state send to GPIO controller"));
                                      }
                                  }
                                  else
                                      return HttpResource.JsonLocked423("Invalide channel number.");
                              }
                          }
                      }
      

      https://github.com/100prznt/EzoGateway/blob/915775ffe9e7f52b15d0b02a984684e20d16cf16/source/EzoGateway/Server/HttpServer.cs#L626

      Der Call zum setzen eines Ausgangs sieht wie folgt aus:
      URL: http://<IP EZO Gateway>/api/output/<Kanalnummer>
      Methode: PUT
      Body:

      {
          State: <true oder false>
      }
      

      Abfrage erfolgt analog per GET, ohne Kanalnummer kommt ein Array mit allen Kanälen zurück.

      Hab das jetzt erstmal nur schnell runter geschrieben, ein Test an Hardware steht noch aus.

      Beste Grüße
      Elias

      J 2 Replies Last reply Reply Quote 0
      • J
        JohnnyBahama @100prznt last edited by

        @100prznt Danke, muss mir dann erstmal die Hardware organisieren.

        1 Reply Last reply Reply Quote 0
        • J
          JohnnyBahama @100prznt last edited by JohnnyBahama

          @100prznt Relais Board is angekommen. Ich brauche hier deine Unterstützung, da ich von Programmieren keine Ahnung habe. Wie oder wohin muss ich den Code kopieren?

          100prznt 1 Reply Last reply Reply Quote 0
          • 100prznt
            100prznt @JohnnyBahama last edited by

            @johnnybahama Welches Board hast du jetzt genau? Gibt es da konkrete Doku, insbesondere die GPIO Zuordnung müsste ich wissen.

            Beste Grüße
            Elias

            1 Reply Last reply Reply Quote 0
            • J
              JohnnyBahama last edited by

              @100prznt Das 6ch Board

              Dokumentation ist rar, dass einzige was ich finden konnte und so aussieht als wäre es das original: https://www.waveshare.com/wiki/RPi_Relay_Board

              Dann noch Kommentare die es zum laufen bekommen haben. Die Kommentare sagen auch, dass das Waveshare nur 3 CH ist und das kommentierte 4 CH. Weiß jetzt nicht, ob es eine Synergie zu dem 6 CH gibt.

              Ich such noch weiter.

              1 Reply Last reply Reply Quote 0
              • W
                Wuschl @paul53 last edited by

                @paul53 Ich checke diesen Simple-API nicht. Das EZO läuft, aber ich bringe die Daten nicht in den ioBroker.
                Wo habe ich den Denkfehler? In Javascript bekomme ich nur eine Fehlermeldung.

                J 1 Reply Last reply Reply Quote 0
                • J
                  JohnnyBahama @Wuschl last edited by

                  @wuschl Hast du denn deine IP mit Port in der ersten Zeile angegeben?

                  W 1 Reply Last reply Reply Quote 0
                  • W
                    Wuschl @JohnnyBahama last edited by

                    @johnnybahama Hab es hinbekommen, nachdem der Raspy nochmals neu gestartet wurde war alles da.

                    Jetzt habe ich noch eine Frage wegen dem kalibrieren. Ich habe 2 Flüssigkeiten 4.0 pH und 7.0 pH. Wenn ich die Messzelle in die Flüssigkeit stelle dann sinkt der Wert, aber dieser bleibt nicht bei einem Wert stehen. Ist das richtig? Bei meinem PH803W blieb der Wert irgendwann an einer Position stehen.
                    Welchen Wert muss ich eintragen in Reference Value?

                    Ist es zwingend nötig 10 pH auch zu kalibrieren?

                    J 1 Reply Last reply Reply Quote 0
                    • J
                      JohnnyBahama @Wuschl last edited by

                      @wuschl Als Referenz kommt der Wert, der auf der Kalbrierflüssigkeitspackung steht.
                      Nein 10 musst du nicht kalibrieren. Entweder 4 oder 10. 7 ist muss.
                      Das Schwanken kannst du im live window prüfen. In der Regel sollte der immer um den Wert von der Kalibrierflüssigkeit herum tanzen .

                      1 Reply Last reply Reply Quote 0
                      • J
                        JohnnyBahama last edited by JohnnyBahama

                        EDIT: Problem gelöst. Siehe nächsten Post.

                        1 Reply Last reply Reply Quote 0
                        • J
                          JohnnyBahama last edited by JohnnyBahama

                          Mit ChatGPT wieder zum laufen bekommen:

                          const axios = require('axios'); // axios importieren
                          
                          const url = 'http://<EZO IP Adress>/api/fetch'; // IP-Adresse eintragen !
                          const idTemp = 'javascript.0.EzoGateway.Temperatur'; // Ändern, wenn der Datenpunkt woanders liegen soll
                          const idPH = 'javascript.0.EzoGateway.PH-Wert';// Ändern, wenn der Datenpunkt woanders liegen soll
                          const idRedox = 'javascript.0.EzoGateway.Redox-Potenzial';// Ändern, wenn der Datenpunkt woanders liegen soll
                          
                          schedule('*/1 * * * *', async function() { // every minute
                              try {
                                  let response = await axios.get(url);
                                  let obj = response.data;
                                  setState(idTemp, obj['1'].Value, true);
                                  setState(idPH, obj['2'].Value, true);
                                  setState(idRedox, obj['3'].Value, true);
                              } catch (exMsg) {
                                  log(exMsg, 'error');
                              }
                          });
                          
                          // Erzeugen der Objekte in ioBroker. Kann nach dem ersten Start des Skriptes gelöscht werden.
                          createState(idTemp, 0, {
                              name: 'Temperatur',
                              desc: 'Temperatur',
                              type: 'number',
                              role: 'value',
                              unit: '°C'
                          });
                          createState(idPH, 0, {
                              name: 'pH_Wert',
                              desc: 'pH Wert',
                              type: 'number',
                              role: 'value',
                              unit: ''
                          });
                          createState(idRedox, 0, {
                              name: 'Redox_Potential',
                              desc: 'Redox potential',
                              type: 'number',
                              role: 'value',
                              unit: 'mV'
                          });
                          
                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          489
                          Online

                          31.7k
                          Users

                          79.8k
                          Topics

                          1.3m
                          Posts

                          ezo gateway pool monitoring
                          7
                          47
                          4216
                          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