Bitcoin Forum
June 01, 2024, 10:21:18 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 ... 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 ... 647 »
  Print  
Author Topic: [Awesome Miner] - Powerful Windows GUI to manage and monitor up to 200000 miners  (Read 701348 times)
Dalba
Newbie
*
Offline Offline

Activity: 92
Merit: 0


View Profile
July 24, 2018, 06:56:42 AM
 #6901

Hello Patrike,
I encounter those type of errors more and more often :

Code:
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [Phi2]) 
Mining process not running, initiating restart (T-Rex nVidia GPU Miner, Phi2, europe.ethash-hub.miningpoolhub.com)
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [HSR])

Those are just examples, but as you can see, it's like AM was shuffling algorithms and compatible online services  Huh  PhoenixMiner trying to mine ethereum on Zergpool phi2 pool is kind of weird...


Do you have an idea of what's happening ?
Can you please send me the full log file for this issue by mail? I agree that the pool names look strange here, but it could be that the error message didn't pick up the correct pool name here. With the log files I can verify this as well.

As you requested, i send you my log file. To add to this random problem, i get sometimes alert windows error like the one i get this morning :

https://i.imgur.com/OsIZu9B.jpg


As you can see, AM still try to mine an algorithm with an incompatible software...
When this error occur, rig stop working until i click on the OK button. It's annoying because when it happens at night, i can lose severals hours of mining.
Tell me if you need more info or more log than the one i sent you.

patrike (OP)
Legendary
*
Offline Offline

Activity: 3346
Merit: 1094


View Profile WWW
July 24, 2018, 07:00:20 AM
 #6902

Hello Patrike,
I encounter those type of errors more and more often :

Code:
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [Phi2]) 
Mining process not running, initiating restart (T-Rex nVidia GPU Miner, Phi2, europe.ethash-hub.miningpoolhub.com)
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [HSR])

Those are just examples, but as you can see, it's like AM was shuffling algorithms and compatible online services  Huh  PhoenixMiner trying to mine ethereum on Zergpool phi2 pool is kind of weird...


Do you have an idea of what's happening ?
Can you please send me the full log file for this issue by mail? I agree that the pool names look strange here, but it could be that the error message didn't pick up the correct pool name here. With the log files I can verify this as well.

As you requested, i send you my log file. To add to this random problem, i get sometimes alert windows error like the one i get this morning :




As you can see, AM still try to mine an algorithm with an incompatible software...
When this error occur, rig stop working until i click on the OK button. It's annoying because when it happens at night, i can lose severals hours of mining.
Tell me if you need more info or more log than the one i sent you.


Thanks for the logs, I will investigate. If you get an error message like this, it's most likely that the mining software either crash or simply give an error message when starting.

When this happend, please click the Diagnostics button in the toolbar as instructed, as it will often tell you what the isssue is.

Awesome Miner - Complete solution to manage and monitor mining operations of ASIC, GPU and CPU miners
Optimized Antminer firmware - Increased hashrate, improved power efficiency and more features. For S9, S9i, S9j, T9+, L3+, S17, S17 Pro, S17+, T17, T17+, S19, S19 Pro, S19j, S19j Pro, T19
Up to 200,000 miners | Notifications | Native overclocking | Profit switching | Customizable rules | API | Windows application | Mobile web
patrike (OP)
Legendary
*
Offline Offline

Activity: 3346
Merit: 1094


View Profile WWW
July 24, 2018, 07:25:31 AM
Last edit: July 24, 2018, 08:02:16 AM by patrike
 #6903

Hello Patrike,
I encounter those type of errors more and more often :

Code:
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [Phi2]) 
Mining process not running, initiating restart (T-Rex nVidia GPU Miner, Phi2, europe.ethash-hub.miningpoolhub.com)
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [HSR])

Those are just examples, but as you can see, it's like AM was shuffling algorithms and compatible online services  Huh  PhoenixMiner trying to mine ethereum on Zergpool phi2 pool is kind of weird...


Do you have an idea of what's happening ?
Can you please send me the full log file for this issue by mail? I agree that the pool names look strange here, but it could be that the error message didn't pick up the correct pool name here. With the log files I can verify this as well.

https://www.dropbox.com/s/esd6l79c016ibdy/Captura%20de%20pantalla%202018-07-24%20a%20las%204.12.56.png?dl=0
It's the same mistake I've been reporting for a couple of months, even with videos.

In an aletoria way it fails, and when it does mix one thing with another, I do not know why. Sometime it has been because of having an order placed in a miner, instead of a simple error it gives you an error downloading protocols.

But other times it's because he wants, fails and then tomorrow when mining the same thing in a car, it does not fail.

I now choose lyra2z to pool in that rig and it works, as seen in capture now I fail lyra2z in zergpool in automatic, perp set as a mix Lyra2z and PHI, the same as when I showed the videos with the failures in the pop-ups

I have reported it several times, I have rarely received an answer for this, and in any case there are a couple of lions who believe in the right of reason.

Let's see if someone else reports it now, these random flaws are better tuned. I'm sorry Patrike, I can not give you any script to reproduce the fault, I do not know what conditions occur, I can only say that it happens to me now, and tomorrow surely I will not fail.

The miner does not really start, or at least I do not see it in the console.

Let's see if there is luck, because these failures when they occur stop the Rig and the income.
Thanks for the information. I think there are two things to consider here

1) Mining software do crash every now and then on most mining rigs. Sometimes it can be due to high OC and instable drivers, while it in other cases is simply a bug in the mining software. When a mining process is no longer running, Awesome Miner will detect it within a few seconds and provide these kind of notifications, and then restart the mining.

The crashes themselves are typically not related to Awesome Miner, and Awesome Miner can't really do much except restarting the process. You can configure how many restart attempts you want within the last 5 minutes via the Options dialog, Advanced section.

2) When Awesome Miner is displaying the pool information for a crashed process, I think it might do this incorrectly when the profit switcher is used. So the crash notification message may display the wrong pool under some scenarios and I will one more time investigate to see if I can find out why.

Update: I've identified the issue for #2. Please see: https://bitcointalk.org/index.php?topic=676942.msg42773748#msg42773748

Awesome Miner - Complete solution to manage and monitor mining operations of ASIC, GPU and CPU miners
Optimized Antminer firmware - Increased hashrate, improved power efficiency and more features. For S9, S9i, S9j, T9+, L3+, S17, S17 Pro, S17+, T17, T17+, S19, S19 Pro, S19j, S19j Pro, T19
Up to 200,000 miners | Notifications | Native overclocking | Profit switching | Customizable rules | API | Windows application | Mobile web
patrike (OP)
Legendary
*
Offline Offline

Activity: 3346
Merit: 1094


View Profile WWW
July 24, 2018, 07:27:51 AM
 #6904

May i see the total hashrate of second GPU algo in dual mode? if it is not supported, it would be good to see such feature in future.
In the Miners tab in the Windows application you will see the secondary hashrate, if any. It's however not displayed in the web and dashboard.

Awesome Miner - Complete solution to manage and monitor mining operations of ASIC, GPU and CPU miners
Optimized Antminer firmware - Increased hashrate, improved power efficiency and more features. For S9, S9i, S9j, T9+, L3+, S17, S17 Pro, S17+, T17, T17+, S19, S19 Pro, S19j, S19j Pro, T19
Up to 200,000 miners | Notifications | Native overclocking | Profit switching | Customizable rules | API | Windows application | Mobile web
patrike (OP)
Legendary
*
Offline Offline

Activity: 3346
Merit: 1094


View Profile WWW
July 24, 2018, 08:01:46 AM
 #6905

Hello Patrike,
I encounter those type of errors more and more often :

Code:
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [Phi2]) 
Mining process not running, initiating restart (T-Rex nVidia GPU Miner, Phi2, europe.ethash-hub.miningpoolhub.com)
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [HSR])

Those are just examples, but as you can see, it's like AM was shuffling algorithms and compatible online services  Huh  PhoenixMiner trying to mine ethereum on Zergpool phi2 pool is kind of weird...


Do you have an idea of what's happening ?
Can you please send me the full log file for this issue by mail? I agree that the pool names look strange here, but it could be that the error message didn't pick up the correct pool name here. With the log files I can verify this as well.

As you requested, i send you my log file. To add to this random problem, i get sometimes alert windows error like the one i get this morning :




As you can see, AM still try to mine an algorithm with an incompatible software...
When this error occur, rig stop working until i click on the OK button. It's annoying because when it happens at night, i can lose severals hours of mining.
Tell me if you need more info or more log than the one i sent you.


Thanks for the logs, I will investigate. If you get an error message like this, it's most likely that the mining software either crash or simply give an error message when starting.

When this happend, please click the Diagnostics button in the toolbar as instructed, as it will often tell you what the isssue is.

An update on the issue related to notifications of mining software being restarted (or failed to start, as in the dialog):

If a mining software crashes, Awesome Miner will display a notification about it where the mining software and pool is also indicated. The pool information is based on what the mining software reported. However, if the mining software crashes fast once started, and didn't send any pool information to Awesome Miner, Awesome Miner would incorrectly use the last provided pool information which in this case is from the previous mining software that was running, so it could be the name of a pool that was used before and not the current one.

Please note that it's only the error message that is incorrect here, as it would indicate the last successfully reported pool. The actual pool for mining is correct.

Awesome Miner - Complete solution to manage and monitor mining operations of ASIC, GPU and CPU miners
Optimized Antminer firmware - Increased hashrate, improved power efficiency and more features. For S9, S9i, S9j, T9+, L3+, S17, S17 Pro, S17+, T17, T17+, S19, S19 Pro, S19j, S19j Pro, T19
Up to 200,000 miners | Notifications | Native overclocking | Profit switching | Customizable rules | API | Windows application | Mobile web
moppidoo
Jr. Member
*
Offline Offline

Activity: 348
Merit: 5


View Profile
July 24, 2018, 11:13:50 AM
 #6906


An update on the issue related to notifications of mining software being restarted (or failed to start, as in the dialog):

If a mining software crashes, Awesome Miner will display a notification about it where the mining software and pool is also indicated. The pool information is based on what the mining software reported. However, if the mining software crashes fast once started, and didn't send any pool information to Awesome Miner, Awesome Miner would incorrectly use the last provided pool information which in this case is from the previous mining software that was running, so it could be the name of a pool that was used before and not the current one.

Please note that it's only the error message that is incorrect here, as it would indicate the last successfully reported pool. The actual pool for mining is correct.


Hi Patrike,

Thx for the explanation, I too along with other users like @Dalba and @ trucobit have experienced such confusing error messages along with stopped miners. It is (I believe) as you confirmed that it is a result of crashing due to various factors, rather than the "error" is causing the crashes and stopped miners consequently.

I might hypothesise another scenario which I seem to have been able to produce such error, can't say consistently but surely a lot more often, is that when you have rules in place that involves stops/starts a managed profit miner and when the action execution time overlaps the profit switching action as specified by the profit switcher interval setting, it would likely have caused AM to confuse and mixed up the command sequences and lead to stopped/crashed miners.

I have 17 miners active last night, and only 6 are running when I wake up this morning, no machine freeze/hang or BSOD, just stopped, some have occasional failed to start miner software message, but that's like, 2 or 3 out of the 10 odd stopped miners. Some software with built-in watchdogs seems to cause these errors more often such as (bminer, zealot-enemy, CryptoDredge), some of them might seemly improve if you put in parameters to disable watchdog where available, but that's not a workaround that seem to make significant difference.

@Dalba & @trucobit (& Patrike FYI), if you are observing the behaviour like me and may have some configurations that are similar to what I described above, try the following things I did today, I have not experienced the issue for 12 hours bar 1 rig (with a driver failure/reset on 1 card causing it). *First, I disabled all rules with start/stop actions, 2nd, I tweaked and lowered OC target on several rigs, lastly, I relaxed the profit switching aggressiveness and for now, it kind of does the trick (Profit Switching: 20Min, threshold 10%, Current statistics - with a self made custom switch strategy, I'm averaging 1 switch roughly every 10minutes)

***
@Patrike, this brings a suggestion if it's confirmed that conflict between rule Start/Stop actions and builtin profit switching may have caused miners to error out, then it might be a worthwhile idea to investigate the possibility to have AM to have some builtin check to avoid such rule to execute 1 min (or whatever value suitable) before scheduled Profit Swithing is to take place.

Best Regards,
moppidoo
Jr. Member
*
Offline Offline

Activity: 348
Merit: 5


View Profile
July 24, 2018, 12:15:04 PM
 #6907

Hi Patrike,

More suggestions:

1. This one should be easy, is it possible to have the status bar to display number of active miners in the format similar to xxx/yyy where x are active miners (not stopped/offline) and y is the total number of miners. It gives a quick glimpse on number of active miners without the need to scroll up and down the "Miners" tab. handy if you have a long list of miners. (or can be just like group titles, (Total Active: XXX, Total Miners: yyy)

2. This one may have been suggested by other users before, but let's see if a suitable approach can be implemented if it is "popular", say I'm using "Current" statistics for profit switching and several online services, say the bigger ones are zpool, zergpool, ahash, blazepool...etc. Say if they all provide same coins for a particular algo and pool hashrate is sufficient that the TTF block is insignificant and fairly much the same across all of them, in theory, the "current" profitabilty then only differs by the pool statistics update interval (whether hardcoded or configured by pool admin). Say, I wanted to use the Online Services similar to how I use the pools, to have a Primary Online Services, and just 1 or 2 others as failovers (so no, I don't want to disable them, but the ability to prioritise them).

One of the situation we're trying to resolve here is that, if Algo A is currently most profitable and is consistent across several online services (zpool, ahash, zerg) and I'm already mining on say, zerg, the next 2 minutes, zerg updated api and Algo A on Zerg is now ranked below ahash, then profit switcher will switch the miner to ahash albeit mining the same algo and just relaunch the miner. Not to mention time are wasted (it adds up) but most importantly, it distributes your shares submitted among the pools and lengthen the payout frequency due to minimum payouts.

Can this be made into a say, optional "toggle" feature, like a toggle-able hardcoded rule such that:

Classic Mode: switch to whichever Online Services only based on profitability rank

New Mode (find a cool name for it, like MrPlus's PlusMiner lol): Rank by profitability (but grouped by algo), so like below:

Code:
Lyra2v2 - Profitability after calculation in preferred currency for a specific miner / day
Ahash - $2
Blaze - $3
zerg - $2
zpool - $1.5

Code:
X16R - Profitability after calculation in preferred currency for a specific miner / day
Ahash - $1.5
Blaze - $1
zerg - $4
zpool - $2
If miner is mining on Lyra2v2 right now, the it should switch to zergpool on X16R, but if miner is mining zpool X16R already, can we have the toggle option to have it not change pool at all due to the same algo AND highest profitability by GROUP? Or similarly to profit switching settings in Options, where it only switch if there's a ranked preference to the online services (configurable), or by threshold within the same algo (and/or by number of profit switching rounds where resulting profitability rank within the group is consistent). I hope you understand what I'm trying to get at here. It might just look a bit complicated  Tongue

Best Regards,
moppidoo
Jr. Member
*
Offline Offline

Activity: 348
Merit: 5


View Profile
July 24, 2018, 01:34:05 PM
 #6908

Hi Awesome Miner Miners,

I just wanted to share something I've used to provide a slight more versatility to the profit switcher and how it's done, via Excel with little to no coding backgrounds.

What it does:
It is setting an external rule to fit the condition that

Initiate Profit Switching IF miner hashrate is > xx% of profile defined hashrate
AND
Profit / Day / GPU is < y.yy
AND
Mining session is > zz seconds.


What you need:

Awesome Miner Premium Edition or Greater (for API access)
Excel (I use office 365)

***
I'm not going into detailed step by step on how this is done. I'll just paste the (little modified) code here, for those interested but no programming background, you can just explore around and use the code below as a starting point.

Part 1 - Queries

Profile_ID (for identifying which profile miner is currently using)
Code:
let
    Source = Xml.Tables(File.Contents("C:\Users\Username\AppData\Roaming\AwesomeMiner\ConfigData.xml")),
    MinerSettings = Source{0}[MinerSettings],
    #"Changed Type" = Table.TransformColumnTypes(MinerSettings,{{"ExternalMinerList", type text}}),
    ManagedMinerList = #"Changed Type"{0}[ManagedMinerList],
    #"Expanded ManagedMiner" = Table.ExpandTableColumn(ManagedMinerList, "ManagedMiner", {"ID", "ProfitProfileId"}, {"ManagedMiner.ID", "ManagedMiner.ProfitProfileId"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded ManagedMiner",{{"ManagedMiner.ID", "MinerID"}, {"ManagedMiner.ProfitProfileId", "ProfitProfileId"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"MinerID", type number}, {"ProfitProfileId", type number}})
in
    #"Changed Type1"

ProfitProfile_HR_Table (Hashrate for each algos defined in every profit profile)
Code:
let
    Source = Xml.Tables(File.Contents("C:\Users\Username\AppData\Roaming\AwesomeMiner\ConfigData.xml")),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"LogLevel", type text}, {"IsFirstRun", type logical}, {"IsFirstTimeMinimize", type logical}, {"AutoStart", type logical}, {"AutoStartMinimized", type logical}, {"AlwaysStartMinimized", type logical}, {"DevelopmentMode", type logical}, {"PerformanceMode", type logical}, {"CheckUpdates", type logical}, {"LongerConnectionTimeout", type logical}, {"AlternativeConnection", type logical}, {"DotNetVersionReminderDisplayed2", type logical}, {"PerformanceModeReminderDisplayed", type logical}, {"BenchmarkOffline", type logical}, {"ConfigurationCreatedUtc", type datetime}}),
    ProfitSwitchingSettings = #"Changed Type"{0}[ProfitSwitchingSettings],
    #"Changed Type1" = Table.TransformColumnTypes(ProfitSwitchingSettings,{{"EnabledPools", type text}, {"UseCustom", type logical}, {"CustomPoolId", Int64.Type}, {"CustomPoolType", type text}, {"NicehashWorker", type text}, {"NicehashRegion", type text}, {"ZpoolWorker", type text}, {"GranatGasWorker", type text}, {"GranatGasRegion", type text}, {"HashRefineryWorker", type text}, {"AHashPoolWorker", type text}, {"ZergPoolWorker", type text}, {"MiningDutchWorker", type text}, {"BlazepoolWorker", type text}, {"BlockMastersWorker", type text}, {"MiningPoolHubWorker", type text}, {"MiningPoolHubRegion", type text}, {"EnableManaged", type logical}, {"PredefinedVisible", type logical}, {"Interval", Int64.Type}, {"PowerCost", type number}, {"UseProfitThreshold", type logical}, {"ProfitThresholdPercent", Int64.Type}, {"NicehashUserUrl", type text}, {"ZpoolUserUrl", type text}, {"GranatGasUserUrl", type text}, {"HashRefineryUserUrl", type text}, {"AHashPoolUserUrl", type text}, {"MiningPoolHubUserUrl", type text}, {"ZergPoolAlgoUserUrl", type text}, {"MiningDutchAlgoUserUrl", type text}, {"BlazepoolUserUrl", type text}, {"BlockMastersUserUrl", type text}, {"SelectBtcPayout", type logical}, {"IgnoreFailedPools", type logical}, {"IgnoreFailedPoolsTime", Int64.Type}, {"RequiredAcceptTime", Int64.Type}}),
    ProfitProfileList = #"Changed Type1"{0}[ProfitProfileList],
    ProfitProfile = ProfitProfileList{0}[ProfitProfile],
    #"Changed Type2" = Table.TransformColumnTypes(ProfitProfile,{{"ID", Int64.Type}, {"Description", type text}, {"PredefinedType", type text}, {"OverridePools", type logical}, {"EnableIgnorePools", type logical}, {"ProfileBatchCommands", type text}}),
    #"Expanded AlgorithmSettingsList" = Table.ExpandTableColumn(#"Changed Type2", "AlgorithmSettingsList", {"AlgorithmSettings"}, {"AlgorithmSettings"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded AlgorithmSettingsList",{"PredefinedType", "OverridePools", "EnableIgnorePools", "SwitchingProfile", "ProfileBatchCommands", "ProfitEngineList"}),
    #"Expanded AlgorithmSettings" = Table.ExpandTableColumn(#"Filtered Rows", "AlgorithmSettings", {"Algorithm", "HashrateValue"}, {"Algorithm", "HashrateValue"}),
    #"Changed Type3" = Table.TransformColumnTypes(#"Expanded AlgorithmSettings",{{"HashrateValue", type number}, {"Algorithm", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type3",{{"ID", "ProfitProfileId"}})
in
    #"Renamed Columns"

miners (Joining the miners API call with the previous 2 queries, then do the calculation and determine if Profit Switching condition is met (example here, if hashrate > 85% defined hashrate and each GPU device (not miner) earns less than 0.05 USD, then switch condition is met), set this to auto refresh every minute or however long you see fit.
Code:
let
    Source = Json.Document(Web.Contents("http://mypc:17790/api/miners")),
    groupList = Source[groupList],
    groupList1 = groupList{0},
    minerList = groupList1[minerList],
    #"Converted to Table" = Table.FromList(minerList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "name", "statusInfo", "speedInfo", "coinInfo", "gpuList", "hasValidStatus"}, {"Column1.id", "Column1.name", "Column1.statusInfo", "Column1.speedInfo", "Column1.coinInfo", "Column1.gpuList", "Column1.hasValidStatus"}),
    #"Expanded Column1.speedInfo" = Table.ExpandRecordColumn(#"Expanded Column1", "Column1.speedInfo", {"hashrate"}, {"Column1.speedInfo.hashrate"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Expanded Column1.speedInfo", "Column1.speedInfo.hashrate", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.speedInfo.hashrate.1", "Column1.speedInfo.hashrate.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.speedInfo.hashrate.1", type number}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type", "GPU Count", each List.Count([Column1.gpuList])),
    #"Expanded Column1.statusInfo" = Table.ExpandRecordColumn(#"Added Custom1", "Column1.statusInfo", {"secondsSinceStart", "statusDisplay"}, {"Column1.statusInfo.secondsSinceStart", "Column1.statusInfo.statusDisplay"}),
    #"Expanded Column1.coinInfo" = Table.ExpandRecordColumn(#"Expanded Column1.statusInfo", "Column1.coinInfo", {"profitPerDayValue", "algorithm"}, {"Column1.coinInfo.profitPerDayValue", "Column1.coinInfo.algorithm"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded Column1.coinInfo",{"Column1.id", "Column1.name", "Column1.statusInfo.statusDisplay", "Column1.statusInfo.secondsSinceStart", "Column1.coinInfo.profitPerDayValue", "Column1.hasValidStatus"}),
    #"Merged Queries" = Table.NestedJoin(#"Appended Query",{"Column1.id"},Profile_ID,{"MinerID"},"ProfitProfile_HR_Table",JoinKind.LeftOuter),
    #"Expanded ProfitProfile_HR_Table" = Table.ExpandTableColumn(#"Merged Queries", "ProfitProfile_HR_Table", {"ProfitProfileId"}, {"ProfitProfile_HR_Table.ProfitProfileId"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded ProfitProfile_HR_Table",{{"ProfitProfile_HR_Table.ProfitProfileId", "ProfitProfileId"}}),
    #"Merged Queries1" = Table.NestedJoin(#"Renamed Columns",{"ProfitProfileId", "Column1.coinInfo.algorithm"},ProfitProfile_HR_Table,{"ProfitProfileId", "Algorithm"},"ProfitProfile_HR_Table",JoinKind.LeftOuter),
    #"Expanded ProfitProfile_HR_Table1" = Table.ExpandTableColumn(#"Merged Queries1", "ProfitProfile_HR_Table", {"HashrateValue"}, {"ProfitProfile_HR_Table.HashrateValue"}),
    #"Renamed Columns1" = Table.RenameColumns(#"Expanded ProfitProfile_HR_Table1",{{"ProfitProfile_HR_Table.HashrateValue", "ProfitProfile_HashRate"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns1", "Custom", each if [Column1.statusInfo.secondsSinceStart] > 60 and [Column1.coinInfo.profitPerDayValue] <= (0.05*[GPU Count]) and [Column1.speedInfo.hashrate.1] > (0.85*[ProfitProfile_HashRate]) then 1 else 0),
    #"Renamed Columns2" = Table.RenameColumns(#"Added Custom",{{"Column1.id", "RigID"}, {"Column1.name", "RigName"}, {"Column1.statusInfo.statusDisplay", "RigStatus"}, {"Column1.statusInfo.secondsSinceStart", "RunTime"}, {"Column1.speedInfo.hashrate.1", "HashRate"}, {"Column1.speedInfo.hashrate.2", "HashRateUnit"}, {"Column1.coinInfo.profitPerDayValue", "ProfitPerDay"}, {"Column1.coinInfo.algorithm", "Algo"}, {"Column1.hasValidStatus", "ValidStatus"}, {"ProfitProfile_HashRate", "Profile HashRate"}, {"ProfitProfileId", "Profile ID"}, {"Custom", "Switch"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns2",{{"Switch", Int64.Type}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type1", each ([RigStatus] = "Mining") and ([Algo] <> null)),
    #"Sorted Rows" = Table.Sort(#"Filtered Rows",{{"Switch", Order.Descending}, {"RunTime", Order.Descending}}),
    #"Filtered Rows1" = Table.SelectRows(#"Sorted Rows", each true)
in
    #"Filtered Rows1"


Part 2 - Excel VBA / Macro
Here's the VBA to call the Profit Switching Action (check your AM's own rule ID, modify as per YOUR AM's settings), plus 2 procedures, 1 to start, 1 to pause, assign them to 2 buttons for easy access.

Code:
Global IsTimeToStop As Boolean

Sub runProfitSwitch()

Dim objHTTP     As Object
Dim URL         As String
Dim Data        As String
Dim replyTXT
Dim URLConcat As String
Dim timeStamp As String

If IsTimeToStop Then Exit Sub

IsTimeToStop = False
timeStamp = Format(Now(), "dd-mm-yyyy hh:mm:ss")
Debug.Print "Running - " + timeStamp

If Cells(2, 14).Value = 1 Then

URLConcat = "http://mypc:17790/api/miners/" & Cells(2, 1).Value & "?action=rule&rule_id=8"

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", URLConcat, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.send ("")
End If

Debug.Print "Wait for next Run"

Application.OnTime Now + TimeValue("00:01:15"), "runProfitSwitch"

End Sub

Sub PauseMacro()
    IsTimeToStop = True
    Debug.Print "Stopping..."
End Sub

Sub StartSwitcher()
    IsTimeToStop = False
    runProfitSwitch
End Sub

remember, both mypc in VBA code and queries, should be replaced by your AM main program PC's IP address.

Example screenshot:


and you only need to create a rule in AM that does 1 action: "Run Profit Switching" and enable "Support Manual Activation"

joseph32
Member
**
Offline Offline

Activity: 413
Merit: 21


View Profile
July 24, 2018, 01:48:04 PM
 #6909

Hey Patrike,

you are doing a great job, thank you for that! I have a suggestion to the rules (or maybe it can be done something else).

If I setup a rule with (for example) a temperature trigger greater than or equals 80C.
As actions I have
1) A Notification with "Notifice once until acknowledged" and
2) Run Executable

Whenever the rig got 80C+ I will get one notification only until I click Acknowledge or Clear. So far so good.
But the programm will be loaded over and over again, as long as the rig got 80C+.

Is it possible that the programm will be loaded only one time? Maybe with a mark-field like in Notifications "Start only once until Aknowledge". Or maybe you have a better idea Smiley

Edit: The reason behind is simple. I will turn off a smart socket as emergency stop. But so it receive unlimited turn off signals.
trucobit
Jr. Member
*
Offline Offline

Activity: 756
Merit: 2


View Profile
July 24, 2018, 02:28:03 PM
 #6910

https://www.dropbox.com/s/oowmbl1jkumtcka/Captura%20de%20pantalla%202018-07-24%20a%20las%2016.29.43.png?dl=0

It gives a lot of joy to get up and see 3 machines stopped, all night giving failures. But if I do lyra2z in any pool it works, and when it gives the fault it mixes it with another protocol and I do not know why. Two days ago, with the same configuration there were no problems
trucobit
Jr. Member
*
Offline Offline

Activity: 756
Merit: 2


View Profile
July 24, 2018, 02:36:40 PM
 #6911

Hi Awesome Miner Miners,

I just wanted to share something I've used to provide a slight more versatility to the profit switcher and how it's done, via Excel with little to no coding backgrounds.

What it does:
It is setting an external rule to fit the condition that

Initiate Profit Switching IF miner hashrate is > xx% of profile defined hashrate
AND
Profit / Day / GPU is < y.yy
AND
Mining session is > zz seconds.


What you need:

Awesome Miner Premium Edition or Greater (for API access)
Excel (I use office 365)

***
I'm not going into detailed step by step on how this is done. I'll just paste the (little modified) code here, for those interested but no programming background, you can just explore around and use the code below as a starting point.

Part 1 - Queries

Profile_ID (for identifying which profile miner is currently using)
Code:
let
    Source = Xml.Tables(File.Contents("C:\Users\Username\AppData\Roaming\AwesomeMiner\ConfigData.xml")),
    MinerSettings = Source{0}[MinerSettings],
    #"Changed Type" = Table.TransformColumnTypes(MinerSettings,{{"ExternalMinerList", type text}}),
    ManagedMinerList = #"Changed Type"{0}[ManagedMinerList],
    #"Expanded ManagedMiner" = Table.ExpandTableColumn(ManagedMinerList, "ManagedMiner", {"ID", "ProfitProfileId"}, {"ManagedMiner.ID", "ManagedMiner.ProfitProfileId"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded ManagedMiner",{{"ManagedMiner.ID", "MinerID"}, {"ManagedMiner.ProfitProfileId", "ProfitProfileId"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"MinerID", type number}, {"ProfitProfileId", type number}})
in
    #"Changed Type1"

ProfitProfile_HR_Table (Hashrate for each algos defined in every profit profile)
Code:
let
    Source = Xml.Tables(File.Contents("C:\Users\Username\AppData\Roaming\AwesomeMiner\ConfigData.xml")),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"LogLevel", type text}, {"IsFirstRun", type logical}, {"IsFirstTimeMinimize", type logical}, {"AutoStart", type logical}, {"AutoStartMinimized", type logical}, {"AlwaysStartMinimized", type logical}, {"DevelopmentMode", type logical}, {"PerformanceMode", type logical}, {"CheckUpdates", type logical}, {"LongerConnectionTimeout", type logical}, {"AlternativeConnection", type logical}, {"DotNetVersionReminderDisplayed2", type logical}, {"PerformanceModeReminderDisplayed", type logical}, {"BenchmarkOffline", type logical}, {"ConfigurationCreatedUtc", type datetime}}),
    ProfitSwitchingSettings = #"Changed Type"{0}[ProfitSwitchingSettings],
    #"Changed Type1" = Table.TransformColumnTypes(ProfitSwitchingSettings,{{"EnabledPools", type text}, {"UseCustom", type logical}, {"CustomPoolId", Int64.Type}, {"CustomPoolType", type text}, {"NicehashWorker", type text}, {"NicehashRegion", type text}, {"ZpoolWorker", type text}, {"GranatGasWorker", type text}, {"GranatGasRegion", type text}, {"HashRefineryWorker", type text}, {"AHashPoolWorker", type text}, {"ZergPoolWorker", type text}, {"MiningDutchWorker", type text}, {"BlazepoolWorker", type text}, {"BlockMastersWorker", type text}, {"MiningPoolHubWorker", type text}, {"MiningPoolHubRegion", type text}, {"EnableManaged", type logical}, {"PredefinedVisible", type logical}, {"Interval", Int64.Type}, {"PowerCost", type number}, {"UseProfitThreshold", type logical}, {"ProfitThresholdPercent", Int64.Type}, {"NicehashUserUrl", type text}, {"ZpoolUserUrl", type text}, {"GranatGasUserUrl", type text}, {"HashRefineryUserUrl", type text}, {"AHashPoolUserUrl", type text}, {"MiningPoolHubUserUrl", type text}, {"ZergPoolAlgoUserUrl", type text}, {"MiningDutchAlgoUserUrl", type text}, {"BlazepoolUserUrl", type text}, {"BlockMastersUserUrl", type text}, {"SelectBtcPayout", type logical}, {"IgnoreFailedPools", type logical}, {"IgnoreFailedPoolsTime", Int64.Type}, {"RequiredAcceptTime", Int64.Type}}),
    ProfitProfileList = #"Changed Type1"{0}[ProfitProfileList],
    ProfitProfile = ProfitProfileList{0}[ProfitProfile],
    #"Changed Type2" = Table.TransformColumnTypes(ProfitProfile,{{"ID", Int64.Type}, {"Description", type text}, {"PredefinedType", type text}, {"OverridePools", type logical}, {"EnableIgnorePools", type logical}, {"ProfileBatchCommands", type text}}),
    #"Expanded AlgorithmSettingsList" = Table.ExpandTableColumn(#"Changed Type2", "AlgorithmSettingsList", {"AlgorithmSettings"}, {"AlgorithmSettings"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded AlgorithmSettingsList",{"PredefinedType", "OverridePools", "EnableIgnorePools", "SwitchingProfile", "ProfileBatchCommands", "ProfitEngineList"}),
    #"Expanded AlgorithmSettings" = Table.ExpandTableColumn(#"Filtered Rows", "AlgorithmSettings", {"Algorithm", "HashrateValue"}, {"Algorithm", "HashrateValue"}),
    #"Changed Type3" = Table.TransformColumnTypes(#"Expanded AlgorithmSettings",{{"HashrateValue", type number}, {"Algorithm", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type3",{{"ID", "ProfitProfileId"}})
in
    #"Renamed Columns"

miners (Joining the miners API call with the previous 2 queries, then do the calculation and determine if Profit Switching condition is met (example here, if hashrate > 85% defined hashrate and each GPU device (not miner) earns less than 0.05 USD, then switch condition is met), set this to auto refresh every minute or however long you see fit.
Code:
let
    Source = Json.Document(Web.Contents("http://mypc:17790/api/miners")),
    groupList = Source[groupList],
    groupList1 = groupList{0},
    minerList = groupList1[minerList],
    #"Converted to Table" = Table.FromList(minerList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "name", "statusInfo", "speedInfo", "coinInfo", "gpuList", "hasValidStatus"}, {"Column1.id", "Column1.name", "Column1.statusInfo", "Column1.speedInfo", "Column1.coinInfo", "Column1.gpuList", "Column1.hasValidStatus"}),
    #"Expanded Column1.speedInfo" = Table.ExpandRecordColumn(#"Expanded Column1", "Column1.speedInfo", {"hashrate"}, {"Column1.speedInfo.hashrate"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Expanded Column1.speedInfo", "Column1.speedInfo.hashrate", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.speedInfo.hashrate.1", "Column1.speedInfo.hashrate.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.speedInfo.hashrate.1", type number}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type", "GPU Count", each List.Count([Column1.gpuList])),
    #"Expanded Column1.statusInfo" = Table.ExpandRecordColumn(#"Added Custom1", "Column1.statusInfo", {"secondsSinceStart", "statusDisplay"}, {"Column1.statusInfo.secondsSinceStart", "Column1.statusInfo.statusDisplay"}),
    #"Expanded Column1.coinInfo" = Table.ExpandRecordColumn(#"Expanded Column1.statusInfo", "Column1.coinInfo", {"profitPerDayValue", "algorithm"}, {"Column1.coinInfo.profitPerDayValue", "Column1.coinInfo.algorithm"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded Column1.coinInfo",{"Column1.id", "Column1.name", "Column1.statusInfo.statusDisplay", "Column1.statusInfo.secondsSinceStart", "Column1.coinInfo.profitPerDayValue", "Column1.hasValidStatus"}),
    #"Merged Queries" = Table.NestedJoin(#"Appended Query",{"Column1.id"},Profile_ID,{"MinerID"},"ProfitProfile_HR_Table",JoinKind.LeftOuter),
    #"Expanded ProfitProfile_HR_Table" = Table.ExpandTableColumn(#"Merged Queries", "ProfitProfile_HR_Table", {"ProfitProfileId"}, {"ProfitProfile_HR_Table.ProfitProfileId"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded ProfitProfile_HR_Table",{{"ProfitProfile_HR_Table.ProfitProfileId", "ProfitProfileId"}}),
    #"Merged Queries1" = Table.NestedJoin(#"Renamed Columns",{"ProfitProfileId", "Column1.coinInfo.algorithm"},ProfitProfile_HR_Table,{"ProfitProfileId", "Algorithm"},"ProfitProfile_HR_Table",JoinKind.LeftOuter),
    #"Expanded ProfitProfile_HR_Table1" = Table.ExpandTableColumn(#"Merged Queries1", "ProfitProfile_HR_Table", {"HashrateValue"}, {"ProfitProfile_HR_Table.HashrateValue"}),
    #"Renamed Columns1" = Table.RenameColumns(#"Expanded ProfitProfile_HR_Table1",{{"ProfitProfile_HR_Table.HashrateValue", "ProfitProfile_HashRate"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns1", "Custom", each if [Column1.statusInfo.secondsSinceStart] > 60 and [Column1.coinInfo.profitPerDayValue] <= (0.05*[GPU Count]) and [Column1.speedInfo.hashrate.1] > (0.85*[ProfitProfile_HashRate]) then 1 else 0),
    #"Renamed Columns2" = Table.RenameColumns(#"Added Custom",{{"Column1.id", "RigID"}, {"Column1.name", "RigName"}, {"Column1.statusInfo.statusDisplay", "RigStatus"}, {"Column1.statusInfo.secondsSinceStart", "RunTime"}, {"Column1.speedInfo.hashrate.1", "HashRate"}, {"Column1.speedInfo.hashrate.2", "HashRateUnit"}, {"Column1.coinInfo.profitPerDayValue", "ProfitPerDay"}, {"Column1.coinInfo.algorithm", "Algo"}, {"Column1.hasValidStatus", "ValidStatus"}, {"ProfitProfile_HashRate", "Profile HashRate"}, {"ProfitProfileId", "Profile ID"}, {"Custom", "Switch"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns2",{{"Switch", Int64.Type}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type1", each ([RigStatus] = "Mining") and ([Algo] <> null)),
    #"Sorted Rows" = Table.Sort(#"Filtered Rows",{{"Switch", Order.Descending}, {"RunTime", Order.Descending}}),
    #"Filtered Rows1" = Table.SelectRows(#"Sorted Rows", each true)
in
    #"Filtered Rows1"


Part 2 - Excel VBA / Macro
Here's the VBA to call the Profit Switching Action (check your AM's own rule ID, modify as per YOUR AM's settings), plus 2 procedures, 1 to start, 1 to pause, assign them to 2 buttons for easy access.

Code:
Global IsTimeToStop As Boolean

Sub runProfitSwitch()

Dim objHTTP     As Object
Dim URL         As String
Dim Data        As String
Dim replyTXT
Dim URLConcat As String
Dim timeStamp As String

If IsTimeToStop Then Exit Sub

IsTimeToStop = False
timeStamp = Format(Now(), "dd-mm-yyyy hh:mm:ss")
Debug.Print "Running - " + timeStamp

If Cells(2, 14).Value = 1 Then

URLConcat = "http://mypc:17790/api/miners/" & Cells(2, 1).Value & "?action=rule&rule_id=8"

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", URLConcat, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.send ("")
End If

Debug.Print "Wait for next Run"

Application.OnTime Now + TimeValue("00:01:15"), "runProfitSwitch"

End Sub

Sub PauseMacro()
    IsTimeToStop = True
    Debug.Print "Stopping..."
End Sub

Sub StartSwitcher()
    IsTimeToStop = False
    runProfitSwitch
End Sub

remember, both mypc in VBA code and queries, should be replaced by your AM main program PC's IP address.

Example screenshot:


and you only need to create a rule in AM that does 1 action: "Run Profit Switching" and enable "Support Manual Activation"



There to mount a circus to do that. Fortunately, the program is a unique interface to do everything, or so it says in the publicity of the web. Ahh does not warn that you have to know c # and apis

Anyway, I will try to see it, since you have provided valuable information, but that should not be the case, and it should be ALL integrated in the program

There is another program of the Hash AUger competition that has already incorporated a benefits panel with statistics within the same program, by my request some time ago. Is this program going to be less paying?
trucobit
Jr. Member
*
Offline Offline

Activity: 756
Merit: 2


View Profile
July 24, 2018, 02:50:21 PM
 #6912

Hello Patrike,
I encounter those type of errors more and more often :

Code:
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [Phi2]) 
Mining process not running, initiating restart (T-Rex nVidia GPU Miner, Phi2, europe.ethash-hub.miningpoolhub.com)
Mining process not running, initiating restart (PhoenixMiner, Ethereum, ZergPool [HSR])

