pyasic

BFGMinerAPI

Bases: BaseMinerAPI

An abstraction of the BFGMiner API.

Each method corresponds to an API command in BFGMiner.

BFGMiner API documentation

This class abstracts use of the BFGMiner API, as well as the methods for sending commands to it. The self.send_command() function handles sending a command to the miner asynchronously, and as such is the base for many of the functions in this class, which rely on it to send the command for them.

Parameters:

Name Type Description Default
ip str

The IP of the miner to reference the API on.

required
port int

The port to reference the API on. Default is 4028.

4028
Source code in pyasic/API/bfgminer.py
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
class BFGMinerAPI(BaseMinerAPI):
    """An abstraction of the BFGMiner API.

    Each method corresponds to an API command in BFGMiner.

    [BFGMiner API documentation](https://github.com/luke-jr/bfgminer/blob/bfgminer/README.RPC)

    This class abstracts use of the BFGMiner API, as well as the
    methods for sending commands to it.  The self.send_command()
    function handles sending a command to the miner asynchronously, and
    as such is the base for many of the functions in this class, which
    rely on it to send the command for them.

    Parameters:
        ip: The IP of the miner to reference the API on.
        port: The port to reference the API on.  Default is 4028.
    """

    def __init__(self, ip: str, api_ver: str = "0.0.0", port: int = 4028):
        super().__init__(ip, port)
        self.api_ver = api_ver

    async def multicommand(self, *commands: str, allow_warning: bool = True) -> dict:
        # make sure we can actually run each command, otherwise they will fail
        commands = self._check_commands(*commands)
        # standard multicommand format is "command1+command2"
        # doesn't work for S19 which uses the backup _x19_multicommand
        command = "+".join(commands)
        try:
            data = await self.send_command(command, allow_warning=allow_warning)
        except APIError:
            logging.debug(f"{self} - (Multicommand) - Handling X19 multicommand.")
            data = await self._x19_multicommand(*command.split("+"))
        data["multicommand"] = True
        return data

    async def _x19_multicommand(self, *commands) -> dict:
        tasks = []
        # send all commands individually
        for cmd in commands:
            tasks.append(
                asyncio.create_task(self._handle_multicommand(cmd, allow_warning=True))
            )

        all_data = await asyncio.gather(*tasks)

        data = {}
        for item in all_data:
            data.update(item)

        return data

    async def version(self) -> dict:
        """Get miner version info.
        <details>
            <summary>Expand</summary>

        Returns:
            Miner version information.
        </details>
        """
        return await self.send_command("version")

    async def config(self) -> dict:
        """Get some basic configuration info.
        <details>
            <summary>Expand</summary>

        Returns:
            ## Some miner configuration information:
                * ASC Count <- the number of ASCs
                * PGA Count <- the number of PGAs
                * Pool Count <- the number of Pools
                * Strategy <- the current pool strategy
                * Log Interval <- the interval of logging
                * Device Code <- list of compiled device drivers
                * OS <- the current operating system
                * Failover-Only <- failover-only setting
                * Scan Time <- scan-time setting
                * Queue <- queue setting
                * Expiry <- expiry setting
        </details>
        """
        return await self.send_command("config")

    async def summary(self) -> dict:
        """Get the status summary of the miner.
        <details>
            <summary>Expand</summary>

        Returns:
            The status summary of the miner.
        </details>
        """
        return await self.send_command("summary")

    async def pools(self) -> dict:
        """Get pool information.
        <details>
            <summary>Expand</summary>

        Returns:
            Miner pool information.
        </details>
        """
        return await self.send_command("pools")

    async def devs(self) -> dict:
        """Get data on each PGA/ASC with their details.
        <details>
            <summary>Expand</summary>

        Returns:
            Data on each PGA/ASC with their details.
        </details>
        """
        return await self.send_command("devs")

    async def procs(self) -> dict:
        """Get data on each processor with their details.
        <details>
            <summary>Expand</summary>

        Returns:
            Data on each processor with their details.
        </details>
        """
        return await self.send_command("procs")

    async def devscan(self, info: str = "") -> dict:
        """Get data on each processor with their details.
        <details>
            <summary>Expand</summary>

        Parameters:
            info: Info to scan for device by.

        Returns:
            Data on each processor with their details.
        </details>
        """
        return await self.send_command("devscan", parameters=info)

    async def pga(self, n: int) -> dict:
        """Get data from PGA n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The PGA number to get data from.

        Returns:
            Data on the PGA n.
        </details>
        """
        return await self.send_command("pga", parameters=n)

    async def proc(self, n: int = 0) -> dict:
        """Get data processor n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The processor to get data on.

        Returns:
            Data on processor n.
        </details>
        """
        return await self.send_command("proc", parameters=n)

    async def pgacount(self) -> dict:
        """Get data fon all PGAs.
        <details>
            <summary>Expand</summary>

        Returns:
            Data on the PGAs connected.
        </details>
        """
        return await self.send_command("pgacount")

    async def proccount(self) -> dict:
        """Get data fon all processors.
        <details>
            <summary>Expand</summary>

        Returns:
            Data on the processors connected.
        </details>
        """
        return await self.send_command("proccount")

    async def switchpool(self, n: int) -> dict:
        """Switch pools to pool n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The pool to switch to.

        Returns:
            A confirmation of switching to pool n.
        </details>
        """
        return await self.send_command("switchpool", parameters=n)

    async def enablepool(self, n: int) -> dict:
        """Enable pool n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The pool to enable.

        Returns:
            A confirmation of enabling pool n.
        </details>
        """
        return await self.send_command("enablepool", parameters=n)

    async def addpool(self, url: str, username: str, password: str) -> dict:
        """Add a pool to the miner.
        <details>
            <summary>Expand</summary>

        Parameters:
            url: The URL of the new pool to add.
            username: The users username on the new pool.
            password: The worker password on the new pool.

        Returns:
            A confirmation of adding the pool.
        </details>
        """
        return await self.send_command(
            "addpool", parameters=f"{url},{username},{password}"
        )

    async def poolpriority(self, *n: int) -> dict:
        """Set pool priority.
        <details>
            <summary>Expand</summary>

        Parameters:
            *n: Pools in order of priority.

        Returns:
            A confirmation of setting pool priority.
        </details>
        """
        pools = f"{','.join([str(item) for item in n])}"
        return await self.send_command("poolpriority", parameters=pools)

    async def poolquota(self, n: int, q: int) -> dict:
        """Set pool quota.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: Pool number to set quota on.
            q: Quota to set the pool to.

        Returns:
            A confirmation of setting pool quota.
        </details>
        """
        return await self.send_command("poolquota", parameters=f"{n},{q}")

    async def disablepool(self, n: int) -> dict:
        """Disable a pool.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: Pool to disable.

        Returns:
            A confirmation of diabling the pool.
        </details>
        """
        return await self.send_command("disablepool", parameters=n)

    async def removepool(self, n: int) -> dict:
        """Remove a pool.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: Pool to remove.

        Returns:
            A confirmation of removing the pool.
        </details>
        """
        return await self.send_command("removepool", parameters=n)

    async def save(self, filename: str = None) -> dict:
        """Save the config.
        <details>
            <summary>Expand</summary>

        Parameters:
            filename: Filename to save the config as.

        Returns:
            A confirmation of saving the config.
        </details>
        """
        if filename:
            return await self.send_command("save", parameters=filename)
        else:
            return await self.send_command("save")

    async def quit(self) -> dict:
        """Quit CGMiner.
        <details>
            <summary>Expand</summary>

        Returns:
            A single "BYE" before CGMiner quits.
        </details>
        """
        return await self.send_command("quit")

    async def notify(self) -> dict:
        """Notify the user of past errors.
        <details>
            <summary>Expand</summary>

        Returns:
            The last status and count of each devices problem(s).
        </details>
        """
        return await self.send_command("notify")

    async def privileged(self) -> dict:
        """Check if you have privileged access.
        <details>
            <summary>Expand</summary>

        Returns:
            The STATUS section with an error if you have no privileged access, or success if you have privileged access.
        </details>
        """
        return await self.send_command("privileged")

    async def pgaenable(self, n: int) -> dict:
        """Enable PGA n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The PGA to enable.

        Returns:
            A confirmation of enabling PGA n.
        </details>
        """
        return await self.send_command("pgaenable", parameters=n)

    async def pgadisable(self, n: int) -> dict:
        """Disable PGA n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The PGA to disable.

        Returns:
            A confirmation of disabling PGA n.
        </details>
        """
        return await self.send_command("pgadisable", parameters=n)

    async def pgarestart(self, n: int) -> dict:
        """Restart PGA n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The PGA to restart.

        Returns:
            A confirmation of restarting PGA n.
        </details>
        """
        return await self.send_command("pgadisable", parameters=n)

    async def pgaidentify(self, n: int) -> dict:
        """Identify PGA n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The PGA to identify.

        Returns:
            A confirmation of identifying PGA n.
        </details>
        """
        return await self.send_command("pgaidentify", parameters=n)

    async def procenable(self, n: int) -> dict:
        """Enable processor n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The processor to enable.

        Returns:
            A confirmation of enabling processor n.
        </details>
        """
        return await self.send_command("procenable", parameters=n)

    async def procdisable(self, n: int) -> dict:
        """Disable processor n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The processor to disable.

        Returns:
            A confirmation of disabling processor n.
        </details>
        """
        return await self.send_command("procdisable", parameters=n)

    async def procrestart(self, n: int) -> dict:
        """Restart processor n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The processor to restart.

        Returns:
            A confirmation of restarting processor n.
        </details>
        """
        return await self.send_command("procdisable", parameters=n)

    async def procidentify(self, n: int) -> dict:
        """Identify processor n.
        <details>
            <summary>Expand</summary>

        Parameters:
            n: The processor to identify.

        Returns:
            A confirmation of identifying processor n.
        </details>
        """
        return await self.send_command("procidentify", parameters=n)

    async def devdetails(self) -> dict:
        """Get data on all devices with their static details.
        <details>
            <summary>Expand</summary>

        Returns:
            Data on all devices with their static details.
        </details>
        """
        return await self.send_command("devdetails")

    async def restart(self) -> dict:
        """Restart CGMiner using the API.
        <details>
            <summary>Expand</summary>

        Returns:
            A reply informing of the restart.
        </details>
        """
        return await self.send_command("restart")

    async def stats(self) -> dict:
        """Get stats of each device/pool with more than 1 getwork.
        <details>
            <summary>Expand</summary>

        Returns:
            Stats of each device/pool with more than 1 getwork.
        </details>
        """
        return await self.send_command("stats")

    async def check(self, command: str) -> dict:
        """Check if the command command exists in CGMiner.
        <details>
            <summary>Expand</summary>

        Parameters:
            command: The command to check.

        Returns:
            ## Information about a command:
                * Exists (Y/N) <- the command exists in this version
                * Access (Y/N) <- you have access to use the command
        </details>
        """
        return await self.send_command("check", parameters=command)

    async def failover_only(self, failover: bool) -> dict:
        """Set failover-only.
        <details>
            <summary>Expand</summary>

        Parameters:
            failover: What to set failover-only to.

        Returns:
            Confirmation of setting failover-only.
        </details>
        """
        return await self.send_command("failover-only", parameters=failover)

    async def coin(self) -> dict:
        """Get information on the current coin.
        <details>
            <summary>Expand</summary>

        Returns:
            ## Information about the current coin being mined:
                * Hash Method <- the hashing algorithm
                * Current Block Time <- blocktime as a float, 0 means none
                * Current Block Hash <- the hash of the current block, blank means none
                * LP <- whether LP is in use on at least 1 pool
                * Network Difficulty: the current network difficulty
        </details>
        """
        return await self.send_command("coin")

    async def debug(self, setting: str) -> dict:
        """Set a debug setting.
        <details>
            <summary>Expand</summary>

        Parameters:
            setting: Which setting to switch to.
                ## Options are:
                    * Silent
                    * Quiet
                    * Verbose
                    * Debug
                    * RPCProto
                    * PerDevice
                    * WorkTime
                    * Normal

        Returns:
            Data on which debug setting was enabled or disabled.
        </details>
        """
        return await self.send_command("debug", parameters=setting)

    async def setconfig(self, name: str, n: int) -> dict:
        """Set config of name to value n.
        <details>
            <summary>Expand</summary>

        Parameters:
            name: The name of the config setting to set.
                ## Options are:
                    * queue
                    * scantime
                    * expiry
            n: The value to set the 'name' setting to.

        Returns:
            The results of setting config of name to n.
        </details>
        """
        return await self.send_command("setconfig", parameters=f"{name},{n}")

    async def pgaset(self, n: int, opt: str, val: int = None) -> dict:
        """Set PGA option opt to val on PGA n.
        <details>
            <summary>Expand</summary>

        Options:
        ```
            MMQ -
                opt: clock
                val: 2 - 250 (multiple of 2)
            XBS -
                opt: clock
                val: 2 - 250 (multiple of 2)
        ```

        Parameters:
            n: The PGA to set the options on.
            opt: The option to set. Setting this to 'help' returns a help message.
            val: The value to set the option to.

        Returns:
            Confirmation of setting PGA n with opt[,val].
        </details>
        """
        if val:
            return await self.send_command("pgaset", parameters=f"{n},{opt},{val}")
        else:
            return await self.send_command("pgaset", parameters=f"{n},{opt}")

    async def pprocset(self, n: int, opt: str, val: int = None) -> dict:
        """Set processor option opt to val on processor n.
        <details>
            <summary>Expand</summary>

        Options:
        ```
            MMQ -
                opt: clock
                val: 2 - 250 (multiple of 2)
            XBS -
                opt: clock
                val: 2 - 250 (multiple of 2)
        ```

        Parameters:
            n: The PGA to set the options on.
            opt: The option to set. Setting this to 'help' returns a help message.
            val: The value to set the option to.

        Returns:
            Confirmation of setting PGA n with opt[,val].
        </details>
        """
        if val:
            return await self.send_command("pgaset", parameters=f"{n},{opt},{val}")
        else:
            return await self.send_command("pgaset", parameters=f"{n},{opt}")

    async def zero(self, which: str, summary: bool) -> dict:
        """Zero a device.
        <details>
            <summary>Expand</summary>

        Parameters:
            which: Which device to zero. Setting this to 'all' zeros all devices. Setting this to 'bestshare' zeros only the bestshare values for each pool and global.
            summary: Whether or not to show a full summary.


        Returns:
            the STATUS section with info on the zero and optional summary.
        </details>
        """
        return await self.send_command("zero", parameters=f"{which},{summary}")

addpool(url, username, password) async

Add a pool to the miner.

Expand

Parameters:

Name Type Description Default
url str

The URL of the new pool to add.

required
username str

The users username on the new pool.

required
password str

The worker password on the new pool.

required

Returns:

Type Description
dict

A confirmation of adding the pool.

Source code in pyasic/API/bfgminer.py
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
async def addpool(self, url: str, username: str, password: str) -> dict:
    """Add a pool to the miner.
    <details>
        <summary>Expand</summary>

    Parameters:
        url: The URL of the new pool to add.
        username: The users username on the new pool.
        password: The worker password on the new pool.

    Returns:
        A confirmation of adding the pool.
    </details>
    """
    return await self.send_command(
        "addpool", parameters=f"{url},{username},{password}"
    )

check(command) async

Check if the command command exists in CGMiner.

Expand

Parameters:

Name Type Description Default
command str

The command to check.

required

Returns:

Type Description
dict
Information about a command:
  • Exists (Y/N) <- the command exists in this version
  • Access (Y/N) <- you have access to use the command
Source code in pyasic/API/bfgminer.py
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
async def check(self, command: str) -> dict:
    """Check if the command command exists in CGMiner.
    <details>
        <summary>Expand</summary>

    Parameters:
        command: The command to check.

    Returns:
        ## Information about a command:
            * Exists (Y/N) <- the command exists in this version
            * Access (Y/N) <- you have access to use the command
    </details>
    """
    return await self.send_command("check", parameters=command)

