Temperatur aus Pihole über Httpmod auslesen

Begonnen von Mad, 16 Oktober 2022, 21:29:04

Vorheriges Thema - Nächstes Thema

Mad

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.

yersinia

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 nutzen - oder die Daten zB per MQTT an FHEM senden (so mach' ich es zB für die Parameter, die mich interessieren).
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Mad

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

JoWiemann

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

yersinia

#4
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.
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 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","")."&nbsp;;&deg;;C</font><br />";;\
my $down = ReadingsNum($name,"eth0_rx_bytes","")/(1024*1024);;\
if($down > 1000) {\
$down = $down / 1024;;\
$ret .= "Down: ".sprintf("%.2f", $down)."&nbsp;;GB&nbsp;;";;\
} else {\
$ret .= "Down: ".sprintf("%.1f", $down)."&nbsp;;MB&nbsp;;";;\
}\
my $up = ReadingsNum($name,"eth0_tx_bytes","")/(1024*1024);;\
if($up > 1000) {\
$up = $up / 1024;;\
$ret .= "Up: ".sprintf("%.2f", $up)."&nbsp;;GB<br />";;\
} else {\
$ret .= "Up: ".sprintf("%.1f", $up)."&nbsp;;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>&nbsp;;&nbsp;;&nbsp;;";;\
$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.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Wernieman

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"
- 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

Mad

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.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mad

Danke... Puh. Das ist dann alles doch aufwendiger als ich dachte  :o