Those are just examples, but as you can see, it's like AM was shuffling algorithms and compatible online services  Huh  PhoenixMiner trying to mine ethereum on Zergpool phi2 pool is kind of weird...


Do you have an idea of what's happening ?
Can you please send me the full log file for this issue by mail? I agree that the pool names look strange here, but it could be that the error message didn't pick up the correct pool name here. With the log files I can verify this as well.

As you requested, i send you my log file. To add to this random problem, i get sometimes alert windows error like the one i get this morning :




As you can see, AM still try to mine an algorithm with an incompatible software...
When this error occur, rig stop working until i click on the OK button. It's annoying because when it happens at night, i can lose severals hours of mining.
Tell me if you need more info or more log than the one i sent you.


Thanks for the logs, I will investigate. If you get an error message like this, it's most likely that the mining software either crash or simply give an error message when starting.

When this happend, please click the Diagnostics button in the toolbar as instructed, as it will often tell you what the isssue is.

Identified the problem. What solution will you give ?, because if a miner fails to start, you should try to solve at least the error it gives.

And as I say today, it fails, not tomorrow. We can not be with such a hidden bug and spend weeks or months, and not fix. Tonight 3 platforms have stopped. Are you going to be responsible?

The errors are important that when the, those of good, informing as it should, not mixing protocols in the same error.

Also, depending on my configuration, if it fails 3 times you should ignore it, because when it gives this error it does not ignore it, and if it does, in the last capture you will see the number of failures and at the end they were stopped, instead of ignoring and follow in other protocols.

Here is work to do. It is also true that T-rex, although it is very weak, is too sensitive, and today's OC, tomorrow does not work
trucobit
Jr. Member
*
Offline Offline

Activity: 756
Merit: 2


View Profile
July 24, 2018, 02:58:59 PM
 #6913

Hi Awesome Miner Miners,

I just wanted to share something I've used to provide a slight more versatility to the profit switcher and how it's done, via Excel with little to no coding backgrounds.

What it does:
It is setting an external rule to fit the condition that

Initiate Profit Switching IF miner hashrate is > xx% of profile defined hashrate
AND
Profit / Day / GPU is < y.yy
AND
Mining session is > zz seconds.


What you need:

Awesome Miner Premium Edition or Greater (for API access)
Excel (I use office 365)

***
I'm not going into detailed step by step on how this is done. I'll just paste the (little modified) code here, for those interested but no programming background, you can just explore around and use the code below as a starting point.

Part 1 - Queries

Profile_ID (for identifying which profile miner is currently using)
Code:
let
    Source = Xml.Tables(File.Contents("C:\Users\Username\AppData\Roaming\AwesomeMiner\ConfigData.xml")),
    MinerSettings = Source{0}[MinerSettings],
    #"Changed Type" = Table.TransformColumnTypes(MinerSettings,{{"ExternalMinerList", type text}}),
    ManagedMinerList = #"Changed Type"{0}[ManagedMinerList],
    #"Expanded ManagedMiner" = Table.ExpandTableColumn(ManagedMinerList, "ManagedMiner", {"ID", "ProfitProfileId"}, {"ManagedMiner.ID", "ManagedMiner.ProfitProfileId"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded ManagedMiner",{{"ManagedMiner.ID", "MinerID"}, {"ManagedMiner.ProfitProfileId", "ProfitProfileId"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"MinerID", type number}, {"ProfitProfileId", type number}})
in
    #"Changed Type1"

ProfitProfile_HR_Table (Hashrate for each algos defined in every profit profile)
Code:
let
    Source = Xml.Tables(File.Contents("C:\Users\Username\AppData\Roaming\AwesomeMiner\ConfigData.xml")),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"LogLevel", type text}, {"IsFirstRun", type logical}, {"IsFirstTimeMinimize", type logical}, {"AutoStart", type logical}, {"AutoStartMinimized", type logical}, {"AlwaysStartMinimized", type logical}, {"DevelopmentMode", type logical}, {"PerformanceMode", type logical}, {"CheckUpdates", type logical}, {"LongerConnectionTimeout", type logical}, {"AlternativeConnection", type logical}, {"DotNetVersionReminderDisplayed2", type logical}, {"PerformanceModeReminderDisplayed", type logical}, {"BenchmarkOffline", type logical}, {"ConfigurationCreatedUtc", type datetime}}),
    ProfitSwitchingSettings = #"Changed Type"{0}[ProfitSwitchingSettings],
    #"Changed Type1" = Table.TransformColumnTypes(ProfitSwitchingSettings,{{"EnabledPools", type text}, {"UseCustom", type logical}, {"CustomPoolId", Int64.Type}, {"CustomPoolType", type text}, {"NicehashWorker", type text}, {"NicehashRegion", type text}, {"ZpoolWorker", type text}, {"GranatGasWorker", type text}, {"GranatGasRegion", type text}, {"HashRefineryWorker", type text}, {"AHashPoolWorker", type text}, {"ZergPoolWorker", type text}, {"MiningDutchWorker", type text}, {"BlazepoolWorker", type text}, {"BlockMastersWorker", type text}, {"MiningPoolHubWorker", type text}, {"MiningPoolHubRegion", type text}, {"EnableManaged", type logical}, {"PredefinedVisible", type logical}, {"Interval", Int64.Type}, {"PowerCost", type number}, {"UseProfitThreshold", type logical}, {"ProfitThresholdPercent", Int64.Type}, {"NicehashUserUrl", type text}, {"ZpoolUserUrl", type text}, {"GranatGasUserUrl", type text}, {"HashRefineryUserUrl", type text}, {"AHashPoolUserUrl", type text}, {"MiningPoolHubUserUrl", type text}, {"ZergPoolAlgoUserUrl", type text}, {"MiningDutchAlgoUserUrl", type text}, {"BlazepoolUserUrl", type text}, {"BlockMastersUserUrl", type text}, {"SelectBtcPayout", type logical}, {"IgnoreFailedPools", type logical}, {"IgnoreFailedPoolsTime", Int64.Type}, {"RequiredAcceptTime", Int64.Type}}),
    ProfitProfileList = #"Changed Type1"{0}[ProfitProfileList],
    ProfitProfile = ProfitProfileList{0}[ProfitProfile],
    #"Changed Type2" = Table.TransformColumnTypes(ProfitProfile,{{"ID", Int64.Type}, {"Description", type text}, {"PredefinedType", type text}, {"OverridePools", type logical}, {"EnableIgnorePools", type logical}, {"ProfileBatchCommands", type text}}),
    #"Expanded AlgorithmSettingsList" = Table.ExpandTableColumn(#"Changed Type2", "AlgorithmSettingsList", {"AlgorithmSettings"}, {"AlgorithmSettings"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded AlgorithmSettingsList",{"PredefinedType", "OverridePools", "EnableIgnorePools", "SwitchingProfile", "ProfileBatchCommands", "ProfitEngineList"}),
    #"Expanded AlgorithmSettings" = Table.ExpandTableColumn(#"Filtered Rows", "AlgorithmSettings", {"Algorithm", "HashrateValue"}, {"Algorithm", "HashrateValue"}),
    #"Changed Type3" = Table.TransformColumnTypes(#"Expanded AlgorithmSettings",{{"HashrateValue", type number}, {"Algorithm", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type3",{{"ID", "ProfitProfileId"}})
in
    #"Renamed Columns"

miners (Joining the miners API call with the previous 2 queries, then do the calculation and determine if Profit Switching condition is met (example here, if hashrate > 85% defined hashrate and each GPU device (not miner) earns less than 0.05 USD, then switch condition is met), set this to auto refresh every minute or however long you see fit.
Code:
let
    Source = Json.Document(Web.Contents("http://mypc:17790/api/miners")),
    groupList = Source[groupList],
    groupList1 = groupList{0},
    minerList = groupList1[minerList],
    #"Converted to Table" = Table.FromList(minerList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "name", "statusInfo", "speedInfo", "coinInfo", "gpuList", "hasValidStatus"}, {"Column1.id", "Column1.name", "Column1.statusInfo", "Column1.speedInfo", "Column1.coinInfo", "Column1.gpuList", "Column1.hasValidStatus"}),
    #"Expanded Column1.speedInfo" = Table.ExpandRecordColumn(#"Expanded Column1", "Column1.speedInfo", {"hashrate"}, {"Column1.speedInfo.hashrate"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Expanded Column1.speedInfo", "Column1.speedInfo.hashrate", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.speedInfo.hashrate.1", "Column1.speedInfo.hashrate.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.speedInfo.hashrate.1", type number}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type", "GPU Count", each List.Count([Column1.gpuList])),
    #"Expanded Column1.statusInfo" = Table.ExpandRecordColumn(#"Added Custom1", "Column1.statusInfo", {"secondsSinceStart", "statusDisplay"}, {"Column1.statusInfo.secondsSinceStart", "Column1.statusInfo.statusDisplay"}),
    #"Expanded Column1.coinInfo" = Table.ExpandRecordColumn(#"Expanded Column1.statusInfo", "Column1.coinInfo", {"profitPerDayValue", "algorithm"}, {"Column1.coinInfo.profitPerDayValue", "Column1.coinInfo.algorithm"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded Column1.coinInfo",{"Column1.id", "Column1.name", "Column1.statusInfo.statusDisplay", "Column1.statusInfo.secondsSinceStart", "Column1.coinInfo.profitPerDayValue", "Column1.hasValidStatus"}),
    #"Merged Queries" = Table.NestedJoin(#"Appended Query",{"Column1.id"},Profile_ID,{"MinerID"},"ProfitProfile_HR_Table",JoinKind.LeftOuter),
    #"Expanded ProfitProfile_HR_Table" = Table.ExpandTableColumn(#"Merged Queries", "ProfitProfile_HR_Table", {"ProfitProfileId"}, {"ProfitProfile_HR_Table.ProfitProfileId"}),
    #"Renamed Columns" = Table.RenameColumns(#"Expanded ProfitProfile_HR_Table",{{"ProfitProfile_HR_Table.ProfitProfileId", "ProfitProfileId"}}),
    #"Merged Queries1" = Table.NestedJoin(#"Renamed Columns",{"ProfitProfileId", "Column1.coinInfo.algorithm"},ProfitProfile_HR_Table,{"ProfitProfileId", "Algorithm"},"ProfitProfile_HR_Table",JoinKind.LeftOuter),
    #"Expanded ProfitProfile_HR_Table1" = Table.ExpandTableColumn(#"Merged Queries1", "ProfitProfile_HR_Table", {"HashrateValue"}, {"ProfitProfile_HR_Table.HashrateValue"}),
    #"Renamed Columns1" = Table.RenameColumns(#"Expanded ProfitProfile_HR_Table1",{{"ProfitProfile_HR_Table.HashrateValue", "ProfitProfile_HashRate"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns1", "Custom", each if [Column1.statusInfo.secondsSinceStart] > 60 and [Column1.coinInfo.profitPerDayValue] <= (0.05*[GPU Count]) and [Column1.speedInfo.hashrate.1] > (0.85*[ProfitProfile_HashRate]) then 1 else 0),
    #"Renamed Columns2" = Table.RenameColumns(#"Added Custom",{{"Column1.id", "RigID"}, {"Column1.name", "RigName"}, {"Column1.statusInfo.statusDisplay", "RigStatus"}, {"Column1.statusInfo.secondsSinceStart", "RunTime"}, {"Column1.speedInfo.hashrate.1", "HashRate"}, {"Column1.speedInfo.hashrate.2", "HashRateUnit"}, {"Column1.coinInfo.profitPerDayValue", "ProfitPerDay"}, {"Column1.coinInfo.algorithm", "Algo"}, {"Column1.hasValidStatus", "ValidStatus"}, {"ProfitProfile_HashRate", "Profile HashRate"}, {"ProfitProfileId", "Profile ID"}, {"Custom", "Switch"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns2",{{"Switch", Int64.Type}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type1", each ([RigStatus] = "Mining") and ([Algo] <> null)),
    #"Sorted Rows" = Table.Sort(#"Filtered Rows",{{"Switch", Order.Descending}, {"RunTime", Order.Descending}}),
    #"Filtered Rows1" = Table.SelectRows(#"Sorted Rows", each true)
in
    #"Filtered Rows1"


Part 2 - Excel VBA / Macro
Here's the VBA to call the Profit Switching Action (check your AM's own rule ID, modify as per YOUR AM's settings), plus 2 procedures, 1 to start, 1 to pause, assign them to 2 buttons for easy access.

Code:
Global IsTimeToStop As Boolean

Sub runProfitSwitch()

Dim objHTTP     As Object
Dim URL         As String
Dim Data        As String
Dim replyTXT
Dim URLConcat As String
Dim timeStamp As String

If IsTimeToStop Then Exit Sub

IsTimeToStop = False
timeStamp = Format(Now(), "dd-mm-yyyy hh:mm:ss")
Debug.Print "Running - " + timeStamp

If Cells(2, 14).Value = 1 Then

URLConcat = "http://mypc:17790/api/miners/" & Cells(2, 1).Value & "?action=rule&rule_id=8"

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", URLConcat, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.send ("")
End If

Debug.Print "Wait for next Run"

Application.OnTime Now + TimeValue("00:01:15"), "runProfitSwitch"

End Sub

Sub PauseMacro()
    IsTimeToStop = True
    Debug.Print "Stopping..."
End Sub

Sub StartSwitcher()
    IsTimeToStop = False
    runProfitSwitch
End Sub

remember, both mypc in VBA code and queries, should be replaced by your AM main program PC's IP address.

Example screenshot:


and you only need to create a rule in AM that does 1 action: "Run Profit Switching" and enable "Support Manual Activation"



There to mount a circus to do that. Fortunately, the program is a unique interface to do everything, or so it says in the publicity of the web. Ahh does not warn that you have to know c # and apis

Anyway, I will try to see it, since you have provided valuable information, but that should not be the case, and it should be ALL integrated in the program

There is another program of the Hash AUger competition that has already incorporated a benefits panel with statistics within the same program, by my request some time ago. Is this program going to be less paying?

It is incomprehensible that one works as basic as that described in doing it with the EXcel is not incorporated within AW, and only those who have the right knowledge can do so.

The spirit of the program is to make things easy for the miners. And this is quite far from the simplicity, no matter how easy they say it is, and it could be easy, it is a mess to do it externally.

There are many options for almost everything, except for this. Nor is there documentation written by you about how to do it, a user must come to say it. But even so, doing it externally in a PAYMENT program has a crime, it should be incorporated or with rules, but not with an Excel and VBA, you should warn that this knowledge is required in large and well visible letters.

Because in the end the program that is supposed to be EASY and sold as easy, is not so easy or so complete, when the really advanced is outside the program and without necessary documentation.
trucobit
Jr. Member
*
Offline Offline

Activity: 756
Merit: 2


View Profile
July 24, 2018, 05:23:56 PM
Last edit: July 24, 2018, 05:57:44 PM by trucobit
 #6914

https://www.dropbox.com/s/1f08ml9w109kygq/IMG_2298.MOV?dl=0

Hello patrike, I will try to be productive. I am using my time to try to identify the problem.

You have already seen that I have had dozens of errors with lyra2z (other days is another protocol) and tried to reproduce it.

IN the video that I send, I just recorded it when it started to give problems in lyra2z in blazepool, it looks perfectly as it fails.

I created a pool, only with lyra2z in blazepool and nothing else, I add it to the same miner who failed seconds before, and I throw it. The surprise is that he does it correctly, enters blazepool in lyra2z.

There is a problem in the autoswitch, because I have already shown that it fails when there are more protocols, but when it is just not, when mino gin in lyra2z does not fail, when I do the benchmark it works fine. I have not changed the miner nor the OC, I have only put mine directly blazepool in lyra2z

These failures that I have been reporting for some time, happen randomly and in different protocols. It's a good thing that there are more people who have thought of reporting the same thing as me.

gives the feeling that somehow and sometimes when a miner launches autoswitch change the OC or throw it with incorrect parameters, because I do not understand why it only happens in autoswitch, but does not fail mining with a single protocol or currency. So I do not expect to read more than it is a bad configuration of the miner, it is demonstrated that the miner works perfectly when he is not in autoswitch.

Now it is happening in miner 2, 3 and 4, but not in 1 and 5. Why does it work well in some and poorly in others if it is the same pool and miner?

Also to say that to those miners with T-rex that fail, I have lowered the OC a lot, but as it sees it fails in autoswitch but not alone.

And I hope you have the courtesy to answer me.
Dalba
Newbie
*
Offline Offline

Activity: 92
Merit: 0


View Profile
July 24, 2018, 07:20:19 PM
 #6915

https://www.dropbox.com/s/1f08ml9w109kygq/IMG_2298.MOV?dl=0

Hello patrike, I will try to be productive. I am using my time to try to identify the problem.

You have already seen that I have had dozens of errors with lyra2z (other days is another protocol) and tried to reproduce it.

IN the video that I send, I just recorded it when it started to give problems in lyra2z in blazepool, it looks perfectly as it fails.

I created a pool, only with lyra2z in blazepool and nothing else, I add it to the same miner who failed seconds before, and I throw it. The surprise is that he does it correctly, enters blazepool in lyra2z.

There is a problem in the autoswitch, because I have already shown that it fails when there are more protocols, but when it is just not, when mino gin in lyra2z does not fail, when I do the benchmark it works fine. I have not changed the miner nor the OC, I have only put mine directly blazepool in lyra2z

These failures that I have been reporting for some time, happen randomly and in different protocols. It's a good thing that there are more people who have thought of reporting the same thing as me.

gives the feeling that somehow and sometimes when a miner launches autoswitch change the OC or throw it with incorrect parameters, because I do not understand why it only happens in autoswitch, but does not fail mining with a single protocol or currency. So I do not expect to read more than it is a bad configuration of the miner, it is demonstrated that the miner works perfectly when he is not in autoswitch.

Now it is happening in miner 2, 3 and 4, but not in 1 and 5. Why does it work well in some and poorly in others if it is the same pool and miner?

Also to say that to those miners with T-rex that fail, I have lowered the OC a lot, but as it sees it fails in autoswitch but not alone.

And I hope you have the courtesy to answer me.

I think that the important point that Patrike highlighted is that the problem is a false error report. AM doesn't shuffle on his own algorithms, compatible software and pools. The real fact is that we have a miner that crash for a reason and AM report it sometimes badly depending on the speed of crash.
As i do right now, you should first try different OC settings on your cards and see if there's a difference. Maybe stability problem come from the way AM launch mining softwares, but it may be also a bad configuration on our rigs...
boxalex
Member
**
Offline Offline

Activity: 420
Merit: 13


View Profile
July 24, 2018, 08:48:52 PM
 #6916

Hi Patrike,

just some things:

- any chance the Ethash algo gets added as an option for external miners as currently it's not an option and not possible.

- integration of E3, not sure if there are some features different than the other antminers.

- some results from benchmarking seem to be totally messed up. for example on some algos with 1080ti i got huge better results with some miner software, in some cases double than with others. But when the actual mining than begins these perform way less and never get even near to the benchmark results. And here is the problem, because the other, not so good benchmarked mining software would do better, but
isn't choosen as the benchmarking favorites them.

- same goes for mining pools. I have some concern that some mining pools profit prediction are unreal, especially for blazepool and miningdutch. I could be wrong here, but i'am suspect that something isn't there like it should be.

- for some reason after last update the DGB icon for skein is gone on my end. Not sure if it's an issue on my end or the last AWM update.

Thx in advance for looking into these issues or considering them.

moppidoo
Jr. Member
*
Offline Offline

Activity: 348
Merit: 5


View Profile
July 24, 2018, 09:15:46 PM
 #6917

Hey Patrike,

you are doing a great job, thank you for that! I have a suggestion to the rules (or maybe it can be done something else).

If I setup a rule with (for example) a temperature trigger greater than or equals 80C.
As actions I have
1) A Notification with "Notifice once until acknowledged" and
2) Run Executable

