DEEL2 (scriptje avzetMODEaan.cmd)
=====
powershell-scriptje avzetMODEaan.ps1
=====
=====
====code:
1 2 3 4 5 6 c: cd \netcat-setup echo inputmode kan zijn: AI, Auto, Passive, ManualLaden, ManualOntladen set /p inputmode= powershell.exe -file c:\netcat-setup\avzetMODEaan.ps1 -DeviceIP "192.168.178.234" -Mode %inputmode% pause
powershell-scriptje avzetMODEaan.ps1
=====
==============code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89# example usage: # .\MT-LocalApi-Example -DeviceIP 192.168.20.82 -RemotePort 30000 -LocalPort 30000 -PerCallTimeoutMs 2000 -MaxRetries 3 param( [Parameter(Mandatory=$true)][string]$DeviceIP = "192.168.178.xxx", [Parameter(Mandatory=$true)][string]$Mode = "xx", [int]$RemotePort = 30000, [int]$LocalPort = $RemotePort, [int]$PerCallTimeoutMs = 5000, [int]$MaxRetries = 3, [int]$InterCallDelayMs = 1000 ) Add-Type -AssemblyName System.Net # Create socket, enable reuse, bind to LocalPort (so source port is fixed) $udp = New-Object System.Net.Sockets.UdpClient $udp.Client.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::Socket, [System.Net.Sockets.SocketOptionName]::ReuseAddress, $true) $udp.Client.ExclusiveAddressUse = $false $udp.Client.Bind([System.Net.IPEndPoint]::new([System.Net.IPAddress]::Any, $LocalPort)) $udp.Client.ReceiveTimeout = 1000 ## 250 function Send-And-Wait([string]$Method, [hashtable]$Params) { for($try=1; $try -le $MaxRetries; $try++){ $rpcId = Get-Random -Minimum 1000 -Maximum 65000 # JSON-RPC id (unique per try) $req = @{ id=$rpcId; method=$Method; params=$Params } | ConvertTo-Json -Compress -Depth 6 Write-Host ($req) $bytes = [Text.Encoding]::UTF8.GetBytes($req) [void]$udp.Send($bytes, $bytes.Length, $DeviceIP, $RemotePort) Write-Host ("→ [{0}/{1}] {2} {3}" -f $try,$MaxRetries,$Method,($Params | ConvertTo-Json -Compress)) $deadline = [datetime]::UtcNow.AddMilliseconds($PerCallTimeoutMs * [math]::Pow(1.35, $try-1)) $remote = [System.Net.IPEndPoint]::new([System.Net.IPAddress]::Any,0) while([datetime]::UtcNow -lt $deadline){ try { $resp = $udp.Receive([ref]$remote) $txt = [Text.Encoding]::UTF8.GetString($resp) $obj = $txt | ConvertFrom-Json -ErrorAction SilentlyContinue if($obj -and $obj.id -eq $rpcId){ Write-Host ("av1<= [{0}] {1}`n{2}`n" -f $rpcId,$Method,$txt) Start-Sleep -Milliseconds $InterCallDelayMs return } # ignore late/unrelated frames and keep waiting } catch { # slice timeout; keep looping until overall deadline } } Start-Sleep -Milliseconds (100 + (Get-Random -Minimum 0 -Maximum 80)) } Write-Host ("<= [--] {0} -- timeout after {1} ms x{2}`n" -f $Method,$PerCallTimeoutMs,$MaxRetries) Start-Sleep -Milliseconds $InterCallDelayMs } # Warm-up (often helps) Send-And-Wait "Marstek.GetDevice" @{ ble_mac = "0" } Send-And-Wait "ES.GetMode" @{id=0} if ($Mode -eq "AI") { ##Write-Host ("Mode={0}" -f $Mode) Send-And-Wait "ES.SetMode" @{id=1; config = @{id=1; mode= "AI"; ai_cfg= @{enable=1}}} } if ($Mode -eq "Auto") { ##Write-Host ("Mode={0}" -f $Mode) Send-And-Wait "ES.SetMode" @{id=1; config = @{id=1; mode= "Auto"; auto_cfg= @{enable=1}}} } if ($Mode -eq "Passive") { ##Write-Host ("Mode={0}" -f $Mode) Send-And-Wait "ES.SetMode" @{id=1; config = @{id=1; mode= "Passive"; passive_cfg= @{power=100;cd_time=3}}} } if ($Mode -eq "ManualLaden") { ##Write-Host ("Mode={0}" -f $Mode) ##N.B. laden van de accu moet met een negatief getal bij power Send-And-Wait "ES.SetMode" @{id=1; config = @{id=1; mode= "Manual"; manual_cfg= @{time_num=1;start_time="04:00";end_time="05:00";week_set=127;power=-2500;enable=1}}} } if ($Mode -eq "ManualOntladen") { ##Write-Host ("Mode={0}" -f $Mode) ##N.B. ontladen van de accu moet met een positief getal bij power Send-And-Wait "ES.SetMode" @{id=1; config = @{id=1; mode= "Manual"; manual_cfg= @{time_num=1;start_time="16:00";end_time="19:00";week_set=127;power=210;enable=1}}} } # Optional: drain late packets $remote = [System.Net.IPEndPoint]::new([System.Net.IPAddress]::Any,0) while([datetime]::UtcNow -lt $until){ try { $txt = [Text.Encoding]::UTF8.GetString($udp.Receive([ref]$remote)) Write-Host ("<= [late] {0}:{1}`n{2}`n" -f $remote.Address,$remote.Port,$txt) } catch {} } $udp.Close()
NL;2MT Venus E (V2 V156 BMS:V215)+(V3 V148.119 BMS:V113);Sturing->Local-API;HW-P1 (6.0305);App:Android-V1.6.62;Comm.Mod:202409090159;1 Fase 40A;ZIV 5CTA1DCF000AAD0;PV 6090Wp(ZZO) 780Wp(W) 780Wp(O);Inventum Ecol. vent.WrmtPmp;EV (Seat Mii 32kWh)
:strip_exif()/f/image/p45vb37wAZZRGaS5P4PTRNF4.jpg?f=fotoalbum_large)
:strip_exif()/f/image/qS9k7FID5h0QLswD6SwP55AT.jpg?f=fotoalbum_large)
:strip_exif()/f/image/uaXjLPYEndLNV6DldXa0RZzj.jpg?f=fotoalbum_large)
:strip_exif()/f/image/rQVtEqiO6MZPIjemFV0WqtXj.jpg?f=fotoalbum_large)
/f/image/Vxtc6pec1694RbxHAowl2kmX.png?f=fotoalbum_large)
/f/image/Tb3a9790PNsfgQa5lpdkNnhs.png?f=fotoalbum_large)
/f/image/7zutPKJcZYw3weF7pYBHYNrA.png?f=fotoalbum_large)
/f/image/fIE7JFelX87PjEiSEseKqkh4.png?f=fotoalbum_large)
/f/image/TQmRgT6PWxpgzlU6GTnXL3O7.png?f=fotoalbum_large)
/f/image/34Kp9M0U5dbifUjVjzis7Bo6.png?f=fotoalbum_large)
:strip_exif()/f/image/QActyMs86mW9GbmXF6NG2HRL.png?f=user_large)
/f/image/QVLkYc6ADjSBd58KIRLpZXvy.png?f=fotoalbum_large)
:no_upscale():strip_icc():strip_exif()/f/image/taci9AhV5dxBWLwk1jMyM0HS.jpg?f=user_large)
/f/image/xc7prqf86ozx1SiS72Zc7gjM.png?f=fotoalbum_large)
/f/image/aak43yGX5nmSqL33mhrneKrP.png?f=fotoalbum_large)
/f/image/z9j4vwZQW5Gzss1wSa65gbpF.png?f=fotoalbum_large)
:strip_exif()/f/image/d25uGabAMasRLwwTFmhPfYrF.png?f=user_large)
/f/image/PPjjmq9dWL0WE7ZzGqfx1bVd.png?f=fotoalbum_large)
