DioNiSis_000 Δημοσ. 10 Φεβρουαρίου 2022 Share Δημοσ. 10 Φεβρουαρίου 2022 2 ώρες πριν, dictummortuum είπε Καλησπέρα @DioNiSis_000, Έχω το ίδιο modem και ήθελα να σετάρω τον prometheus μου με τα στατιστικά, τώρα που ενεργοποιήθηκε η υπηρεσία. Είχα το ίδιο πρόβλημα με το ssh και κατέληξα να κάνω ένα script που χρησιμοποιεί telnet για να τραβάει τα δεδομένα. Μπορείς να βρεις τον prometheus exporter για τα modem(s) μου εδώ -> https://github.com/DictumMortuum/modem-exporter Εδώ ειναι το profile για το modem σου -> https://github.com/DictumMortuum/modem-exporter/blob/master/internal/modem/DG8245V-10.go Παραθέτω και ένα standalone script στην περίπτωση που δεν χρησιμοποιείς grafana/prometheus, αλλά θέλει πολύ parsing για να πάρεις το output. Παράδειγμα εκτέλεσης: ~/Code/DictumMortuum/modem-exporter master* ❯ go run main.go display xdsl connection status Status: Up Last Retrain Reason:0 Max: Upstream rate = 52098 Kbps, Downstream rate = 114568 Kbps Path: 0, Upstream rate = 11000 Kbps, Downstream rate = 108613 Kbps ReceiveBlocks: 0 TransmitBlocks: 0 CellDelin: 0 LinkRetrain: 1 InitErrors: 0 InitTimeouts: 0 LossOfFraming: 1 ErroredSecs: 2 SeverelyErroredSecs: 2 FECErrors: 55 ATUCFECErrors: 0 HECErrors: 0 ATUCHECErrors: 0 CRCErrors: 0 ATUCCRCErrors: 0 On Line: 0 Days 6 Hour 38 Min 50 Sec success! WAP> Και ο κώδικας: package main import ( "fmt" "github.com/ziutek/telnet" "time" ) const timeout = 10 * time.Second func expect(t *telnet.Conn, d ...string) error { err := t.SetReadDeadline(time.Now().Add(timeout)) if err != nil { return err } err = t.SkipUntil(d...) if err != nil { return err } return nil } func sendln(t *telnet.Conn, s string) error { err := t.SetWriteDeadline(time.Now().Add(timeout)) if err != nil { return err } buf := make([]byte, len(s)+1) copy(buf, s) buf[len(s)] = '\n' _, err = t.Write(buf) if err != nil { return err } return nil } func bla(host, user, password string) error { t, err := telnet.Dial("tcp", host) if err != nil { return err } t.SetUnixWriteMode(true) var data []byte err = expect(t, "Login:") if err != nil { return err } err = sendln(t, user) if err != nil { return err } err = expect(t, "Password:") if err != nil { return err } err = sendln(t, password) if err != nil { return err } err = expect(t, "WAP>") if err != nil { return err } err = sendln(t, "display xdsl connection status") if err != nil { return err } data, err = t.ReadBytes('>') if err != nil { return err } fmt.Println(string(data)) return nil } func main() { bla("192.168.5.254:23", "Forthnet", "F0rth@c$n3t#") } σε ευχαριστώ, το standalone script δουλεύει όπως ήθελα για το home assistant . το output μπορείς να το παίρνεις είτε με την παράμετρο value_template στο yaml configuration είτε πιο απλά εκτελώντας το script με την εντολή grep Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα