getPsDetailWithPsType

package
v0.0.0-...-391253a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 4, 2023 License: GPL-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package getPsDetailWithPsType - This file is auto-generated from the update_all.sh script. Do not modify anything here. Any changes to this EndPoint should be made in the data.go file. The only exception is the AppService.login package.

Index

Constants

View Source
const Disabled = false
View Source
const EndPointName = "AppService.getPsDetailWithPsType"
View Source
const Url = "/v1/powerStationService/getPsDetailWithPsType"

Variables

This section is empty.

Functions

This section is empty.

Types

type EndPoint

type EndPoint struct {
	api.EndPointStruct
	Request  Request
	Response Response
}

EndPoint - Holds the request, response and web method structures.

func Assert

func Assert(e api.EndPoint) EndPoint

Assert - Used to obtain locally scoped EndPoint methods, (not visible from api.EndPoint).

func Init

func Init(apiRoot api.Web) EndPoint

Init - Used to initialize a new endpoint instance. Usually called from an area.

func (EndPoint) CacheFilename

func (e EndPoint) CacheFilename() string

CacheFilename - Check if a cache file exists for this EndPoint.

func (EndPoint) Call

func (e EndPoint) Call() api.EndPoint

Call - Once RequestData is populated, this will access the iSolarCloud API and populate ResultData.

func (EndPoint) GetArea

func (e EndPoint) GetArea() api.AreaName

GetArea - Returns the API area that this EndPoint is located.

func (EndPoint) GetCacheTimeout

func (e EndPoint) GetCacheTimeout() time.Duration

GetCacheTimeout - Return the cache timeout for this EndPoint.

func (*EndPoint) GetData

func (e *EndPoint) GetData() api.DataMap

func (*EndPoint) GetDeviceModelCode

func (e *EndPoint) GetDeviceModelCode() string

func (*EndPoint) GetDeviceName

func (e *EndPoint) GetDeviceName() string

func (*EndPoint) GetDeviceSerial

func (e *EndPoint) GetDeviceSerial() string

func (EndPoint) GetEndPointData

func (e EndPoint) GetEndPointData() api.DataMap

func (EndPoint) GetEndPointDataTables

func (e EndPoint) GetEndPointDataTables() output.Tables

func (EndPoint) GetEndPointResultTable

func (e EndPoint) GetEndPointResultTable() output.Table

func (EndPoint) GetError

func (e EndPoint) GetError() error

GetError - Get the error code for this EndPoint.

func (EndPoint) GetJsonData

func (e EndPoint) GetJsonData(raw bool) output.Json

GetJsonData - Get the JSON representation of ResultData, either as condensed or "pretty".

func (EndPoint) GetName

func (e EndPoint) GetName() api.EndPointName

GetName - Returns the API EndPoint name.

func (*EndPoint) GetPsKey

func (e *EndPoint) GetPsKey() string

func (*EndPoint) GetPsKeys

func (e *EndPoint) GetPsKeys() []string

func (*EndPoint) GetPsName

func (e *EndPoint) GetPsName() string

func (*EndPoint) GetPsState

func (e *EndPoint) GetPsState() string

func (EndPoint) GetRequest

func (e EndPoint) GetRequest() Request

GetRequest - Get the Request structure as scoped by this endpoint.

func (EndPoint) GetRequestArgNames

func (e EndPoint) GetRequestArgNames() map[string]string

GetRequestArgNames -

func (EndPoint) GetRequestJson

func (e EndPoint) GetRequestJson() output.Json

GetRequestJson - Return the Request structure as a JSON string.

func (EndPoint) GetResponse

func (e EndPoint) GetResponse() Response

GetResponse - Get the Response structure as scoped by this endpoint.

func (EndPoint) GetResponseJson

func (e EndPoint) GetResponseJson() output.Json

GetResponseJson - Return the Response structure as a JSON string.

func (EndPoint) GetUrl

func (e EndPoint) GetUrl() api.EndPointUrl

GetUrl - Returns the API EndPoint url.

