Skip to content

Electricity meter Neva 306 ISO. Электросчетчик НЕВА 306 Изменение показаний в микросхеме памяти

License

Notifications You must be signed in to change notification settings

AlexeySmirnov74/Neva306IS0ReverseEngineering

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neva306 IS0 Reverse Engineering

Электросчетчик НЕВА 306 IS0 Трехфазный. Изменение показаний в микросхеме памяти

Что нужно

  1. Разобрать счетчик (снять пластиковую оболочку и все пломбы)
  2. Программатор CH341Pro
  3. Datasheet AT24C02C
  4. AutoIT & SciTE
  5. Паяльник
  6. Провода Dupont соединительные (для Arduino)

Сборка

Счетчик не должен быть подсоединен к сети. Питать процессор счетчика и микросхему памяти мы будем от программатора. Начинаем паять по схеме, представленной ниже:

Схема сборки для считывания данных из чипа электросчетчика НЕВА 306

Вот как это вышло у меня:

Схема подключения

RoadMap

Первые попытки прошить микросхему мусором из рандомных значений, в надежде, а вдруг по-быстрому получится изменить значения - закончились неудачей. Счетчик показывал Error. Тогда будем следовать такому правилу. Что нужно, чтобы значение 1.2 кВт изменилось на 1.3 кВт. Подключаем нагрузку в виде чайника и убиваем сразу 2 зайцев: завариваем чай, так как ночка обещает быть долгой, и изменяем тики счетчика. Хорошо, что можно сохранить память микросхемы в файл и восстановить когда нужно. Итак, каждое мигание крайнего справа светодиода красным изменяло значение в памяти. Поэтому, сколько значений в таблице - столько раз я включал и отключал чайник, чтобы светодиод моргнул только 1 раз. Затем я считывал значения и записывал в файлик для дальнейшего анализа.

кВт Значение 1 Значение 2 Тики
1.2 41 7F 00
1.2 41 7F 01
1.2 41 7F 02
1.2 41 7F 03
1.2 41 7F 04
1.2 41 7F 05
1.2 41 7F 06
1.2 41 7F 07
1.2 40 80 00
1.2 40 80 01
1.2 40 80 02
1.2 40 80 03
1.2 40 80 04
1.2 40 80 05
1.2 40 80 06
1.2 40 80 07
1.2 40 81 00
1.2 40 81 01
1.2 40 81 02
1.2 40 81 03
1.2 40 81 04
1.2 40 81 05
1.2 40 81 06
1.2 40 81 07

Значение 1.2 кВт изменилось на 1.3 кВт. Это значит, что мы будем теперь сидеть еще полночи и пить чай до тех пор, пока 1.3 кВт. не станет 1.4 кВт. И эксперимент можно завершать и дальше анализировать байты.

