xspanger3770 / GlobalQuake

Experimental application for monitoring earthquakes world-wide in near real time. Capable of issuing its own earthquake early warnings (EEW).
MIT License
293 stars 44 forks source link

some seedlink servers allow only 1 connected station? #22

Closed xspanger3770 closed 11 months ago

DecryptingElectrons commented 11 months ago

I noticed that rtserve.iris.washington.edu does not want to work for the NC network along with many other networks.

NCEDC has both a fdsnws-dataselect and a service called BARD. Both of which cover the NC network along with many other networks that iris does not want to serve from there seedlink server.

It would be possible to use ringserver from Earthscope/IRIS which has a feature which scans a directory for mseed files which it can make available through its seedlink server. This is slightly hacky and would require a program watching ringserver logs for channel stream requests and to start downloading that data and saving it in the dir.

It would also be possible to implement a stream-over-dataselect thread/process which runs in globalquake and works alongside the current seedlink method. One issue here is i have read IRIS does not want there dataselect service to be used for realtime, while NCEDC does not seem to care.

xspanger3770 commented 11 months ago

Thanks for the response!

Adding support for more protocols such as ringserver is definitely one of my considerations for future updates, although I haven't tested them yet. It might be needed to upgrade the code handling the processing of incoming data to accept more generic inputs than just seedlink packets and actually it needs upgrade anyways because it is not capable to accept data in varying order, which even the seedlink protocol sometimes does.

The other issue I noticed was that even though for example eida.bgr.de seedlink network reports many available stations, when selecting them, data only for one or two stations is arriving and I didn't really dig deeper into why...

And once again thanks for the help! Any further ideas appreciated.

xspanger3770 commented 11 months ago

Update: I tried running the following code:

  SeedlinkReader reader = new SeedlinkReader("eida.bgr.de", 18000);
  reader.select("SX", "SCHF", "", "HHZ");
  reader.select("GE", "RUE", "", "HHZ");
  reader.startData();
  while (reader.hasNext()) {
    SeedlinkPacket slp = reader.readPacket();
    System.out.println(slp.getMiniSeed().getHeader().getStationIdentifier()+", "+slp.getMiniSeed().getHeader().getChannelIdentifier()+", "+slp.getMiniSeed().getHeader().getLocationIdentifier());
   }

But every time the SeedlinkReader sends data for only the last station selected (RUE). This only happens to some seedlink hosts and idk why

xspanger3770 commented 11 months ago

Workaround will be in 0.9.4, full fix when library updates