Hallo zusammen,
ich möchte die Temperatur, die CPU Last und den Speicher aus dem Pihole Status (oben links auf der Startseite) mit HTTPMOD auslesen.
Leider tue ich mich damit schwer und habe es noch nicht geschafft.
Vielleicht kann mir jemand freundlicherweise unter die Arme greifen?
Pihole läuft auf einem eigenen Raspi...
Danke im voraus.
Auf dem neuen Admin-Panel werden ohne Login diese Daten gar nicht mehr angezeigt, oder irre ich? Version hier ist:
Pi-hole v5.13
FTL v5.18.2
Web Interface v5.16
Dabei greift PiHole selbst auch nur
vcgencmd measure_temp
ab.
Du könntest alternativ SYSMON (https://wiki.fhem.de/wiki/SYSMON) nutzen - oder die Daten zB per MQTT an FHEM senden (so mach' ich es zB für die Parameter, die mich interessieren).
Vielen Dank für die Antwort.
Meine Version mit Daten ist
Pi-hole v5.6
FTL v5.11
Web Interface v5.8.
Wie wäre der Weg mit MQTT?
Ich dachte dass es relativ einfach mit HTTPMOD gehen könnte, komme dort aber nicht weiter.
Grüße
Hallo,
hast Du Dir das schon einmal angesehen: https://forum.fhem.de/index.php?topic=84031.0
Grüße Jörg
Zitat von: JoWiemann am 17 Oktober 2022, 14:05:05hast Du Dir das schon einmal angesehen: https://forum.fhem.de/index.php?topic=84031.0
Die API bietet keine Temperatur imho.
Zitat von: Mad am 17 Oktober 2022, 13:59:31Pi-hole v5.6
FTL v5.11
Web Interface v5.8.
Was spricht gegen ein Update auf die neuste Version?
Zitat von: Mad am 17 Oktober 2022, 13:59:31Wie wäre der Weg mit MQTT?
Du brauchts im Prinzip einen MQTT Broker bzw Server, ich nutze dafür den in FHEM integrierten MQTT2_SERVER (https://fhem.de/commandref.html#MQTT2_SERVER).
Auf dem Raspi installierst du mosquitto-clients
sudo apt update && sudo apt install mosquitto-clients
um mit
mosquitto_pub topics an den MQTT Server (FHEM) zu senden. Ich nutze dafür ein Script, welches mir einige Systemvariablen ausliest und dann als Json-String an FHEM sendet. Scipt-Code:
#!/bin/bash
mqtt_host="192.168.181.17" #<- MQTT server (FHEM)
mqtt_port="1883"
mqtt_user="MQTTClient"
mqtt_pass="ClientPassword"
mqtt_clientid="raspi3pihole"
mqtt_topicid="pihole"
jsontxt='{'
#date date +%FT%T
jsontxt+='"time":"'
jsontxt+=$(date +%FT%T)
jsontxt+='",'
#host name
jsontxt+='"hostname":"'
jsontxt+=$(hostname)
jsontxt+='",'
#kernel version
jsontxt+='"kernel_version":"'
jsontxt+=$(uname -r)
jsontxt+='",'
#uptime -p
jsontxt+='"uptime_p":"'
jsontxt+=$(uptime -p)
jsontxt+='",'
#loadavg
jsontxt+='"loadavg":"'
jsontxt+=$(cat /proc/loadavg)
jsontxt+='",'
#ip address
jsontxt+='"IPAddress":"'
jsontxt+=$(hostname -I)
jsontxt+='",'
#cpu temp
jsontxt+='"cputemp":"'
jsontxt+=$(vcgencmd measure_temp | egrep -o '[0-9]*\.[0-9]*')
jsontxt+='",'
#eth 0 stats
jsontxt+='"eth0_rx_bytes":"'
jsontxt+=$(cat /sys/class/net/eth0/statistics/rx_bytes)
jsontxt+='",'
#eth 0 stats
jsontxt+='"eth0_tx_bytes":"'
jsontxt+=$(cat /sys/class/net/eth0/statistics/tx_bytes)
jsontxt+='",'
#lighttpd state
jsontxt+='"state_lighttpd":"'
jsontxt+=$(systemctl status lighttpd | egrep Active)
jsontxt+='",'
jsontxt+='}'
#printf "$jsontxt"
mosquitto_pub -h $mqtt_host -p $mqtt_port -u $mqtt_user -P $mqtt_pass -i $mqtt_clientid -t tele/$mqtt_topicid/sysstat -m "$jsontxt"
gespeichert unter
/usr/local/bin/raspi_mqtt_pub und wird über cron alle 5 Minuten aufgerufen.
clientid und
topicid benötige ich für den FHEM Server, um das Device zuordnen zu können.
Das dazugehörige FHEM MQTT2_Device (https://fhem.de/commandref.html#MQTT2_DEVICE) ist (der MQTT Broker heisst hier schlicht
MQTT2_FHEM_Server):
defmod MQTT2_raspi3pihole MQTT2_DEVICE raspi3pihole
attr MQTT2_raspi3pihole IODev MQTT2_FHEM_Server
attr MQTT2_raspi3pihole alias raspi_pihole
attr MQTT2_raspi3pihole event-on-change-reading cputemp
attr MQTT2_raspi3pihole group RPi
attr MQTT2_raspi3pihole icon RPi
attr MQTT2_raspi3pihole readingList raspi3pihole:tele/pihole/sysstat:.* { json2nameValue($EVENT) }
attr MQTT2_raspi3pihole room MQTT2
attr MQTT2_raspi3pihole stateFormat { my $ret = "<div style=\"text-align:left;;\"><font style=\"color:";;\
if(ReadingsNum($name,"cputemp",0) < 55.0) {\
$ret .= "limegreen";;\
} elsif (ReadingsNum($name,"cputemp",0) < 65.0) {\
$ret .= "yellow";;\
} else {\
$ret .= "red";;\
}\
$ret .= ";;font-weight:bold;;\">".ReadingsVal($name,"cputemp","")." ;°;C</font><br />";;\
my $down = ReadingsNum($name,"eth0_rx_bytes","")/(1024*1024);;\
if($down > 1000) {\
$down = $down / 1024;;\
$ret .= "Down: ".sprintf("%.2f", $down)." ;GB ;";;\
} else {\
$ret .= "Down: ".sprintf("%.1f", $down)." ;MB ;";;\
}\
my $up = ReadingsNum($name,"eth0_tx_bytes","")/(1024*1024);;\
if($up > 1000) {\
$up = $up / 1024;;\
$ret .= "Up: ".sprintf("%.2f", $up)." ;GB<br />";;\
} else {\
$ret .= "Up: ".sprintf("%.1f", $up)." ;MB<br />";;\
}\
$ret .= "Load: ".ReadingsVal($name,"loadavg","")."<br />";;\
$ret .= "Kernel: ".ReadingsVal($name,"kernel_version","")."<br />";;\
$ret .= "<font style=\"color: ";;\
if(ReadingsVal($name,"state_lighttpd","") =~ m/ active/) {\
$ret .= "limegreen;;\">";;\
} else {\
$ret .= "red;;\">";;\
}\
$ret .= "Lighttpd</font> ; ; ;";;\
$ret .= "(Updated: ".ReadingsTimestamp($name,"cputemp","2000-01-01 00:00:00").")";;\
$ret .= "</div>";;\
return $ret;;\
}
Geht bestimmt insgesamt eleganter, aber mir genügt es mit meinen begrenzten Fähigkeiten. ;)
Zitat von: Mad am 17 Oktober 2022, 13:59:31Ich dachte dass es relativ einfach mit HTTPMOD gehen könnte, komme dort aber nicht weiter.
Dafür gibt es sicher eine Lösung - allerdings wird diese wohl nicht ein update des WebInterfaces überleben.
Anstatt MQTT (Muß ich mir wirklich mal selber ansehen) geht auch Telnet/Web ..... gibt einige Beispiele und Scripte im Forum dazu.
Gehen eben viele Wege "nach Rom" ... äähh .. "der Daten zu FHEM"
Danke für den Input. Werde zunächst eine update durchführen und mir dann mal den Tipp mit Telnet anschauen.
Es laufen noch ein paar andere Instanzen auf dem Raspi. Das ganze als Container mit Docker / Portainer.
Und Du willst quasi nicht die Temperatur "aus dem Netz" sondern vom Host wissen?
Dann würde ich ssh empfehlen, diesen Weg wirst Du eventuell auch für andere Dinge brauchen die aus docker heraus nicht simpel funktionieren.
https://heinz-otto.blogspot.com/2022/04/andocken-dinge-die-man-auerhalb-docker.html
Gruß Otto
Danke... Puh. Das ist dann alles doch aufwendiger als ich dachte :o