Elite Observatory - Search your journal for potentially interesting objects, or notify you of new ones on the fly while exploring!

I've seen a few reports of that, will hopefully have a fix early next week!

I'll be the first to admit it's a little rough at the moment, and would still recommend the original Elite Observatory for regular day to day use. Thanks to everyone willing to test!

Yeah it crashed the first couple of time I started it, but then I manually pointed it at the journals folder and it stopped crashing. The big problem I have at the moment is every time it pops up a message it pulls me out of the game to the desktop. using the old one for serious work at the moment, will test again when the next version comes out.
 
Really happy with the feedback I'm getting so far, both here and elsewhere.

Awesome! I'll try it in-game tomorrow, but it's reading my journals just fine ATM.

I don't understand how to make custom criteria work. I tried copying the text of your example into a file in the default location with the default name and nothing is happening.
Yep, something's wrong. Looking into it.
 
Awesome! I'll try it in-game tomorrow, but it's reading my journals just fine ATM.

I don't understand how to make custom criteria work. I tried copying the text of your example into a file in the default location with the default name and nothing is happening.
That's a derp on my end. The file is only read once on program startup, as the explorer plugin is loaded. Choose the file, restart observatory, then it should work.
 
In your old app you seem to filter out double scan events.
As FSSing and DSSing trigger the exact same scan event in the journal mapped bodies now appear twice in the list and also trigger a second pop up after DSSing.

Screenshot 2021-06-07 180705.JPG
 
Screenshot 2021-06-09 002729.JPG

So, should this be a path were I can add multiple criteria files or should this be a single file and 'path' should be changed to 'file'?

Also: No more double notifications, yay :)
 
Yeah it crashed the first couple of time I started it, but then I manually pointed it at the journals folder and it stopped crashing. The big problem I have at the moment is every time it pops up a message it pulls me out of the game to the desktop. using the old one for serious work at the moment, will test again when the next version comes out.
With regard to the notification pulling you out of game, I assume you're playing in exclusive full screen, not borderless, and that you don't use the pop-up notifications on the original Observatory, as I expect they'd cause the same issue? If either of these are incorrect I'd be extremely interested to investigate further. Otherwise this is unfortunately the currently expected behavior, however there will be options added soon for other means of notification which shouldn't exhibit this issue.
 
With regard to the notification pulling you out of game, I assume you're playing in exclusive full screen, not borderless, and that you don't use the pop-up notifications on the original Observatory, as I expect they'd cause the same issue? If either of these are incorrect I'd be extremely interested to investigate further. Otherwise this is unfortunately the currently expected behavior, however there will be options added soon for other means of notification which shouldn't exhibit this issue.

I figured that myself, it would probably work in windowed mode, however I do really like the audio notification rather than the visual so once they are implemented it won't be a problem, otherwise that's the only issue I had with the last version.
 
Could you make the list of found bodies automatically jump to the latest finding? Right now I have to manually scroll down to see what it found after FSSing.
 
Could you make the list of found bodies automatically jump to the latest finding? Right now I have to manually scroll down to see what it found after FSSing.
Yes. That's currently unimplemented, but planned. That lack of it isn't a bug, just something I haven't done yet. :D

It should be safe to assume that anything Elite Observatory does that Observatory Core doesn't do is planned and will be added before I call it officially "released".
 
Well, better to say something unneccessary than to miss something (I think). As the missed double entries showed this can sometimes avoid confusion.
Thanks for your work.
 
Ohhh I see a new version is in development... and I just added a future request on the github of the old one. Oh well.

Anyway, a wish list I guess:
  • Separate System and Body columns (also on the csv export).
  • ↪ Plus ability to copy just the System name from the context menu (easier pasting in galaxy map or EDSM etc).
  • A field in settings to specify custom text-to-speech response (similar to the custom copy template).
  • When reading old journal logs, perhaps the ability to specify a date-range would be nice? (doing everything takes a while and it goes unresponsive with lots of journals).
  • Maybe a flag for custom criteria to specify it only should run when monitoring but not when going through old journal logs (for example 'Unmapped high-value bodies' would trigger tons in old journals but you'd likely already have scanned those, vs when monitoring live it'd be useful to get that notification).
Like mentioned in the github request, I would really like to be able to customize what the text-to-speech response says, it doesn't make sense when monitoring for it to say the entire system name as you're already in there and some system names are really long. Would like to set it to something like: Body %body% meets criteria for %info%.

Also hoping the custom criteria gets a completely different way of doing it, because I can't really get things to work with the XML format. For example in the documentation it says "Atmosphere will return a simple 1 or 0 if they are populated" but it doesn't, it's not possible to do an Equal to 1 because the Atmosphere variable seems to be "No Atmosphere" or whatever the atmosphere is, but I can't do NOT-"No Atmosphere" either or exclude when it matches that. The OR-operator isn't willing to work for me either, at least I can't make it do criteria A+B+C OR A+B+D, it's very limited and infuriating to work with.

But still this is a really cool app and it's great it can go through old logs, hope the new version improves on the difficulty to make custom criteria.
 
Last edited:
Ohhh I see a new version is in development... and I just added a future request on the github of the old one. Oh well.

Anyway, a wish list I guess:
  • Separate System and Body columns (also on the csv export).
  • ↪ Plus ability to copy just the System name from the context menu (easier pasting in galaxy map or EDSM etc).
  • A field in settings to specify custom text-to-speech response (similar to the custom copy template).
  • When reading old journal logs, perhaps the ability to specify a date-range would be nice? (doing everything takes a while and it goes unresponsive with lots of journals).
  • Maybe a flag for custom criteria to specify it only should run when monitoring but not when going through old journal logs (for example 'Unmapped high-value bodies' would trigger tons in old journals but you'd likely already have scanned those, vs when monitoring live it'd be useful to get that notification).
Like mentioned in the github request, I would really like to be able to customize what the text-to-speech response says, it doesn't make sense when monitoring for it to say the entire system name as you're already in there and some system names are really long. Would like to set it to something like: Body %body% meets criteria for %info%.

Also hoping the custom criteria gets a completely different way of doing it, because I can't really get things to work with the XML format. For example in the documentation it says "Atmosphere will return a simple 1 or 0 if they are populated" but it doesn't, it's not possible to do an Equal to 1 because the Atmosphere variable seems to be "No Atmosphere" or whatever the atmosphere is, but I can't do NOT-"No Atmosphere" either or exclude when it matches that. The OR-operator isn't willing to work for me either, at least I can't make it do criteria A+B+C OR A+B+D, it's very limited and infuriating to work with.

But still this is a really cool app and it's great it can go through old logs, hope the new version improves on the difficulty to make custom criteria.
As you've noticed, a completely new version is in-progress, so a feature update on the old one is unlikely at this point. I'll keep all your suggestions in mind for it though, you definitely have some items worth adding.

As for custom criteria, the new version does use a completely different format which I'm hoping is much easier to write. It doesn't yet implement all of the values that are available in the original though, so depending on what you're looking for it might not currently be suitable (but hopefully will be soon). I'm also willing to help you with any xml criteria you're trying to create if you want to reach out in a PM or on Discord.

As to your specific issues with custom criteria mentioned here, I am very sure that the atmosphere check reduces to a simple 1 or 0 for whether there's an atmosphere or not. Your description of using the logical operators also is also missing any comparison tests. A+B+C OR A+B+D contains no logical tests. You need to do something like A+B+C>F OR A+B+D>F. If you have specific examples I might be able to correct them.
 
Is the voice feature not in the new version? Or am I missing something?
I don't like the pop-up notification on screen but can't see a way to disable that.
Sticking with the old version for now but looking forward to the new version reaching feature parity.
 
Lately the new version crashes regularly without any notification. I found some entries in the windows log though:

