Messages

class nat20.messages.AttractMode[source]
class nat20.messages.BatteryLevel(level: int, state: BatteryState)[source]

Current state of the battery.

Broadcast on changes (see Pixel.handler()) and reply to RequestBatteryLevel.

level: int

The current level of the battery, as a percent

state: BatteryState

The current charge state

class nat20.messages.BatteryState(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
BadCharging = 4

Attempted to charge, but something went wrong (eg, coil voltage is wrong from sitting crooked)

Charging = 2

Battery is charging

Done = 3

Battery is full and on craddle

Error = 5

WEIRDNESS (eg charging but no coil voltage)

Low = 1

Battery level is low, user should recharge

Ok = 0

Discharging

Do a custom blink.

Replied with BlinkAck

color: int
count: int
duration: int
face_mask: int
fade: int
loop: int
class nat20.messages.BlinkAck[source]

Reply to Blink.

class nat20.messages.BlinkId(brightness: int, loop: int)[source]
brightness: int
loop: int
class nat20.messages.BlinkIdAck[source]
class nat20.messages.BulkData[source]
class nat20.messages.BulkDataAck[source]
class nat20.messages.BulkSetup[source]
class nat20.messages.BulkSetupAck[source]
class nat20.messages.Calibrate[source]

Start the calibration process.

class nat20.messages.CalibrateFace(face: int)[source]

Immediately calibrate the given face.

face: int
class nat20.messages.DebugAnimationController[source]
class nat20.messages.DebugLog(text: str)[source]
text: str
class nat20.messages.DefaultAnimationSetColor[source]
class nat20.messages.DesignAndColor(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
AuroraSky = 12
Generic = 1
HematiteGrey = 10
MidnightGalaxy = 11
OnyxBlack = 9
Unknown = 0
V3Orange = 2
V4BlackClear = 3
V4WhiteClear = 4
V5Black = 7
V5Gold = 8
V5Grey = 5
V5White = 6
class nat20.messages.DieFlavor(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
D10 = 6
D12 = 7
D20 = 8
D4 = 1
D6 = 2
D6Fudge = 4
D6Pipped = 3
D8 = 5
property face_count: int

Return the number of faces this flavor has.

class nat20.messages.DisableCharging[source]
class nat20.messages.Discharge[source]
class nat20.messages.EnableCharging[source]
class nat20.messages.ExitValidation[source]
class nat20.messages.IAmADie(led_count: int, design_and_color: DesignAndColor, data_set_hash: int, pixel_id: int, available_flash: int, build_timestamp: datetime, roll_state: RollState_State, roll_face: int, batt_level: int, batt_state: BatteryState)[source]

A bunch of general info.

Reply to WhoAreYou

available_flash: int
batt_level: int

Current battery level as a percent

batt_state: BatteryState

Current battery percent

build_timestamp: datetime

Timestamp of when the firmware was built.

data_set_hash: int
design_and_color: DesignAndColor

The aesthetic design of the die

property face_count: int

The total number of faces

property flavor: DieFlavor

The kind of die this is, like D20 or Pipped D6

led_count: int

Number of LEDs

pixel_id: int

The factory-assigned die ID

roll_face: int

Current face that’s up, starting at 0. Validity depends on roll_state.

roll_state: RollState_State

Current roll state

to_batterylevel() BatteryLevel[source]

Repackages the battery information.

to_rollstate() RollState[source]

Repackages the rolling information.

class nat20.messages.LedLoopback[source]
class nat20.messages.LightUpFace[source]
class nat20.messages.NoneMessage[source]

Filler for message type 0.

class nat20.messages.NotifyUser(timeout: int, ok: bool, cancel: bool, text: str)[source]

Die asking the user a question

cancel: bool

Whether “cancel” is an accepted answer

ok: bool

Whether “ok” is an accepted answer

text: str

Prompt to show the user

timeout: int

How long the die will wait for a response, in seconds

class nat20.messages.NotifyUserAck(ok_cancel: OkCancel)[source]

Response to NotifyUser

ok_cancel: OkCancel
class nat20.messages.OkCancel(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Button enum for NotifyUserAck

Cancel = 0
Ok = 1
class nat20.messages.PlayAnimation(animation: int, remap_face: int, loop: int)[source]
animation: int
loop: int
remap_face: int
class nat20.messages.PlayAnimationEvent(evt: int, remap_face: int, loop: int)[source]
evt: int
loop: int
remap_face: int
class nat20.messages.PlayInstantAnimation[source]
class nat20.messages.PrintA2DReadings[source]
class nat20.messages.PrintNormals[source]
class nat20.messages.ProgramDefaultAnimationSet[source]
class nat20.messages.ProgramDefaultAnimationSetFinished[source]
class nat20.messages.ProgramDefaultParameters[source]
class nat20.messages.ProgramDefaultParametersFinished[source]
class nat20.messages.RemoteAction(action_id: int)[source]
action_id: int
class nat20.messages.RequestAnimationSet[source]
class nat20.messages.RequestBatteryLevel[source]

Request the current battery.

Replies with BatteryLevel.

class nat20.messages.RequestDefaultAnimationSetColor[source]
class nat20.messages.RequestMode(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

How much should a thing be reported.

(Called TelemetryRequestMode in other places.)

Off = 0

Turn repeating off

Once = 1

Do a one-shot request

Repeat = 2

Repeatedly send the data until turned off.

class nat20.messages.RequestRollState[source]

Request the current roll state.

Replied with RollState.

class nat20.messages.RequestRssi(request_mode: RequestMode, min_interval: int)[source]

Request RSSI.

Replied with Rssi.

min_interval: int

Interval of repeated reports, in milliseconds

request_mode: RequestMode

Set the reporting mode

class nat20.messages.RequestSettings[source]
class nat20.messages.RequestTelemetry[source]
class nat20.messages.RequestTemperature[source]

Get the current temperature

Die replies with Temperature.

class nat20.messages.RollState(state: RollState_State, face: int)[source]

The current motion.

Broadcast on changes (see Pixel.handler()) and is a reply to RequestRollState.

face: int

The upright face (starting at 0). Validity depends on roll_state.

state: RollState_State

The current motion

class nat20.messages.RollState_State(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

The current motion of the die.

Crooked = 4

The die is still but not flat and level

Handling = 2

I’m not sure how reliable the detection of this state is.)

Type:

The die is in hand (Note

OnFace = 1

The die is sitting flat and is not moving

Rolling = 3

The die is actively rolling

Unknown = 0
class nat20.messages.Rssi(rssi: int)[source]

Report the current RSSI as seen by the die.

See RequestRssi.

rssi: int
class nat20.messages.SetAllLEDsToColor[source]
class nat20.messages.SetCurrentBehavior[source]
class nat20.messages.SetCurrentBehaviorAck[source]
class nat20.messages.SetDesignAndColor[source]
class nat20.messages.SetDesignAndColorAck[source]
class nat20.messages.SetLEDToColor[source]
class nat20.messages.SetName(name: str)[source]

Change the name of the die.

name: str
class nat20.messages.SetNameAck[source]

Acknowledges SetName.

class nat20.messages.SetTopLevelState[source]
class nat20.messages.Sleep[source]
class nat20.messages.StopAllAnimations[source]

Stop all animations.

class nat20.messages.StopAnimation(animation: int, remap_face: int)[source]
animation: int
remap_face: int
class nat20.messages.Telemetry(battery_percent: int, battery_state: nat20.messages.BatteryState, voltage: int, v_coil: int, rssi: int, bt_channel: int, mcu_temp: int, battery_temp: int, internal_charge_state: int, force_disable_charging_state: int)[source]
battery_percent: int
battery_state: BatteryState
battery_temp: int

times 100

bt_channel: int

0-based

force_disable_charging_state: int
internal_charge_state: int
mcu_temp: int

times 100

rssi: int
v_coil: int

times 50

voltage: int

times 50

class nat20.messages.Temperature(mcu_temp: int, batt_temp: int)[source]
batt_temp: int

Battery temp in centidgrees Celsius

mcu_temp: int

CPU temp in centidegrees Celsius

class nat20.messages.TestBulkReceive[source]
class nat20.messages.TestBulkSend[source]
class nat20.messages.TestHardware[source]
class nat20.messages.TestLEDLoopback[source]
class nat20.messages.TransferAnimationSet[source]
class nat20.messages.TransferAnimationSetAck[source]
class nat20.messages.TransferAnimationSetFinished[source]
class nat20.messages.TransferInstantAnimationSet[source]
class nat20.messages.TransferInstantAnimationSetAck[source]
class nat20.messages.TransferInstantAnimationSetFinished[source]
class nat20.messages.TransferSettings[source]
class nat20.messages.TransferSettingsAck[source]
class nat20.messages.TransferSettingsFinished[source]
class nat20.messages.TransferTest[source]
class nat20.messages.TransferTestAck[source]
class nat20.messages.TransferTestAnimationSet[source]
class nat20.messages.TransferTestAnimationSetAck[source]
class nat20.messages.TransferTestAnimationSetFinished[source]
class nat20.messages.TransferTestFinished[source]
class nat20.messages.WhoAreYou[source]

Request some basic information.

Die replies with IAmADie.