NEWS
[Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates
-
Der Adapter snmp wurde soweit ich es feststellen konnte seit längerer Zeit nicht aktualisiert. Da der User @Marcolotti auch hier schon länger nicht mehr aktiv war, habe ich mir erlaubt den Code selbst anzusehen / anzupassen. Was ich genau geändert habe liste ich hier am Ende zur Info falls es wen interessiert.
Falls ich das was übersehen habe und insbesondere jemand übergangen habe, bitte um Entschuldigung und Info wie ich das wieder gut machen kann.
Nun zu meinen Fragen:
A) TESTANFORDERUNGEN
Vor einer Veröffentlichtung muss natürlich getestet werden. Auf meinem System funktionien die Änderungen. Was muss ich genau / wie machen um die ioBroker Qualitätssicherungstests durchzuführen.
B) GIT (Gitneulingsfragen)
Ich habe zwar Jahre Jahrzehnte) Programmiererfahrung in zuletzt "c", aber nur mit cvs als Versionsverwaltung. Was genau muss ich tun, um die Änderungen in GIT hochzuladen?
IST Stand:
Ich habe das Repository iobroker-community-adapters/ioBroker.snmp in ein lokales repository gecloned. Im lokalen Verzeichnis habe ich die notwendigen Dateien (package.json, io.package.json, main.js, ...) angepasst.
Zum Test habe ich mittesl npm package ein tar erzeugt und diese mit npm install installiert.Was muss / soll ich nu tun um die Änderungen "rauf" zu laden? Ich nehme mal an sowas wie git add und git commit - oder was? Sorry f.d. dumme Anfängerfrage - ich bräuchte hier eine möglichst exakte Anleitung damit ich nicht im worst case was auf Github abschieße
Was muss ich ggF noch tun (abgesehen von A) Testen BEVOR ich die Änderungen auf github schiebe ?
C) GENERELLES
Ist es eh sinnvoll, die Änderungen in das existierende Repo zu committen? Gibts da jemand vom Team der das reviewen und übernehmen kann? Oder wäre es besser das Ganze zu forken? (Glaubs zwar nicht - aber ich bin wie gesagt kompletter Neuling)Wie ist das mit npm? Ich hab zwar einen github account, aber für npm hab ich (noch) keinen Account. Brauch ich den jetzt schon und was müßte ich da wo machen? Ich vermute mal, dass das Package automatisch oder vom Team aus dem Git Repo aktualisiert wird, wenn die Änderungen akzetiert werden. Oder ?
Danke für eure Rückmeldungen / Hilfe
McM
Was wurde am snmp Adapter geändert und warum?
Der snmp Adapter loggte alle Pollintervall sekunden einen Timeout Error falls mein Drucker abgeschaltet war.
a) Im Falle eines Fehlers beim Zugriff auf Device 8eine IP Addresse) wird nun der Fehler nur mehr einmalig gelogged. Sobald das Gerät wieder erreichbar ist, wird eine Info gelogged.
b) Da eine Instanz mehre Devices (IPs) bedienen kann, habe ich den neuen Datenpunkt info.connected unter dem Device eingeführt der durch true/false anzeigt ob das entsprechende Gerät aktive (d.h. erreichbar) ist.
c) Der State info.connected der Instanz wird nunmehr auf true gesetzt sobald zumindest ein Device erreichbar ist. Sind alle Devices (IPs) nicht erreichbar wird er auf false gesetzt
d) Da in der Configmaske je OID eine community angegeben werden kann bzw. muss, das node.snmp Package allerdings nur je Session, d.h je Device (= ip) eine community verwaltet, wird nunmehr eine Warning ausgegeben wenn OIDs für ein und dasselbe Device (IP) unterschiedliche communities angeben. Logisch hat sich nichts geändert, es wurde schon jetzt immer die community der ersten OID genommen. (An sich sollte da die Config geändert werden - aber erstens wäre das wohl inkompatibel und zweites fehlt mir dazu das Knowhow für die html Configseite ...)
e) Ich habe einige zusätzliche loggings mit debug level eingebaut
f) OIDs wurde um ein Flag optional erweitert. Ist diese gesetzt, so wird ein Fehler, dass die entsprechende OID nicht existiert ignoriert. (Hintergrund: OIDs die Alarmmeldungen meines Druckers anzeigen kommen und verschwinden mit der Anzahl der anstehenden Alarme. Es ist also normal, dass diese öfter fehlen und kein Grund für einen Fehlerabbruch).Da dies doch nicht so trivial ist und mit SNMPv1 überhaupt unmöglich scheint, ist das wieder rausgeflogen. -
@mcm57
Zwar bin ich kein Community-Entwickler, aber ich versuche mal so gut es geht deine Frage zu beantworten.A)
Anscheinend hat dieser (etwas ältere) Adapter nur Standard-Testfälle eingebaut, die du mitnpm run test
ausführen kannst. In diesem Fall wird aber nicht viel mehr getestet, als das der Adapter startet.Viele Adapter (z.b. iobroker.influxdb) bieten hier deutlich tiefgreiferende, automatisierte Tests, mit denen wirklich überprüft wird, ob der Adapter-Code auf logischer Ebene das macht was er soll, bei jeder Code-Änderung. Die meisten größeren Adapter verwenden diese Tests als Teil des automatisierten Release-Prozesses, also dem Erstellen neuer NPM packages (Stichwort: Github workflows). Das ist aber schon ein komplexeres Thema für sich.
Dieser Adapter scheint noch keine dieser automatisierten Release-Prozesse zu nutzen, d.h. wahrscheinlich hat der Ersteller immer manuell via
npm publish
neue Adapter-Versionen gebaut. Mit Motivation und vor allem Zeit könnte man das sicherlich auch hier mal auf den aktuellen Stand der Technik heben.B)
"Rauf laden" wirst du die Dateien mit deinem Setup nicht direkt können, da du sicherlich keine Schreibrechte für das von dir geklonte Git-Repo (ich gehe mal von https://github.com/iobroker-community-adapters/ioBroker.snmp aus) haben wirst und auch kein Community-Adapter-Entwickler bist. D.h. egal was du machst: "Abschießen" kannst du nichts.Der normale Weg ohne besondere Rechte ist eigentlich immer:
- Mit eigenem Github Account einloggen
- Über "Fork" das Repo unter deinem eigenen Account "forken", also quasi eine Kopie auf der du volle Schreibrechte hast anlegen
- Das geforkte Repo von Github in ein lokales Repo clonen
- Dateien ändern mit Editor etc.
- Dateien lokal mit
git add <dateiname>
zum Index, also dem Bereich der alle Dateien enthält, die du ändern möchtest, hinzufügen - Mit
git status
nochmal prüfen, welche Dateien jetzt auf dem Index sind (grün) - Mit
git commit -m "<Änderungskommentar>"
alles was auf dem Index ist als (neueste) Änderung ablegen/einchecken - Jetzt ist deine Änderung erstmal nur lokal versioniert, aber mittels
git push
kannst du sie an dein eigenes Online-Repo schicken
Zu diesem Zeitpunkt hast du am ursprünglichen Repo (iobroker.snmp) noch nichts geändert, sondern nur in deiner persönlichen Kopie davon. Du kannst deine Änderungen auch nicht einfach dorthin "pushen", da dir das Quellrepo nicht gehört, bzw. du dort keine Rechte hast.
Willst du, dass deine Änderungen auch dort aufgenommen werden, musst du einen Pull-Request erstellen. Das kannst du, wenn du auf Github in deinen eigenen Repo-Fork von iobroker.snmp gehst und dort bei Pull Requests mit New pull request einen neuen erstellst. Dieser enthält dann die Änderungen aus deinem Fork und wird in das Quell-Repo eingepflegt (gemergt), sobald jemand mit Rechten auf dem Repo (z.B. Apollon) deinen Pull Request geprüft und akzeptiert hat.
Wird dein Pull-Request akzeptiert, bzw. deine Änderungen gemergt/übernommen, schlägt dir Github i.d.R. vor, dass du dein geforktes Repo jetzt löschen kannst.
C)
Wie bei Github kannst du auch bei NPM nicht einfach bestehende Packages, die jemand anderes angelegt hat updaten. Wie du schon vermutet hast, kann aber i.d.R. jemand aus dem Team das Package dort aktualisieren. -
Ein Hiweis noch:
@excodibur sagte in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
Dateien lokal mit git add <dateiname> zum Index, also dem Bereich der alle Dateien enthält, die du ändern möchtest, hinzufügen
Mit git status nochmal prüfen, welche Dateien jetzt auf dem Index sind (grün)
Mit git commit -m "<Änderungskommentar>" alles was auf dem Index ist als (neueste) Änderung ablegen/einchecken
Jetzt ist deine Änderung erstmal nur lokal versioniert, aber mittels git push kannst du sie an dein eigenes Online-Repo schickenDiese Schritte lassen sich in modernen Editoren wie VSCode auch komplett über die GUI machen. Ist hilfreich, wenn man mit git nicht so firm ist oder sich manche Befehle partout nicht merken kann/will.
-
Herzlichen Dank für eure ausführlichen Antworten.
Ich dachte bisher forken ist nur was wenn man "abzweigen" will, sprich für die Zukunft 2 getrennte Wege gehen will. Wieder was gelernt.
Ich werd das dann mal so machen wie du beschrieben hast. Vor der commandline hab ich keine Angst wenn ich es halbwegs verstehe. Aber das Verstehen hilft bei GUI noch mehr.
Bei Visual Studio Code bin ich bisher immer gescheitert was zum Laufen zu bringen. Werd mich aber nochmal intensiver damit beschäftigen.
Ich plane sowieso den snmp Adapter echt zu forken (z.B. als snmp-plus) da ich hier zB. die Konfiguration ob ich snmp V1 / V2 / V3 verwenden will einbauen will. Außerdem passt die Konfig m.E. nicht 100 %. Eigenlicht sollte man x Geräte (=IPs) anlegen können und dann je IP y OIDs. Ich seh das als Übrungs / Scchulungsprojekt. Ob dass dann public wird wird sich zeigen.
Ich scheiter nur bei den ersten Experimenten mit Admin5/jsonConfig dran dass es nested Tabellen scheinbar nicht gibt (Admin crashed wenn ich sowas versuche) und dynamisch erscheinende Tabs auch nicht verfügbar sind. Und eine Dropdownliste die ihre Auswahl von eienr anderen Tabelle bekommt geht scheinbar auch nicht. (Und nein, manuelles Ausprogrammieren im GUI Bereich übersteigt meine Kenntnisse derzeit sicher). Auber dies Gui Fragen sind ein anderes Thema. Da such ich halt noch mal und frag wenn ich ein wenig mehr verstehe (oder glaube zu verstehen). Leider ist die Doku für Anfänger recht schwach. Aber ich schreib auch nicht gern Doku :-).
McM
-
@mcm57 sagte in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
dran dass es nested Tabellen scheinbar nicht gibt (Admin crashed wenn ich sowas versuche) und dynamisch erscheinende Tabs auch nicht verfügbar sind
Das klingt für mich nicht nach einer "einfachen Config", für die jsonConfig gedacht ist. Das kannste entweder mit HTML/MaterializeCSS/JS "händisch" machen, oder per React.
Bei Visual Studio Code bin ich bisher immer gescheitert was zum Laufen zu bringen. Werd mich aber nochmal intensiver damit beschäftigen.
Was meinst du mit "zum Laufen bringen"? Inzwischen gibts den https://github.com/ioBroker/dev-server, der dir das Debuggen im ioBroker-Kontext deutlich vereinfacht.
-
@mcm57 said in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
Ich plane sowieso den snmp Adapter echt zu forken (z.B. als snmp-plus) da ich hier zB. die Konfiguration ob ich snmp V1 / V2 / V3 verwenden will einbauen will. Außerdem passt die Konfig m.E. nicht 100 %. Eigenlicht sollte man x Geräte (=IPs) anlegen können und dann je IP y OIDs. Ich seh das als Übrungs / Scchulungsprojekt. Ob dass dann public wird wird sich zeigen.
McM
Wenn du den Adapter ohnehin grundlegend überarbeiten willst, kann ich dir nur empfehlen statt alten Code zu forken gleich einen "sauberen" neuen & "leeren" Adapter mit https://github.com/ioBroker/create-adapter zu erstellen, und dort dann mittles SNMP Lib deine Lösung zu implementieren. Durch den Adapter-Creator kriegst du extrem viele Sachen Out-of-the-Box, z.B. Github Build & Release Workflows inkl. Standard Testcases, AlCalzone's Release Script, Dependabot, die du sonst früher oder später vermissen wirst und nachträglich ans Laufen kriegen musst. Zudem hast du da Code-seitig ein einheitliches Grundgerüst, das viele ioBroker Adapter verwenden und du so ggf. auch mal in den Quellcode von anderen Adaptern "zur Inspiration" reinschauen kannst.
Der aktuelle Adapter scheint ja code-seitig nicht besonders viel zu machen und 90% würdest du wahrscheinlich sowieso umschrieben, also könnte der "frische Start" schon sinnvoll sein.
-
ich für meine Teil würde mich freuen wenn es endlich die Funktion für Geräte gibt die nicht 24h eingeschaltet sind.
-
Ok - ich versuch zwar grad eine ganz neue Version zu machen. Ist aber mehr ein Lernprojekt zur Zeit. Vor allem die jsonConfig.json tut im Bereich der Tabellen nicht wirklich immer das was ich erwarte. Ein Teil dürften Fehler sein (zumindest wurden die Meldungen als Bug mal angenommen) - ein Teil aber sicher Fehlbedienungen.
Ich werd aber mal den jetzigen snmp mit der Funktion für non-24h Geräte im Laufe der Woche uploaden. Ev. kannst du ihn dann ja mal in der Beta testen.
McM
-
Ja ich versuch jedenfalls einen neuen Adapter umzusetzen. Ich seh das zur Zeit als Lernprojekt.
@dev-server
Ja den versuch ich zu verwenden. So ganz tut er aber nicht was ich will :-).@neu
Ja ich hab mal einen neuen Adapter mittels
npx @iobroker/create-adapter
angelegt.Das geht an sich ganz gut. Dvp versuch / mach ich unter Windows. Sollte ja an sich kein Problem sein. Config versuch ich mit jsonConfig.json zu machen. Meine html Kenntnisse enden bei einfachem html. Und mangels echter Doku kann ich in css sicher nichts brauchbares erzeugen - dazu reicht einfach nicht, dass man die drei Buchstaben kennt. Und react sagt mir nichts.
Mit jsonConfig.json kann ich mir vorstellen das Ganze mit 2 Tabs zu lösen
- Tab - Liste der Geräte (d.h ip, snmp v1/2/3, timeouts etc
- Tab - Liste der OIDs mit Querverweis zum Gerät (wahrscheinlich über eine "id" Nummer).
Nur leider gibts bei den Tabellen noch Probleme.
a) width attribute funktioniert nicht mit % (bzw. nur wenn nach dem % ein Leerzeichen eingefügt wird)
b) Default function funktioniert nicht
c) Mit der validate funtkion komm ich auch nicht auf gleich.Zu a) und b) gibts Issues in iobroker.admin.
Die Validate wird zwar aufgerufen und wenn man true retourniert meldet sie auch OK. Aber jeder Versuch auch Daten zuzugreifen liefer immer false retour. Wenn da wer ein Beispiel hat wie das aussehen könnte wär ich dankbar.Aber wie gesagt - das Ganze ist mal Lernphase. Immerhin kann ich zwar c programmieren und weiß auch was tasks od. tcp io funktionen, mutices od semaphoren sind - aber javascript ist mir neu und VS Code kenn ich nur dem Namen nach. Ergo jede Menge zu lernen.
Und gleich noch ne konkrete Frage:
Wo sehe ich console.log output? In welche Datei schreibt das das ioBroker system ??? Ok, debugger sind gut - aber manchmal helfen "juhu" Debugegr schneller zum Zeil - nur müßte man den Output halt finden :-). (Konkret: wenn ich z.B. als validate function console..log("juhu") angebe dann find ich nirgends ein juhu :-(.McM
-
@mcm57 sagte in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
Wo sehe ich console.log output?
In welche Datei schreibt das das ioBroker system ???Wenn du dev-server nutzt, in folgendem Unterverzeichnis deines Projekts:
.dev-server/default/log
.
Bin mir aber gerade nicht sicher, ob da nicht nur die "richtigen" iobroker logs landen, also die perthis.log.info(...)
erstellt wurden. -
@alcalzone said in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
@mcm57 sagte in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
Wo sehe ich console.log output?
In welche Datei schreibt das das ioBroker system ???Wenn du dev-server nutzt, in folgendem Unterverzeichnis deines Projekts:
.dev-server/default/log
.
Bin mir aber gerade nicht sicher, ob da nicht nur die "richtigen" iobroker logs landen, also die perthis.log.info(...)
erstellt wurden.Ok - die log.info / log.warn etc. stehen da definitiv drinnen.
ob conloge.log rein geht muss ich mal testen. Ev. liegt es ja auch darin, dass die validator Funktion lt. jsonConfig.json nicht im Kontext meines Adapters sondern im Prozesskontext des Admin Adpaters ausgeführt wird. Nur wo loggt der hin? Auch ins .dev-server/default/log ? -
@mcm57 sagte in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
Nur wo loggt der hin?
Ich würde mal ganz doof vermuten in das Browser-Log, welches du in den Developer tools (F12) sehen kannst.
-
@cash said in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
ich für meine Teil würde mich freuen wenn es endlich die Funktion für Geräte gibt die nicht 24h eingeschaltet sind.
Ich habe´die Modifikationen mal auf github gestellt.
Du solltest den modifizierten Adapter von https://github.com/mcm1957/ioBroker.snmp installieren können. Er sollte sich als 0.6.0-beta identifizieren.Die Releasenotes hab ich zwar eingetragen - aber im Admin sieht man sie nicht. Ich vermute, dass der Admin immer auf der "offizielle" url nachsieht. Die hab ich in io-package.json nicht umgestellt.
Falls du dich traust den Adapter zu testen gib bitte ein kurze Feedback. In jedem Fall sicher deine alte Config vorher. Es wurde zwar nichts (bewußt) an der Config geändert sodass ein downgrade auf die offizielle Version funktionieren sollte - aber sicher ist sicher.
Getestet hab ich mit einem CS510 Lexmark Laser und einem Netgear GS308T Switch (wobei dieser 24h läuft
McM
P.S. Wie ich dann einen Pull Request mach frag ich wenn klar ist, dass die Änderung passt.
Es gibt lt. Git Repo noch jede Menge branches von dependabot - da weiß ich auch nicht ob da was rein sollte (und wenn ja wie ...) -
@mcm57 Das testen war leider schnell vorbei. Keine Verbindung… Installation lief ohne Fehler durch aber der Adapter wird nicht grün. Derzeit habe ich nur die 24/7 Geräte in der Liste aktiv.
-
@mcm57 Seltsam er scheint die Werte von dem NAS zu aktualisieren. Ich gucke gleich nochmal wenn ich Zeit habe muss jetzt erstmal in die Küche…
-
@mcm57 Also nach der Pause war der Adapter jetzt grün. In der Zwischenzeit habe ich dann mal den Drucker angeschaltet und im Adapter den Drucker aktiviert. Nach dem Start ist der Adapter wieder gelb aber die Datenfelder wurden sofort von den Geräten abgerufen. Ich vermute wenn ich jetzt etwas warte wird der Adapter auch wieder grün. Könnte mit der großen Pause bei mir zwischen den Abrufen zusammen hängen. Vielleicht war das vorher auch schon so aber ich habe da nie drauf geachtet zumal ich ioBroker tagsüber eigentlich nie neu starte. Ich habe im Adapter 10 Minuten eingestellt.
Ich warte jetzt nochmal 30 Minuten und schalte dann den Drucker aus dann sollte ich ja hooffentlich kein zugemültes Log mehr sehen…
-
@mcm57 so also der Adapter wurde dann irgendwann wieder grün. Also Drucker aus und es kam im Log genau ein warn das die IP nicht erreichbar. Der Info Datenpunkt „connection“ von der IP bleibt aber auf true? Ich hätte vermutet der wird false? Ansonsten sieht alles gut aus. Wenn ich mir direkt was wünschen dürfte?
Bitte kein warn wenn Gerät nicht erreichbar. Ist eine ganz normale Info. Wer überprüfen will ob ein Gerät erreichbar ist kann den PING Adapter nutzen und sich dann z.B. bei den Geräten, die nie nicht erreichbar sein sollen eine Push oder was auch immer schicken lassen.
Der zweite Wunsch wäre, dass man das Abrufintervall pro IP festlegen kann.Auf jeden Fall danke das Du Dich den Adapter mal annimmst.
-
@cash said in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
@mcm57 Das testen war leider schnell vorbei. Keine Verbindung… Installation lief ohne Fehler durch aber der Adapter wird nicht grün. Derzeit habe ich nur die 24/7 Geräte in der Liste aktiv.
Der Adapter wird grün sobald zumindest ein Gerät eine Verbindung hat, gelb wenn keines mehr eine Verbindung hat. Allerdings wird diese Umschaltung über einen eigenen Intervallthread (Intervalltimer) gesteuert der über "Poll Intervall" geschalten wird. Wenn du ein längeres Poll intervall hat, kann das schon mal dauern. Ich werd das mal hardcoded auf ein geringeres Intervall stellen.
@cash said in [Anfänger] SNMP Adapter - Fragen Veröffentlichung v Updates:
@mcm57 so also der Adapter wurde dann irgendwann wieder grün. Also Drucker aus und es kam im Log genau ein warn das die IP nicht erreichbar. Der Info Datenpunkt „connection“ von der IP bleibt aber auf true? Ich hätte vermutet der wird false? Ansonsten sieht alles gut aus. Wenn ich mir direkt was wünschen dürfte?
Bitte kein warn wenn Gerät nicht erreichbar. Ist eine ganz normale Info. Wer überprüfen will ob ein Gerät erreichbar ist kann den PING Adapter nutzen und sich dann z.B. bei den Geräten, die nie nicht erreichbar sein sollen eine Push oder was auch immer schicken lassen.
Der zweite Wunsch wäre, dass man das Abrufintervall pro IP festlegen kann.Auf jeden Fall danke das Du Dich den Adapter mal annimmst.
ad warning: Ok, das kann ich auf info umstellen wenn das sinnvoller erscheint.
ad Abruf Intervall pro IP: Das hab ich auf der Liste für eine Reimplementierung (Arbeitstitel snmp-plus). Sorry, aber für den derzeitigen snmp Adapter bau ich das wahrscheinlich nicht mehr ein.
ad per IP Info: Ja die sollte false werden, wenn der Drucker abgeschaltet ist. Schau mir das nochmal an.
-
@mcm57 Wenn ich mal irgendwann den snmp-plus testen soll kannst Du dich gerne melden
Die Beta läuft weiterhin sehr unauffällig für mich. Also alles so wie es sein soll. -
Hi
Ich hab deine letzten Anmerkungen einfließen lassen.- Timeout ist nur mehr eine Info
- Update des info.connected sollte nun rasch(er) erfolgen. Ich triggere dies nun mittels setImmidiate und hab den Timer nurmehr als Sicherheitsschleife laufen
- Beim Setzen des info.connected je IP hab war die initialisierung unsauber. Je nachdem ob beim Start des Adapters das Gerät erreichbar war oder nicht konnte da ein falscher Wert sichtbar sein. Das sollte nun auch behoben sein.
- Ich hab die Korrekturen der Abhängigkeiten die dependabot gemeldet hat rein gemerged.
Falls du oder sonst wer Lust auf einen weiteren Test hat:
https://github.com/mcm1957/ioBroker.snmp/tree/V0.6.1
McM