Application: ObservatoryCore.exe
CoreCLR Version: 5.0.521.16609
.NET Version: 5.0.5
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.Text.Json.JsonException: The JSON value could not be converted to System.String. Path: $.FLEETCARRIER.FLEETCARRIER_DISTANCE_TRAVELLED | LineNumber: 0 | BytePositionInLine: 4435.
---> System.InvalidOperationException: Cannot get the value of a token type 'Number' as a string.
at System.Text.Json.Utf8JsonReader.GetString()
at System.Text.Json.JsonPropertyInfo`1.ReadJsonAndSetMember(Object obj, ReadStack& state, Utf8JsonReader& reader)
at System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
at System.Text.Json.Serialization.JsonConverter`1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
at System.Text.Json.JsonPropertyInfo`1.ReadJsonAndSetMember(Object obj, ReadStack& state, Utf8JsonReader& reader)
at System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
at System.Text.Json.Serialization.JsonConverter`1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
--- End of inner exception stack trace ---
at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, Utf8JsonReader& reader, Exception ex)
at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore[TValue](JsonConverter jsonConverter, Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore[TValue](Utf8JsonReader& reader, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
at Observatory.JournalReader.ObservatoryDeserializer[TJournal](String json)
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at Observatory.LogMonitor.DeserializeAndInvoke(String line)
at Observatory.LogMonitor.LogChangedEvent(Object source, FileSystemEventArgs eventArgs)
at System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(WatcherChangeTypes changeType, ReadOnlySpan`1 name)
at System.IO.FileSystemWatcher.ParseEventBufferAndNotifyForEach(Byte[] buffer, UInt32 numBytes)
at System.IO.FileSystemWatcher.ReadDirectoryChangesCallback(UInt32 errorCode, UInt32 numBytes, AsyncReadState state)
at System.IO.FileSystemWatcher.<>c.<StartRaisingEvents>b__83_0(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* overlappedPointer)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pNativeOverlapped)
Folowed by another entry:


XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Application Error" />

  <EventID
Qualifiers="0">1000</EventID>
  <Version>0</Version>
  <Level>2</Level>
  <Task>100</Task>
  <Opcode>0</Opcode>
  <Keywords>0x80000000000000</Keywords>
  <TimeCreated SystemTime="2021-06-24T15:27:09.9047134Z" />
  <EventRecordID>30069</EventRecordID>
  <Correlation />
  <Execution ProcessID="0" ThreadID="0" />
  <Channel>Application</Channel>
  <Computer>Eahlstan</Computer>
  <Security />
  </System>
   
- <EventData>
  <Data>ObservatoryCore.exe</Data>
  <Data>0.0.159.2201</Data>
  <Data>605138bc</Data>
  <Data>KERNELBASE.dll</Data>
  <Data>10.0.19041.1023</Data>
  <Data>924f9cdb</Data>
  <Data>e0434352</Data>
  <Data>0000000000034b89</Data>
  <Data>4950</Data>
  <Data>01d7690bdaa09697</Data>
  <Data>D:\EDOBservatory\ObservatoryCore.exe</Data>
  <Data>C:\WINDOWS\System32\KERNELBASE.dll</Data>
  <Data>e13f3417-69aa-4f16-aeac-011148f645ea</Data>
  <Data />
  <Data />
  </EventData>
  </Event>
 
Last edited:
I really like the tiny moons and fast orbiting/rotational ones so I was trying to show more of that, especially now we have the possiblity of footfall on interesting atmospheric bodies...

I kinda have it working now, I found an example in an earlier post where it did a Greater compare with a multiply operator of landable and atmosphere, which I guess works but it's not exactly logical to multiply those values you know? But it still wouldn't exclude the "No Atmosphere" ones so I changed it to SurfacePressure which worked better, less hits except for the few extremely thin atmospheres of less than ~100Pa that aren't considered atmospheric bodies in Odyssey. Thankfully those are very rare anyway so I'm getting a lot less hits using the SurfacePressure instead.

I'm using Atmosphere as detail item because it really doesn't contain 1 or 0 but it does show the detailed atmosphere line as is from the journal entry, which from the documentation I expected from AtmosphereType:{Type} but that's less detailed somehow.

Also I tried to combine the two rules below into one with the OR operator but couldn't get that work but this is fine with two separate rules. Except that it doesn't say Tiny atmospheric landable but those tend to be a bit bigger and the details will show if there's an atmosphere on the tiny-criteria anyway.

XML:
<!-- Tiny landables (radius < 300km) with temperature and atmosphere -->

<Criteria Comparator="And">
    <Criteria Comparator="Less" Value="300001">
       <Operation Operator="None">
            <FirstValue Type="EventData">Radius</FirstValue>
       </Operation>
    </Criteria>
    <Criteria Comparator="Equal" Value="1">
        <Operation Operator="None">
            <FirstValue Type="EventData">Landable</FirstValue>
        </Operation>
    </Criteria>

    <Description>Tiny landable</Description>
    <Detail>
        <Item>Radius</Item>
        <Item>SurfaceTemperature</Item>
        <Item>Atmosphere</Item>
        <Item>SurfacePressure</Item>
    </Detail>
</Criteria>


<!-- Small atmospheric landables (radius 300km to 800km) with temperature and atmosphere -->

<Criteria Comparator="And">
    <Criteria Comparator="Between" LowerValue="300000" UpperValue="800000">
       <Operation Operator="None">
            <FirstValue Type="EventData">Radius</FirstValue>
       </Operation>
    </Criteria>
    <Criteria Comparator="Greater" Value="0.001">
        <Operation Operator="Multiply">
            <FirstValue Type="EventData">Landable</FirstValue>
            <SecondValue Type="EventData">SurfacePressure</SecondValue>
        </Operation>
    </Criteria>

    <Description>Small atmospheric landable</Description>
    <Detail>
        <Item>Radius</Item>
        <Item>SurfaceTemperature</Item>
        <Item>Atmosphere</Item>
        <Item>SurfacePressure</Item>
    </Detail>
</Criteria>

I know there's a "tiny worlds" checkbox in settings but it doesn't show the values that are now interesting to have in Odyssey since we can do footfall, but only if the temperature is below 800K and apparently the gravity limit is 2.7 G (source). I haven't added the gravity limit to the code above yet but maybe these details shouldn't be in the actual criteria but also in detailed columns. Perhaps it could show a green-ish background if the values are within footfall parameters?

After using it for a while in the wild now I feel like it would be great to always have Gravity, Temperature and Atmosphere type shown in details for all landables. I'm thinking maybe it would be easier to show all important journal details in their own columns for every criteria/rule regardless of what the criteria is checking? (basically removing the need to specify detail items with every criteria/rule, it's all there if you copy the journal entry so why not always show the most interesting values in collumns).
 
Last edited:
Is the voice feature not in the new version? Or am I missing something?
I don't like the pop-up notification on screen but can't see a way to disable that.
Sticking with the old version for now but looking forward to the new version reaching feature parity.

This is correct. Notifications are still WIP and the current one in the new version is placeholder. The new version is just for testing and I still suggest sticking to the old version as a "daily driver".

Lately the new version crashes regularly without any notification. I found some entries in the windows log though:


Folowed by another entry:


XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Application Error" />

  <EventID
Qualifiers="0">1000</EventID>
  <Version>0</Version>
  <Level>2</Level>
  <Task>100</Task>
  <Opcode>0</Opcode>
  <Keywords>0x80000000000000</Keywords>
  <TimeCreated SystemTime="2021-06-24T15:27:09.9047134Z" />
  <EventRecordID>30069</EventRecordID>
  <Correlation />
  <Execution ProcessID="0" ThreadID="0" />
  <Channel>Application</Channel>
  <Computer>Eahlstan</Computer>
  <Security />
  </System>
  
- <EventData>
  <Data>ObservatoryCore.exe</Data>
  <Data>0.0.159.2201</Data>
  <Data>605138bc</Data>
  <Data>KERNELBASE.dll</Data>
  <Data>10.0.19041.1023</Data>
  <Data>924f9cdb</Data>
  <Data>e0434352</Data>
  <Data>0000000000034b89</Data>
  <Data>4950</Data>
  <Data>01d7690bdaa09697</Data>
  <Data>D:\EDOBservatory\ObservatoryCore.exe</Data>
  <Data>C:\WINDOWS\System32\KERNELBASE.dll</Data>
  <Data>e13f3417-69aa-4f16-aeac-011148f645ea</Data>
  <Data />
  <Data />
  </EventData>
  </Event>
Are you sure you have the latest version (0.0.159.2201)? I'm aware of this error and have run into it myself, but it reports correctly to the error popup for me.
View attachment 243880
Either way though, will be fixed in the next release.
 
I really like the tiny moons and fast orbiting/rotational ones so I was trying to show more of that, especially now we have the possiblity of footfall on interesting atmospheric bodies...

I kinda have it working now, I found an example in an earlier post where it did a Greater compare with a multiply operator of landable and atmosphere, which I guess works but it's not exactly logical to multiply those values you know? But it still wouldn't exclude the "No Atmosphere" ones so I changed it to SurfacePressure which worked better, less hits except for the few extremely thin atmospheres of less than ~100Pa that aren't considered atmospheric bodies in Odyssey. Thankfully those are very rare anyway so I'm getting a lot less hits using the SurfacePressure instead.

I'm using Atmosphere as detail item because it really doesn't contain 1 or 0 but it does show the detailed atmosphere line as is from the journal entry, which from the documentation I expected from AtmosphereType:{Type} but that's less detailed somehow.

Also I tried to combine the two rules below into one with the OR operator but couldn't get that work but this is fine with two separate rules. Except that it doesn't say Tiny atmospheric landable but those tend to be a bit bigger and the details will show if there's an atmosphere on the tiny-criteria anyway.

XML:
<!-- Tiny landables (radius < 300km) with temperature and atmosphere -->

<Criteria Comparator="And">
    <Criteria Comparator="Less" Value="300001">
       <Operation Operator="None">
            <FirstValue Type="EventData">Radius</FirstValue>
       </Operation>
    </Criteria>
    <Criteria Comparator="Equal" Value="1">
        <Operation Operator="None">
            <FirstValue Type="EventData">Landable</FirstValue>
        </Operation>
    </Criteria>

    <Description>Tiny landable</Description>
    <Detail>
        <Item>Radius</Item>
        <Item>SurfaceTemperature</Item>
        <Item>Atmosphere</Item>
        <Item>SurfacePressure</Item>
    </Detail>
</Criteria>


<!-- Small atmospheric landables (radius 300km to 800km) with temperature and atmosphere -->

<Criteria Comparator="And">
    <Criteria Comparator="Between" LowerValue="300000" UpperValue="800000">
       <Operation Operator="None">
            <FirstValue Type="EventData">Radius</FirstValue>
       </Operation>
    </Criteria>
    <Criteria Comparator="Greater" Value="0.001">
        <Operation Operator="Multiply">
            <FirstValue Type="EventData">Landable</FirstValue>
            <SecondValue Type="EventData">SurfacePressure</SecondValue>
        </Operation>
    </Criteria>

    <Description>Small atmospheric landable</Description>
    <Detail>
        <Item>Radius</Item>
        <Item>SurfaceTemperature</Item>
        <Item>Atmosphere</Item>
        <Item>SurfacePressure</Item>
    </Detail>
</Criteria>

I know there's a "tiny worlds" checkbox in settings but it doesn't show the values that are now interesting to have in Odyssey since we can do footfall, but only if the temperature is below 800K and apparently the gravity limit is 2.7 G (source). I haven't added the gravity limit to the code above yet but maybe these details shouldn't be in the actual criteria but also in detailed columns. Perhaps it could show a green-ish background if the values are within footfall parameters?

After using it for a while in the wild now I feel like it would be great to always have Gravity, Temperature and Atmosphere type shown in details for all landables. I'm thinking maybe it would be easier to show all important journal details in their own columns for every criteria/rule regardless of what the criteria is checking? (basically removing the need to specify detail items with every criteria/rule, it's all there if you copy the journal entry so why not always show the most interesting values in collumns).
The values output to the "detail" text are not the same as the underlying values used in criteria evaluation. They're sanitised and formatted for display.

The multiplication style checks are a remnant from before the logical operations were added and leverage the fact that the underlying values for both landable and atmosphere are simply 1 or 0.

Here is your small atmospheric landable check reworked to use atmosphere instead of surface pressure:
XML:
    <!-- Small atmospheric landables (radius 300km to 800km) with temperature and atmosphere -->
    <Criteria Comparator="And">
        <Criteria Comparator="Between" LowerValue="300000" UpperValue="800000">
            <Operation Operator="None">
                <FirstValue Type="EventData">Radius</FirstValue>
            </Operation>
        </Criteria>
        <Criteria Comparator="Equal" Value="2">
            <Operation Operator="Add">
                <FirstValue Type="EventData">Landable</FirstValue>
                <SecondValue Type="EventData">Atmosphere</SecondValue>
            </Operation>
        </Criteria>
        <Description>Small atmospheric landable</Description>
        <Detail>
            <Item>Radius</Item>
            <Item>SurfaceTemperature</Item>
            <Item>Atmosphere</Item>
            <Item>SurfacePressure</Item>
        </Detail>
    </Criteria>

It could also be done by nesting two more "None" operators inside an "And", but I feel like the addition looks cleaner in this example and better illustrates the underlying 0/1 values.

As for combining both of these into a single criteria using "Or", logically it could be done, but as a single criteria it can only have one description (descriptions inside nested logical operations are ignored), so you'd lose the distinction between them in your output.
 
Back
Top Bottom