Ik heb een GW1000XS met WiFi module en ik begon me steeds meer te ergeren aan de SolarWiFi AP "stoorzender": in een WiFI scanner zie ik dat op een redelijke afstand het SolarWiFi AP normaliter met zo'n -50 dBm ontvangen wordt, maar regelmatig pieken van -15 dBm vertoont! Dat is 3500x zoveel vermogen! Dat zou niet moeten kunnen als het AP zich aan het wettelijk toegelaten zendvermogen zou houden.
Enfin, uiteindelijk heb ik toch ook maar de gok gewaagd met het uploaden van Hi-Flying firmware (4.13.35 (2022-12-20 16:00 2M)) en web pagina. Gelukkig ging de upgrade zelf zonder problemen, maar ook ik heb nu de situatie dat ik via de web interface de Work Mode kan aanpassen naar STA en dat het AP dan ook inderdaad stopt, maar de volgende dag de Work Mode gewoon weer terug is naar AP+STA. Ik vermoed dat dat door de GoodWe inverter zelf gedaan wordt (via AT+ commando's).
Ik merkte ook dat het met de Hi-Flying firmware nu ook mogelijk is om via UDP (poort 48899) AT+ commando's te sturen. Dat is zowel een zegen als een vloek: hoewel deze firmware enerzijds beter beveiligd is (je kunt een niet-standaard admin wachtwoord gebruiken en, veel beter nog: het AP helemaal uitzetten), is die UDP poort 48899 juist een enorm lek, want hiervoor heb je helemaal geen wachtwoord nodig en via AT+ commando's kan je nog meer opvragen en aanpassen dan via de web interface!
Zolang het lukt om de AP uit te zetten, is dit niet zo'n probleem, maar met AP aan heb je dus nog een groter veiligheid-lek. Dat maakt het dus erg jammerlijk dat het AP iedere ochtend weer inschakelt, maar de zegen van die UDP poort is dat je het uitschakelen van het AP hier vrij eenvoudig mee kunt automatiseren.
Bijvoorbeeld, dit is een stukje PowerShell waarmee het AP wordt uitgeschakeld:
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
| $ErrorActionPreference = 'Stop'
$HFUdpPort = 48899
$HFDiscovery = 'HF-A11ASSISTHREAD'
$UDPClient = New-Object System.Net.Sockets.UDPClient($HFUdpPort)
$UDPClient.Client.ReceiveTimeout = 2000
$UDPClient.EnableBroadcast = $true
function Send-UdpDatagram([string] $IPAddress, [string] $Message)
{
$Address = [System.Net.IPAddress]::Parse($IPAddress)
$IPEndPoint = New-Object System.Net.IPEndPoint($Address, $HFUdpPort)
$Bytes = [System.Text.Encoding]::ASCII.GetBytes($Message)
$BytesSent = $UDPClient.Send($Bytes, $Bytes.Length, $IPEndPoint)
Write-Verbose "Sent $BytesSent bytes to $($IPAddress):$HFUdpPort"
}
function Receive-UdpDatagram()
{
$RemoteIPEndPoint = New-Object System.Net.IPEndPoint(0, 0)
$Bytes = $UDPClient.Receive([ref] $RemoteIPEndPoint)
$Message = [System.Text.Encoding]::ASCII.GetString($Bytes, 0, $Bytes.Length)
Write-Verbose "Received $($Bytes.Length) bytes from $RemoteIPEndpoint"
return $Message
}
function Send-ATCommand([string] $Command)
{
Write-Verbose "Send AT+$Command ..."
Send-UdpDatagram $GoodWeIPAddress "AT+$Command`r`n"
$Message = Receive-UdpDatagram
if ($Message.Contains('='))
{
$ResponseParts = $Message.Split('=')
$ResponseCode = $ResponseParts[0]
$Result = $ResponseParts[1].TrimEnd()
}
else
{
$ResponseCode = $Message.TrimEnd()
$Result = ''
}
if ($ResponseCode -ne '+ok')
{
throw "Unexpected response: $Message"
}
return $Result
}
try
{
# Send HF Discovery UDP broadcast
Send-UdpDatagram "255.255.255.255" $HFDiscovery
$Echo = Receive-UdpDatagram
if ($Echo -ne $HFDiscovery)
{
# Since we're broadcasting, we should receive our own UDP packet
throw "Expected broadcast echo, but received: '$Echo'"
}
$HFDiscoveryResponse = Receive-UdpDatagram
Write-Host "Discovered: $HFDiscoveryResponse"
$HFDiscoveryResponseParts = $HFDiscoveryResponse.Split(',')
$GoodWeIPAddress = $HFDiscoveryResponseParts[0]
Send-UdpDatagram $GoodWeIPAddress "+ok"
$VersionResponse = Send-ATCommand "VER"
Write-Host "Firmware version: $VersionResponse"
$WModeResponse = Send-ATCommand "WMODE"
Write-Host "WiFi mode: $WModeResponse"
if ($WModeResponse -eq "STA")
{
$STAInfo = Send-ATCommand "WSLK"
Write-Host "Connected to: $STAInfo"
$WiFiQuality = Send-ATCommand "WSLQ"
Write-Host "WiFi quality: $WiFiQuality"
}
else
{
$WModeResponse = Send-ATCommand "WMODE=STA"
Write-Host "WiFI mode changed to STA"
Send-ATCommand "Z" | Out-Null
Write-Host "WiFi module is resetting"
}
Send-UdpDatagram $GoodWeIPAddress "AT+Q`r`n"
Write-Host "Done!"
}
finally
{
$UDPClient.Close()
} |