SNMP communicatie met netwerkprinter

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 8
Geregistreerd: 12 Feb 2013, 22:53

SNMP communicatie met netwerkprinter

Berichtdoor cvanblad » 12 Feb 2013, 23:06

Ik ben volledig nieuw met Arduino, en heb ondertussen al een heleboel tutorial filmpjes bekeken en uitgetest.
Voor mijn eerste eigen project had ik graag een beetje uitleg gehad.
Het is de bedoeling dat ik mijn Arduino Uno koppel aan mijn router waar ook mijn printer op aangesloten is.
Via deze weg wil ik dan een "hard coded" SNMP "get" functie naar de printer sturen (na een druk op een knop). Het antwoord van deze printer moet dan weergegeven worden in de "serial monitor".

Kan iemand mij een beetje op gang helpen aub?

Via Google kwam ik ook op "agentuino", waar ik ook niet echt wijzer van werd.

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: SNMP communicatie met netwerkprinter

Berichtdoor pjh » 13 Feb 2013, 10:44

Ik hoor het woord "ethernet shield" niet vallen. Neem aan dat je deze hebt?

Berichten: 8
Geregistreerd: 12 Feb 2013, 22:53

Re: SNMP communicatie met netwerkprinter

Berichtdoor cvanblad » 13 Feb 2013, 19:04

Ik heb idd het ethernetshield, maar weet niet op welke manier ik dus moet praten met mijn printer.
Via mijn pc (mib browser) gaat het in elk geval wel.

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: SNMP communicatie met netwerkprinter

Berichtdoor pjh » 13 Feb 2013, 20:46

Kort en goed: ik kan je niet helpen. Geen ervaring mee.
Maar misschien help ik je op weg met http://www.pushingbox.com/ ?
In de Arduino-IDE vind je onder [bestand]-[Voorbeelden]-[PushingBox] een voorbeeld sketch.
Maar jij wil je printer lokaal aansturen hè?
Zijn vast mensen op het forum die je verder op weg kunnen helpen.
Succes! Enne... Graag even laten weten als het je gelukt is. Dan kan ik je "wijze" overnemen. :D

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: SNMP communicatie met netwerkprinter

Berichtdoor Karel » 13 Feb 2013, 21:50

Wat ik niet helemaal begrijp is waarom je een microcontroller, die vooral gebruikt wordt voor het uitlezen van allerlei knoppen en sensoren enerzijds en het aansturen van lampjes, motortjes en andere basic hardware anderzijds, wilt inzetten voor ethernetcommunicatie, dus PC <-USB-> Arduino <-ethernet-> printer. Die PC kan toch prima zelf met die printer praten, zoals je schrijft met de MIB browser?
If you think education is expensive, try ignorance! (Derek Bok)

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: SNMP communicatie met netwerkprinter

Berichtdoor pjh » 13 Feb 2013, 22:51

Inderdaad: het is pas zinvol als je de PC uitzet en de Arduino het verder laat afhandelen. Kan het ding de meterkast in. Lukt je niet met een PC.

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: SNMP communicatie met netwerkprinter

Berichtdoor Karel » 14 Feb 2013, 00:31

Maar wat moet die printer dan nog doen, als de PC uitstaat? SNMP is Simple Network Management Protocol, gebruikt om bijv. beschikbaarheid van apparaten op het netwerk te monitoren, niet om printopdrachten naar een printer te sturen. Voor het monitoren van mijn netwerk zou ik eerder iets gebruiken als een NSLU2 van Linksys. Die kan je een andere kernel geven, unslung, en met een webserver uitrusten om je monitoring op te tonen. Ik heb die dingen draaien als dhcp-server, muziekserver, printserver, en oh ja, ook nog met het oorspronkelijke doel, als netwerk-opslag.
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 8
Geregistreerd: 12 Feb 2013, 22:53

Re: SNMP communicatie met netwerkprinter

Berichtdoor cvanblad » 14 Feb 2013, 09:28

Jullie hebben allemaal gelijk wat betreft de koppeling pc > Arduino > printer, maar mijn uiteindelijke doel is om een "meettoestel" te maken waarmee ik standalone bepaalde vaste waarden wil opvragen van een netwerkapparaat door gebruik te maken van snmp. Om te beginnen wil ik bijvoorbeeld enkel de sysuptyme opvragen van mijn printer. Later wil ik overstappen van mijn printer naar andere apparaten.

Ik wou eigenlijk gewoon gestart geraken met Arduino en snmp, de lcd ed volgen later wel. Sorry voor de onduidelijkheid, maar ik wou niet overkomen als iemand die op zoek was naar een kant en klare oplossing. Ik ben een echte beginner op gebied van Arduino, en zie het als een grote uitdaging om dit als eerste echte project werkend te krijgen.

