Autor Thema: Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)  (Gelesen 468358 mal)

Offline frober

  • Sr. Member
  • ****
  • Beiträge: 905
  • Was man nicht kann, kann man lernen...
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1710 am: 30 August 2021, 16:24:08 »
Ungetestet, dafür muss auch Fhem mit sudo iwconfig ausführen dürfen.
Bin mir nicht sicher, ob so das Ergebniss in die Variable geschrieben wird.

defmod <Name> at +00:05 {my $ssid = system ("sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\"); fhem("setreading <Device> <Reading> $ssid");}

Alle <> musst du durch deine Namen ersetzen!
Raspi 3b mit Raspbian Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1711 am: 30 August 2021, 17:22:22 »
Danke @ frober

Ungetestet, dafür muss auch Fhem mit sudo iwconfig ausführen dürfen.
Bin mir nicht sicher, ob so das Ergebniss in die Variable geschrieben wird.

defmod <Name> at +00:05 {my $ssid = system ("sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\"); fhem("setreading <Device> <Reading> $ssid");}



Ich glaube ich habe das so ähnlich schon probiert, $ssid wurde immer nur mit -1 beschrieben aber ich werde es nochmal probieren.
Die /sbin/iwconfig ist bereits in der sudoers.d/011_fhem-nopasswd eingetragen.  ;)

Ich werde es nacher nochmal probieren, feedback folgt.

MFG
Stephan

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 11305
  • NIVEAu ist keine Creme...
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1712 am: 30 August 2021, 17:56:06 »
system( ) liefert immer nur -1 zurück.

Wenn man die Rückgabewerte will, dann qx( ) verwenden...

Anmerkung: Aufrufe in der Art blockieren...
(wenn sie immer "schnell" sind, kein Problem, wollte es nur anmerken)

Alternative: Script das zyklisch "gerufen" wird und die Werte per http(s), telnet, ... an fhem "schickt"...

Gruß, Joachim
FHEM PI3B+ Buster: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)
FHEM PI3 RaspiOS (Test)
Zustimmung Zustimmung x 1 Liste anzeigen

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1713 am: 30 August 2021, 18:21:04 »
Danke @MadMax-FHEM


Alternative: Script das zyklisch "gerufen" wird und die Werte per http(s), telnet, ... an fhem "schickt"...

Hört sich sehr interessant an, ich habe nur kein plan wie ich das mit http(s); telnet machen soll.
Die Variablen hätte ich schon in einem Skript weil ich sie ja von da in Dateien schiebe.
Hat jemand einen Tip wo ich das weiter  nachlesen kann.

MFG
Stephan

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1714 am: 30 August 2021, 19:46:47 »
Also

Der Vorschlag von frober:
+*00:00:15 {my $wert= system("sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\"");
fhem("set test2 $wert")}
ergibt einen Syntaxfehler wegen den " (doppeltes Hochkomma) aber halb so wild ich hab die Syntax auch nicht im Kopf (sonst müsste ich nicht fragen  ;))

Diese Zeilen liefern den Rückgabewert -1
+*00:00:15 {my $wert= system('sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\"');
fhem("set test2 $wert")}

Und der Vorschlag von MadMax-FHEM (den ich glaube ich falsch verstanden habe) wird gar nicht erst als Funktion erkannt bzw. führt zu einem Logeintrag.
"2021.08.30 19:24:15 3: set test2  : no set value specified" weil $wert nichts zugewiesen bekommt.
+*00:00:15 {my $wert= qx('sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\"');
fhem("set test2 $wert")}

Frage  an MadMax-FHEM habe ich deine Aussage falsch verstanden?
Wenn man die Rückgabewerte will, dann qx( ) verwenden...

MFG
Stephan

Offline frober

  • Sr. Member
  • ****
  • Beiträge: 905
  • Was man nicht kann, kann man lernen...
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1715 am: 30 August 2021, 20:08:40 »
+*00:00:15 {my $wert= system qx(sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\"); fhem("set test2 $wert")}
Raspi 3b mit Raspbian Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 11305
  • NIVEAu ist keine Creme...
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1716 am: 30 August 2021, 20:09:06 »
Bei qx keine Hochkomma etc. siehe (auch): https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html

EDIT: frober war schneller ;) Äh, gehört das "system" nicht weg? qx sollte doch reichen!?

Bzgl. eines Scriptes kann ich mal schauen, evtl. so:

#!/bin/bash

# get GPU (not used yet) and CPU temperature
# GPUTemp=$(vcgencmd measure_temp)
CPUTemp=$(ssh pi@192.168.1.90 "cat /sys/class/thermal/thermal_zone0/temp")
CPUTemp=$((CPUTemp/1000))
CPUTemp=$(printf '%.2f' "$CPUTemp")

VCGENCMD=$(ssh pi@192.168.1.90 "sudo vcgencmd get_throttled" 2> /dev/null)

# set uptime and CPU temperature
/usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading piHUE cpu_temp $CPUTemp"
/usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading piHUE vcgencmd $VCGENCMD"

EDIT: Anmerkung zum Script: ich rufe die Befehle "remote" per ssh auf, nicht "verwirren" lassen ;) In fhem muss halt ein Device (z.B. dummy / EDIT: muss nat. kein dummy sein, kann auch ein bereits vorhandenes Device sein ;)  ) vorhanden sein, in meinem Fall mit Namen "piHUE". Dort werden dann eben die Readings "cpu_temp" und "vcgencmd" gesetzt. Musst du halt anpassen...

Aufgerufen dann z.B. mit einem at:
define atSysStats at +*00:05:00 "/opt/fhem/scripts/sysstats.sh"

EDIT: per cron etc. geht nat auch...

Script halt mit deinem/deinen Befehlen anpassen und z.B. als /opt/fhem/scripts/sysstats.sh abspeichern und ausführbar machen.
User fhem muss die Rechte haben (also fhem:dialout) und fhem muss auch (mindestens) die im Script genutzen sudo-Befehle OHNE PW dürfen...

Gruß, Joachim
« Letzte Änderung: 30 August 2021, 20:13:46 von MadMax-FHEM »
FHEM PI3B+ Buster: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)
FHEM PI3 RaspiOS (Test)

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1717 am: 30 August 2021, 20:42:12 »
Hi,
erst nochmal ein großes Danke an frober und MadMax-FHEM bei soviel Support macht es richtig Spaß!

