Anfänger - wer nimmt mich ein wenig an die Hand? SNMP/MQTT

Begonnen von RichardCZ, 17 März 2020, 13:35:20

Vorheriges Thema - Nächstes Thema

RichardCZ

Mein FHEM läuft also lokal und ich bin auch schon das "https://wiki.fhem.de/wiki/Erste_Schritte_in_FHEM" Tutorial durch.

Nun möchte ich gerne einige vorhandene Hardware ansprechen/auslesen. Habe mich also umgesehen was so da wäre im Haushalt:


Rein intuitiv würde ich sagen, dass das Thermomenter vielleicht die einfachere Beute ist.

Im Idealfall würde ich also gerne gemäß https://wiki.fhem.de/wiki/Quick-Start#Daten_aufzeichnen_und_darstellen von dem Thermometer über SNMP Daten abgreifen und dann in FHEM anzeigen. Das THermometer hat zwar ein eigenes Webfrontend, aber für die Graphen verwenden die just Flash, was natürlich keiner mehr hernimmt.

Ich werde natürlich versuchen mich da durchzubeissen, aber wenn sich da jemand erbarmt und mich ein wenig an der Hand nimmt, wäre ich dankbar.

Oder - falls jemand meint die MQTT Kommunikation mit dem Victron wäre ein lohnenswertes Ziel, dann das, oder beides. ;-)
Und wenn es nicht out-of-the-box geht, kein Problem vielleicht purzelt dann auch mal Code meinerseits raus.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Otto123

Hi,

ich denke MQTT ist von der Anbindung her "simpel":
Server
define mqtt2s MQTT2_SERVER 1883 global
etwas Sicherheit
define allowedMqtt allowed
attr allowedMqtt validFor mqtt2s
set allowedMqtt basicAuth username password


Dann schaust Du mal was MQTT2 draus macht :)

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

Beta-User

Ui Otto, du hast aber schon gesehen, dass das eventuell eine Art Interface für "alles mögliche" ist...?

@RichardCZ:
Trotzdem dürfte Otto am Ende recht behalten, wir können gerne versuchen, das auch gleich so aufzubereiten, dass es der nächste mit so einem Gerät gleich viel einfacher hat und sowas wie "best practice" dazu teilen kann...: attrTemplate.

Falls es sowas ist wie ein Interface, über das viele Geräte/Baugruppen reinkommen, wird es etwas komplizierter, und es wäre gut, du könntest etwas mehr an Infos zum MQTT-Verkehr liefern.

Helfe gerne, jetzt wäre erst mal etwas Info hilfreich (gerne auch ein Link mit etwas Info, "wie" das Teil MQTT spricht).

Beta-User
(einer der bekennenden Hobby- (oder besser eigentlich: Nicht-) Programmierer hier im Forum, der trotzdem irgendwie Maintainer "geworden" ist... Können wir gerne an anderer Stelle vertiefen ;) .).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

Deswegen habe ich mich ganz vorsichtig ausgedrückt.  ;) Die MQTT Anbindung ist erstmal simpel - aber wir müssen sehen was da reinkommt.

Am Ende ist SNMP vielleicht auch was simples, aber ich weiß nicht ob es ein Interface in FHEM dafür gibt. Deswegen hab ich dazu erstmal nix gesagt :)
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

Wzut

Zitat von: Otto123 am 17 März 2020, 14:55:59
Am Ende ist SNMP vielleicht auch was simples, aber ich weiß nicht ob es ein Interface in FHEM dafür gibt.
IMHO nutzen "nur" zwei Module SNMP : 32_SYSSTAT und 73_PRESENCE, ein reines FHEM SNMP Modul gibt es nicht.
Das wäre aber vllt doch was für RichardCZ als Vorzeigemodul für uns Hobbyprogger, dann würde ich endlich mal lernen wie man es richtig macht (habe jetzt zwei Wochen viel Zeit) und könnte meinen Cisco Switch perfekt in FHEM einbinden :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

RichardCZ

Erstmal bin ich noch beim Studieren. ;-)

Das bekomme ich vom Victron