func (EndPoint) Help

func (e EndPoint) Help() string

Help - Return help information on the JSON structure used to populate RequestData.

func (EndPoint) Init

func (e EndPoint) Init(apiRoot api.Web) *EndPoint

Init - If the endpoint needs to be re-initialized.

func (EndPoint) IsDebug

func (e EndPoint) IsDebug() bool

IsDebug - Are we in debug mode?

func (EndPoint) IsDisabled

func (e EndPoint) IsDisabled() bool

IsDisabled - Is this endpoint disabled? See data.go Disabled constant.

func (EndPoint) IsError

func (e EndPoint) IsError() bool

IsError - Is there an error?

func (EndPoint) IsRequestValid

func (e EndPoint) IsRequestValid() error

IsRequestValid - Is api.RequestCommon and RequestData valid?

func (EndPoint) IsResponseValid

func (e EndPoint) IsResponseValid() error

IsResponseValid - Is api.ResponseCommon and ResultData valid?

func (EndPoint) MarshalJSON

func (e EndPoint) MarshalJSON() ([]byte, error)

MarshalJSON - Marshall the EndPoint.

func (EndPoint) ReadDataFile

func (e EndPoint) ReadDataFile() error

ReadDataFile - Read a JSON file and populate the ResultData structure. (File names will default to AREA-ENDPOINT.json )

func (EndPoint) RequestFingerprint

func (e EndPoint) RequestFingerprint() string

RequestFingerprint - Check if a cache file exists for this EndPoint.

func (EndPoint) RequestRef

func (e EndPoint) RequestRef() interface{}

RequestRef - Return the locally scoped Request structure.

func (EndPoint) RequestString

func (e EndPoint) RequestString() string

RequestString - Return the Request structure as a human-readable string.

func (EndPoint) ResponseRef

func (e EndPoint) ResponseRef() interface{}

ResponseRef - Return the locally scoped Response structure.

func (EndPoint) ResponseString

func (e EndPoint) ResponseString() string

ResponseString - Return the Response structure as a human-readable string.

func (EndPoint) ResultDataRef

func (e EndPoint) ResultDataRef() ResultData

ResultDataRef - Return the locally scoped ResultData structure.

func (EndPoint) SetCacheTimeout

func (e EndPoint) SetCacheTimeout(duration time.Duration) api.EndPoint

SetCacheTimeout - Set the cache timeout for this EndPoint. (Defaults to 1 hour.)

func (EndPoint) SetError

func (e EndPoint) SetError(format string, a ...interface{}) api.EndPoint

SetError - Set the error code for this EndPoint.

func (EndPoint) SetFilenamePrefix

func (e EndPoint) SetFilenamePrefix(format string, args ...interface{}) string

SetFilenamePrefix - Produce filename based on area and endpoint name.

func (EndPoint) SetRequest

func (e EndPoint) SetRequest(ref interface{}) api.EndPoint

SetRequest - Save an interface reference as either api.RequestCommon or RequestData.

func (EndPoint) SetRequestByJson

func (e EndPoint) SetRequestByJson(j output.Json) api.EndPoint

SetRequestByJson - Save RequestData from a JSON string.

func (EndPoint) SetResponse

func (e EndPoint) SetResponse(ref []byte) api.EndPoint

SetResponse - Save a JSON string to the Response structure. (Used by the web call method.)

func (EndPoint) String

func (e EndPoint) String() string

String - Stringer method for this EndPoint.

func (EndPoint) WriteDataFile

func (e EndPoint) WriteDataFile() error

WriteDataFile - Write to a file, the contents of ResultData as JSON. (File names will default to AREA-ENDPOINT.json )

type Request

type Request struct {
	api.RequestCommon
	RequestData
}

Request - Holds the api.RequestCommon and user RequestData structures. See data.go for request fields.

type RequestData

type RequestData struct {
	PsId valueTypes.PsId `json:"ps_id" required:"true"`
}

func (RequestData) Help

func (rd RequestData) Help() string

func (RequestData) IsValid

func (rd RequestData) IsValid() error

type Response

type Response struct {
	api.ResponseCommon
	ResultData ResultData `json:"result_data" PointIdReplace:"true"`
}

Response - Holds the api.ResponseCommon and endpoint specific ResultData structures. See data.go for response fields.

type ResultData

type ResultData struct {
	BatteryLevelPercent         valueTypes.Float     ``                                                                                                                   /* 134-byte string literal not displayed */
	ChargingDischargingPowerMap valueTypes.UnitValue `json:"charging_discharging_power_map" PointId:"charging_discharging_power_map" PointUpdateFreq:"UpdateFreqInstant"` // Holds the battery charge/discharge amount
	Co2ReduceTotal              valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
	CoalReduceTotal             valueTypes.UnitValue `json:"coal_reduce_total" PointId:"coal_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
	ConnectType                 valueTypes.Integer   `json:"connect_type" PointId:"connect_type" PointUpdateFreq:"UpdateFreqBoot"`
	CurrPower                   valueTypes.UnitValue `json:"curr_power" PointId:"curr_power" PointUpdateFreq:"UpdateFreqInstant"`
	DesignCapacity              valueTypes.UnitValue `json:"design_capacity" PointId:"design_capacity" PointUpdateFreq:"UpdateFreqBoot"`
	EnergyScheme                valueTypes.Generic   `json:"energy_scheme" PointId:"energy_scheme"`
	GcjLatitude                 valueTypes.Float     `json:"gcj_latitude" PointId:"gcj_latitude" PointUpdateFreq:"UpdateFreqBoot"`
	GcjLongitude                valueTypes.Float     `json:"gcj_longitude" PointId:"gcj_longitude" PointUpdateFreq:"UpdateFreqBoot"`
	HasAmmeter                  valueTypes.Bool      `json:"has_ammeter" PointId:"has_ammeter" PointUpdateFreq:"UpdateFreqBoot"`
	HouseholdInverterData       valueTypes.Generic   `json:"household_inverter_data" PointId:"household_inverter_data"`
	InstallerPsFaultStatus      valueTypes.Integer   `json:"installer_ps_fault_status" PointId:"installer_ps_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
	IsHaveEsInverter            valueTypes.Bool      `json:"is_have_es_inverter" PointId:"is_have_es_inverter" PointUpdateFreq:"UpdateFreqBoot"`
	IsSingleInverter            valueTypes.Bool      `json:"is_single_inverter" PointId:"is_single_inverter" PointUpdateFreq:"UpdateFreqBoot"`
	IsTransformSystem           valueTypes.Bool      `json:"is_transform_system" PointId:"is_transform_system" PointUpdateFreq:"UpdateFreqBoot"`
	Latitude                    valueTypes.Float     `json:"latitude" PointId:"latitude" PointUpdateFreq:"UpdateFreqBoot"`
	LoadPowerMap                valueTypes.UnitValue `json:"load_power_map" PointId:"load_power_map" PointUpdateFreq:"UpdateFreqInstant"`
	LoadPowerMapVirgin          valueTypes.UnitValue `json:"load_power_map_virgin"  PointIgnore:"true"`
	Longitude                   valueTypes.Float     `json:"longitude" PointId:"longitude" PointUpdateFreq:"UpdateFreqBoot"`
	MapLatitude                 valueTypes.Float     `json:"map_latitude" PointId:"map_latitude" PointUpdateFreq:"UpdateFreqBoot"`
	MapLongitude                valueTypes.Float     `json:"map_longitude" PointId:"map_longitude" PointUpdateFreq:"UpdateFreqBoot"`
	MeterReduceTotal            valueTypes.UnitValue `json:"meter_reduce_total" PointId:"meter_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
	MobileTel                   valueTypes.String    `json:"moble_tel" PointId:"mobile_tel" PointUpdateFreq:"UpdateFreqBoot"`
	MonthEnergy                 valueTypes.UnitValue `json:"month_energy" PointId:"month_energy" PointUpdateFreq:"UpdateFreqMonth"`
	MonthEnergyVirgin           valueTypes.UnitValue `json:"month_energy_virgin"  PointIgnore:"true"`
	MonthIncome                 valueTypes.UnitValue `json:"month_income" PointId:"month_income" PointUpdateFreq:"UpdateFreqMonth"`
	NegativeLoadMsg             valueTypes.Generic   `json:"negative_load_msg" PointId:"negative_load_msg"`
	OwnerPsFaultStatus          valueTypes.Integer   `json:"owner_ps_fault_status" PointId:"owner_ps_fault_status" PointUpdateFreq:"UpdateFreqInstant"`

	P83081Map       valueTypes.UnitValue `json:"p83081_map" PointId:"p83081" PointName:"Load Power" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83081MapVirgin valueTypes.UnitValue `json:"p83081_map_virgin"  PointIgnore:"true"`
	P83102Map       valueTypes.UnitValue `json:"p83102_map" PointId:"p83102" PointName:"Energy Purchased" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83102MapVirgin valueTypes.UnitValue `json:"p83102_map_virgin"  PointIgnore:"true"`
	P83102Percent   valueTypes.Float     `` /* 151-byte string literal not displayed */
	P83118Map       valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointName:"Energy Used" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83118MapVirgin valueTypes.UnitValue `json:"p83118_map_virgin"  PointIgnore:"true"`
	P83119Map       valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointName:"Energy Feed-In" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83119MapVirgin valueTypes.UnitValue `json:"p83119_map_virgin"  PointIgnore:"true"`
	P83120Map       valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointName:"Energy Battery Charge" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83120MapVirgin valueTypes.UnitValue `json:"p83120_map_virgin"  PointIgnore:"true"`
	P83122          valueTypes.Float     `json:"p83122" PointName:"Self Sufficiency Percent" PointUnit:"%" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83124Map       valueTypes.UnitValue `json:"p83124_map" PointId:"p83124" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83124MapVirgin valueTypes.UnitValue `json:"p83124_map_virgin"  PointIgnore:"true"`
	P83202Map       valueTypes.UnitValue `json:"p83202_map" PointId:"p83202" PointName:"Installed Power" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	P83202MapVirgin valueTypes.UnitValue `json:"p83202_map_virgin" PointIgnore:"true"`
	P83532MapVirgin valueTypes.UnitValue `json:"p83532_map_virgin"  PointIgnore:"true"`
	ZfzyMap         valueTypes.UnitValue `json:"zfzy_map" PointId:"zfzy_map" PointName:"Self Consumption Of PV" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	ZfzyMapVirgin   valueTypes.UnitValue `json:"zfzy_map_virgin"  PointIgnore:"true"`
	ZjzzMap         valueTypes.UnitValue `json:"zjzz_map" PointId:"zjzz_map" PointName:"Self Sufficiency" PointVirtual:"true" PointUpdateFreq:"UpdateFreq5Mins"`
	ZjzzMapVirgin   valueTypes.UnitValue `json:"zjzz_map_virgin"  PointIgnore:"true"`

	PowerChargeSet                valueTypes.Bool      `json:"power_charge_setted" PointId:"power_charge_set" PointUpdateFreq:"UpdateFreqBoot"`
	PowerGridPowerMap             valueTypes.UnitValue `json:"power_grid_power_map" PointId:"power_grid_power_map" PointUpdateFreq:"UpdateFreq5Mins"`
	PowerGridPowerMapVirgin       valueTypes.UnitValue `json:"power_grid_power_map_virgin"  PointIgnore:"true"`
	PsCountryId                   valueTypes.Integer   `json:"ps_country_id" PointId:"ps_country_id" PointUpdateFreq:"UpdateFreqBoot"`
	PsDeviceType                  valueTypes.Integer   `json:"ps_device_type" PointId:"ps_device_type" PointUpdateFreq:"UpdateFreqBoot"`
	PsFaultStatus                 valueTypes.Integer   `json:"ps_fault_status" PointId:"ps_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
	PsHealthStatus                valueTypes.Integer   `json:"ps_health_status" PointId:"ps_health_status" PointUpdateFreq:"UpdateFreqInstant"`
	PsLocation                    valueTypes.String    `json:"ps_location" PointId:"ps_location" PointUpdateFreq:"UpdateFreqBoot"`
	PsName                        valueTypes.String    `json:"ps_name" PointId:"ps_name" PointUpdateFreq:"UpdateFreqBoot"`
	PsKey                         valueTypes.PsKey     `json:"ps_ps_key" PointId:"ps_key" PointUpdateFreq:"UpdateFreqBoot"`
	PsState                       valueTypes.Bool      `json:"ps_state" PointId:"ps_state" PointUpdateFreq:"UpdateFreqInstant"`
	PsType                        valueTypes.Integer   `json:"ps_type" PointId:"ps_type" PointUpdateFreq:"UpdateFreqBoot"`
	PvPowerMap                    valueTypes.UnitValue `json:"pv_power_map" PointId:"pv_power_map" PointUpdateFreq:"UpdateFreq5Mins"`
	PvPowerMapVirgin              valueTypes.UnitValue `json:"pv_power_map_virgin"  PointIgnore:"true"`
	SelfConsumptionOffsetReminder valueTypes.Integer   `json:"self_consumption_offset_reminder" PointId:"self_consumption_offset_reminder" PointUpdateFreq:"UpdateFreqBoot"`
	So2ReduceTotal                valueTypes.UnitValue `json:"so2_reduce_total" PointId:"so2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
	TodayEnergy                   valueTypes.UnitValue `json:"today_energy" PointId:"today_energy" PointUpdateFreq:"UpdateFreqDay"`
	TodayEnergyVirgin             valueTypes.UnitValue `json:"today_energy_virgin"  PointIgnore:"true"`
	TodayIncome                   valueTypes.UnitValue `json:"today_income" PointId:"today_income" PointUpdateFreq:"UpdateFreqDay"`
	TotalEnergy                   valueTypes.UnitValue `json:"total_energy" PointId:"total_energy" PointUpdateFreq:"UpdateFreqTotal"`
	TotalEnergyVirgin             valueTypes.UnitValue `json:"total_energy_virgin"  PointIgnore:"true"`
	TotalIncome                   valueTypes.UnitValue `json:"total_income" PointId:"total_income" PointUpdateFreq:"UpdateFreqTotal"`
	TreeReduceTotal               valueTypes.UnitValue `json:"tree_reduce_total" PointId:"tree_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
	ValidFlag                     valueTypes.Bool      `json:"valid_flag" PointId:"valid_flag" PointUpdateFreq:"UpdateFreqBoot"`
	WgsLatitude                   valueTypes.Float     `json:"wgs_latitude" PointId:"wgs_latitude" PointUpdateFreq:"UpdateFreqBoot"`
	WgsLongitude                  valueTypes.Float     `json:"wgs_longitude" PointId:"wgs_longitude" PointUpdateFreq:"UpdateFreqBoot"`

	StorageInverterData []struct {
		GoStruct GoStruct.GoStruct `json:"-" PointIdFrom:"PsKey" PointIdReplace:"true"`

		PsKey                   valueTypes.PsKey     `json:"ps_key" PointId:"ps_key" PointUpdateFreq:"UpdateFreqBoot"`
		UUID                    valueTypes.Integer   `json:"uuid" PointId:"uuid" PointUpdateFreq:"UpdateFreqBoot"`
		CommunicationDevSn      valueTypes.String    `json:"communication_dev_sn" PointId:"communication_dev_sn" PointName:"Serial No" PointUpdateFreq:"UpdateFreqBoot"`
		DevStatus               valueTypes.Integer   `json:"dev_status" PointId:"dev_status" PointUpdateFreq:"UpdateFreqInstant"`
		DeviceCode              valueTypes.Integer   `json:"device_code" PointId:"device_code" PointUpdateFreq:"UpdateFreqBoot"`
		DeviceModelCode         valueTypes.String    `json:"device_model_code" PointId:"device_model_code" PointUpdateFreq:"UpdateFreqBoot"`
		DeviceName              valueTypes.String    `json:"device_name" PointId:"device_name" PointUpdateFreq:"UpdateFreqBoot"`
		DeviceState             valueTypes.Integer   `json:"device_state" PointId:"device_state" PointUpdateFreq:"UpdateFreqInstant"`
		DeviceType              valueTypes.Integer   `json:"device_type" PointId:"device_type" PointUpdateFreq:"UpdateFreqBoot"`
		DrmStatus               valueTypes.Integer   `json:"drm_status" PointId:"drm_status" PointUpdateFreq:"UpdateFreqBoot"`
		DrmStatusName           valueTypes.String    `json:"drm_status_name" PointId:"drm_status_name" PointUpdateFreq:"UpdateFreqBoot"`
		EnergyFlow              []valueTypes.Integer `json:"energy_flow" PointId:"energy_flow" PointArrayFlatten:"true" PointUpdateFreq:"UpdateFreq5Mins"`
		HasAmmeter              valueTypes.Bool      `json:"has_ammeter" PointId:"has_ammeter" PointUpdateFreq:"UpdateFreqBoot"`
		InstallerDevFaultStatus valueTypes.Integer   `json:"installer_dev_fault_status" PointId:"installer_dev_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
		InverterSn              valueTypes.String    `json:"inverter_sn" PointId:"inverter_sn" PointUpdateFreq:"UpdateFreqBoot"`
		OwnerDevFaultStatus     valueTypes.Integer   `json:"owner_dev_fault_status" PointId:"owner_dev_fault_status" PointUpdateFreq:"UpdateFreqInstant"`

		P13003Map       valueTypes.UnitValue `` /* 139-byte string literal not displayed */
		P13003MapVirgin valueTypes.UnitValue `json:"p13003_map_virgin"  PointIgnore:"true"`
		P13119Map       valueTypes.UnitValue `` /* 133-byte string literal not displayed */
		P13119MapVirgin valueTypes.UnitValue `json:"p13119_map_virgin"  PointIgnore:"true"`
		P13121Map       valueTypes.UnitValue `` /* 139-byte string literal not displayed */
		P13121MapVirgin valueTypes.UnitValue `json:"p13121_map_virgin"  PointIgnore:"true"`
		P13126Map       valueTypes.UnitValue `` /* 142-byte string literal not displayed */
		P13126MapVirgin valueTypes.UnitValue `json:"p13126_map_virgin"  PointIgnore:"true"`
		P13141          valueTypes.Float     `` /* 179-byte string literal not displayed */
		P13149Map       valueTypes.UnitValue `` /* 141-byte string literal not displayed */
		P13149MapVirgin valueTypes.UnitValue `json:"p13149_map_virgin"  PointIgnore:"true"`
		P13150Map       valueTypes.UnitValue `json:"p13150_map" PointId:"p13150" PointVirtual:"true" PointVirtualShift:"3" PointUpdateFreq:"UpdateFreq5Mins"`
		P13150MapVirgin valueTypes.UnitValue `json:"p13150_map_virgin" PointIgnore:"true"`
	} `json:"storage_inverter_data" PointId:"inverter"`

	RobotNumSweepCapacity struct {
		Num           valueTypes.Integer `json:"num" PointId:"num" PointUpdateFreq:"UpdateFreqBoot"`
		SweepCapacity valueTypes.Float   `json:"sweep_capacity" PointId:"sweep_capacity" PointUpdateFreq:"UpdateFreqBoot"`
	} `json:"robot_num_sweep_capacity" PointId:"robot"`
}

func AssertResultData

func AssertResultData(e api.EndPoint) ResultData

AssertResultData - Used to obtain locally scoped ResultData methods, (not visible from api.EndPoint).

func (*ResultData) IsValid

func (e *ResultData) IsValid() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL