Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [Projekt]Temperatur aus externen Linux Rechner zu ioBroker senden

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Projekt]Temperatur aus externen Linux Rechner zu ioBroker senden

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      sveni_lee last edited by

      versuch mal folgendes:

      read -r device blocks used available use_percent mounted_on < <(df -k | grep /dev/sda2)
      

      damit werden alle werte aus der Anzeige den Variablen zugeordnet…

      IFS=" " read -r l_1min l_5min l_15min _ _ < /proc/loadavg
      

      ist das Selbe für loadvag

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Funktioniert, super!

        Ich bastele noch etwas weiter, dann kann ich das hier nochmal vorstellen.

        Vielen Dank.

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo,

          hab nun mein Skript fertig, sieht so aus:
          261_bildschirmfoto_2018-04-18_um_18.56.43.jpg

          ! IP und Port bitte ersetzen````
          #!/bin/bash

          20180418 by pix

          dank an svenilee

          while true;
          do
          clear
          tput cup 2 5
          echo -e "Zeitsteuerung.sh gestartet"
          tput cup 3 5
          echo -e "XEOMA Odroid XU4"
          ##ggf noch IP übermitteln
          tput cup 4 5
          tput smul
          echo -e "Datenübermittlung an ioBroker per SimpleAPI-Schnittstelle alle 20s..."
          tput rmul

          Werte einlesen

          TEMP=$(cat /sys/class/thermal/thermal_zone0/temp)
          temperatur=$((TEMP/1000))
          CORES=$(cat /proc/cpuinfo | grep processor | wc -l)
          read -r l_1min l_5min l_15min _ _ < /proc/loadavg
          read -r device blocks used available use_percent mounted_on < <(df -k | grep /dev/sda2)
          tput cup 6 5
          echo -e "Temperatur: " $temperatur "°C"
          tput cup 7 5
          echo -e "Kerne: " $CORES
          tput cup 8 5
          echo -e "Load 1/5/15min: " $l_1min $l_5min $l_15min
          tput cup 9 5
          echo -e "SDA2 mounted on: " $mounted_on
          tput cup 10 23
          echo -e $((blocks/(10241024)))"GB Größe ("$blocks" Bytes)"
          tput cup 11 23
          echo -e $((used/(1024
          1024)))"GB benutzt ("$used" Bytes)"
          tput cup 12 23
          echo -e $use_percent " benutzt"
          use_percent_string=$use_percent
          use_percent_zahl=${use_percent_string%%}
          tput cup 13 23
          echo -e $((available/(1024*1024)))"GB frei ("$available" Bytes)"
          echo -e zahl

          Werte an ioBroker senden - später ggf. als bulk

          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Temperatur?value={$temperatur} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Cores?value={$CORES} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Load1?value={$l_1min} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Load5?value={$l_5min} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Load15?value={$l_15min} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Sda2.size?value={$blocks} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Sda2.used?value={$used} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Sda2.avail?value={$available} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Sda2.mounted?value={$mounted_on} >/dev/null 2>&1;
          curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Sda2.use?value={$use_percent_zahl} >/dev/null 2>&1;

          Restzeitanzeige by cfajohnson

          countdown()
          (
          IFS=:
          set -- $*
          secs=$(( ${1#0} * 3600 + ${2#0} * 60 + ${3#0} ))
          while [ $secs -gt 0 ]
          do
          sleep 1 &
          tput cup 16 5

          Restzeitanzeige by cfajohnson

          countdown()
          (
          IFS=:
          set -- $*
          secs=$(( ${1#0} * 3600 + ${2#0} * 60 + ${3#0} ))
          while [ $secs -gt 0 ]
          do
          sleep 1 &
          tput cup 11 5
          printf "%02d:%02d:%02d" $((secs/3600)) $(( (secs/60)%60)) $((secs%60))
          secs=$(( $secs - 1 ))
          wait
          done
          echo
          )
          countdown "00:00:20"
          done

          
          Und hier die Gegenseite im ioBroker Javascript Adapter:
          
          >! Es ist noch eine Funktion zum Aufrufen einer globalen Funktion zum telegram-Senden eingebaut. Bitte ggf. ignorieren.
          

          ! /* Skript zum Einlesen der Xeoma Server Systeminfos
          ! FYI: Prozent Plattenbelegung kommt als String mit Einheit
          ! 14.09.2017 Daten kommen per Simple API vom Server (XU4)
          21.10.2017 Temperatur Überwachung
          01.01.2018 Lüfter eingepflegt
          15.04.2018 LOAD, CORES und SPACE eingepflegt
          18.04.2018 Einzelne Werte werden in Objekte geschrieben
          Bash-Quellskript fertiggestellt
          */
          const logging = true;
          const fC = true;
          ! const idLuefter = "hm-rpc.0.KEQ0193137.1.STATE"/Lüfter Flur Anrichte.STATE/;
          const server = "Xeoma Server 1 (XU4)";
          const pfad = "javascript." + instance + ".Systeminfos.Xeoma.Server.1.";
          ! // Meldung
          function meldung_push (text, titel, prio) {
          var dienst = 2; // telegram
          push(dienst, text, titel, prio, "j");
          }
          ! // Server 1
          // Objekte für Systemdaten des XU4 (Daten werden aus dem ARM-Rechner per SimpleAPI an ioBroker gesendet)
          // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          // TEMP
          const idServerTemp = pfad + "Temperatur";
          createState(idServerTemp, 0, fC, {
          read: true,
          write: true,
          name: server + " Temperatur",
          desc: "umgerechnete Temperatur zur Weiterverwendung",
          type: "number",
          role: "temperature",
          unit: "°C",
          custom: {
          "influxdb.0": {
          "enabled": true,
          "changesOnly": false,
          "debounce": "",
          "retention": 63072000 // 2 Jahre
          }
          }
          });

          on(idServerTemp, function(data) {
          if (logging) log("neue Temperatur vom " + server + " empfangen: " + data.state.val + "°C");
          });

          ! on({
          id: idServerTemp,
          valGt: 89, // größer als 90°C
          oldValLt: 89, // alter Wert kleiner als 89°C
          logic: "and"
          }, function (obj) {
          var nachricht = "Odroid XU4 Server Temperatur ist im kritischen Bereich: " + obj.state.val + "°C";
          if (!getState(idLuefter).val ) {
          setState(idLuefter, true);
          nachricht += ". Der Lüfter in der Anrichte war aus und wurde nun eingeschaltet";
          }
          log(nachricht);
          meldung_push(nachricht, "ioBroker Warnung", 1);
          });
          ! // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          // LOAD
          const idServerLoad1 = pfad + "Load1",
          idServerLoad5 = pfad + "Load5",
          idServerLoad15 = pfad + "Load15";
          ! createState(idServerLoad1, 0, fC, {
          read: true,
          write: true,
          name: server + " Load1",
          desc: "/loadavg 1min",
          type: "number"
          });
          createState(idServerLoad5, 0, fC, {
          read: true,
          write: true,
          name: server + " Load5",
          desc: "/loadavg 5min",
          type: "number"
          });
          createState(idServerLoad15, 0, fC, {
          read: true,
          write: true,
          name: server + " Load15",
          desc: "/loadavg 15min",
          type: "number"
          });
          ! on({
          id: [
          idServerLoad1,
          idServerLoad5,
          idServerLoad15
          ]
          }, function(data) {
          if (logging) log("neuer Load vom " + data.deviceName + " empfangen: " + data.state.val);
          });
          ! // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          // CORES (ändert sich eigentlich nicht)
          const idServerCores = pfad + "Cores";
          createState(idServerCores, 0, fC, {
          read: true,
          write: true,
          name: server + " Anzahl der Kerne",
          desc: "cat /proc/cpuinfo",
          type: "number",
          min: 0
          });
          ! on(idServerCores, function(data) {
          if (logging) log("neuer Wert Cores vom " + data.deviceName + " empfangen: " + data.state.val);
          });
          ! // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          // SPACE EXT Sda2
          const idServerSda2_size = pfad + "Sda2.size";
          const idServerSda2_used = pfad + "Sda2.used";
          const idServerSda2_avail = pfad + "Sda2.avail";
          const idServerSda2_use = pfad + "Sda2.use";
          const idServerSda2_mounted = pfad + "Sda2.mounted";
          ! createState(idServerSda2_size, 0, fC, {
          read: true,
          write: true,
          name: server + " Sda2 Size",
          desc: "umgerechneter df-Wert zur Weiterverwendung",
          type: "number",
          unit: "Bytes"
          });
          createState(idServerSda2_used, 0, fC, {
          read: true,
          write: true,
          name: server + " Sda2 used",
          desc: "umgerechneter df-Wert zur Weiterverwendung",
          type: "number",
          unit: "Bytes",
          custom: {
          "influxdb.0": {
          "enabled": true,
          "changesOnly": false,
          "debounce": "",
          "retention": 63072000 // 2 Jahre
          }
          }
          });
          createState(idServerSda2_avail, 0, fC, {
          read: true,
          write: true,
          name: server + " Sda2 avail",
          desc: "umgerechneter df-Wert zur Weiterverwendung",
          type: "number",
          unit: "Bytes",
          custom: {
          "influxdb.0": {
          "enabled": true,
          "changesOnly": false,
          "debounce": "",
          "retention": 63072000 // 2 Jahre
          }
          }
          });
          createState(idServerSda2_use, 0, fC, {
          read: true,
          write: true,
          name: server + " Sda2 Auslastung",
          desc: "umgerechneter df-Wert zur Weiterverwendung",
          type: "number",
          unit: "%",
          custom: {
          "influxdb.0": {
          "enabled": true,
          "changesOnly": false,
          "debounce": "",
          "retention": 63072000 // 2 Jahre
          }
          }
          });
          createState(idServerSda2_mounted, "", fC, {
          read: true,
          write: true,
          name: server + " Sda2 mounted on (Pfad)",
          desc: "umgerechneter df-Wert zur Weiterverwendung",
          type: "string"
          });
          ! on({
          id: [
          idServerSda2_size,
          idServerSda2_used,
          idServerSda2_avail,
          idServerSda2_use,
          idServerSda2_mounted
          ]
          }, function(data) {
          if (logging) log("neue Daten vom " + data.deviceName + " empfangen (externe Platte an USB SDA2): " + data.state.val);
          });
          ! ````

          In ioBroker siehts dann so aus:
          261_bildschirmfoto_2018-04-18_um_18.56.43.jpg

          Vielen Dank für die Hilfe und Gruß

          Pix

          EDIT: fehlendes Bild angehängt

          1 Reply Last reply Reply Quote 0
          • Segway
            Segway last edited by

            @pix:

            Restzeitanzeige by cfajohnson

            countdown() `

            Hallo pix,

            weisst du warum ich auf einem Pi mit Raspian bei dem befehl````
            sleep 1 &

            
            line 80: syntax error: unexpected end of file
            1 Reply Last reply Reply Quote 0
            • Segway
              Segway last edited by

              Bin jetzt etwas weitergekommen…..habe es allerdings über zwei scripts laufen:

              1x systeminfo2iobroker und

              1x zeitscript.sh

              damit gehts.

              Ich neige dazu, dass script in die Crontab anzubinden und alle 20 Sek. aufzurufen um in die DB zu speichern.

              Kann man das systemindo2iobroker.sh auch erweitern für Memory, Voltage, SD Speicherplatz etc. ????

              1 Reply Last reply Reply Quote 0
              • Segway
                Segway last edited by

                Alles klar … es geht.....nun erweitere ich das Schritt für Schritt 🙂 Super genial 🙂

                1 Reply Last reply Reply Quote 0
                • Segway
                  Segway last edited by

                  @pix:

                  In ioBroker siehts dann so aus:

                  Bildschirmfoto 2018-04-18 um 18.56.43.jpg `

                  Bei Gelegenheit könnteste du mal schauen, warum die Temperatur OHNE Nachkommastellen vom Pi gesendet wird ? Wenigstens eine Nachkommastelle sollte es ja sein 🙂

                  1 Reply Last reply Reply Quote 0
                  • Q
                    Qlink last edited by

                    @Segway

                    Hast du das Script noch am Laufen ?
                    Funktioniert das noch ?

                    Habe ich es richtig verstanden, dass das Script auch für beliebige Raspberrys funktioniert ?

                    Falls ja, könntest du dein Script für einen Raspberry zur Verfügung stellen ?
                    Ich möchte nämlich auch von diversen Raspis von mir die Systeminfo an iobroker übermitteln ...

                    Besten Dank

                    Segway 1 Reply Last reply Reply Quote 0
                    • Segway
                      Segway @Qlink last edited by

                      @pix

                      Kannst du nochmal das Skript einstellen ? Ich selber habe leider meine Skripte nicht mehr da die SD abgetaucht ist und ich nun einige Pis habe, die ich auslesen möchte.

                      Kannst du das nochmal neu reinstellen ? Irgendwie ist das Skript nicht mehr korrekt dargestellt.

                      DANKE vorab

                      1 Reply Last reply Reply Quote 0
                      • Q
                        Qlink last edited by

                        @pix wäre super wenn du dein Script nochmal neu hier posten könntest. Da hats die Formatierung/Darstellung gewaltig über den Haufen geworfen ...

                        Beste Grüße

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        839
                        Online

                        31.6k
                        Users

                        79.6k
                        Topics

                        1.3m
                        Posts

                        6
                        20
                        3109
                        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