Hallo,
Bin noch ziemlicher Anfänger, habe bis jetzt nur einen Stromzähler mit Modbus und einen über S0 eingebunden.
Habe nun zwei Ethernet Temperatur Fühler bei welchen der wert nur via SNMP gepollt werden kann, oder direkt am eingebauten Webserver abgelesen werden kann.
Gibt es nicht eine einfache Möglichkeit eine einzige OID zu pollen und den Wert dann anzuzeigen, bzw. auch zu loggen?
Habe jetzt schon viel gesucht und einiges gelesen, aber bis jetzt nur Systat und Presence, als Modul gefunden welche SNMP nutzen.
Ich brächte wie gesagt nur einen einzigen Wert einer OID.
Eventuell müsste ich diesen für die Verarbeitung noch anpassen; bekomme entweder als Str "21,5" oder als Int "215" für 25,5°C.
Wäre super wenn sich das über SNMP lösen lässt, ansonsten werde ich die Werte wohl mit Httpmod abfragen müssen.
Danke,
Crispyduck
Ein at mit Funktionsaufruf einer sub in der myUtils. Diese sollte sowas enthalten:
$result=qx(snmpget -v 1 -c private 192.168.XX.XX iso.3.6.1.2.1.105.1.1.1.3.1.54 i 1)
Dann das Ergebnis in einen dummy schreiben und loggen. Voraussetzung ist, dass Net-Snmp auch installiert ist.
Okay, danke erstmals.
Muss mich wohl noch etwas einlesen wie das in der myUtils aussieht und wie ich das dann in ein dummy bekomme.
Hab jetzt gerade mal 3 Tage FHEM laufen, und alles mal auf einer Synology DS215j zum laufen zu bringen war nicht so einfach. Vorallem Device::SerialPort auf der NAS zum laufen zu bringen war echt eine Spielerei.
Lg,
Andi
Hi,
zum Auslesen der Werte aus dem Webserver könntest Du Dir mal HTTPMOD anschauen.
Gruß, Uli
Hi,
ja HTTPMOD hab ich mir schon angesehen, und werde ich sicher auch noch benutzen, aber hier würde ich doch gerne SNMP nutzen, weil es wie ich finde für diese Anwendung doch irgendwie sauberer ist.
THX,
Andi
Hallo,
okay, bin mal etwas schlauer, aber funktionieren tut es leider auch noch nicht.
erstens einmal hab ich probleme snmpget via FHEM zu sterten:
PERL WARNING: Can't exec "snmpget": No such file or directory at /usr/local/FHEM/share/fhem/FHEM/99_myUtils.pm line 23
Via commandline geht die Abfrage ohne Probleme:
nynasxxx> snmpget -v 1 -c public 10.0.0.41 iso.3.6.1.4.1.21795.4.1.3.1.4.1
SNMPv2-SMI::enterprises.21795.4.1.3.1.4.1 = STRING: "22.0"
Hab nun auch ein dummy angelegt (Temp1), allerdings bin ich mir noch nicht sicher wie ich den return Wert der Funktion korrekt in das dummy schreibe.
define Temp1job at +*00:01:00 {fhem("set Temp1 { snmpTemp("10.0.0.41") }");;}
oder
define Temp1job at +*00:01:00 {my $val = { snmpTemp("10.0.0.41") };;fhem("set Temp11 $val");;}
oder
muss ich das direkt in der funkton machen?
Meine myUtils:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
sub snmpTemp($) {
my ($ip) = @_;
my $result;
$result=qx(snmpget -v 1 -c public $ip iso.3.6.1.4.1.21796.4.1.3.1.4.1);
return $result;
}
1;
Bin für jeden Tip dankbar. ;-)
PS: Ach ja; net-snmp hab ic via IPKG auf der NA installiert, da cpan leider nicht richtig funktioniert. Kann es sein das daher PERL nicht auf snmpget zugreifen kann?
Lg,
Andi
Was spricht eigentlich dagegen, das SYSSTAT-Modul zu nutzen, um die SNMP-Sachen zu holen?
Bitte verwende Code Tags. Es ist extrem anstrengend, das so zu lesen.
Code für DEF im Frontend:
+*00:01:00 {my $val = snmpTemp("10.0.0.41");fhem("set HWgSTE1 $val")}
Code für myUtils:
sub snmpTemp($) {
my ($ip) = @_;
my $send="snmpget -v 1 -c public $ip iso.3.6.1.4.1.21796.4.1.3.1.4.1";
my $result;
$result=qx($send);
return $result;
}
Ungetestet.
THX,
Ja, sorry ist wirklich sch... zu lesen.
Muss nun erst mal snmpget via PERL zum laufen bringen.
Lg,
Andi
So wie ich es gepostet habe, müsste es gehen (ungetestet). Die Variable kann man nicht so einfügen, wie du es oben gemacht hast. Sonst schau mal ins Log.
Hi, danke.
Das define dürfte noch nicht ganz passen; aber vorerst bekomme ich auch mit der myUtils Funktion von dir den Fehler:
2016.01.23 19:56:12 1: PERL WARNING: Can't exec "snmpget": No such file or directory at /usr/local/FHEM/share/fhem/FHEM/99_myUtils.pm line 24.
Lg,
Andi
Ok, scheint doch das das Perl NET::SNMP modul nicht richtig intalliert ist.
Hab jetzt am Anfang meiner myUtils Funktion use Net::SNMP; hinzugefügt, was zu folgendem Fehler führte:
Can't locate Net/SNMP.pm in @INC (you may need to install the Net::SNMP module) (@INC contains: /usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl . /usr/local/FHEM/share/fhem/FHEM) at /usr/local/FHEM/share/fhem/FHEM/99_myUtils.pm line 21. BEGIN failed--compilation aborted at /usr/local/FHEM/share/fhem/FHEM/99_myUtils.pm line 21.
Rest dürfte funktionieren; hab snmpget mal durch einem anderen befehl ersetzt und da funktioniert es.
Define siehrt jetzt so aus:
define Temp11job at +*00:01:00 {my $var = snmpTemp("10.0.0.41");;fhem ("set Temp1 $var" );;}
Werde morgen oder nächste Woche mal propieren net-snmp mit make und ./configure --with-perl-modules zu installieren.
Anscheinend fehlt bei der über IPKG installierten Version das Perl Modul.
Lg,
Andi
Okay, das war der falsche Ansatz, hatte noch etwas zu wenig Ahnung von Perl. :P
Das problem lag eher daren das FHEM snmpget nicht gefunden hat; lösung war ganz simpel, einfach fhem.sh um "USBU=/opt/bin" ergänzen:
#!/bin/sh
#
#
HOME=/usr/local/FHEM
PERL=/usr/local/perl
USBU=/opt/bin
KMOD=/var/packages/usb-driver-kernel
PATH=$HOME:$PERL:$USBU:$PATH
export PATH
und die Funktion in der myUtils.pm funktioniert eigentlich auch so wie schon von marvin78 vorgeschlagen:
sub snmpTemp($) {
my ($ip) = @_;
my $result=qx(snmpget -v 1 -c public $ip iso.3.6.1.4.1.21796.4.1.3.1.4.1);
return $result;
}
Funktioniert soweit nun mal mit aufruf von snmpget.
Da ich nun aber auch das perl modul Net::SNMP zum laufen gebracht habe bin ich noch am überlegen ob ich die Funktion nicht noch umschreibe und den wert direkt mit perl abfrage ohne snmpget aufzurufen.
Lg,
Andi
schau dir doch mal das SYSSTAT modul und die aktuelle test version hier: http://forum.fhem.de/index.php/topic,42771.msg348498.html#msg348498 (http://forum.fhem.de/index.php/topic,42771.msg348498.html#msg348498) an.
damit kannst du snmp abfragen direkt in readings verwandeln. in der test version auch komplett non blockiging.
gruss
andre
Danke!
ja, werde es über SYSSTAT lösen, will damit ohnehin noch meien NAS selbst so wie auch meinen zweiten FHEM Server im Heizraum welcher, wenn dann endlich das Optolink Kabel da ist mit der Vissmann Vitotronic sprechen soll.
Vor hätte ich da noch einiges, hoffe nur das mich die Motivation nicht wieder verlässt. ;)
Lg,
Andi
Hallo,
die abfrage mittels SYSSTAT funktioniert nun mal. Da der Sensor kein SSH sondern nur SNMP spricht musste ich noSSH auf 1 setzen.
Das problem ist nun allerdings das nicht automatisch im Intervall abgefragt wird, sondern nur wenn ich "get Temp1 update" ausführe.
meine config:
define Temp1 SYSSTAT 60 120 10.0.0.41
attr Temp1 mibs .1.3.6.1.4.1.21796.4.1.3.1.4.1:Temp
attr Temp1 noSSH 1
attr Temp1 snmp 1
Könnte jetzt natürlich noch "get Temp1 update" in einem Job jede Minute oder was auch immer aufrufen, aber sollte dies nicht direkt mit dem SYSSTAT modul funktionieren?
Readings bekomme ich wie folgt nach einem update:
Readings
Temp 22.7 2016-01-31 13:29:17
connection disconnected 2016-01-31 12:44:17
load 0 2016-01-31 13:29:17
state 2016-01-31 13:29:17
Frage mich hald auch noch ob das Sinn macht den Sensor über SYSSTAT abzufragen da ich ja wirklich nur die Temp verwerte.
Funktionieren tut es auf alle Fälle und ich bekomme es auch ganz leicht in ein Log und in einen Plot, nur hald noch ohne autoupdate.
Danke,
Andi
das automatisch update schein noch ein bug zu sein. wird demnächst repariert.
der haupt vorteil es über das (neue) sysstat modul zu machen ist das die snmp abfrage non-blocking im hintergrund passiert.
gruss
andre
Okay alles klar!
Danke für die spitzen Arbeit!!! :)
Hi Crispyduck....
Bin am genau gleichen Ort wie du.
Seit gestern mit FHEM am testen und habe einen messpc zuhause (Etherbox via LAN) angebunden die ich mittels SNMPv1 auslesen muss.
Werde mal probieren deine Erfahrungen mir zu nutze zu machen ;)
Ich bin aber ehrlich gesagt überrascht das SNMP in der FHEM Community nicht weiter verbreitet bzw. erprobter ist. (So ein uraltes nützliches Protokoll)...
grüsse mischu
Hi,
Ja, das SNMP nicht weiter verbreitet ist hat mich auch etwas gewundert.
Monitore beruflich fast alle Systeme via SNMP, angefangen bei Switchen, Blade Server, ESXi bis hin zum kompletten vCenter.
Mein System ist jetzt schon um eine Raspi die im Technikraum steht gund mittels Optolink Adapter mit der Vissmann Heizung spricht gewachsen.
Hab gestern noch die Raspi auf read only Filesystem umgestellt und die logs aufs tempfs verlegt.
Bin nun gerade am überlegen ob ich nicht alles auf die Raspi verlagere jedoch die NAS via NFS mounte und so nur die Logs auf die NAS schreibe.
Idee dahinter ist das die Raspi eigentlich viel performanter als die NAS ist und auf die NAS auch noch die Surveillance Station mit 3 Kameras kommt.
Die Zwei USB2Serial Adapter die an der NAS stecken würde ich dann per fhem2fhem oder überhaupt nur per ser2net ansprechen.
Mal sehen...
Lg,
Andi
Habe mein Teil mal hinzugefügt und kann die Werte mit dem Raspberry auch auslesen.
pi@raspberrypi:/ $ snmpget -v1 -c public 192.168.0.10 .1.3.6.1.4.1.14848.2.1.2.1.5.1
iso.3.6.1.4.1.14848.2.1.2.1.5.1 = INTEGER: 157
pi@raspberrypi:/ $ snmpget -v1 -c public 192.168.0.10 .1.3.6.1.4.1.14848.2.1.2.1.5.2
iso.3.6.1.4.1.14848.2.1.2.1.5.2 = INTEGER: 239
pi@raspberrypi:/ $ snmpwalk -v1 -c public 192.168.0.10 .1.3.6.1.4.1.14848.2.1.2.1.5.1
iso.3.6.1.4.1.14848.2.1.2.1.5.1 = INTEGER: 158
pi@raspberrypi:/ $ snmpwalk -v1 -c public 192.168.0.10 .1.3.6.1.4.1.14848.2.1.2.1.5.2
iso.3.6.1.4.1.14848.2.1.2.1.5.2 = INTEGER: 238
pi@raspberrypi:/ $
Funktioniert mit SNMPGET und SNMPWALK.
Der Wert gibt die Temperatur an als INT10. -> (Port1 15,8°C und auf Port 2 23,8°C)
Aber die im Wiki beschriebenen Attribute bei SYSSTAT sind bei mir im FHEM garnicht bekannt / vorhanden?
Kann es sein das das zu pollende Gerät auf einen SNMPWALK ohne spezifische OID Angabe die ganzen Werte ausspucken kann damit es überhaupt als SNMP Device erkannt werden kann oder mach ich etwas falsch?
Gruss mischu
Hi,
Sollte eigentlich wie folgt funktionieren:
define Etherbox SYSSTAT 60 120 192.186.0.10
attr Etherbox mibs .1.3.6.1.4.1.14848.2.1.2.1.5.1:TempPort1
attr Etherbox mibs .1.3.6.1.4.1.14848.2.1.2.1.5.2:TempPort2
attr Etherbox noSSH 1
attr Etherbox snmp 1
Wie bereits erwähnt gibt es noch einen Bug, also mußt du die Abfrage manuell starten: "get Etherbox update"
Hast du die letzte Version des Moduls installiert? (Link von justme1968)
Lg,
Andi
habe einfach ein update gemacht im fhem... reicht das nicht?
Glaube nicht das bei einem Update der Letztstand dabei ist.
Einfach das modul downloaden und im fhem Ordner ersetzen.
Lg.
Andi
hmm...
Habs reingeladen unter
pi@raspberrypi:/opt/fhem/FHEM $ pwd
/opt/fhem/FHEM
pi@raspberrypi:/opt/fhem/FHEM $ ls -al | grep 32_SYS
-rwxrwxr-x 1 pi pi 47603 Feb 7 19:40 32_SYSSTAT.pm
pi@raspberrypi:/opt/fhem/FHEM $
Das einzige was jetzt noch dazu kam war noSSH
Config sieht jetzt wie folgt aus:
define MessPC SYSSTAT 60 120 192.168.0.10
attr MessPC icon message_tendency_steady
attr MessPC noSSH 1
attr MessPC room 4.1_LANDevices
Das Teil ist immer disconnected...
ein get MessPC update nützt nichts...
Sogar das MIB File wäre drin...
pi@raspberrypi:/usr/share/snmp/mibs $ ls -al
insgesamt 264
drwxr-xr-x 2 root root 4096 Feb 7 17:51 .
drwxr-xr-x 5 root root 4096 Feb 7 16:00 ..
-rw-r--r-- 1 root root 9558 Feb 7 17:51 betternetworks_ethernetbox.txt
-rw-r--r-- 1 root root 1913 Apr 14 2015 GNOME-SMI.txt
-rw-r--r-- 1 root root 5931 Feb 19 2014 LM-SENSORS-MIB.txt
-rw-r--r-- 1 root root 15901 Feb 19 2014 NET-SNMP-AGENT-MIB.txt
-rw-r--r-- 1 root root 9160 Feb 19 2014 NET-SNMP-EXAMPLES-MIB.txt
-rw-r--r-- 1 root root 9326 Feb 19 2014 NET-SNMP-EXTEND-MIB.txt
-rw-r--r-- 1 root root 2036 Feb 19 2014 NET-SNMP-MIB.txt
...
pi@raspberrypi:/usr/share/snmp/mibs $
Unter dem Device habe ich immer
HAS_Net::SNMP 0
Muss wohl mal bei justme1968 nachfragen...
gruss
Hi,
Falls du bis Dienstag noch keine Lösung hast lasse ich dir gerne meinen ganzen FHEM Ordner.
Bin jetzt mal zwei Wochen auf Dienstreise in/auf Aruba; bin echt froh das es Open VPN gibt. ;-)
das Net::SNMP perl modul ist nicht installiert.
mit cpan oder der methode deiner wahl installieren. und fhem neu starten.
gruss
andre
Stimmt.
Keine Ahnung worauf du FHEM am laufen hast, aber falls auch auf einer Synology NAS mit dem Syno Perl Package, bekommst du das modul eventuell auch wie hier beschrieben zum laufen: https://forum.synology.com/enu/viewtopic.php?f=39&t=86961 (https://forum.synology.com/enu/viewtopic.php?f=39&t=86961)
Alternativ hat es bei mir auch funktioniert indem ich Perl selbst kompiliert habe.
Lg,
Andi
Jungs ihr seid einfach Spizzzzzze ;)
Katsching..
pi@raspberrypi:~$ sudo cpan install Net::SNMP
Temperatur ist ersichtlich!
Danke euch.