# mosquitto_sub -v  -I myclient -t '#' -h 192.168.2.219
N/847e40668538/system/0/Serial {"value": "847e40668538"}


ist ein wenig mager.

Das bekomme ich vom Thermometer:

$ snmpget -v1 -c public 192.168.2.156 .1.3.6.1.4.1.21796.4.1.3.1.5.1
SNMPv2-SMI::enterprises.21796.4.1.3.1.5.1 = INTEGER: 227


(22,7°C) - das stimmt soweit. Nebenher lese ich auch noch die vorzügliche Pflichtlektüre von Maaß/Pittner.
Ich habe ja dank COVID19 HomeOffice - da habe ich jetzt ein paar Tage um mich fortzubilden.

Den FHEM code habe ich ja mal nach SNMP durchsucht - irgendwas ist ja vorhanden. Ich muss da nur noch meinen Kopf drum "rumwickeln".
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Otto123

#6
PRESENCE macht was mit SNMP - aha?  ;)
Zitatdefine <name> PRESENCE function {...} [ <check-interval> [ <present-check-interval> ] ]

Checks for a presence state via perl-code. You can use a self-written perl function to obtain the presence state of a specific device (e.g. via SNMP check).

The function must return 0 (absent) or 1 (present). An example can be found in the FHEM-Wiki.

Example

define iPhone PRESENCE function {snmpCheck("10.0.1.1","0x44d77429f35c")}
Nachgeschaut: ok - self-written 🤣 oder ist da noch was?

Ja aber wie der Name ja schon sagt SIMPLE Network ...
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

Otto123

ZitatN/847e40668538/system/0/Serial {"value": "847e40668538"}
Na wird jetzt kein spannendes MQTT2 Device draus.
Hast Du ne Idee was das für ein Wert ist? Steht ja im Topic und im Wert das Gleiche :(
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

RichardCZ

Zitat von: Otto123 am 17 März 2020, 19:44:27
Na wird jetzt kein spannendes MQTT2 Device draus.
Hast Du ne Idee was das für ein Wert ist? Steht ja im Topic und im Wert das Gleiche :(

Ich würde meinen, das ist die Seriennummer. Es sieht fast so aus, als ob Victron die Daten automatisch an mqtt.victronenergy.com sendet, sobald man MQTT anmacht. Vermutlich ist das "deren MQTT broker". Vielleicht bekommt man von dort mehr daten, aber so ganz steige ich da noch nicht durch.

Momentan konzentriere ich mich auf das SNMP Gerät. Was macht der Perl Hacker? Er schaut ob es nicht schon was gibt.
Also falls es noch keine "reinen SNMP" Module gibt in FHEM, dann schaue ich erstmal auf Metacpan, hole mir https://metacpan.org/pod/Net::SNMP und https://metacpan.org/pod/SNMP und teste ob ich die Daten vom Thermometer mit einem Perl Skript dank dieser Module auch ausgelesen bekomme.

Wenn ja, sollte dann ein hübsches FHEM Modul folgen.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

mahowi

Hier steht was im OpenHAB-Forum zum Victron CCGX und MQTT:
https://community.openhab.org/t/mqtt-1-x-2-x-interface-to-victron-ccgx/43888

Man muß dem Teil wohl immer sagen, daß man auch zuhört.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

RichardCZ

Tadaaa

#!/usr/bin/env perl

use strict;
use warnings;
use v5.26.0;

use Net::SNMP;

my $OID      = shift || '1.3.6.1.4.1.21796.4.1.3.1.5.1';
my $hostname = shift || 'localhost';

my ($session, $error) = Net::SNMP->session(
   -hostname  => $hostname,
   -community => 'public',
);

if (!defined $session) {
   say "ERROR: $error";
   exit 1;
}

my $result =  $session->get_request(-varbindlist => [ $OID ])
           // do {
               say 'ERROR: ', $session->error();
               $session->close();
               exit 1;
           };

say 'The Temp for host ', $session->hostname(),
    ' is ',               sprintf ("%.1f", $result->{$OID} / 10),
    '°C';

$session->close();

exit 0;


entsprechend nach Aufruf dann:

$ snmp.pl 1.3.6.1.4.1.21796.4.1.3.1.5.1 192.168.2.156
The Temp for host 192.168.2.156 is 22.5°C


So. Jetzt muss ich nur schauen, wie ich das Net::SNMP API in FHEM reinknödle.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Beta-User

Man kann ja parallel an dem MQTT-Thema arbeiten...?

An dem MQTT2-Gerät hätte man auch die subscriptions gesehen, ganz so langweilig wäre es also nicht gewesen ;) .