Ik hoop dus dat er iemand is die me kan uitleggen hoe ik te werk moet gaan met die snmp. En vooral welke bibliotheken ik hiervoor nodig heb. Hoe ik het verzenden en ontvangen van die data best aanpak, enzovoort.

Berichten: 8
Geregistreerd: 12 Feb 2013, 22:53

Re: SNMP communicatie met netwerkprinter

Berichtdoor cvanblad » 22 Feb 2013, 18:02

Ik ben ondertussen al een heel eind gevorderd, ik heb een index.htm pagina op het sd kaartje staan van de ethernetshield waarmee ik via vbscript het snmp gebeuren afhandel..
Code: Alles selecteren
<HTML>
<HEAD>
<TITLE>SNMP_Get Arduino</TITLE>
</HEAD>
<BODY>

Klik op onderstaande knop om de SNMPGET procedure uit te voeren.

<FORM NAME="Form1">

<INPUT TYPE="Button" NAME="Button1" VALUE="SNMP_GET">

<SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript">

Input=InputBox("Geef het IP adres op van het netwerkelement.","Userinput","192.168.0.233")

   on error resume next
   err.clear
   strOutput = ""
   strDeviceIP = Input
   'strOutput = strOutput & strDeviceIP & vbcrlf
   strCommunity = "public"

   set objSNMP = CreateObject("OlePrn.OleSNMP")
   objSNMP.Open strDeviceIP, strCommunity, 2, 1000

   printer_hostname = objSNMP.Get(".1.3.6.1.2.1.1.5.0")
   if err.number = 0 then
      display1 = objSNMP.Get(".1.3.6.1.2.1.43.16.5.1.2.1.1")
      display2 = objSNMP.Get(".1.3.6.1.2.1.43.16.5.1.2.1.2")
      display3 = objSNMP.Get(".1.3.6.1.2.1.43.16.5.1.2.1.3")
      display4 = objSNMP.Get(".1.3.6.1.2.1.43.16.5.1.2.1.4")
      uptime = objSNMP.Get(".1.3.6.1.2.1.1.3.0")
      model = objSNMP.Get(".1.3.6.1.2.1.25.3.2.1.3.1")
      tps = 100
      tpm = tps * 60
      tph = tpm * 60
      tpd = tph * 24
      ticks = Uptime
      seconds = int(ticks/tps) mod 60
      minutes = int(ticks/tpm) mod 60
      hours = int(ticks/tph) mod 24
      days = int(ticks/tpd)
      uptime = "Uptime: " & days & " dagen," & hours & " uren," & minutes & " minuten," & seconds & " seconden."

      strOutput = strOutput & Printer_Hostname & vbcrlf & model & vbcrlf & " Display Panel:" & vbcrlf
      strOutput = strOutput & string(20,61) & vbcrlf
      strOutput = strOutput & display1 & vbcrlf & display2 & vbcrlf & _
       display3 & vbcrlf & display4 & vbcrlf
      strOutput = strOutput & string(20,61) & vbcrlf
      stroutput = uptime 'strOutput & uptime
      wscript.echo strOutput
   end if

MsgBox strOutput

document.write("hostname = " & printer_hostname)
document.write("<br /> model = " & model)
document.write("<br /> uptime = "& uptime)     
   </SCRIPT>
</FORM>

</BODY>
</HTML>


Verder heb ik een sketch gemaakt waarmee ik de index.htm pagina open die op het sd kaartje staat. (op basis van het webserver voorbeeld)

Code: Alles selecteren

/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

//toegevoegd
EthernetClient client;
// tot hier


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,250);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
File webFile;
void setup()
{
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
    Serial.begin(9600);       // for debugging
   
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");

}

void loop()
{

    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // send web page
                    webFile = SD.open("index.htm");        // open web page file
                    if (webFile) {
                        while(webFile.available()) {
                       client.write(webFile.read()); // send web page to client
                       //Serial.print(webFile.read());
                         }
                         webFile.close();
                   
                         }
                    break;

                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data

        client.stop(); // close the connection
   
    } // end if (client)

}


Nu krijg ik een pagina te zien met volgende gegevens op:
Code: Alles selecteren
hostname = ET00200029147A
model = 968 AIO Printer
uptime = Uptime: 10 dagen,4 uren,51 minuten,33 seconden.


Hoe kan ik deze gegevens (of toch zeker 1 lijn) in mijn serial monitor krijgen?

Berichten: 27
Geregistreerd: 23 Feb 2013, 12:07

Re: SNMP communicatie met netwerkprinter

Berichtdoor walker » 23 Feb 2013, 21:05

De html code wordt door de webserver naar je internet browser (PC) gestuurd en daar wordt het script uitgevoerd, maar als ik het goed begrijp moet de Arduino de data opvragen via ethernet. Dus je moet geen webserver op de Arduino zetten, maar een client.

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten