update before switch2
This commit is contained in:
parent
dff51b0d53
commit
e76e99d86f
|
@ -1,2 +1,6 @@
|
|||
/typescript/Frontend/node_modules
|
||||
/typescript/Frontend/node_modules/*
|
||||
*/Debug/*
|
||||
*/Release/*
|
||||
*/db.sqlite
|
||||
*/*.fossil
|
|
@ -1477,88 +1477,92 @@
|
|||
<DasType>varchar|0s</DasType>
|
||||
<Position>8</Position>
|
||||
</column>
|
||||
<index id="527" parent="485" name="User_Email">
|
||||
<column id="527" parent="485" name="S3Key">
|
||||
<DasType>varchar|0s</DasType>
|
||||
<Position>9</Position>
|
||||
</column>
|
||||
<index id="528" parent="485" name="User_Email">
|
||||
<ColNames>Email</ColNames>
|
||||
</index>
|
||||
<index id="528" parent="485" name="User_ParentId">
|
||||
<index id="529" parent="485" name="User_ParentId">
|
||||
<ColNames>ParentId</ColNames>
|
||||
</index>
|
||||
<key id="529" parent="485">
|
||||
<key id="530" parent="485">
|
||||
<ColNames>Id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="530" parent="486" name="UserId">
|
||||
<column id="531" parent="486" name="UserId">
|
||||
<DasType>integer|0s</DasType>
|
||||
<Position>1</Position>
|
||||
</column>
|
||||
<column id="531" parent="486" name="FolderId">
|
||||
<column id="532" parent="486" name="FolderId">
|
||||
<DasType>integer|0s</DasType>
|
||||
<Position>2</Position>
|
||||
</column>
|
||||
<column id="532" parent="486" name="Id">
|
||||
<column id="533" parent="486" name="Id">
|
||||
<AutoIncrement>1</AutoIncrement>
|
||||
<DasType>integer|0s</DasType>
|
||||
<NotNull>1</NotNull>
|
||||
<Position>3</Position>
|
||||
</column>
|
||||
<index id="533" parent="486" name="User2Folder_UserId">
|
||||
<index id="534" parent="486" name="User2Folder_UserId">
|
||||
<ColNames>UserId</ColNames>
|
||||
</index>
|
||||
<index id="534" parent="486" name="User2Folder_FolderId">
|
||||
<index id="535" parent="486" name="User2Folder_FolderId">
|
||||
<ColNames>FolderId</ColNames>
|
||||
</index>
|
||||
<key id="535" parent="486">
|
||||
<key id="536" parent="486">
|
||||
<ColNames>Id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="536" parent="487" name="UserId">
|
||||
<column id="537" parent="487" name="UserId">
|
||||
<DasType>integer|0s</DasType>
|
||||
<Position>1</Position>
|
||||
</column>
|
||||
<column id="537" parent="487" name="InstallationId">
|
||||
<column id="538" parent="487" name="InstallationId">
|
||||
<DasType>integer|0s</DasType>
|
||||
<Position>2</Position>
|
||||
</column>
|
||||
<column id="538" parent="487" name="Id">
|
||||
<column id="539" parent="487" name="Id">
|
||||
<AutoIncrement>1</AutoIncrement>
|
||||
<DasType>integer|0s</DasType>
|
||||
<NotNull>1</NotNull>
|
||||
<Position>3</Position>
|
||||
</column>
|
||||
<index id="539" parent="487" name="User2Installation_UserId">
|
||||
<index id="540" parent="487" name="User2Installation_UserId">
|
||||
<ColNames>UserId</ColNames>
|
||||
</index>
|
||||
<index id="540" parent="487" name="User2Installation_InstallationId">
|
||||
<index id="541" parent="487" name="User2Installation_InstallationId">
|
||||
<ColNames>InstallationId</ColNames>
|
||||
</index>
|
||||
<key id="541" parent="487">
|
||||
<key id="542" parent="487">
|
||||
<ColNames>Id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="542" parent="488" name="type">
|
||||
<column id="543" parent="488" name="type">
|
||||
<DasType>TEXT|0s</DasType>
|
||||
<Position>1</Position>
|
||||
</column>
|
||||
<column id="543" parent="488" name="name">
|
||||
<column id="544" parent="488" name="name">
|
||||
<DasType>TEXT|0s</DasType>
|
||||
<Position>2</Position>
|
||||
</column>
|
||||
<column id="544" parent="488" name="tbl_name">
|
||||
<column id="545" parent="488" name="tbl_name">
|
||||
<DasType>TEXT|0s</DasType>
|
||||
<Position>3</Position>
|
||||
</column>
|
||||
<column id="545" parent="488" name="rootpage">
|
||||
<column id="546" parent="488" name="rootpage">
|
||||
<DasType>INT|0s</DasType>
|
||||
<Position>4</Position>
|
||||
</column>
|
||||
<column id="546" parent="488" name="sql">
|
||||
<column id="547" parent="488" name="sql">
|
||||
<DasType>TEXT|0s</DasType>
|
||||
<Position>5</Position>
|
||||
</column>
|
||||
<column id="547" parent="489" name="name">
|
||||
<column id="548" parent="489" name="name">
|
||||
<Position>1</Position>
|
||||
</column>
|
||||
<column id="548" parent="489" name="seq">
|
||||
<column id="549" parent="489" name="seq">
|
||||
<Position>2</Position>
|
||||
</column>
|
||||
</database-model>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177554988
|
||||
16769731911267901
|
|
@ -7,6 +7,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Flurl.Http" Version="3.2.4" />
|
||||
<PackageReference Include="Microsoft.AspNet.Identity.Core" Version="2.2.3" />
|
||||
<PackageReference Include="Microsoft.AspNet.Identity.Owin" Version="2.2.3" />
|
||||
<PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.9" />
|
||||
|
@ -26,6 +27,9 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="AWSSDK.Core">
|
||||
<HintPath>..\..\..\..\..\..\.nuget\packages\awssdk.core\3.7.8.10\lib\netcoreapp3.1\AWSSDK.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SQLite-net">
|
||||
<HintPath>..\..\..\..\..\.nuget\packages\sqlite-net-pcl\1.8.116\lib\netstandard2.0\SQLite-net.dll</HintPath>
|
||||
</Reference>
|
||||
|
|
|
@ -24,7 +24,7 @@ public class Controller
|
|||
var username = usr.ToString();
|
||||
var password = pwd.ToString();
|
||||
|
||||
if (username is null || password is null)
|
||||
if (username is null || username == "" || password == "" || password is null)
|
||||
return new HttpResponseMessage(HttpStatusCode.BadRequest);
|
||||
|
||||
using var db = Db.Connect();
|
||||
|
@ -58,6 +58,19 @@ public class Controller
|
|||
return db.DeleteSession(currentUser.Id);
|
||||
}
|
||||
|
||||
[ProducesResponseType(200)]
|
||||
[ProducesResponseType(401)]
|
||||
[HttpPost($"{nameof(UpdateS3Creds)}")]
|
||||
public Object UpdateS3Creds()
|
||||
{
|
||||
var ctxAccessor = new HttpContextAccessor();
|
||||
var ctx = ctxAccessor.HttpContext;
|
||||
using var db = Db.Connect();
|
||||
var currentUser = (User)ctx!.Items["User"]!;
|
||||
|
||||
return db.CreateAndSaveUserS3ApiKey(currentUser);
|
||||
}
|
||||
|
||||
|
||||
[ProducesResponseType(200)]
|
||||
[ProducesResponseType(401)]
|
||||
|
|
|
@ -89,9 +89,10 @@ public partial class Db : IDisposable
|
|||
|
||||
public IEnumerable<Installation> GetAllAccessibleInstallations(User user)
|
||||
{
|
||||
var direct = GetDirectlyAccessibleInstallations(user);
|
||||
var direct = GetDirectlyAccessibleInstallations(user).ToList();
|
||||
var fromFolders = GetAllAccessibleFolders(user)
|
||||
.SelectMany(GetChildInstallations);
|
||||
.SelectMany(GetChildInstallations)
|
||||
.Except(direct);
|
||||
|
||||
return direct.Concat(fromFolders);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
using System.Net;
|
||||
using System.Net.Mail;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using Backend.Model;
|
||||
using Backend.Utils;
|
||||
using Flurl.Http;
|
||||
using InnovEnergy.Lib.Utils;
|
||||
using Microsoft.AspNetCore.DataProtection;
|
||||
using SQLite;
|
||||
#pragma warning disable CS0472
|
||||
#pragma warning disable CS8602
|
||||
|
@ -52,6 +58,48 @@ public partial class Db
|
|||
return Create(user);
|
||||
}
|
||||
|
||||
public Object CreateAndSaveUserS3ApiKey(User user)
|
||||
{
|
||||
//EXOSCALE API URL
|
||||
const String url = "https://api-ch-dk-2.exoscale.com/v2/access-key";
|
||||
const String secret = "S2K1okphiCSNK4mzqr4swguFzngWAMb1OoSlZsJa9F0";
|
||||
const String apiKey = "EXOb98ec9008e3ec16e19d7b593";
|
||||
var payload = new
|
||||
{ name = user.Email,
|
||||
operations = new List<String> {"getObject", "listBucket"},
|
||||
content = new List<Object>{}};
|
||||
|
||||
var installationIdList = User2Installation
|
||||
.Where(i => i.UserId == user.Id)
|
||||
.SelectMany(i => Installations.Where(f => i.InstallationId == f.Id))
|
||||
.ToList();
|
||||
|
||||
foreach (var installation in installationIdList)
|
||||
{
|
||||
payload.content.Add(new {domain = "sos", resource_type = "bucket", resource_name = installation.Name}); //TODO CHANGE NAME TO S3BUCKET
|
||||
}
|
||||
|
||||
using var hmacSha1 = new HMACSHA1(Encoding.UTF8.GetBytes(secret));
|
||||
var signature = Encoding.UTF8
|
||||
.GetBytes(payload.ToString())
|
||||
.Apply(hmacSha1.ComputeHash)
|
||||
.Apply(Convert.ToBase64String);
|
||||
|
||||
var keyJson = url
|
||||
.WithHeader("Authorization", $"POST {apiKey};{signature}")
|
||||
.PostJsonAsync(payload)
|
||||
.ReceiveJson()
|
||||
.Result;
|
||||
|
||||
return SetUserS3ApiKey(user, keyJson.GetValue("key"));
|
||||
}
|
||||
|
||||
public Result SetUserS3ApiKey(User user,String key)
|
||||
{
|
||||
user.S3Key = key;
|
||||
return Update(user);
|
||||
}
|
||||
|
||||
public Result UpdateUser(User user)
|
||||
{
|
||||
var oldUser = GetUserById(user.Id);
|
||||
|
@ -96,5 +144,6 @@ public partial class Db
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,23 @@ public abstract class TreeNode
|
|||
public String Name { get; set; } = "";
|
||||
public String Information { get; set; } = ""; // unstructured random info
|
||||
|
||||
protected Boolean Equals(TreeNode other)
|
||||
{
|
||||
return Id == other.Id && ParentId == other.ParentId;
|
||||
}
|
||||
|
||||
public override Boolean Equals(Object? obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj)) return false;
|
||||
if (ReferenceEquals(this, obj)) return true;
|
||||
return obj.GetType() == this.GetType() && Equals((TreeNode)obj);
|
||||
}
|
||||
|
||||
public override Int32 GetHashCode()
|
||||
{
|
||||
return HashCode.Combine(Id, ParentId);
|
||||
}
|
||||
|
||||
[Indexed] // parent/child relation
|
||||
public Int64 ParentId { get; set; }
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ public class User : TreeNode
|
|||
[Indexed]
|
||||
public String Email { get; set; } = "";
|
||||
public Boolean HasWriteAccess { get; set; }
|
||||
public String S3Key { get; set; }
|
||||
public String Salt { get; set; }
|
||||
public String Password { get; set; }
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -8,6 +8,7 @@
|
|||
".NETCoreApp,Version=v6.0": {
|
||||
"Backend/1.0.0": {
|
||||
"dependencies": {
|
||||
"Flurl.Http": "3.2.4",
|
||||
"Microsoft.AspNet.Identity.Core": "2.2.3",
|
||||
"Microsoft.AspNet.Identity.Owin": "2.2.3",
|
||||
"Microsoft.AspNet.WebApi.Core": "5.2.9",
|
||||
|
@ -24,7 +25,8 @@
|
|||
"Swashbuckle.AspNetCore.Filters.Abstractions": "7.0.6",
|
||||
"WebServer": "1.0.0",
|
||||
"sqlite-net-pcl": "1.8.116",
|
||||
"sqlite-net-sqlcipher": "1.9.141-beta"
|
||||
"sqlite-net-sqlcipher": "1.9.141-beta",
|
||||
"AWSSDK.Core": "3.3.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"Backend.dll": {}
|
||||
|
@ -108,24 +110,24 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"Flurl/3.0.1": {
|
||||
"Flurl/3.0.6": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Flurl.dll": {
|
||||
"assemblyVersion": "3.0.1.0",
|
||||
"fileVersion": "3.0.1.0"
|
||||
"assemblyVersion": "3.0.6.0",
|
||||
"fileVersion": "3.0.6.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Flurl.Http/3.0.1": {
|
||||
"Flurl.Http/3.2.4": {
|
||||
"dependencies": {
|
||||
"Flurl": "3.0.1",
|
||||
"Flurl": "3.0.6",
|
||||
"Newtonsoft.Json": "12.0.2",
|
||||
"System.Text.Encoding.CodePages": "4.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Flurl.Http.dll": {
|
||||
"assemblyVersion": "3.0.1.0",
|
||||
"fileVersion": "3.0.1.0"
|
||||
"assemblyVersion": "3.2.4.0",
|
||||
"fileVersion": "3.2.4.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1823,14 +1825,22 @@
|
|||
},
|
||||
"WebServer/1.0.0": {
|
||||
"dependencies": {
|
||||
"Flurl": "3.0.1",
|
||||
"Flurl.Http": "3.0.1",
|
||||
"Flurl": "3.0.6",
|
||||
"Flurl.Http": "3.2.4",
|
||||
"System.Reactive.Linq": "5.0.0",
|
||||
"Utils": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"WebServer.dll": {}
|
||||
}
|
||||
},
|
||||
"AWSSDK.Core/3.3.0.0": {
|
||||
"runtime": {
|
||||
"AWSSDK.Core.dll": {
|
||||
"assemblyVersion": "3.3.0.0",
|
||||
"fileVersion": "3.7.8.10"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1882,19 +1892,19 @@
|
|||
"path": "decimalmath.decimalex/1.0.2",
|
||||
"hashPath": "decimalmath.decimalex.1.0.2.nupkg.sha512"
|
||||
},
|
||||
"Flurl/3.0.1": {
|
||||
"Flurl/3.0.6": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-i7CuPSikVroBaWG8sPvO707Ex9C6BP5+r4JufKNU1FGMmiFgLJvNo1ttUg6ZiXIzUNknvIb1VUTIO9iEDucibg==",
|
||||
"path": "flurl/3.0.1",
|
||||
"hashPath": "flurl.3.0.1.nupkg.sha512"
|
||||
"sha512": "sha512-XMIlB/tJ4nTYF2+79xDsnnlgbXHpKyizKX2fffrECekI6pEsa9MSLzf5tPVMdLy4k4AcJPLs356Sa2Le5VRDCw==",
|
||||
"path": "flurl/3.0.6",
|
||||
"hashPath": "flurl.3.0.6.nupkg.sha512"
|
||||
},
|
||||
"Flurl.Http/3.0.1": {
|
||||
"Flurl.Http/3.2.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-wt4RrmYOPWu8v0sjuuSfhYBFzjfrCz4nJP48Kw2HFGssq0U6pMBPFHcL3zbsBFALJipAjgRET5mf+0Xz4ZnZpQ==",
|
||||
"path": "flurl.http/3.0.1",
|
||||
"hashPath": "flurl.http.3.0.1.nupkg.sha512"
|
||||
"sha512": "sha512-Me9Vm4Lm21vt/pbR0G2Dww/ZOjJgh6mB2FiH28aiUYStJD10ZecDp8jxg2zKxcy6lnkvLm99pjG4yC/k7a/d8w==",
|
||||
"path": "flurl.http/3.2.4",
|
||||
"hashPath": "flurl.http.3.2.4.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNet.Cors/5.0.0": {
|
||||
"type": "package",
|
||||
|
@ -3123,6 +3133,11 @@
|
|||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"AWSSDK.Core/3.3.0.0": {
|
||||
"type": "reference",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -42,6 +42,10 @@
|
|||
"net6.0": {
|
||||
"targetAlias": "net6.0",
|
||||
"dependencies": {
|
||||
"Flurl.Http": {
|
||||
"target": "Package",
|
||||
"version": "[3.2.4, )"
|
||||
},
|
||||
"Microsoft.AspNet.Identity.Core": {
|
||||
"target": "Package",
|
||||
"version": "[2.2.3, )"
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1 +1 @@
|
|||
0ab5225c4cc41cf94cee403f98b2900d6f369d86
|
||||
7da5f9a9c2b3b0c732309c09777d2f7e8e62e6a6
|
||||
|
|
|
@ -208,3 +208,6 @@
|
|||
/home/kim/code/innovenergy/new/csharp/app/Backend/bin/Debug/net6.0/runtimes/win/lib/net6.0/System.Security.Cryptography.Pkcs.dll
|
||||
/home/kim/code/innovenergy/new/csharp/app/Backend/bin/Debug/net6.0/runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll
|
||||
/home/kim/code/innovenergy/new/csharp/app/Backend/bin/Debug/net6.0/DecimalEx.dll
|
||||
/home/kim/code/innovenergy/new/csharp/app/Backend/bin/Debug/net6.0/AWSSDK.Core.dll
|
||||
/home/kim/code/innovenergy/new/csharp/app/Backend/bin/Debug/net6.0/AWSSDK.Core.pdb
|
||||
/home/kim/code/innovenergy/new/csharp/app/Backend/bin/Debug/net6.0/AWSSDK.Core.xml
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -110,34 +110,34 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"Flurl/3.0.1": {
|
||||
"Flurl/3.0.6": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Flurl.dll": {
|
||||
"related": ".pdb;.xml"
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Flurl.dll": {
|
||||
"related": ".pdb;.xml"
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Flurl.Http/3.0.1": {
|
||||
"Flurl.Http/3.2.4": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Flurl": "3.0.1",
|
||||
"Flurl": "3.0.6",
|
||||
"Newtonsoft.Json": "12.0.2",
|
||||
"System.Text.Encoding.CodePages": "4.5.1"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/Flurl.Http.dll": {
|
||||
"related": ".pdb"
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Flurl.Http.dll": {
|
||||
"related": ".pdb"
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -3313,40 +3313,40 @@
|
|||
"lib/netstandard2.0/DecimalEx.xml"
|
||||
]
|
||||
},
|
||||
"Flurl/3.0.1": {
|
||||
"sha512": "i7CuPSikVroBaWG8sPvO707Ex9C6BP5+r4JufKNU1FGMmiFgLJvNo1ttUg6ZiXIzUNknvIb1VUTIO9iEDucibg==",
|
||||
"Flurl/3.0.6": {
|
||||
"sha512": "XMIlB/tJ4nTYF2+79xDsnnlgbXHpKyizKX2fffrECekI6pEsa9MSLzf5tPVMdLy4k4AcJPLs356Sa2Le5VRDCw==",
|
||||
"type": "package",
|
||||
"path": "flurl/3.0.1",
|
||||
"path": "flurl/3.0.6",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"flurl.3.0.1.nupkg.sha512",
|
||||
"flurl.3.0.6.nupkg.sha512",
|
||||
"flurl.nuspec",
|
||||
"icon.png",
|
||||
"lib/net461/Flurl.dll",
|
||||
"lib/net461/Flurl.pdb",
|
||||
"lib/net461/Flurl.xml",
|
||||
"lib/net472/Flurl.dll",
|
||||
"lib/net472/Flurl.xml",
|
||||
"lib/netstandard2.0/Flurl.dll",
|
||||
"lib/netstandard2.0/Flurl.pdb",
|
||||
"lib/netstandard2.0/Flurl.xml"
|
||||
]
|
||||
},
|
||||
"Flurl.Http/3.0.1": {
|
||||
"sha512": "wt4RrmYOPWu8v0sjuuSfhYBFzjfrCz4nJP48Kw2HFGssq0U6pMBPFHcL3zbsBFALJipAjgRET5mf+0Xz4ZnZpQ==",
|
||||
"Flurl.Http/3.2.4": {
|
||||
"sha512": "Me9Vm4Lm21vt/pbR0G2Dww/ZOjJgh6mB2FiH28aiUYStJD10ZecDp8jxg2zKxcy6lnkvLm99pjG4yC/k7a/d8w==",
|
||||
"type": "package",
|
||||
"path": "flurl.http/3.0.1",
|
||||
"path": "flurl.http/3.2.4",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"flurl.http.3.0.1.nupkg.sha512",
|
||||
"flurl.http.3.2.4.nupkg.sha512",
|
||||
"flurl.http.nuspec",
|
||||
"icon.png",
|
||||
"lib/net461/Flurl.Http.dll",
|
||||
"lib/net461/Flurl.Http.pdb",
|
||||
"lib/net461/Flurl.xml",
|
||||
"lib/net461/Flurl.Http.xml",
|
||||
"lib/net472/Flurl.Http.dll",
|
||||
"lib/net472/Flurl.Http.xml",
|
||||
"lib/netstandard2.0/Flurl.Http.dll",
|
||||
"lib/netstandard2.0/Flurl.Http.pdb",
|
||||
"lib/netstandard2.0/Flurl.xml"
|
||||
"lib/netstandard2.0/Flurl.Http.xml"
|
||||
]
|
||||
},
|
||||
"Microsoft.AspNet.Cors/5.0.0": {
|
||||
|
@ -8876,6 +8876,7 @@
|
|||
},
|
||||
"projectFileDependencyGroups": {
|
||||
"net6.0": [
|
||||
"Flurl.Http >= 3.2.4",
|
||||
"Microsoft.AspNet.Identity.Core >= 2.2.3",
|
||||
"Microsoft.AspNet.Identity.Owin >= 2.2.3",
|
||||
"Microsoft.AspNet.WebApi.Core >= 5.2.9",
|
||||
|
@ -8936,6 +8937,10 @@
|
|||
"net6.0": {
|
||||
"targetAlias": "net6.0",
|
||||
"dependencies": {
|
||||
"Flurl.Http": {
|
||||
"target": "Package",
|
||||
"version": "[3.2.4, )"
|
||||
},
|
||||
"Microsoft.AspNet.Identity.Core": {
|
||||
"target": "Package",
|
||||
"version": "[2.2.3, )"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "MdRskQtEzVoDz9Sm7iAX4BseowH8RQwBYdJ5zAQHKrlwu1lEHilXUBfKGcTAJ2MpQBrppgcAwKnwTyQJuU6q3Q==",
|
||||
"dgSpecHash": "1RbPp0FEU5KEAhKC3sKKqtzItTMT7Hl8P876cSQLAmvYjhxsYlAjV776Uk2Gh6OMCI2eEoIB6g3d6Cj4SAdSJg==",
|
||||
"success": true,
|
||||
"projectFilePath": "/home/kim/code/innovenergy/new/csharp/app/Backend/Backend.csproj",
|
||||
"expectedPackageFiles": [
|
||||
|
@ -10,8 +10,8 @@
|
|||
"/home/kim/.nuget/packages/azure.security.keyvault.secrets/4.1.0/azure.security.keyvault.secrets.4.1.0.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/cliwrap/3.3.1/cliwrap.3.3.1.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/decimalmath.decimalex/1.0.2/decimalmath.decimalex.1.0.2.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/flurl/3.0.1/flurl.3.0.1.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/flurl.http/3.0.1/flurl.http.3.0.1.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/flurl/3.0.6/flurl.3.0.6.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/flurl.http/3.2.4/flurl.http.3.2.4.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/microsoft.aspnet.cors/5.0.0/microsoft.aspnet.cors.5.0.0.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/microsoft.aspnet.identity.core/2.2.3/microsoft.aspnet.identity.core.2.2.3.nupkg.sha512",
|
||||
"/home/kim/.nuget/packages/microsoft.aspnet.identity.owin/2.2.3/microsoft.aspnet.identity.owin.2.2.3.nupkg.sha512",
|
||||
|
|
|
@ -1 +1 @@
|
|||
"restore":{"projectUniqueName":"/home/kim/code/innovenergy/new/csharp/app/Backend/Backend.csproj","projectName":"Backend","projectPath":"/home/kim/code/innovenergy/new/csharp/app/Backend/Backend.csproj","outputPath":"/home/kim/code/innovenergy/new/csharp/app/Backend/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net6.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net6.0":{"targetAlias":"net6.0","projectReferences":{"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj":{"projectPath":"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net6.0":{"targetAlias":"net6.0","dependencies":{"Microsoft.AspNet.Identity.Core":{"target":"Package","version":"[2.2.3, )"},"Microsoft.AspNet.Identity.Owin":{"target":"Package","version":"[2.2.3, )"},"Microsoft.AspNet.WebApi.Core":{"target":"Package","version":"[5.2.9, )"},"Microsoft.AspNetCore.Identity":{"target":"Package","version":"[2.2.0, )"},"Microsoft.Extensions.DependencyInjection":{"target":"Package","version":"[7.0.0, )"},"Microsoft.Identity.Web":{"target":"Package","version":"[1.26.0, )"},"Microsoft.Owin.Cors":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Host.SystemWeb":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Security":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Security.Cookies":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Security.OAuth":{"target":"Package","version":"[4.2.2, )"},"Swashbuckle.AspNetCore":{"target":"Package","version":"[6.2.3, )"},"Swashbuckle.AspNetCore.Filters":{"target":"Package","version":"[7.0.6, )"},"Swashbuckle.AspNetCore.Filters.Abstractions":{"target":"Package","version":"[7.0.6, )"},"sqlite-net-pcl":{"target":"Package","version":"[1.8.116, )"},"sqlite-net-sqlcipher":{"target":"Package","version":"[1.9.141-beta, )"}},"imports":["net461","net462","net47","net471","net472","net48"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"}}
|
||||
"restore":{"projectUniqueName":"/home/kim/code/innovenergy/new/csharp/app/Backend/Backend.csproj","projectName":"Backend","projectPath":"/home/kim/code/innovenergy/new/csharp/app/Backend/Backend.csproj","outputPath":"/home/kim/code/innovenergy/new/csharp/app/Backend/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net6.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net6.0":{"targetAlias":"net6.0","projectReferences":{"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj":{"projectPath":"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net6.0":{"targetAlias":"net6.0","dependencies":{"Flurl.Http":{"target":"Package","version":"[3.2.4, )"},"Microsoft.AspNet.Identity.Core":{"target":"Package","version":"[2.2.3, )"},"Microsoft.AspNet.Identity.Owin":{"target":"Package","version":"[2.2.3, )"},"Microsoft.AspNet.WebApi.Core":{"target":"Package","version":"[5.2.9, )"},"Microsoft.AspNetCore.Identity":{"target":"Package","version":"[2.2.0, )"},"Microsoft.Extensions.DependencyInjection":{"target":"Package","version":"[7.0.0, )"},"Microsoft.Identity.Web":{"target":"Package","version":"[1.26.0, )"},"Microsoft.Owin.Cors":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Host.SystemWeb":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Security":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Security.Cookies":{"target":"Package","version":"[4.2.2, )"},"Microsoft.Owin.Security.OAuth":{"target":"Package","version":"[4.2.2, )"},"Swashbuckle.AspNetCore":{"target":"Package","version":"[6.2.3, )"},"Swashbuckle.AspNetCore.Filters":{"target":"Package","version":"[7.0.6, )"},"Swashbuckle.AspNetCore.Filters.Abstractions":{"target":"Package","version":"[7.0.6, )"},"sqlite-net-pcl":{"target":"Package","version":"[1.8.116, )"},"sqlite-net-sqlcipher":{"target":"Package","version":"[1.9.141-beta, )"}},"imports":["net461","net462","net47","net471","net472","net48"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"}}
|
|
@ -1 +1 @@
|
|||
16769606178754984
|
||||
16769731911787900
|
|
@ -3,3 +3,10 @@
|
|||
2.0
|
||||
2.0
|
||||
2.0
|
||||
2.0
|
||||
2.0
|
||||
2.0
|
||||
2.0
|
||||
2.0
|
||||
2.0
|
||||
2.0
|
||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177514988
|
||||
16769731911227901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177474988
|
||||
16769731911227901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177474988
|
||||
16769731911227901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177434988
|
||||
16769731911227901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177474988
|
||||
16769731911187901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177434988
|
||||
16769731911227901
|
|
@ -1 +1 @@
|
|||
16769606177514988
|
||||
16769731911227901
|
|
@ -1 +1 @@
|
|||
16769606177554988
|
||||
16769731911227901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177474988
|
||||
16769731911267901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177594988
|
||||
16769731911227901
|
|
@ -1 +1 @@
|
|||
16769606177674987
|
||||
16769731911227901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177554988
|
||||
16769731911187901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177514988
|
||||
16769731911187901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177594988
|
||||
16769731911187901
|
|
@ -1 +1 @@
|
|||
16769606177514988
|
||||
16769731911187901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177474988
|
||||
16769731911187901
|
|
@ -1 +1 @@
|
|||
16769606177594988
|
||||
16769731911107901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177554988
|
||||
16769731911067902
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177554988
|
||||
16769731911107901
|
|
@ -1 +1 @@
|
|||
16769606177594988
|
||||
16769731911067902
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177594988
|
||||
16769731911067902
|
|
@ -1 +1 @@
|
|||
16769606177634987
|
||||
16769731911107901
|
|
@ -1 +1 @@
|
|||
16758719413202651
|
||||
16769731911107901
|
|
@ -1 +1 @@
|
|||
16769606177554988
|
||||
16769731911187901
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606178234985
|
||||
16769731911507901
|
|
@ -1 +1 @@
|
|||
16769606177474988
|
||||
16769731911107901
|
|
@ -3,8 +3,7 @@ using InnovEnergy.Lib.StatusApi.Phases;
|
|||
namespace InnovEnergy.Lib.StatusApi.Connections;
|
||||
|
||||
|
||||
public class DcConnection : Phase
|
||||
public record DcConnection(Decimal Voltage, Decimal Current) : Phase(Voltage, Current)
|
||||
{
|
||||
public static DcConnection Null { get; } = new DcConnection();
|
||||
public Decimal Power => Current * Voltage;
|
||||
}
|
|
@ -2,9 +2,11 @@ using InnovEnergy.Lib.StatusApi.Phases;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Connections;
|
||||
|
||||
public class SinglePhaseAcConnection : AcPhase
|
||||
{
|
||||
public Decimal Frequency { get; init; }
|
||||
|
||||
public new static SinglePhaseAcConnection Null = new SinglePhaseAcConnection();
|
||||
}
|
||||
public record SinglePhaseAcConnection
|
||||
(
|
||||
Decimal Voltage,
|
||||
Decimal Current,
|
||||
Decimal Phi,
|
||||
Decimal Frequency
|
||||
)
|
||||
: AcPhase(Voltage, Current, Phi);
|
|
@ -2,18 +2,9 @@ using InnovEnergy.Lib.StatusApi.Phases;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Connections;
|
||||
|
||||
public class ThreePhaseAcConnection
|
||||
public record ThreePhaseAcConnection(AcPhase L1, AcPhase L2, AcPhase L3, Decimal Frequency)
|
||||
{
|
||||
public static ThreePhaseAcConnection Null { get; } = new ThreePhaseAcConnection();
|
||||
|
||||
public AcPhase L1 { get; init; } = AcPhase.Null;
|
||||
public AcPhase L2 { get; init; } = AcPhase.Null;
|
||||
public AcPhase L3 { get; init; } = AcPhase.Null;
|
||||
|
||||
public Decimal Frequency { get; init; }
|
||||
|
||||
public Decimal ApparentPower => L1.ApparentPower + L2.ApparentPower + L3.ApparentPower;
|
||||
public Decimal ReactivePower => L1.ReactivePower + L2.ReactivePower + L3.ReactivePower;
|
||||
public Decimal ActivePower => L1.ActivePower + L2.ActivePower + L3.ActivePower;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
|
||||
using InnovEnergy.Lib.StatusApi.Connections;
|
||||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class Battery : DcDevice
|
||||
{
|
||||
public Decimal Soc { get; init; }
|
||||
public Decimal Temperature { get; init; }
|
||||
}
|
||||
public abstract record Battery
|
||||
(
|
||||
DcConnection Dc,
|
||||
Decimal Soc,
|
||||
Decimal Temperature
|
||||
)
|
||||
: DcDevice(Dc);
|
|
@ -2,8 +2,9 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class DcDcConverter : Device
|
||||
{
|
||||
public DcConnection Left { get; init; } = DcConnection.Null;
|
||||
public DcConnection Right { get; init; } = DcConnection.Null;
|
||||
}
|
||||
public abstract record DcDcConverter
|
||||
(
|
||||
DcConnection Left,
|
||||
DcConnection Right
|
||||
)
|
||||
: Device;
|
|
@ -2,7 +2,4 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class DcDevice : Device
|
||||
{
|
||||
public DcConnection Dc { get; init; } = DcConnection.Null;
|
||||
}
|
||||
public abstract record DcDevice(DcConnection Dc) : Device;
|
|
@ -1,6 +1,6 @@
|
|||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class Device
|
||||
public abstract record Device
|
||||
{
|
||||
public String DeviceType
|
||||
{
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
using InnovEnergy.Lib.StatusApi.Connections;
|
||||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
|
||||
public abstract class GridMeter : ThreePhaseAcDevice
|
||||
{
|
||||
|
||||
}
|
||||
public abstract record GridMeter(ThreePhaseAcConnection Ac) : ThreePhaseAcDevice(Ac);
|
|
@ -2,7 +2,9 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class Mppt : DcDevice, IPvCoupledDevice
|
||||
{
|
||||
public IReadOnlyList<DcConnection> Strings { get; init; } = ArraySegment<DcConnection>.Empty;
|
||||
}
|
||||
public abstract record Mppt
|
||||
(
|
||||
DcConnection Dc,
|
||||
IReadOnlyList<DcConnection> Strings
|
||||
)
|
||||
: DcDevice(Dc), IPvCoupledDevice;
|
|
@ -3,7 +3,4 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
|
||||
public abstract class SinglePhaseAcDevice : Device
|
||||
{
|
||||
public SinglePhaseAcConnection Ac { get; init; } = SinglePhaseAcConnection.Null;
|
||||
}
|
||||
public abstract record SinglePhaseAcDevice(SinglePhaseAcConnection Ac) : Device;
|
|
@ -2,10 +2,6 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class SinglePhaseInverter
|
||||
{
|
||||
public SinglePhaseAcConnection Ac { get; init; } = SinglePhaseAcConnection.Null;
|
||||
public DcConnection Dc { get; init; } = DcConnection.Null;
|
||||
}
|
||||
public abstract record SinglePhaseInverter(SinglePhaseAcConnection Ac, DcConnection Dc);
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,9 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class SinglePhasePvInverter : SinglePhaseAcDevice, IPvCoupledDevice
|
||||
{
|
||||
public IReadOnlyList<DcConnection> Strings { get; init; } = ArraySegment<DcConnection>.Empty;
|
||||
}
|
||||
public abstract record SinglePhasePvInverter
|
||||
(
|
||||
SinglePhaseAcConnection Ac,
|
||||
IReadOnlyList<DcConnection> Strings
|
||||
)
|
||||
: SinglePhaseAcDevice(Ac), IPvCoupledDevice;
|
|
@ -2,7 +2,4 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class ThreePhaseAcDevice: Device
|
||||
{
|
||||
public ThreePhaseAcConnection Ac { get; init; } = ThreePhaseAcConnection.Null;
|
||||
}
|
||||
public abstract record ThreePhaseAcDevice(ThreePhaseAcConnection Ac) : Device;
|
|
@ -4,8 +4,9 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class ThreePhaseInverter : Device
|
||||
{
|
||||
public ThreePhaseAcConnection Ac { get; init; } = ThreePhaseAcConnection.Null;
|
||||
public DcConnection Dc { get; init; } = DcConnection.Null;
|
||||
}
|
||||
public abstract record ThreePhaseInverter
|
||||
(
|
||||
ThreePhaseAcConnection Ac,
|
||||
DcConnection Dc
|
||||
)
|
||||
: Device;
|
|
@ -2,7 +2,9 @@ using InnovEnergy.Lib.StatusApi.Connections;
|
|||
|
||||
namespace InnovEnergy.Lib.StatusApi.Devices;
|
||||
|
||||
public abstract class ThreePhasePvInverter : ThreePhaseAcDevice , IPvCoupledDevice
|
||||
{
|
||||
public IReadOnlyList<DcConnection> Strings { get; init; } = ArraySegment<DcConnection>.Empty;
|
||||
}
|
||||
public abstract record ThreePhasePvInverter
|
||||
(
|
||||
ThreePhaseAcConnection Ac,
|
||||
IReadOnlyList<DcConnection> Strings
|
||||
)
|
||||
: ThreePhaseAcDevice(Ac), IPvCoupledDevice;
|
|
@ -1,17 +1,77 @@
|
|||
using DecimalMath;
|
||||
using static DecimalMath.DecimalEx;
|
||||
|
||||
namespace InnovEnergy.Lib.StatusApi.Phases;
|
||||
|
||||
|
||||
public class AcPhase : Phase
|
||||
public record AcPhase
|
||||
(
|
||||
Decimal Voltage,
|
||||
Decimal Current,
|
||||
Decimal Phi ,
|
||||
Decimal ApparentPower,
|
||||
Decimal ActivePower,
|
||||
Decimal ReactivePower,
|
||||
Decimal PowerFactor
|
||||
)
|
||||
: Phase(Voltage, Current)
|
||||
{
|
||||
public Decimal Phi { get; init; }
|
||||
|
||||
public Decimal ApparentPower => Voltage * Current;
|
||||
public Decimal ReactivePower => ApparentPower * Sin(Phi);
|
||||
public Decimal ActivePower => ApparentPower * PowerFactor;
|
||||
public Decimal PowerFactor => Cos(Phi);
|
||||
|
||||
internal AcPhase() {}
|
||||
public static AcPhase Null = new AcPhase();
|
||||
public static AcPhase FromActiveReactive
|
||||
(
|
||||
Decimal activePower,
|
||||
Decimal reactivePower,
|
||||
Decimal voltage,
|
||||
Decimal current
|
||||
)
|
||||
{
|
||||
var apparentPower = Sqrt(activePower * activePower + reactivePower * reactivePower);
|
||||
var phi = ATan2(reactivePower, activePower);
|
||||
|
||||
return new AcPhase
|
||||
(
|
||||
Voltage: voltage,
|
||||
Current: current,
|
||||
Phi: phi,
|
||||
ApparentPower: apparentPower,
|
||||
ActivePower: activePower,
|
||||
ReactivePower: reactivePower,
|
||||
PowerFactor: Cos(phi)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static AcPhase FromVoltageCurrentPhi(Decimal voltage, Decimal current, Decimal phi)
|
||||
{
|
||||
|
||||
var powerFactor = Cos(phi);
|
||||
var apparentPower = voltage * current;
|
||||
var activePower = apparentPower * powerFactor;
|
||||
var reactivePower = apparentPower * Sin(phi);
|
||||
|
||||
|
||||
return new AcPhase
|
||||
(
|
||||
voltage,
|
||||
current,
|
||||
phi,
|
||||
apparentPower,
|
||||
activePower,
|
||||
reactivePower,
|
||||
powerFactor
|
||||
);
|
||||
}
|
||||
|
||||
//public Decimal ApparentPower => Voltage * Current;
|
||||
//public Decimal ActivePower => ApparentPower * PowerFactor;
|
||||
//public Decimal ReactivePower => ApparentPower * Sin(Phi);
|
||||
//public Decimal PowerFactor => Cos(Phi);
|
||||
|
||||
// public Decimal ReactivePower {get; init;}
|
||||
// public Decimal ApparentPower {get; }
|
||||
// public Decimal ActivePower {get; }
|
||||
// public Decimal PowerFactor {get; init;}
|
||||
|
||||
}
|
|
@ -5,8 +5,8 @@ namespace InnovEnergy.Lib.StatusApi.Phases;
|
|||
/// For AC the values have to be in RMS (not amplitude or P2P)
|
||||
/// Power can be inferred, P = UI
|
||||
|
||||
public abstract class Phase
|
||||
{
|
||||
public Decimal Voltage { get; init; } // U, non-negative
|
||||
public Decimal Current { get; init; } // I, sign depends on device type, see sign convention above
|
||||
}
|
||||
public abstract record Phase
|
||||
(
|
||||
Decimal Voltage,
|
||||
Decimal Current
|
||||
);
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
16769606177554988
|
||||
16769731911187901
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue