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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Projekt]Temperatur aus externen Linux Rechner zu ioBroker senden

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

      @AlCalzone:

      pix hat geschrieben:

      • Wie kann ich die wiederholende Ausgabe in der Konsole unterdrücken? Kann ich die Ausgabe in ein NULL-Gerät umleiten?

      Geht bestimmt, die Syntax hab ich aber nicht im Kopf. Irgendwas ähnlich zu 1&>2 > /dev/null `

      Das Funktioniert. Habe die zweite Datei geändert:

      #!/bin/bash
      anzeige="\r\n\r\n+++++++++++++++++++++++\r\nSystemdata2iobroker gestartet\r\nDatenübermittlung per SimpleAPI-Schnittstelle alle 20s...\r\n"
      echo -e $anzeige
      while true; do ./systemdata2iobroker.sh >/dev/null 2>&1; sleep 20; done
      
      

      Autostart tbd

      Gruß

      Pix

      1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators last edited by

        Hallo pix,

        danke für diese Lösung. Werde ich bald testen.

        Da bist du mir aber zuvor gekommen 😉

        ich wolle die nächsten Tage so etwas über mqtt ausprobieren, muss mich aber in dieses Thema noch weiter einarbeiten, da ich damit auch erst seit ein paar Tagen kämpfe.

        Gruß

        Rainer

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

          Hallo Rainer,

          das Projekt war eine logische Konsequenz: Der Bedarf war da, da ich ständig im Terminal die Temperatur des Odroid prüfe (er ist in einem Regal hinter Büchern verbaut). Die Lösung auch: Ich habe mich gerade mit SimpleAPI beschäftigt und curl kannte ich noch von der CCU1.

          Da ich selbst Neuling in Linux bin, habe ich mal einfach alle Schritte möglichst genau aufgeschrieben. So kann ich es auch selbst nachvollziehen.

          Die nächsten Schritte sind die Übertragung des LOAD, evtl. Speicherplatz, etc.. https://github.com/ioBroker/ioBroker.simple-api#usage biete ja dafür den setBulk-Befehl.

          Die gesamte Aufarbeitung der Rohdaten (Temperaturwert zB 45000 statt 45°C) mache ich lieber in ioBroker Javascript. Da kenne ich mich besser aus.

          Ein mqtt Tutorial für Einsteiger fänd ich übrigens super.

          Gruß

          Pix

          1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators last edited by

            @pix:

            das Projekt war eine logische Konsequenz: Der Bedarf war da `
            und das schon länger. Deswegen war ich ja dran.

            @pix:

            Ein mqtt Tutorial für Einsteiger fänd ich übrigens super. `
            erst mal die Doku für den Adapter.

            Dan war ich wegen der inzwischen wachsenden Userzahl, die nicht von HM kommen, auf der Suche nach einem Einsteigertutorial für non-HM User. Und da musste ich mit ohne Programmierkenntnissen etwas finden, was ich auch testen und dokumentieren kann.

            Da kommen die Arduino/WeMos User oder andererseits ggf. die Broadlink-Teile für eine größere Anzahl Usern in Betracht. Im Hinterkopf hatte ich auch die noch fehlenden Adapterdokus (und die bezahlbare Anschaffung der notwendigen Hardware; mein Goldesel hat schon einen Krampf)

            Und die Auswertung von Hardwaredaten externer Systeme war immer ein Thema im Forum.

            In meiner Naivität denke ich, dass mit mosquitto auf dem SBC und dem MQTT-Adapter auch einiges machbar sein könnte. Ist bei mir aber alles Try and Error bis etwas bei rauskommt.

            Dafür kann ich dann wieder die Probleme von Einsteigern aus erster Hand nachvollziehen 😉

            Gruß

            Rainer

            1 Reply Last reply Reply Quote 0
            • S
              sveni_lee last edited by

              hallo pix,

              der Tread ist zwar schon etwas älter aber ich habe ich habe mal eine grundstzliche Frage zu deinem Skript.

              Ich habe hier 3 OrangePi zero im Einsatz die unterschiedlichste aufgaben erledigen.

              Da sie Opi zero zu schwach auf der Brust sind 256Mb Ram kann darauf kein iobroker installiert werden.

              Wenn ich das richtig verszanden habe, kann ichmit dem Skript die Temperatur und CPU Load auslesen und per simple API an iobroker senden.

              können damit auch andere Werte übermittelt werden? Ich habe einenn Opi der die Zählerstände mitteld s0-Impulsgeber ausliest und in eine Datei schreibt. Es ist ein einfacher counter der bei jeder Umdrehung der Ferrisscheibe um 1 hochzählt.

              kann ich den Wert der Datei auf dem selben wege an ibroker übertragen?

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

                Hallo,

                besser spät als nie :lol:

                Ja, das geht. Wenn du per CLI den Wert aufrufen kannst, dann kannst du die Ausgabe ja auch umleiten.

                Gruß

                Pix

                1 Reply Last reply Reply Quote 0
                • S
                  sveni_lee last edited by

                  danke…

                  ich nutze das ganze schon sehr exessiv... 😄

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

                    Hallo,

                    vielleicht kannst du mir da helfen, den freien Speicher an sda2 eines Odroid (ohne ioBroker) an ioBroker zu senden.

                    Temperaturwerte und Zahl der Kerne (ich weiß, nicht os wichtig) werden alle 20s übertragen.

                    Last und df werden leider nicht übertragen.

                    #!/bin/bash
                    titel="\r\n+++++++++++++++++++++++\r\nSystemdata2iobroker gestartet\r\nDatenübermittlung per SimpleAPI-Schnittstelle alle 20s..."
                    echo -e $titel
                    while true; 
                    do
                    TEMP=$(cat /sys/class/thermal/thermal_zone0/temp)
                    CORES=$(cat /proc/cpuinfo | grep processor | wc -l)
                    #LOADS=$(cat /proc/loadavg)
                    #SPACES=$(df -h /dev/sda2)
                    
                    curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Temperatur_input?value={$TEMP} >/dev/null 2>&1; 
                    sleep 3
                    curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Cores_input?value={$CORES} >/dev/null 2>&1; 
                    sleep 3
                    #curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Load_input?value={$LOADS}
                    #sleep 3
                    #curl http://IP:PORT/set/javascript.1.Systeminfos.Xeoma.Server.1.Sda2_input?value={$SPACES}
                    #sleep 3
                    
                    sleep 20; 
                    done
                    
                    

                    Gruß

                    Pix

                    1 Reply Last reply Reply Quote 0
                    • 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

                                        498
                                        Online

                                        31.9k
                                        Users

                                        80.2k
                                        Topics

                                        1.3m
                                        Posts

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