Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to support@radixiot.com.

  • Monitoring bursts

    5
    0 Votes
    5 Posts
    4k Views
    O
    @bartdeboeck said: Thanks for replying. I probably have to add time information to the uploaded data as the time of measurement is unrelated to the time of submission to mango? thanks Bart Do you need real timestamp from device than delivery timestamp? It is this example. HTTP request from device with id unit1 :``` http://some.mango.xx/httpds?__time=yyyyMMddHHmmss&unit1_reset=0&unit1_version=2.0 I use HTTP protocol in Mango for monitoring drilling machine with GPRS unit. You can see it on: http://kraken.alarex.net:8080/mango_alarex/public_view.htm?viewId=3 Oja
  • Downloading Data Points

    4
    0 Votes
    4 Posts
    3k Views
    C
    You have to set up a scheduled report which send the data via email, then this script checks the e-mail and saves the attached CSV file. It has been working well for me. #!/usr/bin/perl -w # # v1.0 February 2009-August 14th 2009. # # The purpose of this script is to save attachments from emails to an FTP server. # # The targeted attachments are plain text comma separated value (CSV) files. They # are generated by (mango). The subject of the message must match # a format specified in the script. The messages are removed from the POP3 server. # # The script removes some columns and does some quoting and escaping on the data # to make more robust CSV files (ie can handle a , in the data as well as ") # # The script reformats the dates as per the requested format. # # The CSV files are saved locally in localDataDir as well as FTP'd to 2 servers. # An error email is generated if there aren't the correct number and intervals # of data. 15 minute data is expected. ################################################################################ use strict; use Net::FTP; use Mail::POP3Client; use MIME::Parser; use Time::Local; use MIME::Lite; use Text::CSV_XS; # define login credentials for POP3 server to retrieve email from my $pop3Username = ''; my $pop3Password = ""; my $pop3Server = ""; # first FTP server to send CSV files to my $ftpServer = ""; my $ftpPassword = ""; my $ftpUsername = ""; my $ftpDir = "Data"; # second FTP server to send files to my $ftpServer2 = ""; my $ftpPassword2 = ""; my $ftpUsername2 = ""; my $ftpDir2 = ""; # a writeable directory in which to store temporary files my $temp_dir = "/usr/home/foo"; # a writeable directory in which to store a copy of the data that is FTPd my $localDataDir = "/usr/home/foo"; ################################################################################ ################################################################################ ################################################################################ my @csvFile; my $fh; my @tempFiles; my @outFiles; my @wiers; my $time = timelocal( localtime() ); my $error = 0; my $error_text = ""; print "Content-type: text/html\n\n"; &log("Running Email to FTP script\n"); my $pop = new Mail::POP3Client( USER => $pop3Username, PASSWORD => $pop3Password, HOST => $pop3Server ); my $message = $pop->Message(); if ( !$pop->Alive() ) { $error = 1; &log("Error connecting to POP server $pop3Server\n"); &exitLog( $message . "\n" ); } my $emails = $pop->Count(); &log("Have $emails emails to process\n"); for ( my $i = 1 ; $i <= $emails ; $i++ ) { foreach ( my $header = $pop->Head($i) ) { chomp($header); $header =~ /Subject:\s+(.*)/; my $subject = $1; chomp($subject); $subject =~ s/(\r|\n)//g; if ( # $header =~ /From:(.*)scada/ && $header =~ /Subject: (.*) Published FTP Data/ ) { my $wier = $1; $wier =~ s/^\s+//g; $wier =~ s/\/s+$//g; chomp($wier); my $tempFileName = $temp_dir . $time . "-" . $i; open( $fh, ">$tempFileName" ) or &errorlog("Can't open temp file $tempFileName for saving pop3 mail message body: $!\n "); $pop->RetrieveToFile( $fh, $i ); close $fh; push( @tempFiles, $tempFileName ); push( @wiers, "$wier" ); &log("Matched email $i subject $subject. Saved message for $wier\n"); # delete message from server since we have saved it to temp file $pop->Delete($i); } else { &log( "leaving non matching message " . $subject . "\n" ); } } } $pop->Close(); # ok now we have retrieved file which is a multipart mime mess. foreach my $tempFile (@tempFiles) { my $wier = shift @wiers; if ( $wier !~ /\w+/ ) { $wier = "defaultSource"; $error = 1; &log("ERROR: unable to parse report name from subject. Using default\n" ); } my $mp = new MIME::Parser; $mp->tmp_to_core(1); $mp->output_to_core(1); my $fh2; open( $fh2, "$tempFile" ) or &errorLog("Couldn't open saved email message $tempFile , $!\n"); $mp->output_dir($temp_dir); my $entity = $mp->parse($fh2); #$entity->dump_skeleton(); foreach my $part ( $entity->parts ) { my $head = $part->head; my $type = $head->mime_type; my $filename = $head->recommended_filename; if ( $type eq "text/csv" ) { if ( !$part->bodyhandle ) { &errorLog("ERROR: unable to get MIME bodyhandle for CSV content-part\n"); next; } if ( $filename =~ /Events\.csv$/ ) { &log("Skipping events file $filename\n"); next; } @csvFile = $part->bodyhandle->as_lines; &log( "processing file \"$filename\", has " . ( $#csvFile + 1) . " lines.\n" ); # now have an array of arrays(which are the lines in the csv file) # want to leave some columns out, which have the heading "annotation" my @keepFields; if (defined($csvFile[0])) { # this is the first line in the csv file which is the heading. my @fields = split( ",", $csvFile[0] ); my $fieldNo = 0; foreach my $field (@fields) { if ($field !~ /Annotation/) { #this is a column we want to keep push(@keepFields, $fieldNo); #&log("keeping column $fieldNo $field\n"); } $fieldNo++; } } #my $csv = Text::CSV_XS->new (); # create a new object my $csv = Text::CSV_XS->new ({allow_loose_quotes => 1, escape_char => "\\"}); # create a new object my @newCsvFile; my $lastMinute=""; my $thisMinute=""; my $lastInterval=""; my $lineNo = 0; foreach my $line (@csvFile) { $line =~ s/(\r|\n)//g; # strip new lines my $status = $csv->parse($line); # parse a CSV string into fields my @fields = $csv->fields(); # get the parsed fields # files come with wrong dateformat. change it to as requested. # comes as "yyyy/MM/dd HH:mm:ss" # change to "yyyyMMdd HHmmss" # just parse out / and : if (!defined($fields[0])) { &errorLog("undefined date field. csv parse status was $status. skipping rest of file."); &errorLog("data: parsed $fields[0] from $line\n"); last; # skip the rest of this file. } my $newdate = $fields[0]; if ($lineNo > 0 && $filename !~ /UserComments\.csv$/ ) { # on rows other than the header, make sure that this interval is 15 minutes ahead of the last one $newdate =~ /\d+\/\d+\/\d+\s+\d+:(\d+):\d+/; $thisMinute = $1; my $dateOK = 0; if ($lastMinute ne "" ) { # not the first time through the loop. if ($lastMinute eq "00" && $thisMinute eq "15") { $dateOK = 1; } if ($lastMinute eq "15" && $thisMinute eq "30") { $dateOK = 1; } if ($lastMinute eq "30" && $thisMinute eq "45") { $dateOK = 1; } if ($lastMinute eq "45" && $thisMinute eq "00") { $dateOK =1; } if ($dateOK != 1) { &missingInterval($lastInterval, $newdate, $lineNo); } } $lastMinute = "$thisMinute"; $lastInterval = "$newdate"; } $newdate =~ s/\///g; $newdate =~ s/://g; $fields[0] = $newdate; my @columns; push(@columns, $fields[0]); for (my $x = 1; $x <= $#keepFields; $x++) { push(@columns, $fields[$keepFields[$x]]); } $status = $csv->combine (@columns); # combine columns into a string my $csvLine = $csv->string (); # get the combined string push(@newCsvFile, $csvLine . "\n"); $lineNo++; } if ( defined($newCsvFile[1]) ) { my @fields = split( ",", $newCsvFile[1] ); my $firstFileDate = $fields[0]; #&log("Have $firstFileDate as date from $newCsvFile[1]\n"); # remove leading spaces just in case, then remove all numbers (the time) after a space $firstFileDate =~ s/\"//g; $firstFileDate =~ s/^\s+//g; $firstFileDate =~ s/ \d+//g; &validate(@newCsvFile); my $outFileName; if ( $filename =~ /UserComments\.csv$/ ) { #this is a user comments file $outFileName = $wier . "-UserComments-$firstFileDate.csv"; } else { # it isn't an events file as we skipped those, so it must be wier data $outFileName = $wier . "-" . $firstFileDate . ".csv"; if ( $#newCsvFile != 96 ) { &errorLog("$outFileName had $#newCsvFile rows instead of 96.\n"); } } $outFileName = $localDataDir . $outFileName; my $ofh; open( $ofh, ">" . $outFileName ) or &exitLog("Couln't open $localDataDir/$outFileName for writing: $!\n" ); print $ofh @newCsvFile; close $ofh; push( @outFiles, $outFileName ); &log("wrote csv file $outFileName successfully.\n"); } else { if ( $filename !~ /UserComments\.csv$/ ) { &errorLog("skipping csv file with less than 2 lines ($#newCsvFile): $filename\n"); } } # end if more than 1 lines in CSV file } # end if type was csv } # end for mime part unlink($tempFile); } # next tempfile (email message) if (@outFiles > 0) { if ($error == 0) { # ok now ftp the files away. my $ftp = Net::FTP->new( $ftpServer, Debug => 0 ) or &exitLog("Cannot connect to $ftpServer: $@"); $ftp->login( $ftpUsername, $ftpPassword ) or &exitLog( "Cannot login to FTP " . $ftp->message ); $ftp->cwd($ftpDir); foreach my $outFile (@outFiles) { my $remoteFileSize = $ftp->size($outFile); if ( defined($remoteFileSize) ) { if ( $remoteFileSize > 0 ) { # file exists, let's assume we are replacing it and delete the old one $ftp->delete($outFile); &log("file exists on FTP, deleting the old $outFile\n"); } } if ( $ftp->put("$outFile") ) { &log("uploaded $outFile to $ftpServer.\n"); } } $ftp->quit(); } # do for mirror regardless of error. # ok now ftp the files away. my $ftp2 = Net::FTP->new( $ftpServer2, Debug => 0 ) or &exitLog("Cannot connect to $ftpServer2: $@"); $ftp2->login( $ftpUsername2, $ftpPassword2 ) or &exitLog( "Cannot login to FTP " . $ftp2->message ); $ftp2->cwd($ftpDir2); foreach my $outFile (@outFiles) { my $remoteFileSize = $ftp2->size($outFile); if ( defined($remoteFileSize) ) { if ( $remoteFileSize > 0 ) { # file exists, let's assume we are replacing it and delete the old one $ftp2->delete($outFile); &log("file exists on FTP, deleting the old $outFile\n"); } } if ( $ftp2->put("$outFile") ) { &log("uploaded $outFile to $ftpServer2.\n"); } } $ftp2->quit(); } if ($error) { &exitLog("Script completed but with errors. Data NOT uploaded FTP2.\n"); } sub log { my $logText = shift; my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time); $year += 1900; $mon++; if ( $sec < 10) { $sec = "0" . $sec; } if ( $min < 10) { $min = "0" . $min; } if ( $hour < 10) { $hour = "0" . $hour; } if ( $mday < 10) { $mday = "0" . $mday; } if ( $mon < 10) { $mon = "0" . $mon; } my $logTime = $year . "-" . $mon . "-$mday $hour:$min:$sec "; # open(FH, ">>" . $submissionPath . "submissionLog.txt") or warn "couldn't open logfile in $submissionPath: $!\n" ;# print $logTime . $logText ; $error_text .= $logTime . $logText ; # close FH; } sub errorLog { my $errText = shift; # set global error flag. $error = 1; &log("ERROR: " . $errText); } sub exitLog { my $reason = shift; &log($reason); # send an email! MIME::Lite->send( 'smtp', $pop3Server, Timeout => 60, AuthUser => $pop3Username, AuthPass => $pop3Password ); my $msg = MIME::Lite->new( From => 'foo@bar.com', To => 'foo@bar.com', # Cc =>'foo@bar.com', Subject => ' data FTP script error', Data => "This email is automatically generated by the script which uploads the data to the FTP server daily. It is only meant to be sent if there was a problem. You may have to manually upload the data!\n\n\n$error_text" ); $msg->send(); print $error_text; exit; } sub missingInterval { my $lastInterval = shift; my $thisInterval = shift; my $lineNo = shift; &log("Missing or incorrect interval at line # $lineNo : $lastInterval, $thisInterval\n"); $error =1; }
  • I found error on email active notication

    2
    0 Votes
    2 Posts
    2k Views
    S
    please help my email active notication always send "???ftl.subject.default.id(30:null)???" on the subject .. what should i do?? (sorry if my english is bad ^_^)
  • Logging.... interval... quantize

    3
    0 Votes
    3 Posts
    2k Views
    S
    i've decided to make 2 data sources... a/. source with 1 sec polling for realtime data b/. source with 15min polling and quantize checked source b is set for logging on time stamp so achieves the desired result. however, i'm also publishing this data (potentially both sources) with another scada instance retrieving the data. currently the publising data source is set for updates by changes. since the source is quantize, it would be nice if i could select 'timestamp' change for the update. presently i only see option to select 'all changes' which see's the client scada have per second updates, or 'changes only' which fails since the data value might not have changed. i'm using 1.12.0, has the publishing facility been changed to send updates based on timestamp? thanks skiv
  • Interactive graphical view

    3
    0 Votes
    3 Posts
    3k Views
    F
    I think you may create a custom page, you should start look at CustomViewExample.jsp.
  • OPC connection

    3
    0 Votes
    3 Posts
    5k Views
    F
    It seems that Mango M2M and Mango M2M2 are already retired and with no stable version and also no sources, so You'd better using Scadabr, it is a fork from Mango. Scadabr's forum is only in portuguese but you can post english messages there. Their suport is not good as the Mango used to be but there are sources available and it seems to work fine. There are lot of bugs also but the team is still active. http://sourceforge.net/projects/scadabr Also take a look at this: http://sourceforge.net/projects/scadabr/files/Software/Docs/OPC Configuration ScadaBR.pdf/download and this http://mango.serotoninsoftware.com/forum/posts/list/15/599.page
  • Examples on Mango

    3
    0 Votes
    3 Posts
    3k Views
    M
    There are many good examples in this forum. Look under the"stories"or "how to" sections. Your questions is very generic and would be best answered by spending some time reading. Pretty much everything you need to know is here.
  • Meta point and cron trigger

    3
    0 Votes
    3 Posts
    2k Views
    S
    i cannot use event triggers based on time because i need them to be dynamic... but an alternative would to have access the elapsed time of a trigger to i could see where its got to... can i do that?
  • Error in getting graphics from watchlist

    2
    0 Votes
    2 Posts
    2k Views
    G
    Hi all, When I try to get a graphic from watchlist points, I get the following error (on console). Going for logs, does not helps much. Any idea what might have happened here? ERROR 2011-07-26 10:21:45,448 (org.directwebremoting.util.CommonsLoggingOutput.error:75) - Missing : in conversion data (2011) WARN 2011-07-26 10:21:45,452 (org.directwebremoting.util.CommonsLoggingOutput.warn:67) - Marshalling exception org.directwebremoting.extend.MarshallException: Error marshalling int: Format error converting false. See the logs for more details. at org.directwebremoting.convert.PrimitiveConverter.convertInbound(PrimitiveConverter.java:49) at org.directwebremoting.dwrp.DefaultConverterManager.convertInbound(DefaultConverterManager.java:159) at org.directwebremoting.dwrp.BaseCallMarshaller.marshallInbound(BaseCallMarshaller.java:155) at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:44) at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101) at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662) WARN 2011-07-26 10:21:45,475 (org.directwebremoting.util.CommonsLoggingOutput.warn:59) - --Erroring: batchId[8] message[org.directwebremoting.extend.MarshallException: Error marshalling int: Format error converting false. See the logs for more details.] Thanks in advance! Gustavo
  • Clear the Event DB

    2
    0 Votes
    2 Posts
    2k Views
    N
    Hi guys, I would like to clean my event database, since it gives too much old Urgent messages and currently I have changed my alerting policies. How can this be done? I am using Ubuntu and I have tried to connect to the MangoDB directory by means of the "JavaDB/Derby embedded" driver of DBVisualizer, but I have not successed in it. My MangoM2M version is 1.12.4. Thanks in advance Bye
  • Derby->MySQL: ERROR 42X05: Table/View 'SYSTEMSETTINGS' does not exist.

    5
    0 Votes
    5 Posts
    5k Views
    A
    Use mango 1.12.3 ther are nop sources for versions > 1.12.3, or ask serotonin directly. Arne
  • Here are some view component examples

    8
    0 Votes
    8 Posts
    11k Views
    F
    Very useful examples, I would like to set an RTC clock using two select combobox: Hours 0-23 and Minutes 0-59. The datapoint must be set in seconds, so I need two combos performing some scripting like get the value of hours3600 plus minutes60. I am trying but could not do it yet. Here is my code, it works outside mango, but could not set the datapoint from this, anyone could help? &lt;script language="JavaScript"&gt; function checar() { campo1 = document.form.select1; campo2 = document.form.select2; if(campo1.value!=&quot;&quot;) { valor1=campo1.value; } else { valor1=&quot;&quot;; } if(campo2.value!=&quot;&quot;) { valor2=campo2.value; } else { valor2=&quot;&quot;; } um = valor1*3600; // hour to seconds dois = valor2*60; // minutes to seconds totalSec = um+dois; if(um==&quot;&quot; && dois==&quot;&quot;) { document.form.total.value=&quot;&quot;; } else { document.form.total.value=totalSec; //mango.view.setPoint(&quot;+ point.id +&quot;, \&quot;&quot;+ pointComponent.id +&quot;\&quot;, &quot;+totalSec+&quot; )'&gt;&quot;; } } &lt;/script&gt; &lt;form name="form"&gt; &lt;select name="select1" onChange="checar()"&gt; &lt;option&gt;&lt;/option&gt; &lt;option value="1"&gt;1&lt;/option&gt; &lt;option value="0"&gt;...&lt;/option&gt; &lt;option value="23"&gt;23&lt;/option&gt; &lt;/select&gt; &lt;select name="select2" onChange="checar()"&gt; &lt;option&gt;&lt;/option&gt; &lt;option value="1"&gt;1&lt;/option&gt; &lt;option value="0"&gt;...&lt;/option&gt; &lt;option value="59"&gt;59&lt;/option&gt; &lt;/select&gt; &lt;input type="text" name="total" value=""&gt; &lt;/form&gt;
  • SQL Data Source and temporary tables

    2
    0 Votes
    2 Posts
    3k Views
    G
    Hi, My sensors send SMS messages which are stored into a MySQL table (received_messages_t). Each message has basically: two fields (device_id+slave_id) for sensor identification, one field is timestamp, then I have "N" measurement fields (eg current, voltage etc). My approach was to define in Mango M2M one Data Source for each sensor, and then N Data Points (one for each measurement field). I guess a column based query is not suitable (only the first row of the result is used), so I would need a row-based query which extracts the messages sent from a sensor within a certain timeframe (eg during the last day), and puts data in 3 columns: Data Point Name, Data Point Value, Timestamp. Thus, each message will be splitted into N rows. I have successfully tested such a script (eg with MySQL Query Browser), which uses MySQL temporary tables: DROP TABLE if exists Dummy; DROP TABLE if exists dum_datasource_t; CREATE TEMPORARY TABLE Dummy ENGINE=MEMORY SELECT * FROM received_messages_t WHERE device_id=2 AND slave_id=2 AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= message_timestamp; CREATE TEMPORARY TABLE dum_datasource_t(Name VARCHAR(255) NOT NULL , Value VARCHAR(255) NOT NULL, Timestamp DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00')ENGINE=MEMORY; insert into dum_datasource_t(Name, Value, Timestamp) select 'Voltage_1', Dummy.Voltage_1, Dummy.message_timestamp from Dummy; ...(other Data Points)... insert into dum_datasource_t(Name, Value, Timestamp) select 'Voltage_N', Dummy.Voltage_N, Dummy.message_timestamp from Dummy; select * from dum_datasource_t; Now, if I use this as Select statement in my Mango Data Source, the Statement test execution gives: "class java.sql.SQLException: Can not issue data manipulation statements with executeQuery()." Any suggestion before trying to change Statement.executeQuery() into Statement.executeUpdate() in the source code? Any better way to handle this SQL Data Source? My Mango installation is using Derby, while Data Source is on a separate MySQL server, btw I do not think this is the point. Thank you in advance. Giorgio
  • Overlay text values onto dynamic graphic

    4
    0 Votes
    4 Posts
    3k Views
    J
    Well, I figured it out. I case anyone else would like to do this, I just changed this.cont.appendChild(this.cnv); to this.cont.insertBefore(this.cnv,this.cont.firstChild); in ROOT\resources\wz_jsgraphics.js
  • Error "getElement(mango.share.users, data.userId) is null"

    4
    0 Votes
    4 Posts
    4k Views
    P
    Thanks for the link. I had searched for the other error message before posting, so I had not seen your helpful link. I backed up MangoDB when troubleshooting, and got the same error when running the backed up database under older Mango versions. For some reason, lately I could no longer get Mango to initialize when using the originally backed up MangoDB, so I had to start Mango with an empty database and import the json files to recreate my setup, and re-upload the graphical background images. Consequently, I lost all my historical data points. Actually, they're still in the backup MangoDB, but since Mango won't load when that database is used, I don't know how to retrieve that historical data, let alone import it into the new database. That data is not critical at the moment, but when historical data becomes important, it concerns me that I may not be able to retrieve it. I created new usernames and set their home pages, and this time I was able to update passwords of users with homepages and save without seeing the null error. However, I just got that error again when updating the admin password: ERROR 2011-06-01 20:57:54,121 (com.serotonin.mango.web.filter.ExceptionDetectionFilter.doFilter:52) - DWR invocation exception java.lang.NullPointerException at com.serotonin.mango.web.dwr.DataPointDetailsDwr.getPointData(DataPointDetailsDwr.java:66) at com.serotonin.mango.web.dwr.MiscDwr.doLongPoll(MiscDwr.java:343) at sun.reflect.GeneratedMethodAccessor1306.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at com.serotonin.mango.web.dwr.util.LoggedInAjaxMethodFilter.doFilter(LoggedInAjaxMethodFilter.java:52) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at com.serotonin.web.dwr.LocalizationFilter.doFilter(LocalizationFilter.java:42) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at com.serotonin.mango.web.filter.ExceptionDetectionFilter.doFilter(ExceptionDetectionFilter.java:40) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431) at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283) at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52) at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101) at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:636) This error occurred even though I had previously set a homepage for user admin.
  • Chart and Thumbnail generation on Fedora Server (no x-server) not working

    3
    0 Votes
    3 Posts
    3k Views
    S
    Some may wonder what exactly I am trying to accomplish. The answer is to develop the leanest possible tomcat/mango server. I am trying to use a minimal install of Fedora 14 without x-server. OpenJDK 1.6.0 is being used along with Tomcat 7.0.14 to run Mango 1.12.4. There aren't any permission issues, that I know of, for absolutely everything else works in Mango M2M except the chart generation. I know there has to be a library that is missing that I don't have installed. If anyone has a clue what it could be...well, it would be so very MUCH appreciated.
  • Calculate Standard Deviation, Normal Distribution?

    4
    0 Votes
    4 Posts
    4k Views
    R
    Great, thanks!
  • Complete simulation setup (all the Links are given)

    2
    0 Votes
    2 Posts
    3k Views
    N
    In this tutorial (below link), you can find free tools ,to simulate PLC with Mango M2M http://scadaforplcs.blogspot.com/
  • Modbus rtu source via tcp gateway, polling trouble

    4
    0 Votes
    4 Posts
    4k Views
    S
    hi joohwan, sorry i'll try and break it down mango (since 1.8.1 i think) modbus I/O, RTU via a TCP gateway. all i know is it appears mango's polling mechanism is not geared towards multiple sources, i.e. there is no staggering of devices... and i've seen on site where this has risen to unrecoverable comms downtime. resetting the data source or restarting the instance is required. 2 other modbus masters I have at my disposal, seem to polling 'one at a time' and this works much better
  • Char encoding trouble ? ... Maybe not

    4
    0 Votes
    4 Posts
    4k Views
    V
    hello Patriator, another user from france is willing to help with the translation. post in french: http://www.scadabr.org.br/?q=node/127 (we use the same translation files from mango) would you be interested in joining efforts? this could be put into mango´s main release. best regards