coin() async

Get information on the current coin.

Expand

Returns:

Type Description
dict
Information about the current coin being mined:
  • Hash Method <- the hashing algorithm
  • Current Block Time <- blocktime as a float, 0 means none
  • Current Block Hash <- the hash of the current block, blank means none
  • LP <- whether LP is in use on at least 1 pool
  • Network Difficulty: the current network difficulty
Source code in pyasic/API/bfgminer.py
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
async def coin(self) -> dict:
    """Get information on the current coin.
    <details>
        <summary>Expand</summary>

    Returns:
        ## Information about the current coin being mined:
            * Hash Method <- the hashing algorithm
            * Current Block Time <- blocktime as a float, 0 means none
            * Current Block Hash <- the hash of the current block, blank means none
            * LP <- whether LP is in use on at least 1 pool
            * Network Difficulty: the current network difficulty
    </details>
    """
    return await self.send_command("coin")

config() async

Get some basic configuration info.

Expand

Returns:

Type Description
dict
Some miner configuration information:
  • ASC Count <- the number of ASCs
  • PGA Count <- the number of PGAs
  • Pool Count <- the number of Pools
  • Strategy <- the current pool strategy
  • Log Interval <- the interval of logging
  • Device Code <- list of compiled device drivers
  • OS <- the current operating system
  • Failover-Only <- failover-only setting
  • Scan Time <- scan-time setting
  • Queue <- queue setting
  • Expiry <- expiry setting