Irgend etwas stimmt da aber an meiner Syntax nicht.
Wenn ich:qx(sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\") schreibe dann bekomme ich nichts zurück geliefert und wieder den Logeintrag "3: set test2  : no set value specified"

Wenn ich aber qx(cat /opt/fhem/serial.txt)dann bekomme ich den Inhalt der Datei angezeigt.
Könnte es vieleicht sein das ih die Sonderzeichen alle escapen muss?

Zum Skript von MadMax-FHEM sehr interessant "damit komme ich klar" entscheidend sind letztendlich nur die beiden letzten Zeilen.
Sieht das mit einem Passwort geschützten telnet port genauso aus? (locale Verwendung alles läuft auf einem PI)

Bzgl. eines Scriptes kann ich mal schauen, evtl. so:

#!/bin/bash

# get GPU (not used yet) and CPU temperature
# GPUTemp=$(vcgencmd measure_temp)
CPUTemp=$(ssh pi@192.168.1.90 "cat /sys/class/thermal/thermal_zone0/temp")
CPUTemp=$((CPUTemp/1000))
CPUTemp=$(printf '%.2f' "$CPUTemp")

VCGENCMD=$(ssh pi@192.168.1.90 "sudo vcgencmd get_throttled" 2> /dev/null)

# set uptime and CPU temperature
/usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading piHUE cpu_temp $CPUTemp"
/usr/bin/perl /opt/fhem/fhem.pl 7072 "setreading piHUE vcgencmd $VCGENCMD"

MFG
Stephan

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1718 am: 30 August 2021, 20:58:26 »
Ein Schritt weiter;

Wenn ich aber qx(cat /opt/fhem/serial.txt)schreibe dann bekomme ich den Inhalt der Datei angezeigt.
Könnte es vieleicht sein das ih die Sonderzeichen alle escapen muss?
Zitat

Ja alle vermeindlichen Sonderzeichen müssen escaped werden!!

Wenn man sudo iwconfig wlan0 | grep "ESSID"|\cut -f2 -d\"|cut -f1 -d\" haben möchte
muss manqx(sudo /sbin/iwconfig wlan0 | grep \"ESSID\"|\\cut -f2 -d\\\"|cut -f1 -d\\\")schreiben.

MFG
Stephan

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 11305
  • NIVEAu ist keine Creme...
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1719 am: 30 August 2021, 21:04:54 »
Ich bin nicht sicher, ob "Pipe" (also | ) in FHEMWeb funktioniert.
Bei "Doppel-Pipe" bin ich ziemlich sicher, dass das nicht so geht...
War erst grad in einem anderen Thread...

Gruß, Joachim
FHEM PI3B+ Buster: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)
FHEM PI3 RaspiOS (Test)

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1720 am: 30 August 2021, 21:28:02 »
@MadMax-FHEM


Ich bin nicht sicher, ob "Pipe" (also | ) in FHEMWeb funktioniert.
Bei "Doppel-Pipe" bin ich ziemlich sicher, dass das nicht so geht...
War erst grad in einem anderen Thread...

Gruß, Joachim

Die Pipe = | funktioniert
Folgende Readings funktionieren einwandfrei.

+*00:00:15 {my $wert= qx(sudo /sbin/iwconfig wlan0 | grep \"ESSID\"|\\cut -f2 -d\\\"|cut -f1 -d\\\");
fhem("setreading Netinfo wlan0_akt_ESSID $wert");
;
$wert= qx(sudo /sbin/iwconfig wlan0 | grep \"Bit R\"|\\cut -f2 -d\\=|cut -d\" \" -f1,2);
fhem("setreading Netinfo wlan0_bit_rate $wert");
;
$wert= qx(sudo /sbin/iwconfig wlan0 | grep \"Link Q\"|\\cut -f2 -d\\=|cut -d\" \" -f1,2);
fhem("setreading Netinfo wlan0_link_quality $wert");
;
$wert= qx(sudo /sbin/iwconfig wlan0 | grep \"Signal l\"|\\cut -d\\=  -f3);
fhem("setreading Netinfo wlan0_signal_level $wert")}

nochmals vielen Dank an MadMax-FHEM und frober.

MFG
Stephan
Zustimmung Zustimmung x 1 Liste anzeigen

Offline frober

  • Sr. Member
  • ****
  • Beiträge: 905
  • Was man nicht kann, kann man lernen...
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1721 am: 30 August 2021, 21:41:51 »
Kleine Verbesserung, ich hoffe dass ich keinen c&p Fehler habe.
Damit wechselst du nicht dauernd zw den Systemen.

+*00:00:15 {my $wert= qx(sudo /sbin/iwconfig wlan0 | grep \"ESSID\"|\\cut -f2 -d\\\"|cut -f1 -d\\\");
$wert1= qx(sudo /sbin/iwconfig wlan0 | grep \"Bit R\"|\\cut -f2 -d\\=|cut -d\" \" -f1,2);
$wert2= qx(sudo /sbin/iwconfig wlan0 | grep \"Link Q\"|\\cut -f2 -d\\=|cut -d\" \" -f1,2);
$wert3= qx(sudo /sbin/iwconfig wlan0 | grep \"Signal l\"|\\cut -d\\=  -f3);

fhem("setreading Netinfo wlan0_akt_ESSID $wert;
setreading Netinfo wlan0_bit_rate $wert1;
setreading Netinfo wlan0_link_quality $wert2;
setreading Netinfo wlan0_signal_level $wert3")}
Raspi 3b mit Raspbian Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...

Offline SKg

  • Full Member
  • ***
  • Beiträge: 114
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1722 am: 30 August 2021, 21:57:23 »
@frober

fehlen in deinem Code nicht die Definitionen bzw. Deklaration my $wert1, $wert2, $wert3 ?

Hmm ist das denn so dramatisch das ich die Systeme wechsle bzw. sind das nicht alle Perl befehle?
So aus dem Bauch raus würd ich sagen, mein code erzeugt mehr CPU last, und dein code benötigt mehr Arbeitsspeicher oder bin ich da auf dem Holzweg?   

MFG
Stephan

Offline frober

  • Sr. Member
  • ****
  • Beiträge: 905
  • Was man nicht kann, kann man lernen...
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1723 am: 30 August 2021, 22:27:57 »
@frober

fehlen in deinem Code nicht die Definitionen bzw. Deklaration my $wert1, $wert2, $wert3 ?

Hmm ist das denn so dramatisch das ich die Systeme wechsle bzw. sind das nicht alle Perl befehle?
So aus dem Bauch raus würd ich sagen, mein code erzeugt mehr CPU last, und dein code benötigt mehr Arbeitsspeicher oder bin ich da auf dem Holzweg?   

MFG
Stephan

Sorry, das my fehlt, hast Recht.
Fhem ist zwar ein Perlbefehl, der übergibt aber  einen Befehl an Fhem. Somit wechselst du immer hin und her. Mit der qx ist es ähnlich.

Dramatisch ist es nicht, es wird nicht gerne gesehen ;)

+*00:00:15 {my $wert= qx(sudo /sbin/iwconfig wlan0 | grep \"ESSID\"|\\cut -f2 -d\\\"|cut -f1 -d\\\");
my $wert1= qx(sudo /sbin/iwconfig wlan0 | grep \"Bit R\"|\\cut -f2 -d\\=|cut -d\" \" -f1,2);
my $wert2= qx(sudo /sbin/iwconfig wlan0 | grep \"Link Q\"|\\cut -f2 -d\\=|cut -d\" \" -f1,2);
my $wert3= qx(sudo /sbin/iwconfig wlan0 | grep \"Signal l\"|\\cut -d\\=  -f3);

fhem("setreading Netinfo wlan0_akt_ESSID $wert;
setreading Netinfo wlan0_bit_rate $wert1;
setreading Netinfo wlan0_link_quality $wert2;
setreading Netinfo wlan0_signal_level $wert3")}
« Letzte Änderung: 30 August 2021, 22:30:58 von frober »
Raspi 3b mit Raspbian Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...

Online Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7738
Antw:Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)
« Antwort #1724 am: 31 August 2021, 10:16:33 »
Kannst Du die Werte nicht einmal einlesen und dann in Perl auseinandernehmen? So sparst Du die 3x den externen iwconfig Aufruf ....
« Letzte Änderung: 31 August 2021, 15:08:55 von Wernieman »
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html