кВт Значение 1 Значение 2 Тики Просто считаем
1.3 3f 82 00 1
1.3 3f 82 01 2
1.3 3f 82 02 3
1.3 3f 82 03 4
1.3 3f 82 04 5
1.3 3f 82 05 6
1.3 3f 82 06 7
1.3 3f 82 07 8
1.3 3f 83 00 9
1.3 3f 83 01 10
1.3 3f 83 02 11
1.3 3f 83 03 12
1.3 3f 83 04 13
1.3 3f 83 05 14
1.3 3f 83 06 15
1.3 3f 83 07 16
1.3 3e 84 00 17
1.3 3e 84 01 18
1.3 3e 84 02 19
1.3 3e 84 03 20
1.3 3e 84 04 21
1.3 3e 84 05 22
1.3 3e 84 06 23
1.3 3e 84 07 24
1.3 3e 85 00 25
1.3 3e 85 01 26
1.3 3e 85 02 27
1.3 3e 85 03 28
1.3 3e 85 04 29
1.3 3e 85 05 30
1.3 3e 85 06 31
1.3 3e 85 07 32
1.3 3d 86 00 33
1.3 3d 86 01 34
1.3 3d 86 02 35
1.3 3d 86 03 36
1.3 3d 86 04 37
1.3 3d 86 05 38
1.3 3d 86 06 39
1.3 3d 86 07 40
1.3 3d 87 00 41
1.3 3d 87 01 42
1.3 3d 87 02 43
1.3 3d 87 03 44
1.3 3d 87 04 45
1.3 3d 87 05 46
1.3 3d 87 06 47
1.3 3d 87 07 48
1.3 3c 88 00 49
1.3 3c 88 01 50
1.3 3c 88 02 51
1.3 3c 88 03 52
1.3 3c 88 04 53
1.3 3c 88 05 54
1.3 3c 88 06 55
1.3 3c 88 07 56
1.3 3c 89 00 57
1.3 3c 89 01 58
1.3 3c 89 02 59
1.3 3c 89 03 60
1.3 3c 89 04 61
1.3 3c 89 05 62
1.3 3c 89 06 63
1.3 3c 89 07 64
1.3 3b 8a 00 65
1.3 3b 8a 01 66
1.3 3b 8a 02 67
1.3 3b 8a 03 68
1.3 3b 8a 04 69
1.3 3b 8a 05 70
1.3 3b 8a 06 71
1.3 3b 8a 07 72
1.3 3b 8b 00 73
1.3 3b 8b 01 74
1.3 3b 8b 02 75
1.3 3b 8b 03 76
1.3 3b 8b 04 77
1.3 3b 8b 05 78
1.3 3b 8b 06 79
1.3 3b 8b 07 80

После очередного тика результат стал 1.4 кВт.

Прошивки разных значений находятся в этой папке.. Вы можете загрузить их и делать свои экспеименты.

Создаем небольшой скриптец, в котором продолжаем увеличивать киловатты и смотреть когда же выскочит ошибка, а точнее, когда будет переполнение байтов и в какую сторону запишутся новые значения.

;1.3
$kvt = 2.5
$out = ""
$HexVerh = "0xfa" ; 0x0000010
$HexVniz = "0x03" ; 0x0000011
$HexVerh = "0xfa" ; 0x0000012

$HexVniz = "0x03" ; 0x0000013


$HexVerh1 = "0x00"    ; 0x0000002
$HexVniz1 = "0x80"    ; 0x0000003

$HexVerh11 = "0x00"    ; 0x00000ea
$HexVniz11 = "0x80"    ; 0x00000eb

$HexVerh2 = "0x00"     ; 0x0000001
$HexVerh22 = "0x00"    ; 0x00000e9
$i = 1
$count = 0
$counterforhexvniz = 0
$trigger1 = 0
$trigger2 = 0
$set = 0