Source code in pyasic/API/bfgminer.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
async def config(self) -> dict:
    """Get some basic configuration info.
    <details>
        <summary>Expand</summary>

    Returns:
        ## Some miner configuration information:
            * ASC Count <- the number of ASCs
            * PGA Count <- the number of PGAs
            * Pool Count <- the number of Pools
            * Strategy <- the current pool strategy
            * Log Interval <- the interval of logging
            * Device Code <- list of compiled device drivers
            * OS <- the current operating system
            * Failover-Only <- failover-only setting
            * Scan Time <- scan-time setting
            * Queue <- queue setting
            * Expiry <- expiry setting
    </details>
    """
    return await self.send_command("config")

debug(setting) async

Set a debug setting.

Expand

Parameters:

Name Type Description Default
setting str

Which setting to switch to.

Options are:
* Silent
* Quiet
* Verbose
* Debug
* RPCProto
* PerDevice
* WorkTime
* Normal
required

Returns:

Type Description
dict

Data on which debug setting was enabled or disabled.

Source code in pyasic/API/bfgminer.py
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
async def debug(self, setting: str) -> dict:
    """Set a debug setting.
    <details>
        <summary>Expand</summary>

    Parameters:
        setting: Which setting to switch to.
            ## Options are:
                * Silent
                * Quiet
                * Verbose
                * Debug
                * RPCProto
                * PerDevice
                * WorkTime
                * Normal

    Returns:
        Data on which debug setting was enabled or disabled.
    </details>
    """
    return await self.send_command("debug", parameters=setting)

devdetails() async

Get data on all devices with their static details.

Expand

Returns:

Type Description
dict

Data on all devices with their static details.

Source code in pyasic/API/bfgminer.py
481
482
483
484
485
486
487
488
489
490
async def devdetails(self) -> dict:
    """Get data on all devices with their static details.
    <details>
        <summary>Expand</summary>

    Returns:
        Data on all devices with their static details.
    </details>
    """
    return await self.send_command("devdetails")

devs() async

Get data on each PGA/ASC with their details.

Expand

Returns:

Type Description
dict

Data on each PGA/ASC with their details.

Source code in pyasic/API/bfgminer.py
129
130
131
132
133
134
135
136
137
138
async def devs(self) -> dict:
    """Get data on each PGA/ASC with their details.
    <details>
        <summary>Expand</summary>

    Returns:
        Data on each PGA/ASC with their details.
    </details>
    """
    return await self.send_command("devs")

devscan(info='') async

Get data on each processor with their details.

Expand

Parameters:

Name Type Description Default
info str

Info to scan for device by.

''

Returns:

Type Description
dict

Data on each processor with their details.

Source code in pyasic/API/bfgminer.py
151
152
153
154
155
156
157
158
159
160
161
162
163
async def devscan(self, info: str = "") -> dict:
    """Get data on each processor with their details.
    <details>
        <summary>Expand</summary>

    Parameters:
        info: Info to scan for device by.

    Returns:
        Data on each processor with their details.
    </details>
    """
    return await self.send_command("devscan", parameters=info)

disablepool(n) async

Disable a pool.

Expand

Parameters:

Name Type Description Default
n int

Pool to disable.

required

Returns:

Type Description
dict

A confirmation of diabling the pool.

Source code in pyasic/API/bfgminer.py
291
292
293
294
295
296
297
298
299
300
301
302
303
async def disablepool(self, n: int) -> dict:
    """Disable a pool.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: Pool to disable.

    Returns:
        A confirmation of diabling the pool.
    </details>
    """
    return await self.send_command("disablepool", parameters=n)

enablepool(n) async

Enable pool n.

Expand

Parameters:

Name Type Description Default
n int

The pool to enable.

required

Returns:

Type Description
dict

A confirmation of enabling pool n.

Source code in pyasic/API/bfgminer.py
229
230
231
232
233
234
235
236
237
238
239
240
241
async def enablepool(self, n: int) -> dict:
    """Enable pool n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The pool to enable.

    Returns:
        A confirmation of enabling pool n.
    </details>
    """
    return await self.send_command("enablepool", parameters=n)

failover_only(failover) async

Set failover-only.

Expand

Parameters:

Name Type Description Default
failover bool

What to set failover-only to.

required

Returns:

Type Description
dict

Confirmation of setting failover-only.

Source code in pyasic/API/bfgminer.py
530
531
532
533
534
535
536
537
538
539
540
541
542
async def failover_only(self, failover: bool) -> dict:
    """Set failover-only.
    <details>
        <summary>Expand</summary>

    Parameters:
        failover: What to set failover-only to.

    Returns:
        Confirmation of setting failover-only.
    </details>
    """
    return await self.send_command("failover-only", parameters=failover)

notify() async

Notify the user of past errors.

Expand

Returns:

Type Description
dict

The last status and count of each devices problem(s).

Source code in pyasic/API/bfgminer.py
347
348
349
350
351
352
353
354
355
356
async def notify(self) -> dict:
    """Notify the user of past errors.
    <details>
        <summary>Expand</summary>

    Returns:
        The last status and count of each devices problem(s).
    </details>
    """
    return await self.send_command("notify")

pga(n) async

Get data from PGA n.

Expand

Parameters:

Name Type Description Default
n int

The PGA number to get data from.

required

Returns:

Type Description
dict

Data on the PGA n.

Source code in pyasic/API/bfgminer.py
165
166
167
168
169
170
171
172
173
174
175
176
177
async def pga(self, n: int) -> dict:
    """Get data from PGA n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The PGA number to get data from.

    Returns:
        Data on the PGA n.
    </details>
    """
    return await self.send_command("pga", parameters=n)

pgacount() async

Get data fon all PGAs.

Expand

Returns:

Type Description
dict

Data on the PGAs connected.

Source code in pyasic/API/bfgminer.py
193
194
195
196
197
198
199
200
201
202
async def pgacount(self) -> dict:
    """Get data fon all PGAs.
    <details>
        <summary>Expand</summary>

    Returns:
        Data on the PGAs connected.
    </details>
    """
    return await self.send_command("pgacount")

pgadisable(n) async

Disable PGA n.

Expand

Parameters:

Name Type Description Default
n int

The PGA to disable.

required

Returns:

Type Description
dict

A confirmation of disabling PGA n.

Source code in pyasic/API/bfgminer.py
383
384
385
386
387
388
389
390
391
392
393
394
395
async def pgadisable(self, n: int) -> dict:
    """Disable PGA n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The PGA to disable.

    Returns:
        A confirmation of disabling PGA n.
    </details>
    """
    return await self.send_command("pgadisable", parameters=n)

pgaenable(n) async

Enable PGA n.

Expand

Parameters:

Name Type Description Default
n int

The PGA to enable.

required

Returns:

Type Description
dict

A confirmation of enabling PGA n.

Source code in pyasic/API/bfgminer.py
369
370
371
372
373
374
375
376
377
378
379
380
381
async def pgaenable(self, n: int) -> dict:
    """Enable PGA n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The PGA to enable.

    Returns:
        A confirmation of enabling PGA n.
    </details>
    """
    return await self.send_command("pgaenable", parameters=n)

pgaidentify(n) async

Identify PGA n.

Expand

Parameters:

Name Type Description Default
n int

The PGA to identify.

required

Returns:

Type Description
dict

A confirmation of identifying PGA n.

Source code in pyasic/API/bfgminer.py
411
412
413
414
415
416
417
418
419
420
421
422
423
async def pgaidentify(self, n: int) -> dict:
    """Identify PGA n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The PGA to identify.

    Returns:
        A confirmation of identifying PGA n.
    </details>
    """
    return await self.send_command("pgaidentify", parameters=n)

pgarestart(n) async

Restart PGA n.

Expand

Parameters:

Name Type Description Default
n int

The PGA to restart.

required

Returns:

Type Description
dict

A confirmation of restarting PGA n.

Source code in pyasic/API/bfgminer.py
397
398
399
400
401
402
403
404
405
406
407
408
409
async def pgarestart(self, n: int) -> dict:
    """Restart PGA n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The PGA to restart.

    Returns:
        A confirmation of restarting PGA n.
    </details>
    """
    return await self.send_command("pgadisable", parameters=n)

pgaset(n, opt, val=None) async

Set PGA option opt to val on PGA n.

Expand Options:
    MMQ -
        opt: clock
        val: 2 - 250 (multiple of 2)
    XBS -
        opt: clock
        val: 2 - 250 (multiple of 2)

Parameters:

Name Type Description Default
n int

The PGA to set the options on.

required
opt str

The option to set. Setting this to 'help' returns a help message.

required
val int

The value to set the option to.

None

Returns:

Type Description
dict

Confirmation of setting PGA n with opt[,val].

Source code in pyasic/API/bfgminer.py
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
async def pgaset(self, n: int, opt: str, val: int = None) -> dict:
    """Set PGA option opt to val on PGA n.
    <details>
        <summary>Expand</summary>

    Options:
    ```
        MMQ -
            opt: clock
            val: 2 - 250 (multiple of 2)
        XBS -
            opt: clock
            val: 2 - 250 (multiple of 2)
    ```

    Parameters:
        n: The PGA to set the options on.
        opt: The option to set. Setting this to 'help' returns a help message.
        val: The value to set the option to.

    Returns:
        Confirmation of setting PGA n with opt[,val].
    </details>
    """
    if val:
        return await self.send_command("pgaset", parameters=f"{n},{opt},{val}")
    else:
        return await self.send_command("pgaset", parameters=f"{n},{opt}")

poolpriority(*n) async

Set pool priority.

Expand

Parameters:

Name Type Description Default
*n int

Pools in order of priority.

()

Returns:

Type Description
dict

A confirmation of setting pool priority.

Source code in pyasic/API/bfgminer.py
261
262
263
264
265
266
267
268
269
270
271
272
273
274
async def poolpriority(self, *n: int) -> dict:
    """Set pool priority.
    <details>
        <summary>Expand</summary>

    Parameters:
        *n: Pools in order of priority.

    Returns:
        A confirmation of setting pool priority.
    </details>
    """
    pools = f"{','.join([str(item) for item in n])}"
    return await self.send_command("poolpriority", parameters=pools)

poolquota(n, q) async

Set pool quota.

Expand

Parameters:

Name Type Description Default
n int

Pool number to set quota on.

required
q int

Quota to set the pool to.

required

Returns:

Type Description
dict

A confirmation of setting pool quota.

Source code in pyasic/API/bfgminer.py
276
277
278
279
280
281
282
283
284
285
286
287
288
289
async def poolquota(self, n: int, q: int) -> dict:
    """Set pool quota.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: Pool number to set quota on.
        q: Quota to set the pool to.

    Returns:
        A confirmation of setting pool quota.
    </details>
    """
    return await self.send_command("poolquota", parameters=f"{n},{q}")

pools() async

Get pool information.

Expand

Returns:

Type Description
dict

Miner pool information.

Source code in pyasic/API/bfgminer.py
118
119
120
121
122
123
124
125
126
127
async def pools(self) -> dict:
    """Get pool information.
    <details>
        <summary>Expand</summary>

    Returns:
        Miner pool information.
    </details>
    """
    return await self.send_command("pools")

pprocset(n, opt, val=None) async

Set processor option opt to val on processor n.

Expand Options:
    MMQ -
        opt: clock
        val: 2 - 250 (multiple of 2)
    XBS -
        opt: clock
        val: 2 - 250 (multiple of 2)

Parameters:

Name Type Description Default
n int

The PGA to set the options on.

required
opt str

The option to set. Setting this to 'help' returns a help message.

required
val int

The value to set the option to.

None

Returns:

Type Description
dict

Confirmation of setting PGA n with opt[,val].

Source code in pyasic/API/bfgminer.py
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
async def pprocset(self, n: int, opt: str, val: int = None) -> dict:
    """Set processor option opt to val on processor n.
    <details>
        <summary>Expand</summary>

    Options:
    ```
        MMQ -
            opt: clock
            val: 2 - 250 (multiple of 2)
        XBS -
            opt: clock
            val: 2 - 250 (multiple of 2)
    ```

    Parameters:
        n: The PGA to set the options on.
        opt: The option to set. Setting this to 'help' returns a help message.
        val: The value to set the option to.

    Returns:
        Confirmation of setting PGA n with opt[,val].
    </details>
    """
    if val:
        return await self.send_command("pgaset", parameters=f"{n},{opt},{val}")
    else:
        return await self.send_command("pgaset", parameters=f"{n},{opt}")

privileged() async

Check if you have privileged access.

Expand

Returns:

Type Description
dict

The STATUS section with an error if you have no privileged access, or success if you have privileged access.

Source code in pyasic/API/bfgminer.py
358
359
360
361
362
363
364
365
366
367
async def privileged(self) -> dict:
    """Check if you have privileged access.
    <details>
        <summary>Expand</summary>

    Returns:
        The STATUS section with an error if you have no privileged access, or success if you have privileged access.
    </details>
    """
    return await self.send_command("privileged")

proc(n=0) async

Get data processor n.

Expand

Parameters:

Name Type Description Default
n int

The processor to get data on.

0

Returns:

Type Description
dict

Data on processor n.

Source code in pyasic/API/bfgminer.py
179
180
181
182
183
184
185
186
187
188
189
190
191
async def proc(self, n: int = 0) -> dict:
    """Get data processor n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The processor to get data on.

    Returns:
        Data on processor n.
    </details>
    """
    return await self.send_command("proc", parameters=n)

proccount() async

Get data fon all processors.

Expand

Returns:

Type Description
dict

Data on the processors connected.

Source code in pyasic/API/bfgminer.py
204
205
206
207
208
209
210
211
212
213
async def proccount(self) -> dict:
    """Get data fon all processors.
    <details>
        <summary>Expand</summary>

    Returns:
        Data on the processors connected.
    </details>
    """
    return await self.send_command("proccount")

procdisable(n) async

Disable processor n.

Expand

Parameters:

Name Type Description Default
n int

The processor to disable.

required

Returns:

Type Description
dict

A confirmation of disabling processor n.

Source code in pyasic/API/bfgminer.py
439
440
441
442
443
444
445
446
447
448
449
450
451
async def procdisable(self, n: int) -> dict:
    """Disable processor n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The processor to disable.

    Returns:
        A confirmation of disabling processor n.
    </details>
    """
    return await self.send_command("procdisable", parameters=n)

procenable(n) async

Enable processor n.

Expand

Parameters:

Name Type Description Default
n int

The processor to enable.

required

Returns:

Type Description
dict

A confirmation of enabling processor n.

Source code in pyasic/API/bfgminer.py
425
426
427
428
429
430
431
432
433
434
435
436
437
async def procenable(self, n: int) -> dict:
    """Enable processor n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The processor to enable.

    Returns:
        A confirmation of enabling processor n.
    </details>
    """
    return await self.send_command("procenable", parameters=n)

procidentify(n) async

Identify processor n.

Expand

Parameters:

Name Type Description Default
n int

The processor to identify.

required

Returns:

Type Description
dict

A confirmation of identifying processor n.

Source code in pyasic/API/bfgminer.py
467
468
469
470
471
472
473
474
475
476
477
478
479
async def procidentify(self, n: int) -> dict:
    """Identify processor n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The processor to identify.

    Returns:
        A confirmation of identifying processor n.
    </details>
    """
    return await self.send_command("procidentify", parameters=n)

procrestart(n) async

Restart processor n.

Expand

Parameters:

Name Type Description Default
n int

The processor to restart.

required

Returns:

Type Description
dict

A confirmation of restarting processor n.

Source code in pyasic/API/bfgminer.py
453
454
455
456
457
458
459
460
461
462
463
464
465
async def procrestart(self, n: int) -> dict:
    """Restart processor n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The processor to restart.

    Returns:
        A confirmation of restarting processor n.
    </details>
    """
    return await self.send_command("procdisable", parameters=n)

procs() async

Get data on each processor with their details.

Expand

Returns:

Type Description
dict

Data on each processor with their details.

Source code in pyasic/API/bfgminer.py
140
141
142
143
144
145
146
147
148
149
async def procs(self) -> dict:
    """Get data on each processor with their details.
    <details>
        <summary>Expand</summary>

    Returns:
        Data on each processor with their details.
    </details>
    """
    return await self.send_command("procs")

quit() async

Quit CGMiner.

Expand

Returns:

Type Description
dict

A single "BYE" before CGMiner quits.

Source code in pyasic/API/bfgminer.py
336
337
338
339
340
341
342
343
344
345
async def quit(self) -> dict:
    """Quit CGMiner.
    <details>
        <summary>Expand</summary>

    Returns:
        A single "BYE" before CGMiner quits.
    </details>
    """
    return await self.send_command("quit")

removepool(n) async

Remove a pool.

Expand

Parameters:

Name Type Description Default
n int

Pool to remove.

required

Returns:

Type Description
dict

A confirmation of removing the pool.

Source code in pyasic/API/bfgminer.py
305
306
307
308
309
310
311
312
313
314
315
316
317
async def removepool(self, n: int) -> dict:
    """Remove a pool.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: Pool to remove.

    Returns:
        A confirmation of removing the pool.
    </details>
    """
    return await self.send_command("removepool", parameters=n)

restart() async

Restart CGMiner using the API.

Expand

Returns:

Type Description
dict

A reply informing of the restart.

Source code in pyasic/API/bfgminer.py
492
493
494
495
496
497
498
499
500
501
async def restart(self) -> dict:
    """Restart CGMiner using the API.
    <details>
        <summary>Expand</summary>

    Returns:
        A reply informing of the restart.
    </details>
    """
    return await self.send_command("restart")

save(filename=None) async

Save the config.

Expand

Parameters:

Name Type Description Default
filename str

Filename to save the config as.

None

Returns:

Type Description
dict

A confirmation of saving the config.

Source code in pyasic/API/bfgminer.py
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
async def save(self, filename: str = None) -> dict:
    """Save the config.
    <details>
        <summary>Expand</summary>

    Parameters:
        filename: Filename to save the config as.

    Returns:
        A confirmation of saving the config.
    </details>
    """
    if filename:
        return await self.send_command("save", parameters=filename)
    else:
        return await self.send_command("save")

setconfig(name, n) async

Set config of name to value n.

Expand

Parameters:

Name Type Description Default
name str

The name of the config setting to set.

Options are:
* queue
* scantime
* expiry
required
n int

The value to set the 'name' setting to.

required

Returns:

Type Description
dict

The results of setting config of name to n.

Source code in pyasic/API/bfgminer.py
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
async def setconfig(self, name: str, n: int) -> dict:
    """Set config of name to value n.
    <details>
        <summary>Expand</summary>

    Parameters:
        name: The name of the config setting to set.
            ## Options are:
                * queue
                * scantime
                * expiry
        n: The value to set the 'name' setting to.

    Returns:
        The results of setting config of name to n.
    </details>
    """
    return await self.send_command("setconfig", parameters=f"{name},{n}")

stats() async

Get stats of each device/pool with more than 1 getwork.

Expand

Returns:

Type Description
dict

Stats of each device/pool with more than 1 getwork.

Source code in pyasic/API/bfgminer.py
503
504
505
506
507
508
509
510
511
512
async def stats(self) -> dict:
    """Get stats of each device/pool with more than 1 getwork.
    <details>
        <summary>Expand</summary>

    Returns:
        Stats of each device/pool with more than 1 getwork.
    </details>
    """
    return await self.send_command("stats")

summary() async

Get the status summary of the miner.

Expand

Returns:

Type Description
dict

The status summary of the miner.

Source code in pyasic/API/bfgminer.py
107
108
109
110
111
112
113
114
115
116
async def summary(self) -> dict:
    """Get the status summary of the miner.
    <details>
        <summary>Expand</summary>

    Returns:
        The status summary of the miner.
    </details>
    """
    return await self.send_command("summary")

switchpool(n) async

Switch pools to pool n.

Expand

Parameters:

Name Type Description Default
n int

The pool to switch to.

required

Returns:

Type Description
dict

A confirmation of switching to pool n.

Source code in pyasic/API/bfgminer.py
215
216
217
218
219
220
221
222
223
224
225
226
227
async def switchpool(self, n: int) -> dict:
    """Switch pools to pool n.
    <details>
        <summary>Expand</summary>

    Parameters:
        n: The pool to switch to.

    Returns:
        A confirmation of switching to pool n.
    </details>
    """
    return await self.send_command("switchpool", parameters=n)

version() async

Get miner version info.

Expand

Returns:

Type Description
dict

Miner version information.

Source code in pyasic/API/bfgminer.py
74
75
76
77
78
79
80
81
82
83
async def version(self) -> dict:
    """Get miner version info.
    <details>
        <summary>Expand</summary>

    Returns:
        Miner version information.
    </details>
    """
    return await self.send_command("version")

zero(which, summary) async

Zero a device.

Expand

Parameters:

Name Type Description Default
which str

Which device to zero. Setting this to 'all' zeros all devices. Setting this to 'bestshare' zeros only the bestshare values for each pool and global.

required
summary bool

Whether or not to show a full summary.

required

Returns:

Type Description
dict

the STATUS section with info on the zero and optional summary.

Source code in pyasic/API/bfgminer.py
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
async def zero(self, which: str, summary: bool) -> dict:
    """Zero a device.
    <details>
        <summary>Expand</summary>

    Parameters:
        which: Which device to zero. Setting this to 'all' zeros all devices. Setting this to 'bestshare' zeros only the bestshare values for each pool and global.
        summary: Whether or not to show a full summary.


    Returns:
        the STATUS section with info on the zero and optional summary.
    </details>
    """
    return await self.send_command("zero", parameters=f"{which},{summary}")