So gäbe es schon mal was, dem man alle 50 Sekunden mit einem at einen Ping senden kann (unterstellt, es gibt ein MQTT2-IO (empfohlen immer noch: MQTT2_SERVER)):

attr DEVICE readingList N/847e40668538/system/0/Serial:.* { json2nameValue($EVENT, '', $JSONMAP) }
attr DEVICE setList update:noArg R/847e40668538/system/0/Serial


Vermutlich wäre es sinnvoll, dem ganzen eine bridgeRegexp zu verpassen, keine Ahnung, was da alles an Antwort kommt, aber dem OpenHAB-Thread nach könnte das uU. eine ganze Menge sein...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

RichardCZ

Zitat von: Wzut am 17 März 2020, 18:52:26
Das wäre aber vllt doch was für RichardCZ als Vorzeigemodul für uns Hobbyprogger, dann würde ich endlich mal lernen wie man es richtig macht (habe jetzt zwei Wochen viel Zeit) und könnte meinen Cisco Switch perfekt in FHEM einbinden :)

Tja ... Alter Schwede ... da muss ich aber erstmal den Urwald roden bevor ich da ein Häuschen hinsetzen kann. Gleichzeitig muss ich aber auch vorsichtig anfangen um nicht mehr kaputtzumachen als schon kaputt ist. Da wäre natürlich eine Testsuite nett gewesen.

Ich plane ein FHEM::SNMP zu machen, da muss ich aber erstmal dahintersteigen wie ich das aber in den vorhandenen Namespace-Brei richtig integriere.
Meine ersten beschwerlichen Schritte in der Richtung kann man ja in den commits in meinem Git Repo beobachten.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

herrmannj

#13
Startpunkte:
https://wiki.fhem.de/wiki/DevelopmentModuleIntro
https://wiki.fhem.de/wiki/DevelopmentModuleAPI

- Bitte externe Abhängigkeiten (use Net::SNMP;) vermeiden. (shall)
- 1x FHEM modul besteht aus 1x Datei, ist also self containing.
- Alle IO Operation müssen (must) asynchron implementiert werden. Dazu stehen eine IO loop (select) bereit.

FHEM ist eventbasiert, alle Module arbeiten im Rahmen von kooperativem Multitasking zusammen:

Stelle sicher dass das Modul auch bei externen Abweichungen wie Ausfall der Netzanbindung und/oder des DNS Servers nicht blockiert. (Net::SNMP implementiert die Abfrage synchron daher ist es generell nicht! geeignet)


RichardCZ

Zitat von: herrmannj am 18 März 2020, 10:10:19
- Bitte externe Abhängigkeiten (use Net::SNMP;) vermeiden. (shall)

Das ist eine ziemlich dumme Regel. Ich weiß natürlich warum die da ist (um die Installationskomplexität gering zu halten)
natürlich werde ich mich bemühen nicht unnötig das halbe CPAN einzuschleusen, aber bevor ich so schlechte Räder neu erfinde wie offensichtlich bereits geschehen, werde ich diese shall-Regel doch arg biegen.

Zitat
Stelle sicher dass das Modul auch bei externen Abweichungen wie Ausfall der Netzanbindung und/oder des DNS Servers nicht blockiert. (Net::SNMP implementiert die Abfrage synchron daher ist es generell nicht! geeignet)

Das kommt daher, wenn man offensichtlich eine Aversion gegen CPAN entwickelt hat. Man liest gar nicht mehr die Doku zu den Modulen dort.
https://metacpan.org/pod/Net::SNMP#Non-blocking-Objects


Rest ist klar.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.