Draw en Watchdog samen - de techniek
Draw en Watchdog zijn twee aparte plugins die graag samenwerken.
- Draw is bedoeld om objecten (lijnen, punten, rechtlijnige gebieden en cirkelvormige gebieden) op de kaart in te tekenen. Die objecten kunnen een vaste positie hebben (met hun eigen lengte- en breedtecoördinaten) of een positie die gerelateerd is aan ons eigen schip (en dan bewegen ze dus ook met ons eigen schip mee).
- Watchdog is bedoeld om in bepaalde situaties een alarm te geven.
In Draw kun je de begrenzingen van de ingetekende gebieden bepaalde kenmerken geven. Die gebiedsbegrenzingen worden in de originele, Engelstalige versie van Draw, aangeduid met "Boundaries". De kenmerken van die gebiedsbegrenzingen zijn “Exclusion”, “Inclusion” en “Neither”.
In de Nederlandse versie is "Boundaries" vertaald naar "Lijn (of rechtlijnig gebied)" en zijn de kenmerken "Exclusion", "Inclusion" en "Neither" vertaald in "te ontwijken", "beperkend" en "algemeen".
- Te Ontwijken gebieden. Dat zijn gebieden waar je buiten wilt blijven. Ze zijn herkenbaar door een arcering aan de binnenzijde van de lijnen;
- Beperkende gebieden. Dat zijn gebieden waar je juist NIET buiten wilt komen. Ze zijn herkenbaar door een arcering aan de buitenzijde van de lijnen;
- Algemene gebieden. Dat zijn gebieden waar je zowel binnen als buiten mag komen maar waarvan je wel wilt weten dát ze er zijn. Ze hebben geen arcering.
In Watchdog kun je aangeven of een alarm moet reageren op:
- alleen "te ontwijken" gebieden;
- alleen "beperkende" gebieden;
- alleen "algemene" gebieden of;
- alle gebieden.
Bovendien kun je in Watchdog aangeven of er alleen moet worden gereageerd op gebieden die in Draw zijn aangegeven als "geactiveerd" of "niet-geactiveerd" of op zowel de geactiveerde als de niet geactiveerde gebieden.
Het Watchdog gebiedsalarm kent 4 soorten alarm:
- Alarm als je een gebiedsgrens nadert van buitenaf gebaseerd op afstand. Dus bijvoorbeeld 0,5 NM vóór dat je er zult zijn;
- Alarm als je een gebiedsgrens nadert van buitenaf gebaseerd op tijd. Dus bijvoorbeeld 15 minuten vóór dat je er zult zijn;
- Alarm als je IN of juist BUITEN een gebied bent of dreigt te komen. Bijvoorbeeld ankeralarm;
- Alarm als er een AIS object in een gebied is.
Voor de eerste twee alarmtypen gebruikt Watchdog dezelfde kenmerken van een gebiedsbegrenzing als Draw doet. Ook kijkt Watchdog of de gebiedsbegrenzing in Draw al dan niet is geactiveerd.
Het derde alarmtype kijkt alleen maar naar een specifiek gebied, op basis van de zogenaamde "GUID". GUID is de afkorting van “globally unique identifier” oftewel "wereldwijde unieke identificatie" en is een uniek nummer dat door Draw is toegekend aan het gebied. Een GUID kan er bijvoorbeeld zo uitzien: 48c0ffff-ec1b-45f2-8792-4cfa6c6fffff.
Het vierde alarmtype kijkt naar een specifiek gebied om te controleren of zich daar een AIS-object binnen bevindt. In de praktijk gebruik je dat alarm om te waarschuwen als een ander schip (dat dan natuurlijk wel AIS-signalen moet uitzenden!) dat gebied binnen vaart.
Hoe communiceren Draw en Watchdog met elkaar?
Watchdog en Draw kunnen met elkaar communiceren door -in computertaal- onderling zogenaamde "JSON-berichten" uit te wisselen. JSON is de afkorting van "JavaScript Object Notation"
Om te kunnen bepalen of een alarm moet worden geactiveerd, heeft WD gebiedsinformatie nodig. WD vraagt daarom aan OD, via een JSON-bericht, of een bepaalde positie zich binnen een met OD gemaakt gebied bevindt. WD kan ook aan OD vragen of de gebiedsbegrenzing zich in een bepaalde staat bevindt ("geactiveerd" of "niet geactiveerd") en of het bepaalde kenmerken heeft ("te ontwijken", "beperkend" of "algemeen").
Naar aanleiding van het verzoek om informatie vanuit WD, gaat OD na welke punten en gebieden zich binnen de gevraagde positie bevinden. Vervolgens antwoordt OD aan WD met een bericht waarin de gegevens zijn opgenomen van het eerste gebied dat voldoet aan de gevraagde positie en de gevraagde staat en kenmerken.
WD gebruikt de ontvangen informatie om te bepalen of een alarm moet worden gegeven. Als het alarm wordt gegeven, kan WD daarbij ook de gegevens van het gebied tonen en de aanleiding voor het alarm (bijvoorbeeld "AIS-object gedetecteerd binnen gebiedsbegrenzing X").
De berichten binnen OpenCPN worden zodanig verzonden dat zij beschikbaar zijn voor zowel het hoofd-programma zelf als voor elke plugin die van die berichten gebruik wil maken. Daarbij moet elke plugin elk bericht verwerken en beantwoorden aan OpenCPN (de controller) voordat het bericht door de volgende plugin kan worden verwerkt.
OD-berichten kunnen worden gebruikt door elke willekeurige plugin en door OpenCPN zelf. Die OD-berichten hebben een structuur met de volgende elementen:
- de aanvrager van de informatie
- het type bericht (vraag of antwoord)
- de vraag zelf (bijvoorbeeld "Vind een punt binnen een willekeurig gebied")
- het berichten-identificatiekenmerk (met bijvoorbeeld ook een identificatiekenmerk van de vrager)
- en vervolgens nadere informatie in het bericht, zoals een bepaalde positie in Lengte en Breedte, een bepaald type object etc.
Een verzoek van WD aan OD kan er dus zo uitzien:
- Bron: “WATCHDOG_PI”
- Type: “Vraag"”
- Bericht: “"Vindeenpuntbinnenwillekeuriggebied"
- Bericht-identificatie: “afstand”
- lat: 54.0001
- lon: -30.1001
- Gebiedskenmerk: “Te ontwijken”
- Gebieds-staat: “Geactiveerd”
Die vraag krijgt dan een "bestemming", in dit geval “OCPN_DRAW_PI”, wanneer het verzoek aan OpenCPN (de controller) is afgerond.
Het antwoord kan er zo uitzien:
- Bron: “OCPN_DRAW_PI”
- Type: “Antwoord”
- Bericht: “"Vindeenpuntbinnenwillekeuriggebied"
- Bericht-identificatie: “afstand”
- GUID: “62ec7520-b58f-4087-b077-ae1c581dfec1”
- lat: 54.0001
- lon: -30.1001
- Naam: “Stenen”
- Omschrijving: “Goede visstek”
- Gevonden: Fout
- BegrenzingsObject: “Gebied”
- BegrenzingsType: “Te ontwijken”
Bij de verzending van het antwoord vermeldt het programma de bestemming van de vrager, in dit geval “WATCHDOG_PI”. Die bestemming wordt in het berichtenverkeer opgenomen zodat elke ontvanger (elke plugin of elk onderdeel van OpenCPN) eenvoudig kan controleren of het voor hem bestemd is.
Deze manier van berichtenverkeer wordt gebruikt door OD en WD, maar ook door andere plugins, zoals WR (Weather-Routing) en ook bij het verzenden van AIS-berichten binnen het programma. In sommige gevallen is geen antwoord vereist (zoals bij AIS-berichten) maar in andere gevallen is het antwoord van belang voor een goed verloop van het hele proces.
Het maakt OD niet uit van wie een bericht komt of waarom het is verzonden. OD reageert simpelweg op vragen met wat de plugin vindt bij het inspecteren van de verschillende OD objecten.
WD wil alleen maar weten of het moet alarmeren Ja of Nee, en stuurt daarom verzoekjes naar OD om er achter te komen of bepaalde condities aanwezig zijn.
AIS verstrekt alleen maar informatie over elk AIS-object waar het mee te maken krijgt.
In het WD-scherm kan worden aangegeven met welke tussenpozen WD bij OD gegevens moet checken.
Een ander punt dat het vermelden waard is, is dat voor elke gebieds-check bij een alarm dat is gebaseerd op tijd, er tot 11 positie-berichten worden uitgewisseld tussen OD en WD.
Bij een alarm dat is gebaseerd op afstand kan dat oplopen tot 163 positie-berichten.
Het berichtenverkeer kan dus vrij intensief zijn.
SAMEN zijn OD en WD dus een geweldige manier om het navigeren NOG veiliger te maken.
Met dank aan Roel Smidt voor de vertaling van deze gecompliceerde samenwerking.