Whenever the rig got 80C+ I will get one notification only until I click Acknowledge or Clear. So far so good.
But the programm will be loaded over and over again, as long as the rig got 80C+.

Is it possible that the programm will be loaded only one time? Maybe with a mark-field like in Notifications "Start only once until Aknowledge". Or maybe you have a better idea Smiley

Edit: The reason behind is simple. I will turn off a smart socket as emergency stop. But so it receive unlimited turn off signals.

Just out of curiosity, what if you set timed trigger so that it only runs every say, 3 minutes (enough for shutdown, cool down)?
trucobit
Jr. Member
*
Offline Offline

Activity: 756
Merit: 2


View Profile
July 24, 2018, 10:39:52 PM
 #6918

https://www.dropbox.com/s/1f08ml9w109kygq/IMG_2298.MOV?dl=0

Hello patrike, I will try to be productive. I am using my time to try to identify the problem.

You have already seen that I have had dozens of errors with lyra2z (other days is another protocol) and tried to reproduce it.

IN the video that I send, I just recorded it when it started to give problems in lyra2z in blazepool, it looks perfectly as it fails.

I created a pool, only with lyra2z in blazepool and nothing else, I add it to the same miner who failed seconds before, and I throw it. The surprise is that he does it correctly, enters blazepool in lyra2z.

There is a problem in the autoswitch, because I have already shown that it fails when there are more protocols, but when it is just not, when mino gin in lyra2z does not fail, when I do the benchmark it works fine. I have not changed the miner nor the OC, I have only put mine directly blazepool in lyra2z

These failures that I have been reporting for some time, happen randomly and in different protocols. It's a good thing that there are more people who have thought of reporting the same thing as me.

gives the feeling that somehow and sometimes when a miner launches autoswitch change the OC or throw it with incorrect parameters, because I do not understand why it only happens in autoswitch, but does not fail mining with a single protocol or currency. So I do not expect to read more than it is a bad configuration of the miner, it is demonstrated that the miner works perfectly when he is not in autoswitch.

Now it is happening in miner 2, 3 and 4, but not in 1 and 5. Why does it work well in some and poorly in others if it is the same pool and miner?

Also to say that to those miners with T-rex that fail, I have lowered the OC a lot, but as it sees it fails in autoswitch but not alone.

And I hope you have the courtesy to answer me.

I think that the important point that Patrike highlighted is that the problem is a false error report. AM doesn't shuffle on his own algorithms, compatible software and pools. The real fact is that we have a miner that crash for a reason and AM report it sometimes badly depending on the speed of crash.
As i do right now, you should first try different OC settings on your cards and see if there's a difference. Maybe stability problem come from the way AM launch mining softwares, but it may be also a bad configuration on our rigs...

Agree that it is a bad error report.

But, the problem is that it tells me that lyra2z does not work when it is in autoprofit mode, but it does when there is no autoprofit. In the video I just choose that protocol and it works perfectly, so it's not the miner's configuration, it's the problem of how the autoswtich launches the requests of some miners
joseph32
Member
**
Offline Offline

Activity: 413
Merit: 21


View Profile
July 24, 2018, 11:00:31 PM
 #6919

@moppidoo

No, I need it an instant shutdown. I have some watercooled rigs in a single circulation system. If the main system (with the pump connected) just soft crashs or reboot or so, thats no problem. The pump is even still running. But if the main system hard crashs or shut down for whatever reason (very rare, but happens), all other systems are overheating in just a second.
trucobit
Jr. Member
*
Offline Offline

Activity: 756
Merit: 2


View Profile
July 25, 2018, 12:32:12 AM
 #6920

@moppidoo

No, I need it an instant shutdown. I have some watercooled rigs in a single circulation system. If the main system (with the pump connected) just soft crashs or reboot or so, thats no problem. The pump is even still running. But if the main system hard crashs or shut down for whatever reason (very rare, but happens), all other systems are overheating in just a second.

In case it helps you, I have a rule that if it reaches a temperature, for example 80 as you request, change the OC profile to a much softer one. That would continue the platform without stopping and lower the temperature.

When you change to another protocol, the corresponding OC will be applied again. and again if it reaches 80 degrees, the same rule will reduce the OC.

You can even set another rule to 82, and if you arrive you can still put a lower OC.

Another idea is to feed the water cooling pump with current that does not come from the computer, or that comes from another source, so, even if the computer crashes or gets stuck, the pump will always work, even if you turn off the computer, the pump would still work

I hope to help.
Pages: « 1 ... 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 ... 647 »
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!