$ba = 0
While 1
	For $pik = 0 To 7
		$count = $count + 1
		$counterforhexvniz = $counterforhexvniz + 1
		$tekpik = "0x" & $pik
		If $set = 1 And (Hex($HexVerh1, 2) = "04" And Hex($HexVniz1, 2) = "7E" And Hex($HexVniz, 2) = "01" And Hex($HexVerh, 2) = "FF") Or ($ba = 1) Then
			;		if $set=1 and $kvt>=668.0 then
			$ba = 1
			MsgBox(0, " chn=" & $counterforhexvniz & " set=" & $set & " " & $count, $kvt & @CRLF & "0x01|0xe9=" & Hex($HexVerh2, 2) & @CRLF & "0x02=" & Hex($HexVerh1, 2) & @CRLF & "0x03=" & Hex($HexVniz1, 2) & @CRLF & "0x10=FF|0x11=01" & @CRLF & "0x12=" & Hex($HexVerh, 2) & "|0x13=" & Hex($HexVniz, 2) & @CRLF & "0xea=" & Hex($HexVerh11, 2) & @CRLF & "0xeb=" & Hex($HexVniz11, 2) & @CRLF & "count=" & Hex($tekpik, 2))
		EndIf
	Next
	$HexVerh = $HexVerh + $i
	If $HexVniz = 0x01 And Hex($HexVerh, 2) = "FF" Then
		MsgBox(0, $count, $kvt & @CRLF & "0x01|0xe9=" & Hex($HexVerh2, 2) & @CRLF & "0x02=" & Hex($HexVerh1, 2) & @CRLF & "0x03=" & Hex($HexVniz1, 2) & @CRLF & "0x10=FF|0x11=01" & @CRLF & "0x12=" & Hex($HexVerh, 2) & "|0x13=" & Hex($HexVniz, 2) & @CRLF & "0xea=" & Hex($HexVerh11, 2) & @CRLF & "0xeb=" & Hex($HexVniz11, 2) & @CRLF & "count=" & Hex($tekpik, 2))            ;				EndIf
	EndIf

	;если прошло 16 импульсов то переключаем байт который идет вниз
	If $counterforhexvniz = 16 Then
		$counterforhexvniz = 0
		$HexVniz = $HexVniz - $i
		;if 0x13=0x00 then
		If $HexVniz = 0x00 Then
			$HexVniz = "0x80" ;0x13=0x80
			$HexVerh1 = $HexVerh1 + $i ;0x02=0x02+1
			$HexVerh11 = $HexVerh11 + $i ;0xea=0xea+1
			;668.1
			If Hex($HexVerh1, 2) = "05" And Hex($HexVniz1, 2) = "7E" And Hex($HexVerh, 2) = "00" And Hex($HexVniz, 2) = "80" And $set = 1 Then
				$trigger1 = 1
			EndIf

			If $trigger1 = 1 Then
				$trigger1 = 0
				$HexVniz1 = $HexVniz1 - $i ;0x03=0x03-1
				$HexVniz11 = $HexVniz11 - $i ;0xeb=0xeb-1
				;0x03
				If $HexVniz1 = 0x00 Then
					$set = 1
					$HexVniz1 = "0x80"
					$HexVniz11 = "0x80"

					If $trigger2 = 0 Then
						$trigger2 = 1
						$HexVerh2 = $HexVerh2 + $i
						$HexVerh22 = $HexVerh22 + $i
					Else
						$trigger2 = 0
					EndIf
				EndIf
			ElseIf $trigger1 = 0 Then
				$trigger1 = 1
			EndIf
		EndIf
	EndIf
	;если прошло 80 импульсов то киловатты увеличиваются на 0.1
	If $count = 80 Then
		$count = 0
		$kvt = $kvt + 0.1
		$kvt = Round($kvt, 1)
	EndIf
WEnd

Скрипт каждый раз выводит значение киловатт и какие байты следует изменить в прошивке для того, чтобы эти кВт записались правильно. Да, можно автоматизировать полностью весь процесс, но задачи такой не было.

Counter

Результат после прошивки:

Результат после прошивки

Что можно было бы сделать дальше

Добавить wi-fi или bluetooth для удаленного управления (заморозка, сброс, увеличение, уменьшение) значениями.

Какие гипотезы не подтвердились

Изменить количество импульсов (800/1600 и т.д.) в чипе нельзя. Их там просто нет. В чипе не хранится разбивка значений по фазам. Пьезоэлемент от зажигалки визуально может влиять только если корпус вскрыт. Но никакого сбоя при нескольких десятках попытках с пьезо не было. При закрытом корпусе никакого влияния он не оказывает. Катушка Tesla с длиной дуги до 10 см также не влияет при закрытом корпусе. Дуга не может пройти сквозь корпус и выбить микросхему. Слишком велико расстояние.

Ребят, я честно пытался разными способами :)

Выводы: В собранном корпусе счетчик надежно защищен от каких-либо электромагнитных воздействий. На это влияет ширина пластика и 3D сборка платы.

About

Electricity meter Neva 306 ISO. Электросчетчик НЕВА 306 Изменение показаний в микросхеме памяти

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages