Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)

Begonnen von hexenmeister, 06 Dezember 2013, 17:44:38

Vorheriges Thema - Nächstes Thema

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");}


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

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

SKg

Danke @ frober

Zitat von: frober 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");}




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

MadMax-FHEM

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+ Bullseye: 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)

SKg

Danke @MadMax-FHEM

Zitat von: MadMax-FHEM am 30 August 2021, 17:56:06

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

SKg

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?
Zitat von: MadMax-FHEM am 30 August 2021, 17:56:06
Wenn man die Rückgabewerte will, dann qx( ) verwenden...

MFG
Stephan

frober

+*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 Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

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

MadMax-FHEM

#1716
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
FHEM PI3B+ Bullseye: 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)

SKg

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)
Zitat von: MadMax-FHEM am 30 August 2021, 20:09:06

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

SKg

Ein Schritt weiter;

Zitat von: SKg am 30 August 2021, 20:42:12
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

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
FHEM PI3B+ Bullseye: 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)

SKg

@MadMax-FHEM


Zitat von: MadMax-FHEM 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

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

frober

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 Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

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

SKg

@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

frober

#1723
Zitat von: SKg 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

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")}
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

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

Wernieman

#1724
Kannst Du die Werte nicht einmal einlesen und dann in Perl auseinandernehmen? So sparst Du die 3x den externen iwconfig Aufruf ....
- 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